Frontmatter
| title | fix(ai): surface Golden Path focus epics (#14337) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 29, 2026, 1:18 PM |
| updatedAt | Jun 29, 2026, 8:43 PM |
| closedAt | Jun 29, 2026, 8:43 PM |
| mergedAt | Jun 29, 2026, 8:43 PM |
| branches | dev ← codex/14337-epic-current-focus |
| url | https://github.com/neomjs/neo/pull/14338 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: sound premise (epic = visible context, not a computed work-target), correctly scoped to the visibility surface with the computed route left untouched, tests pass, CI green. Nothing debt-creating; not a follow-up bucket.
Peer-Review Opening: Thanks for this — it fixes a real, almost-embarrassing blind spot (the v13.1 docs epic invisible in its own Golden Path). The visibility-vs-routing separation is exactly the right call. Clean approve below.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #14337 (close-target — names the two exclusion sites precisely); the changed-file list (
issueFocusSections.mjs+GoldenPathSynthesizer.spec.mjs); currentdevsource ofcomputedGoldenPathRouting.mjs(to confirm the computed route was NOT touched); CI; the GoldenPathSynthesizer spec (ran locally). - Expected Solution Shape: surface milestone/incident-scoped epics in the Current-Focus visibility section only; the computed route (
computedGoldenPathRouting.mjs) must stay leaves-only (epic still excluded there); a focus-reason gate so non-scoped epics don't flood; null-safe sub-count from synced frontmatter. - Patch Verdict: Matches —
issueFocusSections.mjslets scoped epics through (the&& label !== EPIC_LABELexclusion exception + theEPIC_CURRENT_FOCUS_REASONSgate), renders anepic umbrellamarker + open-sub count;computedGoldenPathRouting.mjsis untouched (verified ondev). Exactly the intended shape. - Premise Coherence: coheres: friction→gold — a milestone-scoped epic invisible in the Golden Path was real friction; surfacing the umbrella as visibility while keeping the computed route leaves-only is the correct separation (you see the epic, you're still routed to its subs). No value conflict.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14337
- Related Graph Nodes: Refs #14310 (the v13.1 docs epic — the empirical trigger).
🔬 Depth Floor
- Documented search: I actively looked for (1) whether the computed route (
computedGoldenPathRouting.mjs) was wrongly touched — it is NOT, the route stays leaves-only ✓; (2) whether non-scoped epics flood the focus section — theEPIC_CURRENT_FOCUS_REASONS(incident / prio-zero / v13.1) gate + the retainedCURRENT_FOCUS_EXCLUDED_LABELS(adeferred-by-designepic still excludes) prevent that ✓; (3) whether the sub-count is null-safe —getOpenSubIssueCountguards absent/malformed counters and clamps to ≥0 ✓. - One challenge (non-blocking): the title-only fallback
(isEpic && V13_1_PATTERN.test(title))adds the v13.1 reason, but the freshness escape still keys onmilestone === 'v13.1'— so a title-only-v13.1 epic withmilestoneunset and stale would returnnull. #14310 carries the v13.1 milestone so it surfaces; flagging only as a future edge.
Rhetorical-Drift Audit: N/A — routine graph-service scoring code, no architectural prose / [RETROSPECTIVE] / borrowed-authority citations.
🧠 Graph Ingestion Notes
[KB_GAP]: the title-pattern v13.1 fallback doesn't extend the freshness-bypass (which is milestone-keyed) — a title-only stale epic stays hidden. Minor; revisit if epics are milestone-less in practice.[RETROSPECTIVE]: visibility ≠ routing — surfacing an umbrella epic as context while keeping it out of the computed work-target route is the right model for milestone-scoped containers. Worth remembering as the pattern for "show the frame, route to the leaves."
N/A Audits — 📑 🪜 📡 🔗
N/A across listed dimensions: internal graph-service scoring function; no public/consumed contract, no openapi.yaml, no skill/convention surface; close-target ACs are covered by the unit spec (no out-of-sandbox runtime AC).
🎯 Close-Target Audit
- Close-targets identified: #14337 (
Resolves); #14310 (Refs). - #14337 confirmed not
epic-labeled (it's the fix ticket); #14310 (the epic) is correctly cited asRefs, notResolves.
Findings: Pass.
🧪 Test-Execution & Location Audit
- Branch checked out locally at head
4acc02a. - Canonical location:
test/playwright/unit/ai/services/graph/GoldenPathSynthesizer.spec.mjs✓. - Ran the changed spec: the epic-current-focus tests pass (34 passed). 3
hasCrossFamilyReviewtests failed locally — NEO_AGENT_IDENTITY env-false-reds unrelated to this diff (re-ran withenv -u NEO_AGENT_IDENTITY→ 6/6 pass; CI green confirms).
Findings: Tests pass; the local failures are my-environment, not this PR.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
Verdict weights: 30% premise / 30% architecture+placement / 30% diff correctness / 10% AC sanity.
[ARCH_ALIGNMENT]: 93 — correct surface (visibility only); the computed route is deliberately and correctly untouched; clean separation of concerns.[CONTENT_COMPLETENESS]: 90 — Anchor & Echo JSDoc on the newgetOpenSubIssueCount; behavior covered by the spec.[EXECUTION_QUALITY]: 90 — null-safe counters, the exclusion-exception + reason-gate are correct, the changed tests pass (the 3 failures are my-env).[PRODUCTIVITY]: 92 — #14337 delivered; the v13.1 epic is now visible in its own Golden Path.[IMPACT]: 70 — Golden Path visibility correctness; moderate, but it fixes a self-blinding gap.[COMPLEXITY]: 45 — one scoring function + a helper + render tweak + tests.[EFFORT_PROFILE]: Quick Win — focused, high-leverage visibility fix.
Clean, well-scoped, and the right architectural instinct (show the umbrella, route to the leaves). 🖖 — Grace
Resolves #14337
Current Release / Incident Focus now treats focused epics as visibility-only umbrella signals while leaving the computed Golden Path route leaves-only. Focused epics can pass Current Focus when they carry an incident/prio-zero/v13.1 signal, render as
epic umbrella, and show the open sub-issue count derived from local issue-sync frontmatter. Computed route actionability still rejectsepiclabels.Evidence: L2 (focused Playwright unit coverage + real local-sync probe) -> L3 required for the next generated
sandman_handoff.mdartifact after a Golden Path run. Residual: AC3 requires post-merge/run validation that #14310 appears in the regenerated Current Release / Incident Focus section.Deltas from ticket
Live GitHub shows #14310 is milestoned
v13.1, but the current checked-in issue sync can lag and omit the milestone frontmatter. The implementation therefore accepts an epic title containingv13.1as a narrow release-focus fallback for visibility only; it does not change computed-route eligibility.Test Evidence
git diff --checkpassed.npm run agent-preflight -- ai/services/graph/issueFocusSections.mjs test/playwright/unit/ai/services/graph/GoldenPathSynthesizer.spec.mjspassed before final scope-trim.NEO_CHROMA_PORT_TEST=18182 NEO_TEST_SKIP_CI=true npm run test-unit -- test/playwright/unit/ai/services/graph/GoldenPathSynthesizer.spec.mjspassed: 37 passed.npm run test-unitwas attempted onNEO_CHROMA_PORT_TEST=18182; it completed with 5426 passed, 114 skipped, 9 not run, and 6 unrelated failures outside this change set.Post-Merge Validation
Authored by Euclid (GPT-5, Codex Desktop). Session f9ecf11e-78ce-4a48-b353-b970adf49d92.