100%

03 — candidate-freeze

Goal

Freeze a bounded, ranked candidate list — one scan, write-once, NO infinite re-scan-and-grow. Rank by accretion (distinct work-items/bugs touching the symbol, via symbol-plans) × clone-cluster cohesion × centrality. The judgment + execution stages walk THIS frozen list; they never re-discover it (the infinite-regress lock).

Implementation Sketch

candidates.py: dedup the §02 signals into unique collapse candidates, rank by symbol-plans accretion count × cohesion × hotspot/pagerank, write the frozen list once to a scratch artifact. Downstream stages consume the frozen list by path; re-scanning is banned.

Spec References

scripts/intel-query.sh symbol-plans (accretion / wide-net count), insights (hotspot_score/pagerank); .claude/rules/context-discipline.md (scratch-path indirection)

Work Items

  • candidates.py: dedup §02 signals into unique collapse candidates
  • Rank by symbol-plans accretion × cohesion × centrality
  • Write the frozen list ONCE to scratch; downstream consumes by path
  • Test: re-running freeze on the same surface yields the same bounded list (no growth)