LearnNewsExamplesServices
Frontmatter
id14609
titleComputed GP guard follow-ups: focus-as-route, filter ledger, release leaf
stateOpen
labels
enhancementai
assigneesneo-opus-ada
createdAt4:30 AM
updatedAt4:18 PM
githubUrlhttps://github.com/neomjs/neo/issues/14609
authorneo-fable
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Computed GP guard follow-ups: focus-as-route, filter ledger, release leaf

Open Backlog/active-chunk-3 enhancementai
neo-fable
neo-fable commented on 4:30 AM

Context

Split out of #14588 per the PR #14596 review (cross-family RA: the shipped diff resolves the narrowed guard-literal defect; these three ACs are real but separable — close-target honesty demands they live where a PR can genuinely Resolves them).

The Problem / The Fix (three separable behaviors, one surface)

  1. Focus-as-route fallback: when the contradiction guard blocks ALL surviving candidates (the no-survivor state — tonight's live reproducer shape), the rendered section lists the focus items as the numbered recommendation instead of rendering zero routes. Respects the module's owner contract by making this an explicit no-survivor fallback, never a boost of focus into routing while computed candidates exist (computedGoldenPathRouting.mjs — renderComputedGoldenPathContradictionSection gains the fallback branch; the guard JSDoc's "does not boost focus nodes into routing" clause gets the no-survivor exception documented).
  2. Guard-filter ledger recording: blocked candidates land in the #14454 route-attribution ledger (the diagnostic becomes measurable — which candidates the guard filters, how often, under which focus reasons).
  3. Release-window config leaf: the durable class-fix for the stale-release-boundary family — "current release window" as a config/SSOT leaf (set at cut-prep, cleared mechanically by publish.mjs), consumed by both the routing guard's conflict-reason set and issueFocusSections.mjs's emitter literals (V13_1_PATTERN, the milestone gate — the emitter-side hardcoding #14588's investigation identified). Sibling precedent: #14531 (the release-analyzer literal). Config-template blast radius: follow mcp-config-template-change-guide if the leaf lands in an MCP-server template; root ai/config.template.mjs otherwise, with the --migrate-config note.

Acceptance Criteria

  • No-survivor guard state renders focus items as numbered recommendations (unit fixture: all-blocked topNodes → non-empty numbered section).
  • Guard-filtered candidates recorded in the route-attribution ledger with focus-reason attribution.
  • Release-window leaf exists with the publish-cleared lifecycle; both consumer surfaces (conflict-reason set + emitter patterns) read it; no release-version literal remains in either file (falsifying grep in the AC).
  • Each behavior lands separately reviewable (three commits or split PRs per the one-PR-leaf rule if any grows).

Out of Scope

The guard-literal removal + guard-semantics pinning (shipped, PR #14596) · the single-actionable-candidate narrowness (#14503) · #14575's portal-index test fix (its own lane; currently gating #14596's CI).

Related

#14588 (narrowed parent-defect, re-scoped 2026-07-04) · PR #14596 (the shipped slice + the review that mandated this split) · #14531 (stale-literal sibling) · #14454 (the ledger) · #14503 (narrowness) · #14575 (CI gate).

Live latest-open sweep: latest 15 checked 02:22Z + no new filings in the 8-minute window (mailbox-verified). Claimable — my lane's orbit, sequenced behind #14567.

Origin Session ID: a5af7cf6-45a3-42db-8a30-f04f4241a55c Retrieval Hint: "GP guard focus-as-route ledger release-window config leaf publish-cleared"