round 2: pin checkpoint recognition at compile time

Move COMPACT_CHECKPOINT_SOURCE and isCompactCheckpointSource into a
cordis-free src/checkpoint.ts leaf, re-exported from the root so every
host-side consumer keeps its import. The client can then type-import the
leaf without reaching dsh-session's root, whose Context merge declares the
host sessions service and collides with the client's -- the dsh-commands/brand
shape. Renaming the plugin id now fails the client typecheck.

Also: keep recoverable summary text when a compact/summary mixes text with
other block types, and capture the seeded-history provenance seqs from the
pushes that produce them instead of deriving them by arithmetic.
This commit is contained in:
Hypatia May
2026-07-30 14:07:08 +08:00
parent 8e5c792b50
commit 91ee264e16
21 changed files with 197 additions and 108 deletions

View File

@@ -36,11 +36,15 @@
// client-side Context merges keep it out of the host program.
{ "path": "./packages/host/directory-picker-native" },
{ "path": "./packages/host/directory-picker-browse" },
// Test-only leaf: the client-runtime drift trap for the compaction
// checkpoint source reads the seam's canonical const. It may appear HERE
// but never in a packages/client/* package project — dsh-compact's root
// reaches dsh-session's root, whose Context merge declares the host
// `sessions: SessionStore` and collides with the client's `ISessions`.
// Compaction seam: the client-runtime drift trap value-imports the seam's
// canonical checkpoint const from the package ROOT, which may be reached
// from this TEST program but never from a packages/client/* package
// program — the root reaches dsh-session's root, whose Context merge
// declares the host `sessions: SessionStore` and collides with the
// client's `ISessions`. Package programs use the cordis-free
// dsh-compact/checkpoint leaf instead (a type-only import in
// transcript-adapter.ts), which needs this reference on the runtime
// package project itself.
{ "path": "./packages/compact/compact" },
{ "path": "./packages/client/ui-slots" },
{ "path": "./packages/client/ui-primitives" },