fix(session): reconcile restore after rebase
This commit is contained in:
@@ -474,7 +474,10 @@ function adoptStoredEvents(events: SessionEvent[], id: SessionId): SessionEvent[
|
||||
assertSupportedEvents(events, id)
|
||||
const messageIds = new Map<number, PersistedMessageId>()
|
||||
for (const [index, event] of events.entries()) {
|
||||
const adopted = adoptSessionEvent(migrateLegacyMessageEvent(event, id, messageIds))
|
||||
const migratedStart = migrateLegacyTurnStartEvent(event, id)
|
||||
const migratedTurn = migrateLegacyTurnEndEvent(migratedStart, id)
|
||||
const migratedSteering = migrateLegacySteeringEvent(migratedTurn, id)
|
||||
const adopted = adoptSessionEvent(migrateLegacyMessageEvent(migratedSteering, id, messageIds))
|
||||
events[index] = adopted
|
||||
const messageId = eventMessageId(adopted)
|
||||
if (messageId !== undefined) messageIds.set(adopted.seq, messageId)
|
||||
@@ -731,7 +734,7 @@ export class PersistenceCoordinator<TornMarker = unknown> {
|
||||
this.assertStoredId(id, suffix.meta)
|
||||
this.assertVersion(suffix.meta)
|
||||
if (suffix.events.some(needsLegacyPrefix)) {
|
||||
const whole = await this.inspectCore(id, signal)
|
||||
const whole = await this.readStoredPrefix(id, signal)
|
||||
return { meta: whole.meta, events: whole.events.filter(event => event.seq >= fromSeq) }
|
||||
}
|
||||
return { meta: structuredClone(suffix.meta), events: snapshotStoredEvents(suffix.events, id) }
|
||||
|
||||
@@ -414,7 +414,7 @@ describe('PersistenceCoordinator session preparations', () => {
|
||||
type: 'turn/start',
|
||||
seq: 0,
|
||||
time: 1,
|
||||
data: { turn: 1, trigger: { kind: 'message', source: { kind: 'user' } } },
|
||||
data: { turn: 1 },
|
||||
}],
|
||||
})
|
||||
let coordinator!: PersistenceCoordinator<never>
|
||||
@@ -524,7 +524,7 @@ describe('PersistenceCoordinator session preparations', () => {
|
||||
type: 'turn/start',
|
||||
seq: oneTurnLog().length,
|
||||
time: 7,
|
||||
data: { turn: 2, trigger: { kind: 'message', source: { kind: 'user' } } },
|
||||
data: { turn: 2 },
|
||||
}])).rejects.toThrow(/persisted preparation is reserved/)
|
||||
} finally {
|
||||
preparation?.[Symbol.dispose]()
|
||||
|
||||
Reference in New Issue
Block a user