Leaf of #18605 (parent linked natively). Decision Record impact: aligned-with ADR 0029 (§2.1 as amended by #18641).
Context
#18641 (merged 2026-09-13, dev@0b9178b63d) lets a perspectives value be an already-lowered neo.dock.zone.v1 document as well as zones: Authoring.isDocument discriminates by schema, Authoring.fromDocument admits the document through the checks a supplied dockModel passes, and the selection captures it as a baseline that is never registered (src/dashboard/dock/interaction/PerspectiveSelection.mjs:94, src/dashboard/dock/model/Authoring.mjs:44–56). ADR 0029 §2.1 carries the amendment; the guides do not. The panes guide's stage-two section (PR #18640, in review) says perspectives maps names to the same zones vocabulary, and the intro guide's rule 6 says "a map of names to zones" — true, and now incomplete: a host that supplies its own document can declare the arrangement it ships (perspectives: {shipped: initialDocument}), which is how the Workstation's baseline arrives under #18612.
The Problem
A consumer whose arrangement already exists as a document — a shipped snapshot, a generated document, a Group participant's saved main — reads the guides and concludes it must translate the document back into zones to declare it, or that it cannot declare at all. The guides teach one of the two admitted forms.
The Architectural Reality
Authoring.fromDocument(document) returns fromZones' result shape; the input is not normalized — an admitted document is its own baseline byte-for-byte.
PerspectiveSelection.capture() chooses per declared entry by Authoring.isDocument(value), so one map may mix both kinds.
A document-valued entry carries its own items; the panes catalog lowers only the zones-valued entries.
dock.perspective.modified compares the committed document against the declared baseline whichever kind it was (src/dashboard/dock/projection/PerspectiveState.mjs:28).
The Fix
Three documents, one clause each, no new preview, sequenced after PR #18640 lands (the same sections):
learn/guides/uibuildingblocks/DockLayoutsPanes.md — the stage-two section states the second admitted form beside the zones form (a neo.dock.zone.v1 document, admitted like a supplied dockModel, captured as the baseline byte-for-byte) and when a consumer reaches for it: the arrangement already exists as a document.
learn/guides/uibuildingblocks/DockLayouts.md rule 6 — "a map of names to zones or already-lowered documents".
learn/guides/uibuildingblocks/DockLayoutsAdoption.md — the Decision 5 paragraph names the shipped-document declaration as the way a document-supplying host declares its baseline.
Acceptance Criteria
The three passages name the document-valued form, its admission rule (validated like a supplied dockModel, never registered, byte-for-byte baseline) and the discriminator (the record's schema), with no ticket, PR or Discussion id in any guide.
A receipt in the unit runtime, written before the sentences: a workspace declaring {shipped: <document>, focus: <zones>} publishes {active: 'shipped', modified: false} at construction, reads modified: true after one committed change, and switches to focus through activePerspective.
The PR Refs #18605 and Resolves this leaf only; it branches from dev after PR #18640 lands.
Out of Scope
A new live preview; the Workstation's own declaration (#18612); the ADR (amended by #18641); the Neural Link tool descriptions (they name no declaration form).
Live latest-open sweep: checked the latest 20 open issues at 2026-09-13T09:48:02Z; no equivalent. A2A claim window 09:14–09:48Z: one guide claim (#18036, the styling guide — disjoint). Memory Core rationale sweep: no prior decision on teaching the document form (the design-round notes name perspectives as arrangements over the same panes; the document form arrived with #18641). Own open tickets: #18605, #18614, #18617, #15252 — none covers it. Content grep for "lowered document", "document-valued", "fromDocument" over resources/content: none.
Leaf of #18605 (parent linked natively).
Decision Record impact: aligned-with ADR 0029 (§2.1 as amended by #18641).Context
#18641 (merged 2026-09-13, dev@0b9178b63d) lets a
perspectivesvalue be an already-loweredneo.dock.zone.v1document as well aszones:Authoring.isDocumentdiscriminates byschema,Authoring.fromDocumentadmits the document through the checks a supplieddockModelpasses, and the selection captures it as a baseline that is never registered (src/dashboard/dock/interaction/PerspectiveSelection.mjs:94,src/dashboard/dock/model/Authoring.mjs:44–56). ADR 0029 §2.1 carries the amendment; the guides do not. The panes guide's stage-two section (PR #18640, in review) saysperspectivesmaps names to the samezonesvocabulary, and the intro guide's rule 6 says "a map of names to zones" — true, and now incomplete: a host that supplies its own document can declare the arrangement it ships (perspectives: {shipped: initialDocument}), which is how the Workstation's baseline arrives under #18612.The Problem
A consumer whose arrangement already exists as a document — a shipped snapshot, a generated document, a Group participant's saved main — reads the guides and concludes it must translate the document back into
zonesto declare it, or that it cannot declare at all. The guides teach one of the two admitted forms.The Architectural Reality
Authoring.fromDocument(document)returnsfromZones' result shape; the input is not normalized — an admitted document is its own baseline byte-for-byte.PerspectiveSelection.capture()chooses per declared entry byAuthoring.isDocument(value), so one map may mix both kinds.panescatalog lowers only thezones-valued entries.dock.perspective.modifiedcompares the committed document against the declared baseline whichever kind it was (src/dashboard/dock/projection/PerspectiveState.mjs:28).The Fix
Three documents, one clause each, no new preview, sequenced after PR #18640 lands (the same sections):
learn/guides/uibuildingblocks/DockLayoutsPanes.md— the stage-two section states the second admitted form beside thezonesform (aneo.dock.zone.v1document, admitted like a supplieddockModel, captured as the baseline byte-for-byte) and when a consumer reaches for it: the arrangement already exists as a document.learn/guides/uibuildingblocks/DockLayouts.mdrule 6 — "a map of names to zones or already-lowered documents".learn/guides/uibuildingblocks/DockLayoutsAdoption.md— the Decision 5 paragraph names the shipped-document declaration as the way a document-supplying host declares its baseline.Acceptance Criteria
dockModel, never registered, byte-for-byte baseline) and the discriminator (the record'sschema), with no ticket, PR or Discussion id in any guide.{shipped: <document>, focus: <zones>}publishes{active: 'shipped', modified: false}at construction, readsmodified: trueafter one committed change, and switches tofocusthroughactivePerspective.Refs #18605andResolvesthis leaf only; it branches fromdevafter PR #18640 lands.Out of Scope
A new live preview; the Workstation's own declaration (#18612); the ADR (amended by #18641); the Neural Link tool descriptions (they name no declaration form).
Related
#18605 · #18641 / PR #18643 · #18614 / PR #18640 · #18612.
Live latest-open sweep: checked the latest 20 open issues at 2026-09-13T09:48:02Z; no equivalent. A2A claim window 09:14–09:48Z: one guide claim (
#18036, the styling guide — disjoint). Memory Core rationale sweep: no prior decision on teaching the document form (the design-round notes nameperspectivesas arrangements over the same panes; the document form arrived with #18641). Own open tickets: #18605, #18614, #18617, #15252 — none covers it. Content grep for "lowered document", "document-valued", "fromDocument" overresources/content: none.Origin Session ID: 512526ae-1663-4f19-b10f-99aea6bdc864 Retrieval Hint: "dock guides document-valued declared perspective Authoring.fromDocument shipped initialDocument"
🪢 Mnemosyne (Claude Fable 5.1, Claude Code) · session 512526ae-1663-4f19-b10f-99aea6bdc864