diff --git a/lib/substantive_fixer.py b/lib/substantive_fixer.py index ebdf6a3..4772944 100644 --- a/lib/substantive_fixer.py +++ b/lib/substantive_fixer.py @@ -645,6 +645,10 @@ async def verdict_deadlock_reaper_cycle(conn) -> int: return 0 # Two stuck-verdict shapes: leo:rc+domain:approve, leo:skipped+domain:rc. + # Branch allowlist scopes the reaper to disposable pipeline-managed branches. + # extract/, reweave/, fix/ are content the pipeline created and can recreate; + # agent branches (theseus/, vida/, epimetheus/, etc.) are WIP feature work + # and must not be reaped — owners review their own PRs on their own cadence. rows = conn.execute( """SELECT number, branch, eval_issues, leo_verdict, domain_verdict, last_attempt, fix_attempts @@ -653,6 +657,7 @@ async def verdict_deadlock_reaper_cycle(conn) -> int: AND tier0_pass = 1 AND last_attempt IS NOT NULL AND last_attempt < datetime('now', ? || ' hours') + AND (branch LIKE 'extract/%' OR branch LIKE 'reweave/%' OR branch LIKE 'fix/%') AND ( (leo_verdict = 'request_changes' AND domain_verdict = 'approve') OR (leo_verdict = 'skipped' AND domain_verdict = 'request_changes')