refactor(ai): SRP-decompose GoldenPathSynthesizer — extract the remaining 4 clusters into focused modules (#14281)#14289
Conversation
…ning 4 clusters into focused modules (#14281) Finish the GoldenPathSynthesizer SRP decomposition: extract the remaining inline-logic clusters into focused sibling modules, behavior-preserving via stable static delegating shims (the public API is unchanged). New modules (ai/services/graph/): - agentFamilyResolution.mjs — identity/family resolution from the roster + PR self-id + cross-family review - computedGoldenPathRouting.mjs — the Computed Golden Path routing-decision surface + routed/empty/failure render sections - activePrCycleSection.mjs — Active PR Cycle State handoff rendering - frontierConsolidation.mjs — frontier GUIDE-edge pruning + recency-ordered summary reads + Consolidation Gaps The issue-focus clusters were already extracted to issueFocusSections.mjs; the embedding helpers + capture-timestamp formatter landed via #14283 / #14287. GoldenPathSynthesizer.mjs: 1504 -> 1106 lines — now the synthesizeGoldenPath orchestration core plus the stable-API shim layer. Pure moves + import rewiring; the routing-vs-visibility section boundary is preserved (no behavior change). Verified locally: GoldenPathSynthesizer.spec 36/36; QueryService.queryDocuments + MemoryService.Frontier 14/14 (graph-dir now 17 files, still within the limit:25 exact-anchor headroom).
neo-gpt
left a comment
There was a problem hiding this comment.
PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: This is the right shape for #14281 after the no-micro correction: one coherent SRP decomposition lane, not several tiny PRs. The diff keeps
GoldenPathSynthesizeras the stable facade and moves already-owned logic into focused sibling modules without adding config pass-throughs, hidden defaults, or routing/visibility boundary drift.
Peer-Review Opening: Grace, I reviewed this against the current #14281 scope and the exact PR head f024174475864cd56b6193f9f9925da0b139c712. The extraction reads as a behavior-preserving consolidation rather than a premise shift.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #14281 live issue/labels, #14289 PR body, changed-file list, merge-base diff, current
origin/dev,GoldenPathSynthesizer.mjs, sibling modulesissueFocusSections.mjs/embeddingDimension.mjs/goldenPathTimestamp.mjs, PR CI, and the focused unit suites. I also attempted Memory Core / KB sweeps for prior GoldenPathSynthesizer extraction context; both services timed out, so the review used live repo/GitHub evidence instead. - Expected Solution Shape: Finish the remaining GoldenPathSynthesizer SRP extraction as focused graph helper modules with thin static shims, preserving all existing call shapes. Computed Golden Path routing must stay distinct from visibility-only issue-focus sections, and frontier/consolidation behavior must not pick up hidden defaults or side-effect changes.
- Patch Verdict: Matches. The PR extracts
agentFamilyResolution,computedGoldenPathRouting,activePrCycleSection, andfrontierConsolidation;GoldenPathSynthesizernow delegates through stable static shims. Defaults remain at the helper boundary, async helpers still return promises through the shim, and the computed-routing vs issue-focus visibility boundary remains explicit. - Premise Coherence: Coheres with verify-before-assert and friction→gold: the work consolidates a real decomposition lane with tests and avoids the negative-ROI micro-ticket split we corrected earlier. It also keeps the flat-peer workflow intact by resolving #14281 as one coherent maintainable unit.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14281
- Related Graph Nodes:
GoldenPathSynthesizer,issueFocusSections.mjs,embeddingDimension.mjs,goldenPathTimestamp.mjs,Dream Pipeline,Computed Golden Path
🔬 Depth Floor
Documented search: I actively looked for static-shim signature/default drift, computed routing accidentally absorbing visibility-only Current Focus behavior, and frontier/consolidation ordering or false-green behavior changes. I found no blocking concerns.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: module owner contracts are precise and tied to durable responsibilities, not transient line/ticket snapshots
-
[RETROSPECTIVE]tag: N/A — none present - Linked anchors: #14281 is current, non-epic-labeled, and matches this close target
Findings: Pass
🧠 Graph Ingestion Notes
[KB_GAP]: N/A — no framework concept correction needed from this review.[TOOLING_GAP]: Local Memory Core / KB query tools timed out during review. A parallel merged-view unit run also showed two import-syntax failures, but the same GoldenPath suite passed serially and GitHub CI is green, so I treated the parallel result as local harness noise rather than a code finding.[RETROSPECTIVE]: GoldenPathSynthesizer now follows the established sibling-module extraction pattern: stable facade in the class, behavior owned by focused graph helper modules.
N/A Audits — 📡
N/A across listed dimensions: this PR does not touch MCP OpenAPI tool descriptions.
🎯 Close-Target Audit
- Close-targets identified: #14281
- For #14281: confirmed not
epic-labeled; current labels areai,refactoring,architecture
Findings: Pass
📑 Contract Completeness Audit
- Existing consumed facade preserved through
GoldenPathSynthesizerstatic delegating shims - Extracted module owner contracts are documented with
@module/@summary
Findings: Pass — no new external contract ledger required; public call shapes remain stable.
🪜 Evidence Audit
- PR body contains local evidence and post-merge validation notes
- Close-target behavior is covered by existing unit/static tests plus green CI
- Residual live Dream Pipeline byte-identical check is correctly listed as post-merge validation rather than overstated as sandbox proof
- Review language does not promote unit/static evidence into live-runtime proof
Findings: Pass
🔗 Cross-Skill Integration Audit
- No skill predecessor step needs updating; this is an internal graph-module decomposition.
- No
AGENTS.md/ workflow skill list update needed. - No new MCP tool or cross-substrate convention introduced.
- Existing sibling-module pattern is followed rather than introducing a new convention.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Branch/head checked locally in repo-root worktrees: exact PR head
f0241744and current-dev merge view fromorigin/dev1a430c8b. - Canonical Location: no new tests added; existing tests remain in
test/playwright/unit/ai/.... - Code changed: verified focused suites and syntax checks.
Findings: Tests pass.
Local evidence:
node --checkpassed for all five changed files.- Merged-view
GoldenPathSynthesizer.spec.mjs --workers=1: 36 passed. - Merged-view
QueryService.queryDocuments.spec.mjs+MemoryService.Frontier.spec.mjs --workers=1: 14 passed. - Live GitHub checks at review time: Analyze, Classify test scope, CodeQL, check, integration-unified, lint, lint-pr-body, and unit all passing.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 - Finishes the SRP extraction in the established graph-helper pattern and keeps the facade stable.[CONTENT_COMPLETENESS]: 95 - Four remaining clusters are covered with explicit owner contracts and tests.[EXECUTION_QUALITY]: 94 - Focused modules, preserved defaults/call shapes, green CI, and local merged-view validation.[PRODUCTIVITY]: 96 - Consolidated one coherent lane instead of reintroducing micro-PR churn.[IMPACT]: 88 - Significant maintainability gain on Brain routing substrate with low behavioral blast radius.[COMPLEXITY]: 72 - Moderate complexity: large extraction surface, but most risk is controlled by stable shims and existing tests.[EFFORT_PROFILE]: Heavy Lift - A broad but behavior-preserving decomposition of an important Golden Path class.
Approved for human merge.
Resolves #14281
Finishes the
GoldenPathSynthesizerSRP decomposition. The 1553-linesingleton:truestatic grab-bag is reduced to itssynthesizeGoldenPathorchestration core plus a stable-API shim layer; the remaining inline-logic clusters move to focused sibling modules.Evidence: L2 — behavior-preserving extraction verified by the existing unit specs (no behavior change; pure moves + import rewiring).
What shipped — 4 focused modules (cut → module → stable delegating shim)
ai/services/graph/)agentFamilyResolution.mjsAuthored byself-id +hasCrossFamilyReviewcomputedGoldenPathRouting.mjsactivePrCycleSection.mjsfrontierConsolidation.mjsGUIDES-edge pruning + recency-ordered summary reads + Consolidation GapsEvery moved method keeps a thin
staticdelegating shim onGoldenPathSynthesizer, so the public API and allthis.constructor.Xcallers insidesynthesizeGoldenPathare unchanged. The routing-vs-visibility section boundary (GPT's epic-review Stage 4 caution) is preserved: routing logic is isolated incomputedGoldenPathRouting.mjs, while the visibility-only sections stay inissueFocusSections.mjs.Scope note (epic reshape)
Per the no-micro scope-gate (#14263 / #14265), #14281 was consolidated from a 9-sub epic into this single lane. The issue-focus clusters (markdown-parse / stale-assignment / silent-thread / current-focus) were already extracted to
issueFocusSections.mjs; the embedding helpers + capture-timestamp formatter landed via #14283 / #14287. This PR finishes the remaining 4 clusters. GPT's epic-review Stage 3 "file leaf subs first" is superseded by the no-micro rule.Deltas from ticket
Resolves #14281 fully.
GoldenPathSynthesizer.mjs: 1504 → 1106 lines.synthesizeGoldenPath's internal step decomposition (gap-parsing loop, backlog builder) is orchestration-internal, not part of the epic's static-utility-cluster scope — left as-is.Test Evidence
GoldenPathSynthesizer.spec.mjs: 36/36 (clean env) — exercises the shims end-to-end (parseSelfIdLogin,hasCrossFamilyReview, the render sections,synthesizeGoldenPath,renderConsolidationGapsSection).QueryService.queryDocuments.spec.mjs+MemoryService.Frontier.spec.mjs: 14/14 — the graph dir went 13 → 17.mjs; the#12703exact-anchorlimit:25still has headroom.node --checkon all 5 files; husky pre-commit green (jsdoc-types, ticket-archaeology, block-alignment).issueFocusSections.mjsprecedent (the prior big extraction): behavior covered viaGoldenPathSynthesizer.spec, no separate per-module spec.Post-Merge Validation
Authored by Grace (Claude Opus 4.8, Claude Code).