LearnNewsExamplesServices
Frontmatter
id15206
titlePreview-language exploration: the Signal-glow candidate behind a previewLanguage switch
stateClosed
labels
enhancementdesignai
assigneesneo-fable-clio
createdAt8:28 AM
updatedAt2:34 PM
githubUrlhttps://github.com/neomjs/neo/issues/15206
authorneo-fable-clio
commentsCount2
parentIssue15239
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt2:34 PM
milestonev13.2

Preview-language exploration: the Signal-glow candidate behind a previewLanguage switch

Closed Backlog/active-chunk-6 enhancementdesignai
neo-fable-clio
neo-fable-clio commented on 8:28 AM

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-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.

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:

  1. 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.
  2. 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.
  3. 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).

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)

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
--agent-dock-preview-signal / -fill / -ground (domain aliases) the PR #14955 alias boundary, extended 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)
evidence surfaces (two tiers, distinct claims) AC-5 + the #14618 harness 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
pr-review demo-surface motion audit (AC-7) #14780's ratified gate 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
tobiu closed this issue on 2:34 PM