LearnNewsExamplesServices
Frontmatter
id15362
titleUnit shard red on dev: the #15349 leaf-parity snapshot shipped stale — missing the two #15298 hookProjection leaves
stateClosed
labels
bugaibuild
assigneesneo-opus-vega
createdAtJul 17, 2026, 5:25 PM
updatedAtJul 17, 2026, 5:42 PM
githubUrlhttps://github.com/neomjs/neo/issues/15362
authorneo-opus-vega
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 17, 2026, 5:42 PM

Unit shard red on dev: the #15349 leaf-parity snapshot shipped stale — missing the two #15298 hookProjection leaves

Closed Backlog/active-chunk-7 bugaibuild
neo-opus-vega
neo-opus-vega commented on Jul 17, 2026, 5:25 PM

Context

Every PR whose CI classification runs the unit shard now inherits 3 failures in test/playwright/unit/ai/scripts/lint/lintConfigTemplateSsot.spec.mjs (first observed on PR #15361, whose diff is one agentos e2e file — zero intersection). Verified on plain dev locally at 635164bdc4: same 3 failures.

[lint-config-template-ssot] config leaf parity FAILED
  ai/mcp/server/memory-core/config.template.mjs: 2 declared path(s) ADDED
    + hookProjectionLeaseTtlMs
    + hookProjectionRoot

The Problem

A cross-PR semantic conflict between two individually-green PRs, plus a snapshot generated before a rebase:

  • db8e460880 (PR #15298) added hookProjectionLeaseTtlMs + hookProjectionRoot to ai/mcp/server/memory-core/config.template.mjs — merged FIRST.
  • 8efcbe3028 (PR #15349) introduced the leaf-parity guard + its baseline ai/scripts/lint/config-leaf-parity.json. git merge-base --is-ancestor db8e460880 8efcbe3028 → true, so the hook leaves were in its ancestry — but the committed snapshot does not contain them: it was generated on the pre-rebase branch state and not regenerated after the rebase onto dev (the same rebase that fixed the PR's stacked-commit shape).

The guard that exists so "a dropped leaf is silent at every gate" arrived with its own baseline missing two leaves — one more specimen for the #13652 corpus: the instrument answered about the tree it was generated on, not the tree it shipped to.

Why dev looks green: the Tests workflow at 635164bdc4 shows success because the docs-only push skipped the unit shard via test-scope classification — a signal-swallower. The red is only visible from PRs that trigger the shard, which bills the failure to innocent diffs.

The Architectural Reality

ai/scripts/lint/lint-config-template-ssot.mjs (the #12451 guard, extended by #15349) compares each config.template.mjs's declared leaf paths against ai/scripts/lint/config-leaf-parity.json. ADDED paths fail closed until recorded via --update-parity in the same commit — exactly the remediation its failure message prescribes. ADR-0019 read (gate 10): this touch is the guard's own snapshot artifact, not config resolution — no §3 antipattern surface.

The Fix

Run node ai/scripts/lint/lint-config-template-ssot.mjs --update-parity, verify the diff is exactly the two hookProjection paths under memory-core, run the 3 red specs green, ship as one commit. The two leaves are deliberate, reviewed surface (PR #15298, merged); recording them is mechanical completion, not a decision.

Acceptance Criteria

  • config-leaf-parity.json gains exactly hookProjectionLeaseTtlMs + hookProjectionRoot under memory-core — no other delta.
  • lintConfigTemplateSsot.spec.mjs fully green locally on the branch (all 46).
  • PR CI unit shard green — proving the queue's inherited red is cleared.

Out of Scope

  • Making the parity check self-heal on rebase (e.g. a pre-push regeneration hook) — real, but a design question for the guard's owner (@neo-opus-ada) and the #13652 epic, not this unblock.
  • The docs-only-push shard-skip signal-swallower — recorded here as the visibility mechanism; whether dev-push should always run the SSOT spec is its own leaf.

Related

PR #15349 / 8efcbe3028 (the guard + stale snapshot) · PR #15298 / db8e460880 (the two leaves) · #15325 (the guard's ticket) · #12451 (the SSOT lint) · #13652 (the corpus this specimen joins) · PR #15361 (first innocent PR billed).

Live latest-open sweep: checked latest 12 open at 2026-07-17T15:24Z (latest #15360); no equivalent. A2A in-flight sweep (6 most-recent, 15:14–15:24Z): Fable/Clio takeover + review-seat traffic only; nobody has claimed or filed the parity red.

Decision Record impact: none (aligned-with ADR-0019 read-gate; touches only the lint's own baseline artifact).

Origin Session ID: 2dcbf336-4338-4009-82f3-79f1b1d151f1

Retrieval Hint: "config leaf parity snapshot stale hookProjection unit shard red dev 15349 15298"

tobiu referenced in commit 25b68f7 - "fix(ai): record the two hookProjection leaves the parity baseline missed (#15362) (#15363) on Jul 17, 2026, 5:42 PM
tobiu closed this issue on Jul 17, 2026, 5:42 PM