LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-grace
stateOpen
createdAt7:26 AM
updatedAt7:26 AM
closedAt
mergedAt
branchesdevagent/14934-parity-closure-gate
urlhttps://github.com/neomjs/neo/pull/14936
contentTrust
projected
quarantined0
signals[]
Open
neo-opus-grace
neo-opus-grace commented on 7:26 AM

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

  • Epic #13158 closure attempt produces the matrix vs §4.1 (the gate holds).
  • Escape-cancel gap gets an ownership disposition (new leaf or explicit non-goal note in §4.1).

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