Context
D#18224 measured data.Store versus collection.Base at depth 50 over the real Workstation document: latency differed only 1.04x, while mutability was decisive. Store insertion writes an internal id and Models expose replacement setters; frozen plain rows in a Collection can be the append-only authority.
The Problem
There is no user-facing dock history. Adding a mutable Store as authority would permit whole-field replacement of retained transactions, while statically importing it would make single-window/history-disabled apps pay for unused machinery. Cursor, redo invalidation, eviction, and retirement are Group-local invariants, not global filters.
The Architectural Reality
A Group owns one bounded history and cursor. The authoritative vehicle is a collection.Base of recursively frozen plain records. A data.Store may be created lazily as a read-only projection for grids/Neural Link inspection, but it never drives adoption or cursor decisions. A Group-level Provider publishes derived command state.
The Fix
Implement generic History/Group cursor semantics: append, undo, redo, redo-tail invalidation, depth eviction, immutable serialization, and provider projections. Dynamically load the history module at the first admitted transaction; the load is an admission barrier and queues the original descriptor exactly once. historyDepth: 0 imports nothing.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| authoritative history |
D#18224 H2 |
frozen plain rows in collection.Base |
disabled at depth 0 |
JSDoc |
nested + whole-field mutation controls |
| cursor |
D#18224 criteria 7/8 |
Group-local undo/redo/append/preserve |
bounds fail closed |
JSDoc |
branch/eviction unit matrix |
| Provider state |
explicit cross-window Provider parent |
canUndo, canRedo, depth/status |
false/empty before load |
guide/JSDoc |
multi-window binding arm |
| optional Store view |
manager.Store precedent |
lazy read-only clones |
destroy/rebuild loses no truth |
JSDoc |
mutation cannot affect authority |
| module admission |
D#18224 criterion 13 |
await once before mutation; enqueue once |
load failure leaves no mutation |
JSDoc |
red control at first gesture |
Decision Record impact
Depends on amended ADR 0029; no new ADR.
Decision Record
Required prerequisite: the #18303 hard-cut authority leaf.
Discussion Criteria Mapping
Owns criteria 1–3's H2 vehicle, single-window cost, bounded history, and cursor half of criterion 7.
Acceptance Criteria
Out of Scope
Participant adoption, native effects, persisted topology snapshots, or Neural Link command migration.
Avoided Traps
No mutable Model authority; no global Store filtered by Group; no eager import; no second cursor in a UI projection.
Related
Part of #18303. Blocked by the hard-cut and Group-binding leaves.
Origin Session ID: 01a06b6d-3323-7fa0-a10b-bbc4871c8780
Retrieval Hint: D18224 H2 frozen Collection history cursor Store projection historyDepth
Creation freshness: live latest-open and all-status A2A sweeps found no equivalent history leaf.
Context
D#18224 measured
data.Storeversuscollection.Baseat depth 50 over the real Workstation document: latency differed only 1.04x, while mutability was decisive. Store insertion writes an internal id and Models expose replacement setters; frozen plain rows in a Collection can be the append-only authority.The Problem
There is no user-facing dock history. Adding a mutable Store as authority would permit whole-field replacement of retained transactions, while statically importing it would make single-window/history-disabled apps pay for unused machinery. Cursor, redo invalidation, eviction, and retirement are Group-local invariants, not global filters.
The Architectural Reality
A Group owns one bounded history and cursor. The authoritative vehicle is a
collection.Baseof recursively frozen plain records. Adata.Storemay be created lazily as a read-only projection for grids/Neural Link inspection, but it never drives adoption or cursor decisions. A Group-level Provider publishes derived command state.The Fix
Implement generic History/Group cursor semantics: append, undo, redo, redo-tail invalidation, depth eviction, immutable serialization, and provider projections. Dynamically load the history module at the first admitted transaction; the load is an admission barrier and queues the original descriptor exactly once.
historyDepth: 0imports nothing.Contract Ledger
collection.BasecanUndo,canRedo, depth/statusDecision Record impact
Depends on amended ADR 0029; no new ADR.
Decision Record
Required prerequisite: the #18303 hard-cut authority leaf.
Discussion Criteria Mapping
Owns criteria 1–3's H2 vehicle, single-window cost, bounded history, and cursor half of criterion 7.
Acceptance Criteria
historyDepth: 0causes zero static/dynamic history-module loads and leaves single-window behavior byte-equivalent.canUndo/canRedoin every bound window without presentation sweeps.Out of Scope
Participant adoption, native effects, persisted topology snapshots, or Neural Link command migration.
Avoided Traps
No mutable Model authority; no global Store filtered by Group; no eager import; no second cursor in a UI projection.
Related
Part of #18303. Blocked by the hard-cut and Group-binding leaves.
Origin Session ID: 01a06b6d-3323-7fa0-a10b-bbc4871c8780
Retrieval Hint:
D18224 H2 frozen Collection history cursor Store projection historyDepthCreation freshness: live latest-open and all-status A2A sweeps found no equivalent history leaf.