fix(ui): include stage in leaf coalesce key

PR-Agent flagged that the leaf coalesceKey omitted `stage`, so two
adjacent no-requestId logs differing only by stage (e.g. one logging
`route` and the next `dispatch`) would merge into a single `×2`
row, hiding a distinct entry.

Add `stage` to the coalesce tuple. New unit test asserts that two
leaves identical except for stage stay as separate rows.

Refs #1138, #1151
This commit is contained in:
Tam Nhu Tran
2026-04-30 16:31:31 -04:00
parent 2ddc5d5afd
commit e7058b6b6d
2 changed files with 12 additions and 0 deletions
@@ -33,6 +33,7 @@ function coalesceKey(entry: LogsEntry): string {
return [
entry.event ?? '',
entry.message ?? '',
entry.stage ?? '',
entry.module ?? entry.source ?? '',
entry.level,
entry.requestId ?? '',
@@ -119,6 +119,17 @@ describe('deriveTraceGroups', () => {
expect(leaves.every((l) => l.repeatCount === undefined)).toBe(true);
});
it('keeps adjacent leaves with different stages as separate rows (round-6 fix)', () => {
const result = deriveTraceGroups(
leafEntries(
{ id: '1', timestamp: 't1', event: 'e', message: 'm', stage: 'route' },
{ id: '2', timestamp: 't2', event: 'e', message: 'm', stage: 'dispatch' }
)
);
expect(result).toHaveLength(2);
expect(result.every((r) => r.kind === 'leaf' && r.repeatCount === undefined)).toBe(true);
});
it('keeps adjacent leaves with different messages as separate rows', () => {
const result = deriveTraceGroups(
leafEntries(