Motivation
The changeset/proposal system is the architectural centerpiece of the unified authoring architecture. It enables AI changes to be reviewed, accepted, or rejected using git merge semantics — the user is never locked out of editing.
Parent epic: #9 — Unified Authoring Architecture
Key Design Decisions
- Middleware-based recording — captures commands by construction via CommandPipeline, never misses
- Git merge model — user never locked out, conflicts detected at merge time, not prevented by locking
- Command-level replay — deterministic (same commands + same snapshot = same state), not tool-level
- Layered savepoints — error recovery at each replay phase (AI groups, user overlay, structural validation)
- Undo/redo disabled during open changeset — the changeset IS the undo mechanism
Scope
Pass 4a-A: Recording Infrastructure (formspec-core)
Pass 4a-B: State Restoration (formspec-core)
Pass 4a-C: ProposalManager (formspec-studio-core)
Pass 4a-D: Rust Dependency Analysis
Pass 4a-E: Changeset MCP Tools
Acceptance Criteria
- Recording middleware captures all commands flowing through the pipeline, tagged by actor
- Changeset lifecycle works end-to-end: open -> AI mutations -> user edits -> close -> review -> merge/reject
- Partial merge correctly replays accepted groups + user overlay in chronological order
- Reject all preserves user overlay edits
- Post-merge
diagnose() runs and reports structural issues
- Error recovery restores to safe state on replay failure
- Dependency grouping correctly identifies related operations
Layer
Management Instance (Layers 1-4, plus Rust/WASM)
Dependencies
Spec Reference
thoughts/specs/2026-03-24-unified-authoring-architecture.md — Section 2 (ProposalManager)
Motivation
The changeset/proposal system is the architectural centerpiece of the unified authoring architecture. It enables AI changes to be reviewed, accepted, or rejected using git merge semantics — the user is never locked out of editing.
Parent epic: #9 — Unified Authoring Architecture
Key Design Decisions
Scope
Pass 4a-A: Recording Infrastructure (formspec-core)
ChangesetRecorderControlinterface in core typescreateChangesetMiddleware()factory functionProjectOptions.middleware'ai'|'user')Pass 4a-B: State Restoration (formspec-core)
IProjectCore.restoreState(snapshot: ProjectState)methodRawProject— state assignment + notification_cachedComponentand handlegeneratedComponentreconciliationPass 4a-C: ProposalManager (formspec-studio-core)
ChangesetandChangeEntrytypesProposalManagerclass — changeset lifecycle (open, close, merge, reject)=prefix value capture, prePopulate, now() non-determinismPass 4a-D: Rust Dependency Analysis
fel-coredependency extraction)compute_dependency_groups()Pass 4a-E: Changeset MCP Tools
formspec_changeset_open— start changeset, capture snapshotformspec_changeset_close— seal changeset, compute dependency groupsformspec_changeset_list— list changesets with status and groupsformspec_changeset_accept— accept all or specific dependency groupsformspec_changeset_reject— reject all or specific groups, snapshot-and-replayformspec_changeset_listreadOnly,formspec_changeset_rejectdestructiveAcceptance Criteria
diagnose()runs and reports structural issuesLayer
Management Instance (Layers 1-4, plus Rust/WASM)
Dependencies
Spec Reference
thoughts/specs/2026-03-24-unified-authoring-architecture.md— Section 2 (ProposalManager)