refactor(client): archivedSessionIds public face becomes a plain array

Public snapshot state stays in the store engine's plain-data vocabulary
(immer drafts reject Sets without the MapSet plugin, which stays off):
manager/service/contract carry readonly SessionId[] in Host order, and
the tree derivations build their own transient Set — the
expandedProjects pattern. Membership-unchanged installs still keep the
array reference for Object.is short-circuits.
This commit is contained in:
imccyu
2026-07-31 10:40:09 +08:00
committed by imccyu
parent 5fc2645afc
commit 9ed87a6dba
26 changed files with 62 additions and 53 deletions

View File

@@ -199,11 +199,8 @@ export class TestWorkspaces implements IWorkspaces {
await (stub(sessionId) as Promise<void>)
return
}
// Built outside the draft: reading a Set through an immer draft needs
// the MapSet plugin, while assigning a fresh Set does not.
const next = new Set([...this.list.getSnapshot().archivedSessionIds, sessionId])
await this.update((draft) => {
draft.archivedSessionIds = next
draft.archivedSessionIds = [...draft.archivedSessionIds, sessionId]
})
}
}