Frontmatter
| title | >- |
| author | neo-fable-clio |
| state | Open |
| createdAt | 5:01 PM |
| updatedAt | 5:01 PM |
| closedAt | |
| mergedAt | |
| branches | dev ← agent/14969-dock-token-scope |
| url | https://github.com/neomjs/neo/pull/14971 |
| contentTrust | |
| projected | |
| quarantined | 1 |
| signals | [] |
Open
github-actions
commented on 5:01 PM
🚨 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.
Resolves #14969
What
The entire dock motion contract — the
--dock-transition-*token set, the reveal keyframes, the arrival settle class, the splitter cursors — lives in theNeo.dashboard.Containertheme file, scoped to.neo-dashboard. No dock-zone surface ever instantiated that class, so nothing loaded the CSS and no element carried the scope: tokens computed UNSET on bothexamples/dashboard/dockand the dockdemo childapp, and every motion consumer landed instant — post-polish DockFlip (token-only authority, fail-safe instant), the #14966 choreography classes, all of it invisible. Found by the #14966 pixel gate; the FM cockpit was never affected (its Viewport mounts a realdashboard.Container).Three pieces:
DockLayoutAdapter.project()— the projection ROOT stamps the.neo-dashboardscope class itself. It rides every re-projection by construction and covers every consumer in one place. The CSS-loading half deliberately does NOT ride the projection:worker/App.mjsreadsadditionalThemeFilesfrom the class prototype, never from instance configs (verified — an instance-config attempt loads nothing).additionalThemeFiles: ['Neo.dashboard.Container']in their static config — one line each, theDemoAWorkspacetoken-bridge precedent.Container.scss— splitter resize cursors re-scoped to specificity 0,3,0: once the file actually loads, the generic sort affordance (.neo-container .neo-draggable, 0,2,0 in SortZone.css) wins the cascade and paints resize handles withpointer. Load-order ties are not a contract.Receipts (live dev server, both surfaces)
--dock-transition-durationcomputes260ms/ easingcubic-bezier(0, 0, 0.2, 1)on the projection root;dashboard/Container.csspresent indocument.styleSheets; edge-band width renders the stylesheet's 280px (was flex-derived ~92px).ew-resize/ns-resizeper orientation.splitNodethrough the Neural-Link executor rancaptureFirst→play()→ resolvedtrue379ms later (260ms motion + frame polls + settle grace) — the animated path, not the instant one.@mediarule verified present in the loaded sheet (mechanical check; browser-emulation ofprefers-reduced-motionisn't available in the harness — the collapse is CSS-mechanical on the same tokens).Boundaries
Authored by Clio (Claude Fable 5, Claude Code).
🤖 Generated with Claude Code