0%

Section 04: /continue-roadmap + /fix-next-bug Queue Filter

Goal: Eliminate the false-positive critical redirect — /continue-roadmap and /fix-next-bug no longer treat subsumed bugs as standalone work items.

Success Criteria: see frontmatter.

Implementation Sketch

The double-tracking pain point lives here. Today /continue-roadmap Step 1.5 enumerates bugs in the active section’s subsystem and redirects to /fix-bug if any are blocker/critical/high. Subsumed bugs trigger this redirect spuriously — the plan IS the fix; redirecting to /fix-bug is duplicate work.

The fix is mechanically simple: filter status: subsumed from queue inputs. The interesting design question is the visibility tradeoff — subsumed bugs SHOULD still be visible somewhere (otherwise the user loses track of what the plan is dissolving), just not in the active queue.

Two surfaces:

  • /continue-roadmap Step 1.5 relevant-bugs gate: filter applied. Subsumed bugs do not block roadmap continuation.
  • Owning plan’s quick-reference: preserved. The plan’s 00-overview.md §Mission Success Criteria already lists subsumes: claims; intel-query.sh plan-status <plan> includes them; this surface continues to show them.

Implementation Items

  • §04.1 Modify .claude/skills/continue-roadmap/roadmap_scan.py (the canonical relevant-bugs gate per ask-user-question.md consumer list) to filter status: subsumed from the bug-enumeration step. Add a one-line filter in the bug-loading phase; preserve the existing severity/blast-radius logic for non-subsumed bugs.
  • §04.1 Update .claude/skills/continue-roadmap/SKILL.md Step 1.5 prose to document the filter (one-line cite to routing.md §2.X + 00-overview.md §Mission of this plan).
  • §04.2 Modify .claude/skills/fix-next-bug/SKILL.md Step 2 (queue selection). Add status: subsumed to the existing skip set (alongside closed, in-progress if applicable). Verify severity ordering still produces correct next-bug for non-subsumed bugs.
  • §04.3 Extend known-state.json schema (per state-discipline.md §6) with a subsumed_bug_count: int field tracked alongside test_dispositions. Populate via state.sh refresh (full or --dispositions-only modes both touch bug-tracker enumeration). /continue-roadmap Step 1.5 reads subsumed_bug_count from cache for fast gate evaluation.
  • §04.4 Verify visibility — intel-query.sh plan-status <plan-with-subsumes> lists the subsumes: array prominently in human/json output; the plan’s 00-overview.md subsumes: field is rendered by plan-status. If gaps exist, file follow-up bugs (do NOT defer in this section).

Test Strategy

Test matrix for queue-filter behavior:

Bug status/continue-roadmap Step 1.5/fix-next-bug Step 2Owning plan quick-ref
openSurfaces (existing behavior)Surfaces (existing behavior)N/A
in-progressSurfaces (existing behavior)Skipped (existing behavior)N/A
subsumedFILTERED (new)FILTERED (new)Surfaces (preserved)
closedSkipped (existing behavior)Skipped (existing behavior)Filtered (existing)

Semantic pins:

  • Positive: bug status: subsumed is excluded from /continue-roadmap Step 1.5 redirect AND from /fix-next-bug Step 2 queue. Reverting the filter causes the redirect / queue to surface the subsumed bug spuriously.
  • Negative: bug status: open (or any non-subsumed status) is NOT affected by the filter. Test that the filter doesn’t accidentally strip non-subsumed work.
  • Visibility-preserved positive: bug status: subsumed IS visible via intel-query.sh plan-status <owning-plan>. Test that visibility doesn’t regress.

Intelligence Reconnaissance

(2026-05-09) Section modifies .claude/skills/continue-roadmap/roadmap_scan.py + .claude/skills/fix-next-bug/SKILL.md + scripts/state.sh + extends known-state.json schema. roadmap_scan.py and state.sh are scripts (scripts/) — graph-indexed Python/Bash. The filter is a one-line predicate addition (status != "subsumed") in the existing bug-loading phase; no new call sites or symbol invocations beyond the existing bug-enumeration code path. Per compose-intel-summary.md, recording graph unavailability for the skill-body edits; the script-file changes (roadmap_scan.py, state.sh) are scoped narrowly enough that targeted symbol queries (callers / callees of the bug-enumeration helpers) provide no actionable additional context beyond direct Read. Cross-references resolved by direct Read: roadmap_scan.py (existing relevant-bugs gate verified per ask-user-question.md consumer list), state.sh (refresh modes verified per state-discipline.md §6), known-state.json schema v2 verified.

Cross-References

  • §01 — routing rule defining the subsumed status.
  • §02 — classifier that produces status: subsumed bug states.
  • §05 — schema field this filter reads.
  • .claude/rules/state-discipline.md §6 — known-state.json cache discipline.
  • /continue-roadmap SKILL.md, /fix-next-bug SKILL.md — host skills.
  • scripts/state.sh — refresh script extended with subsumed_bug_count.

