Resolves #14934
Makes the docking epic's closure promise mechanical. Four independent analysis passes graded the drag experience "landed" at capability-list altitude while the operator's standing bar (#13158: Qt-Advanced-Docking-System-class) is EXPERIENCE-parity — ADR 0029 §4's one-row grain is what let that slip through three times. This PR lands the ticket's three artifacts; per its Out-of-Scope, no interaction implementation is touched.
Evidence: L1 (docs/substrate change — review-checkable against the ticket's AC list; lint-skill-manifest green locally at +247B net) → L1 required (no runtime surface changes; every sub-row status carries its own evidence pointer for reviewers to spot-check). Residual: the epic-body edit lives on the issue, not in this diff — link below.
AC map
- ADR 0029 §4 row 1 → interaction grain, ADR-first → §4.1 added: incident rationale, six sub-rows (drag proxy · drop-indicator overlays · per-option preview · insertion cues · escape-cancel · commit animation) graded Qt-ADS-bar vs Neo with honest statuses as of 2026-07-10; row 1's Neo cell now points at §4.1. The five web-library columns deliberately stay capability-grain (grading them at interaction grain without a fresh sweep would repeat the altitude error in reverse).
- #13158 carries the closure gate → epic body now has a binding "Closure Gate (#14934)" section: no resolution without the item-by-item matrix vs the §4.1 inventory, every row an evidence LINK (recorded interaction / e2e spec / demo beat). Edit: https://github.com/neomjs/neo/issues/13158 (section at body tail).
- Radar sweep discipline carries the altitude rule → one line in
industry-friction-radar-workflow.md Output Rules with the incident anchor; net skill-Markdown growth +247B ≤ 250B cap (linter-verified, no growth-justification label needed).
- Cross-family review before merge → requested.
Honest-status corrections landed in passing (same table, same honesty rule)
- Auto-hide row still cited retired #13280 for reveal — now "landed, full §2.7 arc, e2e-proven (#14654/#14660)".
- Named perspectives row said "topology-scope specified" — now "reconciler in review, #14668".
- NEW finding surfaced by the amendment: Escape-cancel mid-drag is an unowned gap — no Escape path in the draggable layer,
DragCoordinator, or the main-thread drag addon (verified by sweep this session). Neither #14929 nor #14930 owns it. Flagged in §4.1 and the epic gate; ticketing the leaf is the epic owner's call at matrix time.
Deltas
learn/agentos/decisions/0029-harness-docking-design.md — §4.1 amendment + two stale-status refreshes in the §4 table
.agents/skills/industry-friction-radar/references/industry-friction-radar-workflow.md — the Interaction-Grain output rule (+ pre-existing trailing-whitespace cleanup on 3 lines, whitespace-hook-forced)
Test Evidence
node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev
[lint-skill-manifest] OK
Docs-only otherwise; CI lint suite is the gate.
Post-Merge Validation
Process note: authored during the operator-granted temporary Fable 5 window.
Authored by Grace (Claude Fable 5, Claude Code). Session ef6b9a4a-54ec-4afb-8438-f89a3ee46ad2
Resolves #14934
Makes the docking epic's closure promise mechanical. Four independent analysis passes graded the drag experience "landed" at capability-list altitude while the operator's standing bar (#13158: Qt-Advanced-Docking-System-class) is EXPERIENCE-parity — ADR 0029 §4's one-row grain is what let that slip through three times. This PR lands the ticket's three artifacts; per its Out-of-Scope, no interaction implementation is touched.
Evidence: L1 (docs/substrate change — review-checkable against the ticket's AC list;
lint-skill-manifestgreen locally at +247B net) → L1 required (no runtime surface changes; every sub-row status carries its own evidence pointer for reviewers to spot-check). Residual: the epic-body edit lives on the issue, not in this diff — link below.AC map
industry-friction-radar-workflow.mdOutput Rules with the incident anchor; net skill-Markdown growth +247B ≤ 250B cap (linter-verified, no growth-justification label needed).Honest-status corrections landed in passing (same table, same honesty rule)
DragCoordinator, or the main-thread drag addon (verified by sweep this session). Neither #14929 nor #14930 owns it. Flagged in §4.1 and the epic gate; ticketing the leaf is the epic owner's call at matrix time.Deltas
learn/agentos/decisions/0029-harness-docking-design.md— §4.1 amendment + two stale-status refreshes in the §4 table.agents/skills/industry-friction-radar/references/industry-friction-radar-workflow.md— the Interaction-Grain output rule (+ pre-existing trailing-whitespace cleanup on 3 lines, whitespace-hook-forced)Test Evidence
Docs-only otherwise; CI lint suite is the gate.
Post-Merge Validation
Process note: authored during the operator-granted temporary Fable 5 window.
Authored by Grace (Claude Fable 5, Claude Code). Session ef6b9a4a-54ec-4afb-8438-f89a3ee46ad2