Tooling-cli bug fold — inspect, disposition, OBE
Goal
- Fold every open
subsystem: tooling-clibug-tracker entry into this plan for inspection (149 at 2026-07-13 inspection; live snapshot at section entry). - Record exactly one disposition per bug:
obe/absorb/release. - Feed workflow-population defects into the scenario oracle as behavior the new engine must not reproduce.
Execution rules
- Use tracker APIs for the planned fold. Route newly discovered bugs and tooling friction through the normal
routing.md §2andtooling-first.md §0workflows.
Implementation sketch
- Snapshot the open set at section entry via
query_open_bugsfiltered tosubsystem: tooling-cli; the snapshot is the coverage denominator. - Inspect each bug against
spec/workflow-state-machines.md+ the section roster; assign exactly one disposition:obe— the engine supersedes the bug’s subject system; first ensure concrete absorbing work via/create-plan --inline, then callreclassify_obe(bug_id, evidence)with that section/spec anchor cited.absorb— still-valid defect whose cure IS this plan’s work; stamp aSUBSUMED-BY: plans/workflow-engine-rework (<section-slug>)declaration viaset_notepercontent/decisions/04-virtual-batch-supersession.mdpreserved-boundaries; bug stays open + owned.release— valid but orthogonal to the workflow engine (ori_fmt formatter defects,ori testrunner defects, test-all runtime internals, intel_repo test isolation); stampmark_verified_valid; tracker entry otherwise untouched.
- Verify
/fix-next-bugqueue selection excludes SUBSUMED-BY-stamped bugs; extend the canonical selector inline when it does not. - Emit machine-readable
content/bug-fold-manifest.json: one row per snapshot bug with{bug_id, disposition, evidence, section_ref, scenario_ids[]}. - Append defect-scenario rows for workflow-population bugs to
content/scenario-inventory.json; re-runverify_scenario_inventory. - Implement
verify_bug_fold_manifest: reject snapshot bugs missing from the manifest, unknown dispositions,oberows without evidence + section cite,absorbrows without a stamped note,releaserows without a verified-valid stamp.
Spec references
routing.md §2+state-discipline.md §4(bug routing and tracker API ownership).plans/workflow-engine-rework/spec/workflow-state-machines.mdsec 0.1 (scenario oracle; target-semantic scenarios), sec 9 (bug flows share the engine).content/decisions/04-virtual-batch-supersession.md(SUBSUMED-BY / coverage declarations as persistent ownership authority).
Test strategy / acceptance
Acceptance: verify_bug_fold_manifest proves every snapshot bug carries exactly one disposition with required evidence/stamps; obe closes appear in closed-bugs.json; absorbed bugs are excluded from /fix-next-bug selection; verify_scenario_inventory re-passes after the defect-scenario append.
Work Items
- Snapshot the open tooling-cli bug set via query_open_bugs and emit the content/bug-fold-manifest.json skeleton
- Implement verify_bug_fold_manifest with coverage, uniqueness, evidence, and stamp validation
- Extend
superseded_by_in_progress_plan_reason(scripts/plan_corpus/bug_markers.py), the exclusion predicatebug_queue_scan.scancalls, to also recognize theSUBSUMED-BY:marker thatset_notestamps (alongside the existingSuperseded by:marker) as one reconciled matcher family reading the note field — never a second, independent regex. Verify the fix through_select_dispatch(scripts/plan_orchestrator/fix_next_bug.py), the orchestrator that actually drives/fix-next-bugdispatch and consumesbug_queue_scan.scan. Do NOT extendscripts/fix_next_bug_runtime/queue.py:select_next_bug—decisions/04-virtual-batch-supersession.mdmarks it retire-after-canonical-selector-parity and it has no exclusion logic at all today. - Triage every snapshot bug to exactly one disposition (obe / absorb / release) with per-bug evidence and a superseding-or-owning section cite
- Execute dispositions via tracker APIs only: reclassify_obe closes, SUBSUMED-BY set_note stamps, mark_verified_valid release stamps (never /add-bug)
- Append workflow-defect scenario rows to content/scenario-inventory.json and re-run verify_scenario_inventory
Fresh intel (regenerated)
This section is NOT a mechanical “loop the bugs and stamp a disposition” task. The graph + code reads place it on top of a live two-part selector defect the section’s own work item (w-7c4fc37d) exists to close, and decision 04-virtual-batch-supersession has already ruled on WHERE the fix lands:
-
The
absorbdisposition writes a marker the canonical/fix-next-bugselector does not read. The section body stamps absorbed bugs withSUBSUMED-BY: plans/workflow-engine-rework (<section-slug>)viaset_note. The canonical queue exclusion path —bug_queue_scan.scan(scripts/plan_orchestrator/bug_queue_scan.py:213) →superseded_by_in_progress_plan_reason(scripts/plan_corpus/bug_markers.py:335) →extract_supersede_target→BUG_SUPERSEDED_TARGET_RE— matches ONLY theSuperseded by: <plan>marker vocabulary. A bug stampedSUBSUMED-BY:is therefore NOT excluded from/fix-next-bugselection today.[JOIN]the acceptance criterion (“absorbed bugs are excluded from/fix-next-bugselection”) against the code reads: the section CANNOT pass acceptance without reconciling the two marker vocabularies. This is the section’s central verification defect, not a side note. -
There are THREE selectors, and
w-7c4fc37d’s extension must NOT land in two of them.bug_queue_scan.scan(canonical),scripts/plan_orchestrator/fix_next_bug.py:_select_dispatch(orchestrator, consumes the scan), andscripts/fix_next_bug_runtime/queue.py:select_next_bug(a parallel API-wiring stub that filters status/severity/subsystem ONLY, with zero note/exclusion logic). Decision 04 explicitly rules:bug_queue_scan.pyselector ownership → “port to one canonical selector component”;queue.pyparallel selector → “retire after canonical selector parity.” Extending thequeue.pystub re-fragments a duplication decision 04 already committed to collapsing.
Decisions this package forces before any work item is executed:
- Reconcile the marker vocabulary FIRST. Either the
absorbstamp writes the marker the selector already reads (Superseded by:), ORsuperseded_by_in_progress_plan_reasonis extended to also honorSUBSUMED-BY:— but there must be ONE marker-string SSOT, not a writer/reader disagreement (DESIGN:connascence-nonlocal+LEAK:scattered-knowledge; §3H). - Land the selector extension in
bug_queue_scan.scan(or its ported successor), NEVERqueue.py:select_next_bug. The stub is decision-04-slated-for-retirement; touching it is the wrong surface (constrained; §9). obecloses route throughreclassify_obeonly (scripts/plan_corpus/bug_tracker/api.py:273) — the shared OBE-close primitive already consumed by review-bugs / fix-bug / triage-bugs. Never hand-editopen-bugs.json/closed-bugs.json; never touchflip_bug_statusinternals (constrained; §9).verify_bug_fold_manifestandverify_scenario_inventorycoverage denominators must fail-closed. They are validators over a ~152-bug snapshot; ship positive AND negative pins BEFORE trusting them (INVERTED-TDDrisk; §3H).- Normal routing applies during this section: route newly discovered bugs through
/add-bugand tooling friction through/improve-tooling; use/fix-bugor/fix-next-bugaccording torouting.md §2.
["select_next_bug", "flip_bug_status"]
DIG DEEPER
sed -n '1,34p' plans/workflow-engine-rework/content/tooling-cli-bug-fold-inspect-disposition-obe--s-9ee1f68b.md
sed -n '11,27p' plans/workflow-engine-rework/content/decisions/04-virtual-batch-supersession.md
(full dossier: tooling-cli-bug-fold-inspect-disposition-obe—s-9ee1f68b.intel.md)