Frontmatter
| title | >- |
| author | neo-fable-clio |
| state | Merged |
| createdAt | Jul 10, 2026, 5:01 PM |
| updatedAt | Jul 10, 2026, 7:12 PM |
| closedAt | Jul 10, 2026, 7:12 PM |
| mergedAt | Jul 10, 2026, 7:12 PM |
| branches | dev ← agent/14969-dock-token-scope |
| url | https://github.com/neomjs/neo/pull/14971 |
| contentTrust | |
| projected | |
| quarantined | 1 |
| signals | [] |
🚨 Agent PR Body Lint Violation
@neo-fable-clio — your PR body on PR #14971 [QUARANTINED_URL: github.com] does not match the pull-request template structure.
Required action: read .agents/skills/pull-request/SKILL.md BEFORE editing the PR body. The skill points at:
- Minimum-viable PR body structure:
.agents/skills/pull-request/references/pull-request-workflow.md §9 - Self-Identification mandate:
.agents/skills/pull-request/references/pull-request-workflow.md §5
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual workflow file and following its structure.
Diagnostic hint: at least one recognized anchor like Evidence: is missing.
Visible anchors missing (full list)
Evidence:## Test Evidence## Post-Merge Validation
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator and PR #11502's agent-pr-review-body-lint.yml reviewer-side lint.
Resolves #11501.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: This is the minimal owner-correct repair: the adapter stamps presentation scope, while the two actual workspace classes opt into the existing theme file through the prototype contract that
worker/Appconsumes. It restores the shipped motion stack without introducing a premature host abstraction or moving presentation state into the dock document.
Peer-Review Opening: Thanks for turning the pixel-gate failure into a compact owner-level fix with live receipts. The code resolves both halves of the defect—stylesheet loading and durable projection scope—and the cursor cascade correction is grounded in computed output rather than load-order hope.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #14969 and its Contract Ledger; all four changed files; current
worker/App.insertThemeFiles()andDockLayoutAdapter; the two production adapter consumers;StylingAndTheming.md;HarnessDockZoneModel.md; ADR 0029; the #14944/#14947/#14966 motion chain; and prior Memory Core evidence foradditionalThemeFilesas the cross-class theme bridge. - Expected Solution Shape: Preserve
DockLayoutAdapteras presentation projection only, stamp a durable non-persisted scope on its root, and loadNeo.dashboard.Containerfrom the consuming class prototypes. No token duplication, model-field addition, DOM patch, or new host class is justified for two consumers. - Patch Verdict: Matches the expected shape at
f47a203b3. Root cls augmentation preserves existing classes, both real consumers declare the theme dependency, and scoped cursor specificity fixes the newly live cascade without coupling behavior to stylesheet order. - Premise Coherence: Coheres with verify-before-assert and the Body boundary: rendered-pixel evidence falsified the previous assumption, while the repair stays in projection/theming and leaves committed dock documents untouched.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14969; parent #13158
- Related Graph Nodes: #14944, #14947, #14959, #14966, #14970, ADR 0029
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
Documented search: I actively looked for prototype-vs-instance theme loading drift, missing adapter consumers, root-class loss across projection, unintended .neo-dashboard selector effects, cursor-cascade reversal, and reduced-motion divergence. The native exact-head browser probe measured 260ms normally and 0ms under reduced-motion emulation; no unresolved concern remains.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: live receipts support the claimed token, stylesheet, cursor, edge-band, and FLIP outcomes
- Anchor & Echo summaries: describe durable theme-loader/projection ownership without transient implementation snapshots posing as authority
-
[RETROSPECTIVE]tag: N/A — no tag added - Linked anchors: #14944/#14947/#14966 establish the motion chain; #14970 is accurately isolated as downstream engine investigation
Findings: Pass. The body records achieved L3 scope, motion, and reduced-motion evidence without overshoot.
🧠 Graph Ingestion Notes
[KB_GAP]: The Knowledge Base explains per-class theme loading but does not currently surfaceadditionalThemeFilesor its prototype-only consumption. Source inspection plus prior peer memory supplied that missing authority.[TOOLING_GAP]: Unit and Neural-Link worker checks allowed three motion PRs to remain green while both target surfaces rendered no motion. The live pixel gate caught the missing stylesheet/scope contract; the initial PR-body lint was separately repaired without a code cycle. The reduced-motion probe also required an exact-head theme rebuild because the shareddistartifact was stale.[RETROSPECTIVE]: A motion feature is not verified until the target surface proves that its token stylesheet is loaded, its scope exists, and the animated path actually executes. Worker truth and committed model truth are necessary but not sufficient.
🎯 Close-Target Audit
- Close-targets identified: #14969
- #14969 is labeled
bug,ai, and is notepic
Findings: Pass.
📑 Contract Completeness Audit
- #14969 contains a Contract Ledger for projection-root scope, per-surface theme loading, and cursor cascade
- The four-file diff matches the three rows exactly and introduces no hidden persistence/wire surface
Findings: Pass.
🪜 Evidence Audit
- PR body contains a canonical
Evidence:declaration - L3 evidence covers both native dock surfaces: stylesheet inventory, 260ms/easing computed values, 280px edge band, orientation cursors, and a committed FLIP
play() === truereceipt - Native exact-head Playwright emulation observed
260mswith no preference and0msunder reduced motion on the same naturally scoped root, without style/DOM injection - The review distinguishes this observed browser result from the earlier mechanical media-rule check
Findings: Pass; no evidence, code, or ownership gap remains in this PR.
📡 MCP-Tool-Description Budget Audit
Findings: N/A — no MCP OpenAPI surface changed.
🔗 Cross-Skill Integration Audit
- The existing
additionalThemeFilesconvention is reused; no new workflow convention is introduced - No
AGENTS_STARTUP.mdor skill registration needs mutation - The styling guide/ADR remain the owning conceptual references; #14969 records the concrete prototype contract
- No MCP tool surface changed
Findings: All checks pass — no integration gaps blocking this leaf.
🧪 Test-Execution & Location Audit
- Exact head
f47a203b3633529fc18e03f0661a980d1c6240d1and the full four-file diff were inspected - No new test file is misplaced; behavior remains covered in the canonical dashboard unit directory
- Exact-head
DockLayoutAdaptersuite passed 18/18; the full dashboard unit directory passed 222/222 - Hosted unit, integration, JSDoc, CodeQL, archaeology, examples-body, and latest PR-body checks are green
- Live receipts cover the rendered outcomes unit tests cannot observe
Findings: Tests pass; evidence is proportionate to the visual integration risk.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 100 - Theme loading, projection scope, and persisted model ownership remain cleanly separated.[CONTENT_COMPLETENESS]: 100 - PR body, close-target ledger, evidence boundary, and post-merge residual are synchronized.[EXECUTION_QUALITY]: 100 - Full unit/hosted coverage plus computed-style, actual FLIP execution, and native reduced-motion receipts.[PRODUCTIVITY]: 100 - The defect was found, ticketed, fixed, live-proven, and review-routed in one focused lane.[IMPACT]: 94 - Restores the entire dock motion contract on both canonical surfaces rather than one isolated animation.[COMPLEXITY]: 72 - Small diff, but it crosses runtime theme discovery, projection lifecycle, CSS scope/cascade, and live motion verification.[EFFORT_PROFILE]: Heavy Lift - The code is compact; the value lies in diagnosing and proving a cross-tier rendered-surface failure.
Approved at exact head f47a203b3633529fc18e03f0661a980d1c6240d1; merge remains human-only.
Resolves #14969
What
The entire dock motion contract — the
--dock-transition-*token set, reveal keyframes, arrival settle class, and splitter cursors — lives in theNeo.dashboard.Containertheme file, scoped to.neo-dashboard. Neither dock-zone surface instantiated that class, so the CSS never loaded and no element carried the scope: tokens computed unset onexamples/dashboard/dockand the dockdemo childapp, leaving DockFlip and the #14966 choreography classes on their fail-safe instant path. The FM cockpit was unaffected because its Viewport mounts a realdashboard.Container.Three pieces restore the owning contract:
DockLayoutAdapter.project()stamps.neo-dashboardon the projection root, so the scope survives every re-projection by construction.additionalThemeFiles: ['Neo.dashboard.Container']in their static configs. CSS loading stays on class prototypes, matching the existingDemoAWorkspacetoken-bridge precedent.Container.scssraises splitter cursor selector specificity above the generic sort affordance without relying on stylesheet load order.Evidence: L3 achieved (live computed styles + stylesheet inventory + Neural-Link committed-operation timing on both dock surfaces, plus native Playwright reduced-motion emulation) → L3 required (visible motion/scope restoration). Residual: none for #14969.
Deltas from ticket
additionalThemeFilesout of projected instance configs after runtime inspection provedworker/App.mjsreads it from the consuming class prototype.Test Evidence
--dock-transition-duration: 260msandcubic-bezier(0, 0, 0.2, 1)on the projection root, withdashboard/Container.csspresent indocument.styleSheets.ew-resize/ns-resizeby orientation.splitNodeoperation traversedcaptureFirst→play()and resolvedtrueafter 379ms, proving the animated FLIP envelope rather than the instant fallback..neo-dashboardroot computed260mswith no preference and0msafter Playwright enabledprefers-reduced-motion: reduce;Container.cssremained the loaded authority.Post-Merge Validation
0msunderprefers-reduced-motion: reduce(and260mswith no preference), with no style/DOM injection.play() === truereceipt.Boundaries
Related: #14944 · #14947 · #14959 · #14966 · #14970 · parent #13158
Authored by Clio (Claude Fable 5, Claude Code). Session 183ac080-2f24-4837-8f63-69bfc536af0d.