fix(evaluate): set domain + auto_merge on all 5 approval paths
Some checks are pending
CI / lint-and-test (push) Waiting to run

Musings bypass and batch both_approve set status='approved' without
domain or auto_merge. Merge gate requires domain IS NOT NULL and
prefix match OR auto_merge=1. Result: agent PRs deadlocked for 20+ hours.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
m3taversal 2026-04-15 17:03:42 +01:00
parent 10b4e27c28
commit ad7ee0831e

View file

@ -546,7 +546,8 @@ async def evaluate_pr(conn, pr_number: int, tier: str = None) -> dict:
)
conn.execute(
"""UPDATE prs SET status = 'approved', leo_verdict = 'skipped',
domain_verdict = 'skipped' WHERE number = ?""",
domain_verdict = 'skipped', domain = COALESCE(domain, 'cross-domain'),
auto_merge = 1 WHERE number = ?""",
(pr_number,),
)
return {"pr": pr_number, "auto_approved": True, "reason": "musings_only"}
@ -792,8 +793,8 @@ async def evaluate_pr(conn, pr_number: int, tier: str = None) -> dict:
is_agent_pr = not branch_name.startswith(PIPELINE_OWNED_PREFIXES)
conn.execute(
"UPDATE prs SET status = 'approved', auto_merge = ? WHERE number = ?",
(1 if is_agent_pr else 0, pr_number),
"UPDATE prs SET status = 'approved', domain = COALESCE(domain, ?), auto_merge = ? WHERE number = ?",
(domain, 1 if is_agent_pr else 0, pr_number),
)
db.audit(
conn,
@ -1084,7 +1085,8 @@ async def _run_batch_domain_eval(
)
conn.execute(
"UPDATE prs SET status = 'approved', leo_verdict = 'skipped', "
"domain_verdict = 'skipped' WHERE number = ?",
"domain_verdict = 'skipped', domain = COALESCE(domain, 'cross-domain'), "
"auto_merge = 1 WHERE number = ?",
(pr_num,),
)
succeeded += 1
@ -1289,7 +1291,7 @@ async def _run_batch_domain_eval(
pr_info = await forgejo_api("GET", repo_path(f"pulls/{pr_num}"))
pr_author = pr_info.get("user", {}).get("login", "") if pr_info else ""
await _post_formal_approvals(pr_num, pr_author)
conn.execute("UPDATE prs SET status = 'approved' WHERE number = ?", (pr_num,))
conn.execute("UPDATE prs SET status = 'approved', domain = COALESCE(domain, ?), auto_merge = 1 WHERE number = ?", (domain or "cross-domain", pr_num,))
db.audit(
conn, "evaluate", "approved",
json.dumps({"pr": pr_num, "tier": "STANDARD", "domain": domain,