RUN  v4.1.1 /home/sawyer/projects/bb/.claude/worktrees/wf_880dc823-33c-1/apps/server ❯  @bb/server  test/services/threads/timeline-workflow-progress-window.test.ts (2 tests | 2 failed) 304ms  × renders the spawning turn's summary once, not once per byte page 191ms  × does not spend the byte budget on superseded progress snapshots 112ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯  FAIL   @bb/server  test/services/threads/timeline-workflow-progress-window.test.ts > workflow progress snapshots across timeline pages > renders the spawning turn's summary once, not once per byte page AssertionError: expected [ …(4) ] to have a length of 1 but got 4 - Expected + Received - 1 + 4  ❯ test/services/threads/timeline-workflow-progress-window.test.ts:301:46 299| 300| // One finished turn, one "Worked for" row — whatever the paging d… 301| expect(turnOneRows.map((row) => row.id)).toHaveLength(1);  | ^ 302| // And no page ever emits a finished-turn row that lies entirely o… 303| // the events that page actually covers. ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯  FAIL   @bb/server  test/services/threads/timeline-workflow-progress-window.test.ts > workflow progress snapshots across timeline pages > does not spend the byte budget on superseded progress snapshots AssertionError: expected true to be false // Object.is equality - Expected + Received - false + true  ❯ test/services/threads/timeline-workflow-progress-window.test.ts:314:55 312| // Only the latest snapshot per task is load-bearing (see 313| // pruneBackgroundTaskProgressEvents), so the whole thread fits on… 314| expect(latest.response.timelinePage.hasOlderRows).toBe(false);  | ^ 315| expect(latest.profile.eventDataBytes).toBeLessThan(SNAPSHOT_BYTES … 316| expect(latest.response.activeWorkflows).toHaveLength(1); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯  Test Files  1 failed (1)  Tests  2 failed (2)  Start at  01:50:18  Duration  1.33s (transform 520ms, setup 0ms, import 948ms, tests 304ms, environment 0ms)