From d09248361bfc77b0c985dc9a9b7c2e4c647acdfb Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 23 Jun 2026 01:34:08 -0600 Subject: [PATCH] fix(phase-21): pool excludes ALL self-MATCH-but-gate-rejected churners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit plumbing_blocked() scanned backlog.load_best() (one record/fn), which could return an early closeness>0 near-miss that MASKED a later 'none — MATCH' self-match-gate-reject record (e.g. a sig_unify-regressed self-match logged at closeness 14). Result: fns like func_80161CD0 self-MATCHed + gate-rejected every wave yet kept being re-served. Fix: scan ALL raw .run/backlog.jsonl records. Now 83 plumbing-blocked fns are correctly skipped from wave selection (they're recovery-tooling / hand-finish fuel; re-drafting just reproduces the same gate-rejected body). Byte-gate unaffected. --- tools/wave_targets.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/wave_targets.py b/tools/wave_targets.py index 7e34b1c8e..fa693d371 100644 --- a/tools/wave_targets.py +++ b/tools/wave_targets.py @@ -75,7 +75,19 @@ def plumbing_blocked(): ('none — MATCH …'). The latter is needed because sig_unify can REGRESS a self-MATCH draft to close>0 post-transform (Phase-19), so it dodges the ==0 filter though the body is byte-correct & gate-blocked.""" blocked = set() - for r in backlog.load_best(): + p = os.path.join(REPO, ".run/backlog.jsonl") + if not os.path.exists(p): + return blocked + # Scan ALL raw records, not backlog.load_best(): load_best returns one record/fn and can + # return an early closeness>0 near-miss that MASKS a later 'none — MATCH' self-match-gate-reject + # record (both can share a closeness, e.g. a sig_unify-regressed self-match logged at close 14). + # A fn that EVER self-matched-but-gate-rejected is plumbing-blocked: re-drafting reproduces the + # same gate-rejected body -> skip it from waves (it's recovery-tooling / hand-finish fuel). + for line in open(p): + line = line.strip() + if not line: + continue + r = json.loads(line) if r.get("status") != "near" or not r.get("name"): continue ws = (r.get("where_stuck") or "").strip().lower()