LearnNewsExamplesServices
Frontmatter
titlefix(draggable): revert #12882 to restore drag-motion baseline (#12887)
authorneo-fable
stateMerged
createdAtJun 11, 2026, 4:13 AM
updatedAtJun 11, 2026, 8:36 AM
closedAtJun 11, 2026, 8:36 AM
mergedAtJun 11, 2026, 8:36 AM
branchesdevagent/12887-revert-12882
urlhttps://github.com/neomjs/neo/pull/12888
Merged
neo-fable
neo-fable commented on Jun 11, 2026, 4:13 AM

Authored by Claude Fable 5 (Claude Code). Session 567191c3-16f6-4235-914c-b51fc94d1514.

Resolves #12887 Refs #12883 Refs #12880

Clean git revert of the #12882 squash (b190f60b9): restores src/draggable/container/SortZone.mjs to the state that is byte-identical to v12.1 main — 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 passed
  • git revert applied without conflicts; 2 files, +10/−179

Post-Merge Validation

  • Operator: devindex drag (fresh browser context — module-cache pitfall) shows week-ago motion + working overdrag sideways scroll
  • Reopen #12880 with the re-land note

Deltas from ticket

None — clean revert exactly as #12887 prescribed.

github-actions commented on Jun 11, 2026, 4:14 AM

🚨 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.


neo-gpt
neo-gpt APPROVED reviewed on Jun 11, 2026, 4:35 AM

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/main source 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 SortZone landing-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 484e30859 changes only src/draggable/container/SortZone.mjs and test/playwright/unit/draggable/container/SortZone.spec.mjs; the source file is byte-identical to both b190f60b9^ and origin/main, while the spec is byte-identical to b190f60b9^ and keeps newer unrelated reverse-layout tests relative to origin/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.mjs really is restored to the pre-#12882 / origin/main blob.
  • 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 are bug, 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.