From 4fcfcf32d5ac160585fae2279a86e6e56792f180 Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Mon, 27 Jul 2026 17:45:39 +0800 Subject: [PATCH] test: replace tuple casts with structural lifecycle assertions in command specs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two aggregate-typecheck errors the package-level tsc -b (rootDir=src) never saw: the commands spec's two-tuple as-cast over the lifecycle slice (TS2352, host aggregate) becomes a plain commandId projection, and the fixture spec still read the deleted result member off the pure-admission execute value (TS2339, client aggregate) — the matched bit is now asserted as the whole response shape. --- packages/client/connection/tests/fixture-commands.spec.ts | 4 ++-- packages/ui/commands/tests/commands.spec.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/client/connection/tests/fixture-commands.spec.ts b/packages/client/connection/tests/fixture-commands.spec.ts index 6840ec50b3..a71a371973 100644 --- a/packages/client/connection/tests/fixture-commands.spec.ts +++ b/packages/client/connection/tests/fixture-commands.spec.ts @@ -76,8 +76,8 @@ describe('createFixtureApi commands/skills', () => { for (const line of ['/nope', 'plain text', '/']) { const response = await api.commands.execute(req({ sessionId: sid('fx-alpha'), line }), signal) if (!response.result.ok) throw new Error('execute failed') - expect(response.result.value.matched).toBe(false) - expect(response.result.value.result).toBeUndefined() + // Pure admission value: the matched bit is the whole response shape. + expect(response.result.value).toEqual({ matched: false }) } }) diff --git a/packages/ui/commands/tests/commands.spec.ts b/packages/ui/commands/tests/commands.spec.ts index d030b0830b..941db73522 100644 --- a/packages/ui/commands/tests/commands.spec.ts +++ b/packages/ui/commands/tests/commands.spec.ts @@ -307,8 +307,9 @@ describe('CommandService', () => { { type: 'command/run', data: { name: 'deploy', line: '/deploy now', source: { kind: 'user' } } }, { type: 'command/done', data: { kind: 'success', text: 'deployed' } }, ]) - const [run, done] = lifecycle as [{ data: { commandId: string } }, { data: { commandId: string } }] - expect(run.data.commandId).toBe(done.data.commandId) + const ids = lifecycle.map(event => (event.data as { commandId: string }).commandId) + expect(ids[0]).toBeTruthy() + expect(ids[0]).toBe(ids[1]) // Zero-step wrap: the pair stays turn-enclosed on an idle log. expect(agent.session.events.map(event => event.type)).toEqual([ 'turn/start', 'command/run', 'turn/end',