Fruitless-section convergence guard
Goal
Bound the new path so it converges. Reusing the digest-keyed no-op sentinel, count fruitless auto-authored sections (closed without moving the gate_metric); after K, fall through to mission_reground. This forecloses the infinite-section-growth hazard while preserving grind-forever forward motion below K.
Implementation sketch
Counter derived from ledger cycles attributed to each auto-authored section (no new state binding — reuse the no_op sentinel + corpus_digest). K is a named constant in terminal_exhaustion.py. At/above K, forward_decomposition_escalation_or_none returns None -> route falls through to mission_reground. A fruitful section resets the counter.
Spec references
scripts/ledger_evolution_runtime/state.py:{read_no_op_record,write_no_op_record,corpus_digest}; scripts/plan_orchestrator/route_walk.py:mission_reground_route_or_none (fall-through target); learning-ledger.md §11.4 (supersession gate).
Work Items
-
Define the fruitless-section counter: an auto-authored forward section is
fruitlesswhen it closed WITHOUT movinggate_metrictoward its direction (read from the ledger cycles attributed to that section). Reuse the digest-keyedno_opsentinel +corpus_digestmachinery (ledger_evolution_runtime.state); add NO new state binding. -
Implement the convergence guard: after K consecutive fruitless auto-authored sections (K a named constant in
terminal_exhaustion.py),forward_decomposition_escalation_or_nonereturns None so the route FALLS THROUGH to the existingmission_reground— bounding section growth (the infinite-growth hazard). Below K, escalation continues. -
Pytest the guard: a fixture with K fruitless auto-authored sections routes to
mission_reground(NOT a (K+1)th new section); a fixture below K continues escalating; a fruitful section (moved the metric) resets the counter.
Fresh intel (regenerated)
{ “schema_version”: 1, “target”: { “kind”: “plan-section”, “ref”: “grind-exhaustion-forward-escalation/s-06091a1e” }, “generated_at”: “2026-06-19T18:17:49.122249+00:00”, “graph_state”: { “head_sha”: “dbb10f0e”, “last_code_import_at”: “2026-06-19T17:39:41.692Z”, “embedding_stale”: false, “insights_stale”: false, “cpg_stale”: false }, “surfaces”: {}, “summary”: “intel-package[plan-section:grind-exhaustion-forward-escalation/s-06091a1e] 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/grind-exhaustion-forward-escalation” } } }
(full dossier: fruitless-section-convergence-guard—s-06091a1e.intel.json)