Goal
After every cell’s findings are accumulated, a final synthesis phase pulls back over the ENTIRE finding set and, when the findings combine into one architectural change, escalates a /create-plan PROPOSAL (never auto-spawn); otherwise findings stay additive.
Implementation Sketch
Hybrid (user-approved): (1) a mechanical pre-cluster helper groups accumulated findings by shared canonical-home/SSOT target + category; (2) ONE synthesis sub-agent reads the full finding set + the clusters and emits a structured verdict {architectural_change: bool, unifying_change, member_finding_ids}; (3) disposition is PROPOSE-not-auto: on a yes-verdict it surfaces a /create-plan proposal (raw context) or records an additive escalation note (plan/bug context). Distinct from the existing shallow per-module Phase-5b cluster heuristic.
Spec References
phase-5-present.md §5b (existing per-module cluster line this supersedes); .claude/rules/routing.md §1.0 (/create-plan is the sole plan-creation path — escalation PROPOSES, user gates); skill-control-contract.md §Tool Contract.
Work Items
- Mechanical pre-cluster helper: group accumulated findings by shared canonical-home/SSOT target + category (runtime, deterministic).
- Synthesis phase: script composes the prompt; ONE sub-agent reads the full finding set + clusters + emits a structured verdict {architectural_change, unifying_change, member_finding_ids} per a schema.
- Disposition (propose-not-auto): yes-verdict -> /create-plan PROPOSAL (raw) or additive escalation note (plan/bug); never auto-spawn a plan.
- pytest: a seeded multi-finding shared-target cluster yields a yes-verdict + a /create-plan proposal payload; a no-cluster set yields no escalation.
Items
- Insert the synthesis phase into the dispatch state machine: register a new phase between emit_findings and summary in state.PHASES (currently (scope, analyze, emit_findings, summary) at state.py:31-36, with NO synthesis phase) and wire dispatch.compose_next_action so synthesis runs AFTER all cells’ findings are accumulated (post-emit, pre-summary) — guaranteeing the synthesis sub-agent sees the COMPLETE accumulated_findings set. Pins the runs-after-full-accumulation correctness property with a dispatch-ordering test (synthesis never dispatched while file_index < len(scope_files); summary never reached before synthesis).
Fresh intel (regenerated)
{ “schema_version”: 1, “target”: { “kind”: “plan-section”, “ref”: “impl-hygiene-review-run-lifecycle/s-57001ffe” }, “generated_at”: “2026-06-21T17:04:40.559924+00:00”, “graph_state”: { “head_sha”: “45796766”, “last_code_import_at”: “2026-06-21T16:53:47.886Z”, “embedding_stale”: false, “insights_stale”: false, “cpg_stale”: false }, “surfaces”: {}, “summary”: “intel-package[plan-section:impl-hygiene-review-run-lifecycle/s-57001ffe] agent-authored dossier”, “degraded”: false, “dossier”: { “objective_symbols”: [], “tiers”: {}, “agent_authored”: true, “difficulty”: { “class”: “routine”, “research_online”: false, “research_mode”: “auto”, “signals”: [], “plan_dir”: “/home/eric/projects/ori_lang/plans/impl-hygiene-review-run-lifecycle” } } }
(full dossier: architectural-synthesis—s-57001ffe.intel.json)