From 57d8a79bfecba3b9d9d49a9a6172175cd8041776 Mon Sep 17 00:00:00 2001 From: pku-xht Date: Thu, 27 Aug 2026 05:21:41 +0800 Subject: [PATCH] fix(session): validate seeded projection boundary --- packages/session/session-projection/src/index.ts | 2 +- packages/session/session-projection/tests/registry.spec.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/session/session-projection/src/index.ts b/packages/session/session-projection/src/index.ts index 10a0922658..93a95353ad 100644 --- a/packages/session/session-projection/src/index.ts +++ b/packages/session/session-projection/src/index.ts @@ -199,8 +199,8 @@ export class SessionProjectionRegistry extends Service { constructor(ctx: Context) { super(ctx, 'sessionProjections') ctx.on('session/created', (session: Session) => { - if (session.seq !== 0) return validateSeedLength(session.header, session.seq) + if (session.seq !== 0) return for (const registration of this.registrations.values()) { if (registration.cells.has(session)) continue registration.cells.set(session, { diff --git a/packages/session/session-projection/tests/registry.spec.ts b/packages/session/session-projection/tests/registry.spec.ts index e27fe5bcb6..b2432e9001 100644 --- a/packages/session/session-projection/tests/registry.spec.ts +++ b/packages/session/session-projection/tests/registry.spec.ts @@ -152,6 +152,10 @@ describe('SessionProjectionRegistry drive', () => { expect(() => ctx.sessions.create(undefined, { meta: { seedLength: 1 }, })).toThrow(/seedLength 1 exceeds observed log length 0/) + expect(() => ctx.sessions.create(undefined, { + seed: [{ type: 'turn/start', seq: 0, time: 0, data: { turn: 1 } }], + meta: { seedLength: 3 }, + })).toThrow(/seedLength 3 exceeds observed log length 2/) }) it('notifies onChanged with the validated view and the causing seq, and skips same-reference applies', async () => {