From 6ef5ab396dbd8f1f4ccbf08faf323874d780927c Mon Sep 17 00:00:00 2001 From: liuxiaocs7 Date: Thu, 24 Sep 2026 18:18:01 +0800 Subject: [PATCH] fix(ui): align transcript projection tests with timeline model Assert ordered timeline text segments instead of the removed TurnViewModel.assistant aggregate. Preserve append, replacement, and snapshot immutability coverage while restoring CI compilation. Generated-by: Codex --- .../__tests__/transcript-projection.test.ts | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/ui/src/__tests__/transcript-projection.test.ts b/packages/ui/src/__tests__/transcript-projection.test.ts index 90d51103c91..bcc0f57a684 100644 --- a/packages/ui/src/__tests__/transcript-projection.test.ts +++ b/packages/ui/src/__tests__/transcript-projection.test.ts @@ -91,8 +91,15 @@ describe('incremental transcript projection', () => { assert.equal(historicalReads, 0, 'stable message references must skip historical materialization'); assert.strictEqual(after[0], before[0]); assert.notStrictEqual(after[1], before[1]); - assert.equal(before[1]?.assistant?.text, 'done', 'previous projections are immutable snapshots'); - assert.equal(after[1]?.assistant?.text, 'done\n\none more step'); + assert.deepEqual( + before[1]?.timeline.filter((item) => item.kind === 'text').map((item) => item.text), + ['done'], + 'previous projections are immutable snapshots', + ); + assert.deepEqual( + after[1]?.timeline.filter((item) => item.kind === 'text').map((item) => item.text), + ['done', 'one more step'], + ); assert.strictEqual(projection.project({ locale: 'en', sessionId: SESSION, messages: appended }), after); }); @@ -176,7 +183,10 @@ describe('incremental transcript projection', () => { messages = messages.map((message) => message.id === 'a1' ? { ...message, text: 'replaced answer' } as StoredMessage : message); - assert.equal(project()[0]?.assistant?.text, 'replaced answer'); + assert.deepEqual( + project()[0]?.timeline.filter((item) => item.kind === 'text').map((item) => item.text), + ['replaced answer'], + ); messages = [...messages, { type: 'assistant', id: 'a3', turnId: 'turn-2', ts: 8, text: 'after edit', modelId: 'model-1' }]; project(); @@ -196,7 +206,10 @@ describe('incremental transcript projection', () => { project(); messages = [...messages, toolCall('read-new', 'turn-2', 'Read', { path: REF }, 9), toolResult('read-new', 'turn-2', shellRun(8), 10)]; assert.equal(project().at(-1)?.tools[0]?.toolName, 'Read', 'a removed Bash cannot hide a new Read'); - assert.equal(first[0]?.assistant?.text, 'started'); + assert.deepEqual( + first[0]?.timeline.filter((item) => item.kind === 'text').map((item) => item.text), + ['started'], + ); assert.equal(first[0]?.notes.length, 0); });