fix(snapshot): preserve packed chunk timing on refresh

This commit is contained in:
Tianyi Cui
2026-07-22 20:56:27 +08:00
parent 5eb4297758
commit 4529a22e85
4 changed files with 61 additions and 4 deletions
@@ -451,6 +451,43 @@ describe('refreshFixtureReplacements', () => {
})
describe('stabilizeRefreshLog', () => {
it('preserves packed member times without flattening fresh chunk boundaries', () => {
const fresh = [
'{"type":"session","id":"same","createdAt":200}',
'{"type":"text-chunks","seq0":2,"time0":200,"data":{"turn":1,"step":1,"index":0,"dt":[5,7],"texts":["new",""," split"]}}',
'',
].join('\n')
const existing = [
'{"type":"session","id":"same","createdAt":100}',
'{"type":"text-chunks","seq0":2,"time0":100,"data":{"turn":1,"step":1,"index":0,"dt":[1,2],"texts":["old","chunk","shape"]}}',
'',
].join('\n')
expect(stabilizeRefreshLog(fresh, existing, [])).toBe([
'{"type":"session","id":"same","createdAt":100}',
'{"type":"text-chunks","seq0":2,"time0":100,"data":{"turn":1,"step":1,"index":0,"dt":[1,2],"texts":["new",""," split"]}}',
'',
].join('\n'))
})
it.each([
['fresh data is null', null, { dt: [1, 2] }],
['existing data is null', { dt: [5, 7] }, null],
['fresh gaps are not an array', { dt: 'fresh' }, { dt: [1, 2] }],
['existing gaps are not an array', { dt: [5, 7] }, { dt: 'existing' }],
['the chunk arity changed', { dt: [5, 7, 9] }, { dt: [1, 2] }],
])('keeps fresh packed gaps when %s', (_case, freshData, existingData) => {
const freshRow = { type: 'reasoning-chunks', seq0: 2, time0: 200, data: freshData }
const existingRow = { type: 'reasoning-chunks', seq0: 2, time0: 100, data: existingData }
const output = stabilizeRefreshLog(
`${JSON.stringify({ type: 'session', id: 'same', createdAt: 200 })}\n${JSON.stringify(freshRow)}\n`,
`${JSON.stringify({ type: 'session', id: 'same', createdAt: 100 })}\n${JSON.stringify(existingRow)}\n`,
[],
).trim().split('\n').map(line => JSON.parse(line) as Record<string, unknown>)
expect(output[1]).toStrictEqual({ ...freshRow, time0: 100 })
})
it('aligns volatile times across a newly inserted log event', () => {
const fresh = [
'{"type":"session","id":"same","createdAt":200}',