Context
Tree line B5 (#13158 map) — the HARD half of restore (fable-tier in the triage): applying a captured perspective when the window topology CHANGED (fewer/more windows than capture time). ADR 0029 §2.2's restore-semantics table governs; #14653 owns the unchanged-topology case.
The Problem
Changed-topology restore is where designs lie: silently dropping panes, spawning surprise windows, or half-applying are all worse than refusing. §2.2's contract: deterministic reconciliation for the coverable subset + an explicit, RENDERED fail-closed result for what cannot restore (the Demo-B scene G4 shows this honestly — it is a feature, not an apology).
The Architectural Reality
Reconciliation = mapping captured window-slots onto live windows by shape affinity (never ids), then per-window #14653 restore plans; the uncoverable remainder returns a structured unrestored set (items + reason classes). No window CREATION in v1 (spawning is a §2.3/#13028-boundary decision — out of scope, documented). Blocked_by #14653 + B3.
The Fix
One PR: the slot-mapping reconciler (pure) + composed restore + the fail-closed result shape + specs (shrunk topology: best-coverage mapping + unrestored set; grown topology: no surprise spawns; determinism).
Acceptance Criteria
Out of Scope
Window spawning · unchanged-topology path (#14653) · UI rendering of the fail-closed result (Demo-B G4 + B7 consume the shape).
Related
Parent #13158 (line B5) · blocked_by #14653 + B3 leaf · authority ADR 0029 §2.2 · consumed by #14590 G4. Sweeps: 03:47Z clean.
Origin Session ID: fa2a6fd5-7488-4af6-a0d2-3855c86003e4
Retrieval Hint: "perspective restore changed topology reconciliation fail closed unrestored"
Context
Tree line B5 (#13158 map) — the HARD half of restore (fable-tier in the triage): applying a captured perspective when the window topology CHANGED (fewer/more windows than capture time). ADR 0029 §2.2's restore-semantics table governs; #14653 owns the unchanged-topology case.
The Problem
Changed-topology restore is where designs lie: silently dropping panes, spawning surprise windows, or half-applying are all worse than refusing. §2.2's contract: deterministic reconciliation for the coverable subset + an explicit, RENDERED fail-closed result for what cannot restore (the Demo-B scene G4 shows this honestly — it is a feature, not an apology).
The Architectural Reality
Reconciliation = mapping captured window-slots onto live windows by shape affinity (never ids), then per-window #14653 restore plans; the uncoverable remainder returns a structured
unrestoredset (items + reason classes). No window CREATION in v1 (spawning is a §2.3/#13028-boundary decision — out of scope, documented). Blocked_by #14653 + B3.The Fix
One PR: the slot-mapping reconciler (pure) + composed restore + the fail-closed result shape + specs (shrunk topology: best-coverage mapping + unrestored set; grown topology: no surprise spawns; determinism).
Acceptance Criteria
Out of Scope
Window spawning · unchanged-topology path (#14653) · UI rendering of the fail-closed result (Demo-B G4 + B7 consume the shape).
Related
Parent #13158 (line B5) · blocked_by #14653 + B3 leaf · authority ADR 0029 §2.2 · consumed by #14590 G4. Sweeps: 03:47Z clean. Origin Session ID: fa2a6fd5-7488-4af6-a0d2-3855c86003e4 Retrieval Hint: "perspective restore changed topology reconciliation fail closed unrestored"