LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateClosed
createdAtJun 26, 2026, 6:41 PM
updatedAtJul 27, 2026, 12:06 AM
closedAtJun 26, 2026, 6:42 PM
mergedAt
branchesdevfeat/14119-ledger-drift-spike
urlhttps://github.com/neomjs/neo/pull/14122
contentTrust
projected
quarantined1
signals[]
Closed
neo-opus-ada
neo-opus-ada commented on Jun 26, 2026, 6:41 PM

Refs #14119feasibility spike, NOT a resolution. Draft: do not merge until the lead routes #14119 (implement-here vs ideation); disposition is wire-or-retire after that call.

What this proves

#14119 asks for an author-side check that flags when a PR's shipped consumed-surface drifts from the originating ticket's Contract Ledger — but flagged genuine design ambiguity ("how much of 'drift' is mechanically detectable, and where the check belongs"). This spike de-risks the mechanical-feasibility half of that question with a working, tested detectSignatureDrift:

  • Parses a ledger row's stated function surface (e.g. buildDimensionConsistencyDiagnosis(samples, observedAt, serviceId)) and the shipped declaration (export function buildDimensionConsistencyDiagnosis({samples, observedAt, serviceId})).
  • Flags three mechanical drift classes: name, param-passing-style (positional list vs single destructured object), and param-name-set.
  • The real positional-vs-destructured drift that cost a review cycle this session is detected (a dedicated test pins it). Defaults / type-annotations are normalized away; an unparseable signature degrades to a flagged unparseable (never a false-clean).

Finding: mechanical signature-drift detection is feasible and cheap. Return-shape + semantic/behavioural drift are deliberately out of scope (they stay reviewer judgement) — so the spike does NOT claim to replace the review-time §5.4 audit; it front-runs the mechanical signature slice author-side.

Evidence: L2 (unit, pure function, no I/O). 7/7 green. This is a proof-of-concept; it is not wired into agent-preflight or the pull-request workflow — that integration point is the open design the routing decision settles.

Deltas from ticket

  • Scoped to the mechanically-checkable signature slice only (the de-riskable core), not the full #14119 (return-shape drift + the integration point are out of scope, pending routing).
  • Opened as a draft spike rather than a resolution: it informs the lead's implement-vs-ideation routing with a concrete artifact rather than pre-committing the design.

Test Evidence

npm run test-unit -- test/playwright/unit/ai/buildScripts/util/contractLedgerDrift.spec.mjs7 passed (the real positional-vs-destructured case; no-drift; param-set add; name drift; defaults/types normalized; unparseable→flagged; parser classification).

npm run agent-preflight → gates passed.

Post-Merge Validation

  • Do not merge until #14119 is routed. If routed to implement: wire detectSignatureDrift into the chosen integration point (agent-preflight step or pull-request workflow), extend toward return-shape drift, and flip Refs→Resolves on the wired PR. If routed to ideation: this branch is the feasibility input; retire it or fold it into the graduated design.

Authored by Ada (Claude Opus 4.8, Claude Code). Session fe9c04d6-1aae-4017-8d53-19b0e5aaf809.

github-actions commented on Jun 26, 2026, 6:41 PM

🚨 Agent PR Body Lint Violation

@neo-opus-ada — your PR body on PR #14122 [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 ``Resolves #N(mandatory closing keyword —Refs/Related alone is NOT sufficient) is missing.

Visible anchors missing (full list)
  • ``Resolves #N(mandatory closing keyword —Refs/Related alone is NOT sufficient)

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-opus-ada
neo-opus-ada commented on Jun 26, 2026, 6:42 PM

Closing: a feasibility spike legitimately resolves no leaf, but the PR-body lint (correctly) requires Resolves #N — so a spike-without-a-close-target doesn't fit the PR mold (forcing a Resolves #14119 would over-claim; the spike doesn't implement the full pre-flight). The artifact lives on branch feat/14119-ledger-drift-spike (commit 79b3bd7d5, 7/7 green); feasibility result reported on #14119 for the routing decision.