04.1 Add status: subsumed filter to /continue-roadmap Step 1.5

  • Read .claude/skills/continue-roadmap/roadmap_scan.py to locate the bug-loading function in the relevant-bugs gate (search for the existing status filter — likely at the bug-enumeration site that already excludes closed).
  • Pre-flight check: assert §05 schema ships subsumed in OVERVIEW_STATUSES + FIX_STATUSES (grep "\"subsumed\"" scripts/plan_corpus/schemas.py). Abort §04 if not — §05 dependency unmet.
  • Implement filter: extend the existing skip-set predicate to also skip status == "subsumed". Document the skip per routing.md §2.X rationale (subsumption is consequence-of-completion; redirecting from roadmap to /fix-bug on a subsumed bug is duplicative work).
  • Update .claude/skills/continue-roadmap/SKILL.md Step 1.5 prose: add one bullet documenting the filter. Cite routing.md §2.X + plans/plan-bug-subsumption/00-overview.md §Mission.
  • Test cases (matrix dimension table per Test Strategy section above): each row of the table verified by an end-to-end dry-run of /continue-roadmap on a synthetic plan-and-bug fixture.

04.2 Add status: subsumed filter to /fix-next-bug Step 2

  • Read .claude/skills/fix-next-bug/SKILL.md Step 2 (queue selection) — locate the existing skip set (likely includes closed, possibly in-progress).
  • Add subsumed to the skip set. Document the addition with same one-line rationale + routing.md §2.X cite.
  • Verify severity ordering still produces correct next-bug for non-subsumed bugs (regression test): synthetic fixture with mixed-status bugs of varying severities; assert correct next-bug picked from non-subsumed members only.

04.3 Add subsumed_bug_count cache field to known-state.json + state.sh

  • Extend compiler_repo/.claude/state/known-state.json schema (per state-discipline.md §6) with subsumed_bug_count: int field, peer to existing test_dispositions.{total,untracked,entries[]} block.
  • Extend scripts/state.sh refresh (full mode + --dispositions-only mode) to enumerate subsumed bugs (grep -l 'status: \"subsumed\"' bug-tracker/plans/*/00-overview.md | wc -l) and write the count to known-state.json.
  • Update /continue-roadmap Step 1.5 to read subsumed_bug_count from the cache rather than re-grepping (reads-from-cache is the canonical pattern per state-discipline.md §6).
  • Document the cache field in state-discipline.md §6 (or its consumer table) — adds one row to the existing table.
  • Schema regression: python -m scripts.plan_corpus check exit 0 after the schema extension; consumer pin advance per /sync-from-orilang Step 6.5.

04.4 Verify subsumed bugs still surface in owning plan’s quick-reference

  • Verify scripts/intel-query.sh plan-status <plan-with-subsumes> lists the subsumes: array prominently in human + JSON output. If the existing plan-status rendering does NOT surface subsumes, that’s a §06 implementation gap — file as a §06 follow-up (do NOT defer in this section per feedback_no_nice_to_have_deferrals.md).
  • Verify the plan’s 00-overview.md subsumes: block renders in any human-readable plan-summary tool (e.g., scripts/plan-complete.py --check-only).
  • Add a regression test asserting visibility: synthetic plan with subsumes: [BUG-XX-NNN], run intel-query.sh plan-status, assert BUG-XX-NNN appears in output.
  • If §06 is not yet shipped at §04 close time, the plan-status assertion remains a future check — gate §04 close on a temporary hand-rendered visibility check (grep -A 5 "subsumes:" plans/<plan>/00-overview.md) until §06 lands.

04.R Third Party Review Findings

  • (no findings yet — populated post-TPR by Step 6 /tpr-review round)

04.N Completion Checklist

  • All §04.1–§04.4 implementation items checked.
  • Test matrix from Test Strategy section all passing (end-to-end dry-runs of /continue-roadmap and /fix-next-bug against synthetic fixtures).
  • python3 scripts/prose-lint.py .claude/skills/continue-roadmap/SKILL.md .claude/skills/fix-next-bug/SKILL.md exit 0.
  • python -m scripts.plan_corpus check exit 0 (no schema regressions from the cache field addition).
  • grep -nE '\(placeholder' plans/plan-bug-subsumption/section-04-queue-filter.md returns no hits.
  • grep -nE '^- \[ \]' plans/plan-bug-subsumption/section-04-queue-filter.md — every remaining unchecked carries a concrete artifact pointer.
  • §05 schema dependency verified: grep "\"subsumed\"" scripts/plan_corpus/schemas.py returns ≥2 hits (in OVERVIEW_STATUSES + FIX_STATUSES).
  • scripts/state.sh refresh --dispositions-only produces subsumed_bug_count in the resulting known-state.json.
  • Section frontmatter status: flipped not-startedcomplete; 00-overview.md mission criteria checkbox for §04 flipped [x]; index.md row updated.
  • (NOT-APPLICABLE:) compiler_repo/test-all.sh — skill-infra-docs plan; no compiler crate touched.
  • (NOT-APPLICABLE:) /impl-hygiene-review — skill-infra-docs plan, no compiler Rust source touched.