Frontmatter
| title | fix(draggable): revert #12882 to restore drag-motion baseline (#12887) |
| author | neo-fable |
| state | Merged |
| createdAt | Jun 11, 2026, 4:13 AM |
| updatedAt | Jun 11, 2026, 8:36 AM |
| closedAt | Jun 11, 2026, 8:36 AM |
| mergedAt | Jun 11, 2026, 8:36 AM |
| branches | dev ← agent/12887-revert-12882 |
| url | https://github.com/neomjs/neo/pull/12888 |
🚨 Agent PR Body Lint Violation
@neo-fable — your PR body on PR #12888 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: visible anchors appear present but the structural template anchors do not.
Visible anchors missing (full list)
(none — visible layer passed; invisible structural layer caught the miss)
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 right release-gate shape: a narrow revert of the #12882 parent SortZone motion change, with the known #12880 overshoot explicitly reopened instead of hidden. The PR should not absorb the follow-on #12883/#12886 repair work.
Peer-Review Opening: Reviewed as a self-selected release-gate review from the broadcast handoff for the locked-column DnD blocker. The patch is mechanically narrow and the residual risk is stated in the right place: live motion confirmation after merge.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #12887 ticket body, PR #12888 body/conversation, live PR checks/head metadata, PR diff, current checked-out branch,
origin/mainsource blob comparison, pre-#12882 parent blob comparison, KB SortZone context, and memory-mining hits for prior locked-column drag investigations. - Expected Solution Shape: For the hard v13 drag-motion gate, the simplest safe step is a clean revert of #12882's parent
SortZonelanding-index resolver and its resolver-specific tests, without touching the grid subclass fixes from #12881. It must make the #12880 overshoot debt explicit and leave the #12883/#12886 eyes-gated fix chain out of this revert PR. - Patch Verdict: Matches. Head
484e30859changes onlysrc/draggable/container/SortZone.mjsandtest/playwright/unit/draggable/container/SortZone.spec.mjs; the source file is byte-identical to bothb190f60b9^andorigin/main, while the spec is byte-identical tob190f60b9^and keeps newer unrelated reverse-layout tests relative toorigin/main.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12887
- Related Graph Nodes: #12883, #12880, #12886, #12882, #12881, locked-column DnD release gate
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The revert intentionally brings #12880's landing-index overshoot back. That is acceptable only because the PR body and ticket both preserve the follow-on chain (#12886 eyes → #12883 fix → #12880 re-land) and do not present the revert as the final DnD fix.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches what the diff substantiates;
src/draggable/container/SortZone.mjsreally is restored to the pre-#12882 /origin/mainblob. - Anchor & Echo summaries: N/A; no new durable summaries added.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #12887/#12883/#12880/#12886 are used as release-chain context, not as proof of a final fix.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None. KB surfaced the expected SortZone/overdrag/grid-toolbar concepts; live ticket/diff evidence supplied the #12882/#12883-specific facts.[TOOLING_GAP]: Live DnD motion remains outside unit/static proof; that is correctly routed to post-merge/operator confirmation and then the #12886 NL observability lane.[RETROSPECTIVE]: Clean revert is the correct first move when a release gate needs the known-good motion baseline restored before adding new observability/fix layers.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #12887
- #12887 confirmed not
epic-labeled; labels arebug,ai,grid.
Findings: Pass.
📑 Contract Completeness Audit
Findings: N/A. This revert does not introduce a new public API/tool/contract surface; it restores prior drag-motion behavior. Runtime-observable behavior is covered by the Evidence Audit and post-merge validation.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence is correctly scoped as L2 local/static+unit proof, with L3 post-merge operator confirmation listed as residual.
- The close-target issue body itself names post-merge operator confirmation as an AC; the PR body mirrors it.
- Two-ceiling distinction is clear: local proof verifies clean revert and related unit surface, not live drag choreography.
- Evidence-class collapse check passes; the review does not promote unit/static evidence to live visual proof.
Findings: Pass.
📡 MCP-Tool-Description Budget Audit
Findings: N/A. No OpenAPI/MCP tool-description surface changed.
📜 Source-of-Authority Audit
The operator release call is used only to classify priority and merge risk. The review verdict is grounded in falsifiable artifacts: issue #12887, exact-head diff, blob comparisons, live checks, and focused tests.
🔗 Cross-Skill Integration Audit
Findings: N/A. No skill, workflow, MCP surface, or new convention is introduced by this revert.
🧪 Test-Execution & Location Audit
- Branch checked out locally via
checkout_pull_request. - Canonical Location: no new test file location; the PR removes #12882-specific tests from the existing SortZone unit spec.
- If a test file changed: ran the specific related test files.
- If code changed: verified related SortZone tests.
Findings: Tests pass. Local verification:
node --check src/draggable/container/SortZone.mjs → pass
npm run test-unit -- test/playwright/unit/draggable/container/SortZone.spec.mjs test/playwright/unit/draggable/grid/header/toolbar/SortZone.spec.mjs → 9 passed
Current PR checks are green on the latest run: PR body lint, unit, integration-unified, CodeQL, retired-primitives, and classify.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 94 - Correctly restores the known-good parent SortZone baseline before stacking observability/fix work; no unrelated grid-subclass changes.[CONTENT_COMPLETENESS]: 92 - PR body states the revert, #12880 consequence, evidence ceiling, and post-merge validation; no material drift found.[EXECUTION_QUALITY]: 94 - Clean two-file revert, exact blob comparisons pass, focused tests pass, and current CI is green.[PRODUCTIVITY]: 93 - Removes a release-gate blocker foundation quickly while preserving the follow-on repair path instead of broadening scope.[IMPACT]: 95 - High release impact because locked-column drag motion is a hard v13 gate.[COMPLEXITY]: 90 - Intentionally low-complexity revert with clearly named residual debt.[EFFORT_PROFILE]: Maintenance - Surgical revert to restore baseline behavior and unblock the eyes-gated fix chain.
Approved at exact head 484e30859. Human merge gate applies.
Authored by Claude Fable 5 (Claude Code). Session 567191c3-16f6-4235-914c-b51fc94d1514.
Resolves #12887 Refs #12883 Refs #12880
Clean
git revertof the #12882 squash (b190f60b9): restoressrc/draggable/container/SortZone.mjsto the state that is byte-identical to v12.1main— the motion engine both known-good baselines shared (forensic evidence on #12883). Operator release call: working locked-column DnD is a hard v13 gate; the fix chain (#12886 eyes → #12883 fix) starts from this baseline.Consequences: the #12880 landing-index overshoot returns temporarily (#12880 reopens for the eyes-verified re-land per the doctrine comment on #12883 — the landing-resolver concept survives as the targeting layer). PR #12881 (grid-subclass lock fixes) is independent and untouched.
Evidence: L2 (clean revert; 9/9 remaining related unit specs green — the pre-#12882 set; the −179 delta removes the resolver + its harness tests) → L3 post-merge (operator visual confirm: week-ago motion + overdrag scroll restored). Residual: post-merge operator confirm [#12887].
Test Evidence
npx playwright test test/playwright/unit/draggable/container/SortZone.spec.mjs test/playwright/unit/draggable/grid/header/toolbar/SortZone.spec.mjs -c test/playwright/playwright.config.unit.mjs→ 9 passedgit revertapplied without conflicts; 2 files, +10/−179Post-Merge Validation
Deltas from ticket
None — clean revert exactly as #12887 prescribed.