Per-pane command layer stack (the GridSurface.wrapPane seam).
Each pane gets a base scope (pane:<anchor>, child of the sheet scope) plus a
Command.LayerActivation — its z-ordered command-parent chain. The per-pane layer components
(selection, clipboard, the cell editor) each register their own scope into that chain at their layer's
real visual z (via a declarative CommandScopeProvider spec order), so getAnchor() is the stack top and a key resolves
top→down the z-stack then pane → sheet → app.
The grid owns no resolver (design/COMMAND-DESIGN.md §"Layered resolver"). This provider does exactly
one thing: it records Stage element → this pane's LayerActivation in the tree's shared region index —
so the studio focus tracker anchors at the focused pane's live stack top (the LayerActivation is
an AnchorSource, read live via getAnchor(); mechanism 2). The Stage is the layers' DOM parent,
but the anchor is the deepest layer — that inversion is why the pane maps its Stage to the chain, not to
the base. A pane pushes nothing into any tracker: the tracker's cold-start value is the consumer's
one-shot INITIAL anchor (the studio resolves it with the loaded grid's center pane, pre-reveal), which
resolves back through this same index like a real focus would.
Key delivery is the studio's synthetic key seam, not a per-pane terminal. A grid keydown is a synthetic
React event on the Stage; the Stage fans it across its z-ordered responder chain (a layer consumes by
stopPropagation), and whatever no layer consumed keeps bubbling up the React tree to the app-root seam
(CommandRootProvider's CommandAnchorProvider keyBindings='synthetic'), which hands it to the one
studio resolver at the same focus-within anchor. So there is a single resolver-delivery
seam — the pane no longer mounts its own terminal key tap (design/COMMAND-DESIGN.md §"Reduce the two
key-dispatch seams to one"). The Stage responder chain still runs (layers need z-ordered first crack); only
the redundant resolver hand-off at the bottom of it is gone.
Rendered once per pane (≤4 with freeze) — the per-pane duplication is by design (each pane's layers read
their own pane).
Per-pane command layer stack (the
GridSurface.wrapPaneseam).Each pane gets a base scope (
pane:<anchor>, child of the sheet scope) plus a Command.LayerActivation — its z-ordered command-parent chain. The per-pane layer components (selection, clipboard, the cell editor) eachregistertheir own scope into that chain at their layer's real visual z (via a declarativeCommandScopeProvider spec order), sogetAnchor()is the stack top and a key resolves top→down the z-stack then pane → sheet → app.The grid owns no resolver (design/COMMAND-DESIGN.md §"Layered resolver"). This provider does exactly one thing: it records
Stage element → this pane's LayerActivationin the tree's shared region index — so the studio focus tracker anchors at the focused pane's live stack top (theLayerActivationis anAnchorSource, read live viagetAnchor(); mechanism 2). TheStageis the layers' DOM parent, but the anchor is the deepest layer — that inversion is why the pane maps its Stage to the chain, not to the base. A pane pushes nothing into any tracker: the tracker's cold-start value is the consumer's one-shot INITIAL anchor (the studio resolves it with the loaded grid's center pane, pre-reveal), which resolves back through this same index like a real focus would.Key delivery is the studio's synthetic key seam, not a per-pane terminal. A grid keydown is a synthetic React event on the Stage; the Stage fans it across its z-ordered responder chain (a layer consumes by
stopPropagation), and whatever no layer consumed keeps bubbling up the React tree to the app-root seam (CommandRootProvider'sCommandAnchorProvider keyBindings='synthetic'), which hands it to the one studio resolver at the same focus-within anchor. So there is a single resolver-delivery seam — the pane no longer mounts its own terminal key tap (design/COMMAND-DESIGN.md §"Reduce the two key-dispatch seams to one"). The Stage responder chain still runs (layers need z-ordered first crack); only the redundant resolver hand-off at the bottom of it is gone.Rendered once per pane (≤4 with freeze) — the per-pane duplication is by design (each pane's layers read their own pane).