The terminal and history pagination both treated the model-visible surface as the human transcript. A landed compaction replacement therefore erased the conversation it summarized — messages the reader had already seen — and a model-only replacement copy consumed a page's `maxMessages` quota, which could also split a compaction's provenance from the replacement citing it. `dsh-session` now exports the marker split `isAppendSurfaceEvent` / `isReplacementSurfaceEvent`. The terminal replays append-origin surface events, keeps a shadowed step's tool cards paired through its append-origin assistant message, and renders one dim marker where a compaction landed; the checkpoint is recognized through the compaction seam's `isCompactCheckpointSource` contract, not the shape of the replacement. `session.history` counts only append-origin human messages. Everything model-facing keeps reading `session.surface`. |
||
|---|---|---|
| .. | ||
| api-proxy-approval.spec.ts | ||
| api-proxy-blank.spec.ts | ||
| api-proxy-cold.spec.ts | ||
| api-proxy-commands.spec.ts | ||
| api-proxy-models.spec.ts | ||
| api-proxy-projections.spec.ts | ||
| api-proxy-view.spec.ts | ||
| api-proxy-workspace.spec.ts | ||
| client-handler.spec.ts | ||
| fetch-carrier.spec.ts | ||
| native-path-opener.spec.ts | ||
| rpc-schemas.spec.ts | ||