The G5 lane of the multi-window docking choreography planning Discussion (D#15204): the wow tier needs a chosen preview design language, and OQ4's design-authority draft (discussion comment DC_kwDODSospM4BDW6g) specifies three complete candidates — «Blueprint», «Signal glow», «Solid press» — with a selection protocol: build the lead candidate live behind a switch, compare side-by-side on the same drag, operator picks on sight, losing candidates' organs transplant.
This leaf builds the lead: Candidate 2, «Signal glow» — the mission-control identity (--fm-signal flood + condensed boundary ring on the target zone; §06 chips re-skinned dark with teal iconography and an opacity-only hover-lock pulse; a teal edge-light on the drag proxy that the popup vessel's chrome will later share; commit = the flood condenses to the pane's entering edge and extinguishes over --motion-panel/--ease-out-soft).
Authority state (folded 2026-07-16, post-graduation)
D#15204 graduated and closed RESOLVED: this leaf is now natively parented to Epic #15239 (the re-parent from #13158 is executed, not pending). The exception declaration below is retained as the historical creation-gate record only.
D#15204 is high-blast and not yet graduated; this leaf passes the block on the substantive-rationale path:
Rationale + attribution: the Discussion body's G5 lane is author-claimed (Clio, design authority) and survived cycle-1 peer divergence unchallenged; the OQ4 comment is the build-ready spec; the operator's product direction (2026-07-16 morning) named the design exploration explicitly. This leaf is low-blast (bounded SCSS/skin variants + one config switch, single PR, no cross-substrate coupling) — exploration content, not graduation pre-emption.
Divergence substance inline: the three candidates in the OQ4 comment ARE the divergence matrix for this design space (each with thesis + risk + falsifier-by-comparison); this leaf builds ONE for live evaluation, it does not adopt it as the ruling.
Downstream-amendment acknowledgment: on D#15204 graduation this leaf re-parents under the minted epic; the operator's selection may retire the variant, transplant organs from the other candidates, or demand a second candidate build — the switch architecture makes all three cheap.
The Problem
The shipped drop-indicator/preview family (resources/scss/src/dashboard/Container.scss §186–260, the #14974 §06 menu + the workstation DockPreview renderer) is functional but visually neutral — it proves mechanics, not the wow bar. The release recording needs a treatment with an identity, chosen by eye against live alternatives, not asserted in prose.
The Architectural Reality
The indicator visual family is token-fed and motion-contract-clean already (--dock-transition-*); the vocabulary beneath it lands in PR #15205 (--motion-*/--ease-*, all five themes). The skin variants consume BOTH tiers, zero literals.
The switch is a host-level modifier cls (neo-preview-lang-signal) on the dock host — same mechanism as the theme cls, no JS behavior change; the workstation exposes it as a previewLanguage config (app tier) so tours and the operator can flip it live.
The §06 candidate grammar, hit-testing, and commit semantics are UNTOUCHED — this is skin, not behavior (the binding constraint from the OQ4 draft).
Light mode consumes the deep-pigment teal (--fm-signal: #0f766e) from the #14681 landing; dark keeps the glow teal — one identity, two renditions.
The Fix
One PR: (1) the .neo-preview-lang-signal variant blocks for the indicator cross + edge chips + zone-preview flood in the dashboard skin (and the workstation DockPreview skin where the flood renders); (2) the workstation previewLanguage config threading the modifier cls; (3) the executable evidence set per the amended AC-5 below — the identical scripted drag replayed per scene as regression-guarded goldens plus executable motion witnesses; (4) both modes verified with computed-style receipts.
Acceptance Criteria
.neo-preview-lang-signal renders the full Signal-glow treatment (flood ≤22% mix, boundary ring, chip re-skin, hover-lock pulse opacity-only, proxy edge-light) with ZERO duration/easing/color literals — vocabulary + palette tokens only (review-checkable).
Default (unswitched) rendering is byte-identical to today — the variant is strictly additive.
The workstation previewLanguage config flips the language live; the tour can script the flip.
Both color modes verified (computed receipts); reduced-motion collapses through the token layer with nothing to override.
Before/after recording pair in the PR body (the render-verify precedent).Amended (cycle-3 review, PR #15208): the evidence contract is the EXECUTABLE form — the identical scripted production drag replayed per scene as regression-guarded goldens (default/signal × dark/light, target + menu + proxy in frame, the live clock frozen at its source (fully visible), tight threshold), PLUS executable motion witnesses: a positive animationstart witness proving the hover-lock pulse runs at the fast token's duration, and the reduced-motion counter-witness (every entry 0s). Rationale: goldens + event witnesses re-verify on every run; a one-shot recording verifies once and rots. The goldens are static APPEARANCE evidence by the motion audit's own boundary — the motion claims ride the witnesses, never the stills.
AC-7 (added from the review addendum): the demo-surface motion review gate lands as durable pr-review substrate — trigger line + conditionally-loaded audit carrying the ratified #14780 rule set, appearance-vs-motion evidence boundary, and an in-file three-gate retirement trigger.
Cross-family review.
Out of Scope
Building «Blueprint»/«Solid press» (organs transplant AFTER the operator's pick) · any §06 grammar/behavior change · the popup-vessel chrome treatment (rides the G1 adapter lane — the edge-light spec is recorded in OQ4 for it) · the selection decision itself (operator's eye, on the Discussion).
Live latest-open sweep: latest 10 at 2026-07-16T06:27Z; "preview language"/"signal glow" searches return no equivalent (nearest #14930 = a different, closed polish pass). A2A in-flight: [lane-claim] broadcast MESSAGE:af9ef0fe sent this minute; G5 unchallenged through D#15204 cycle-1.
Contract Ledger (normative — centralized per PR #15208 cycle-2 RA-5)
Target Surface
Source of Authority
Behavior
Fallback / Edge Case
Docs
Evidence
Workspace#previewLanguage_ (reactive config)
this ticket + D#15204 G5/OQ4
value v maps to exactly one neo-preview-lang-v modifier on the dock host; live-swappable (config, tour, console); afterSet pre-host convergence via construct re-apply
null = default family, no modifier; unknown values = inert cls tokens, never errors (open selector — variants opt in via CSS)
config + method JSDoc
4 contract pins in Workspace.spec.mjs, green in the 46-test suite run
the Signal language's app-neutral surface: shared SCSS consumes ONLY these, bare — zero literal fallbacks; each app projects its palette (agentos theme DockPreview files; workstation theme Viewport files from --workstation-signal)
an app without projections DROPS the treatment visibly — an equal-valued literal fallback would mask a missing projection in exactly one mode (the falsified class), so none exist
alias-block comments both tiers
no-fallback census + both-skin signal-trio pins (DockPreview.spec.mjs); live token-presence receipts both modes
workstation → full seven-alias projections (accept/reject/signal families, both modes)
same boundary (gap found in-cycle)
the flagship projects the ENTIRE preview family from its own palette in dark AND light
a deleted projection row fails the census, never renders another app's chroma
Viewport theme comments
the seven-alias × both-modes projection census
the dock drag proxy (carried scope)
this ticket AC-1 + the cycle-2 falsifier
DockTabSortZone#getDragProxyConfig stamps neo-dock-dragproxy + the host's neo-preview-lang-* + the NEAREST-ancestor theme onto the body-mounted embodiment; DragZone yields to an explicit theme (no boot-theme duplicate); shared skin scopes to .neo-dock-dragproxy.neo-preview-lang-signal — never generic .neo-dragproxy, never :root:has()
generic drags (grid/list/tree/plain tabs) never carry the marker → never styled; no themed ancestor → boot-theme fallback via getTheme()
method + SCSS comments
DockTabSortZone.spec.mjs contract pins (incl. nearest-ancestor-beats-boot-theme); census ownership pins; live drag receipts: dark #5eead4 / light #0f766e, exactly one carried theme
reduced-motion authority
the motion vocabulary (merged) + dock aliases
the variant's only duration source is --dock-transition-duration-fast → collapses through the token layer
—
vocabulary + dock collapse blocks
live-gesture witness on the SIGNAL path: every animation/transition entry computes 0s (PreviewLanguageDragPairNL)
appearance: the specimen pair (PreviewLanguageVisual, 2 goldens) certifies the composed treatments per mode; the gesture: PreviewLanguageDragPairNL replays the IDENTICAL scripted production drag once per scene (four separately replayed/cancelled drags) — default/signal × dark/light, 4 goldens with target + indicators + proxy in frame, the live clock frozen via ClockPane#frozenTime (unmasked, fully visible), maxDiffPixels: 150 — with in-spec worker/computed asserts carrying the behavioral truths; motion is witnessed executably: the animationstart pulse witness (normal mode, 0.12s) + the reduced-motion counter-witness (goldens stay appearance evidence, per the motion-audit boundary)
baselines refresh only via --update-snapshots (reviewed design decision); e2e/visual configs stay outside CI
both spec headers
2 + 4 goldens committed; both suites green twice consecutively
ClockPane#frozenTime (demo determinism seam)
PR #15208 cycle-4/5 reviews (the mask-over-evidence falsifier)
any STRING freezes the demo clock line to exactly itself (empty string included); ONLY null thaws to live wall time; the write is lifecycle-silent (never a mount transition)
null default = live clock, zero behavior change for viewers
config JSDoc
3-part unit witness (no phantom mounted; exact domain; frozen-at-construct + idempotent destroy); consumed by the unmasked drag-set goldens
trigger line §7.5.3 + on-demand atlas; hard-cut/layout-thrash = RA; static-golden-as-motion-evidence = a finding
retirement trigger in-file covers all three gates; partial lint retires only its gate
the audit file
commits a1ee10a3e + 84e5fa0bc; Skill Manifest lint green with in-message justification
Origin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091
Retrieval Hint: "signal glow preview language candidate switch dock indicator skin variant"
tobiu referenced in commit fb90857 - "feat(dashboard): Signal-glow preview language — the G5 lead candidate behind a live switch (#15206) (#15208) on 2:34 PM
Context
The G5 lane of the multi-window docking choreography planning Discussion (D#15204): the wow tier needs a chosen preview design language, and OQ4's design-authority draft (discussion comment
DC_kwDODSospM4BDW6g) specifies three complete candidates — «Blueprint», «Signal glow», «Solid press» — with a selection protocol: build the lead candidate live behind a switch, compare side-by-side on the same drag, operator picks on sight, losing candidates' organs transplant.This leaf builds the lead: Candidate 2, «Signal glow» — the mission-control identity (
--fm-signalflood + condensed boundary ring on the target zone; §06 chips re-skinned dark with teal iconography and an opacity-only hover-lock pulse; a teal edge-light on the drag proxy that the popup vessel's chrome will later share; commit = the flood condenses to the pane's entering edge and extinguishes over--motion-panel/--ease-out-soft).Authority state (folded 2026-07-16, post-graduation)
D#15204 graduated and closed RESOLVED: this leaf is now natively parented to Epic #15239 (the re-parent from
#13158is executed, not pending). The exception declaration below is retained as the historical creation-gate record only.Ungraduated-Discussion exception (creation-gate declaration — historical)
D#15204 is high-blast and not yet graduated; this leaf passes the block on the substantive-rationale path:
The Problem
The shipped drop-indicator/preview family (
resources/scss/src/dashboard/Container.scss§186–260, the#14974§06 menu + the workstationDockPreviewrenderer) is functional but visually neutral — it proves mechanics, not the wow bar. The release recording needs a treatment with an identity, chosen by eye against live alternatives, not asserted in prose.The Architectural Reality
--dock-transition-*); the vocabulary beneath it lands in PR #15205 (--motion-*/--ease-*, all five themes). The skin variants consume BOTH tiers, zero literals.neo-preview-lang-signal) on the dock host — same mechanism as the theme cls, no JS behavior change; the workstation exposes it as apreviewLanguageconfig (app tier) so tours and the operator can flip it live.--fm-signal: #0f766e) from the #14681 landing; dark keeps the glow teal — one identity, two renditions.The Fix
One PR: (1) the
.neo-preview-lang-signalvariant blocks for the indicator cross + edge chips + zone-preview flood in the dashboard skin (and the workstationDockPreviewskin where the flood renders); (2) the workstationpreviewLanguageconfig threading the modifier cls; (3) the executable evidence set per the amended AC-5 below — the identical scripted drag replayed per scene as regression-guarded goldens plus executable motion witnesses; (4) both modes verified with computed-style receipts.Acceptance Criteria
.neo-preview-lang-signalrenders the full Signal-glow treatment (flood ≤22% mix, boundary ring, chip re-skin, hover-lock pulse opacity-only, proxy edge-light) with ZERO duration/easing/color literals — vocabulary + palette tokens only (review-checkable).previewLanguageconfig flips the language live; the tour can script the flip.Before/after recording pair in the PR body (the render-verify precedent).Amended (cycle-3 review, PR #15208): the evidence contract is the EXECUTABLE form — the identical scripted production drag replayed per scene as regression-guarded goldens (default/signal × dark/light, target + menu + proxy in frame, the live clock frozen at its source (fully visible), tight threshold), PLUS executable motion witnesses: a positiveanimationstartwitness proving the hover-lock pulse runs at the fast token's duration, and the reduced-motion counter-witness (every entry0s). Rationale: goldens + event witnesses re-verify on every run; a one-shot recording verifies once and rots. The goldens are static APPEARANCE evidence by the motion audit's own boundary — the motion claims ride the witnesses, never the stills.pr-reviewsubstrate — trigger line + conditionally-loaded audit carrying the ratified #14780 rule set, appearance-vs-motion evidence boundary, and an in-file three-gate retirement trigger.Out of Scope
Building «Blueprint»/«Solid press» (organs transplant AFTER the operator's pick) · any §06 grammar/behavior change · the popup-vessel chrome treatment (rides the G1 adapter lane — the edge-light spec is recorded in OQ4 for it) · the selection decision itself (operator's eye, on the Discussion).
Related
Parent #15239 (epic; native) · related #13158 (the in-window sibling epic) · D#15204 (G5 lane; graduated → #15239, re-parent executed) · consumes PR #15205 (motion vocabulary) + the #14681 palette · skins #14974's §06 layer · the workstation app (#15099 arc).
Live latest-open sweep: latest 10 at 2026-07-16T06:27Z; "preview language"/"signal glow" searches return no equivalent (nearest #14930 = a different, closed polish pass). A2A in-flight: [lane-claim] broadcast MESSAGE:af9ef0fe sent this minute; G5 unchallenged through D#15204 cycle-1.
Contract Ledger (normative — centralized per PR #15208 cycle-2 RA-5)
Workspace#previewLanguage_(reactive config)vmaps to exactly oneneo-preview-lang-vmodifier on the dock host; live-swappable (config, tour, console); afterSet pre-host convergence via construct re-applynull= default family, no modifier; unknown values = inert cls tokens, never errors (open selector — variants opt in via CSS)Workspace.spec.mjs, green in the 46-test suite run--agent-dock-preview-signal/-fill/-ground(domain aliases)--workstation-signal)DockPreview.spec.mjs); live token-presence receipts both modesDockTabSortZone#getDragProxyConfigstampsneo-dock-dragproxy+ the host'sneo-preview-lang-*+ the NEAREST-ancestor theme onto the body-mounted embodiment;DragZoneyields to an explicit theme (no boot-theme duplicate); shared skin scopes to.neo-dock-dragproxy.neo-preview-lang-signal— never generic.neo-dragproxy, never:root:has()getTheme()DockTabSortZone.spec.mjscontract pins (incl. nearest-ancestor-beats-boot-theme); census ownership pins; live drag receipts: dark#5eead4/ light#0f766e, exactly one carried theme--dock-transition-duration-fast→ collapses through the token layer0s(PreviewLanguageDragPairNL)PreviewLanguageVisual, 2 goldens) certifies the composed treatments per mode; the gesture:PreviewLanguageDragPairNLreplays the IDENTICAL scripted production drag once per scene (four separately replayed/cancelled drags) — default/signal × dark/light, 4 goldens with target + indicators + proxy in frame, the live clock frozen viaClockPane#frozenTime(unmasked, fully visible),maxDiffPixels: 150— with in-spec worker/computed asserts carrying the behavioral truths; motion is witnessed executably: theanimationstartpulse witness (normal mode,0.12s) + the reduced-motion counter-witness (goldens stay appearance evidence, per the motion-audit boundary)--update-snapshots(reviewed design decision); e2e/visual configs stay outside CIClockPane#frozenTime(demo determinism seam)nullthaws to live wall time; the write is lifecycle-silent (never a mount transition)nulldefault = live clock, zero behavior change for viewersmounted; exact domain; frozen-at-construct + idempotent destroy); consumed by the unmasked drag-set goldenspr-reviewdemo-surface motion audit (AC-7)a1ee10a3e+84e5fa0bc; Skill Manifest lint green with in-message justificationOrigin Session ID: c5d7cd6b-4e01-45fd-aa59-5ccbc0e5f091 Retrieval Hint: "signal glow preview language candidate switch dock indicator skin variant"