feat: further increased budgets for adversary and code reviewer agents

This commit is contained in:
Dark-Alex-17 committed 2026-09-15 23:09:59 -06:00
1 parent dca9b1553e
commit fcc0049ab2
4 files changed
+26 -4

No files matched your search

+6 -1
View File
@@ -52,6 +52,7 @@ settings:
initial_state: initial_state:
project_dir_in: '' project_dir_in: ''
parse_retries: 0
criteria: [] criteria: []
diff_spec: auto diff_spec: auto
plan_notes: '' plan_notes: ''
@@ -88,6 +89,10 @@ nodes:
Split compound criteria ("A and B") into separate entries when they are Split compound criteria ("A and B") into separate entries when they are
independently verifiable. When the caller supplied NO plan/criteria at independently verifiable. When the caller supplied NO plan/criteria at
all, emit an empty array — downstream fails closed. all, emit an empty array — downstream fails closed.
An empty array is ONLY correct when the prompt genuinely contains no
plan/criteria section — when the prompt carries one (a "Plan /
acceptance criteria:" or "PLAN —" block), returning zero criteria is
an extraction FAILURE, never a valid result.
The caller's explicit enumeration is AUTHORITATIVE: when the caller The caller's explicit enumeration is AUTHORITATIVE: when the caller
declares "these N are the (only) criteria" or supplies a numbered declares "these N are the (only) criteria" or supplies a numbered
criteria list, extract EXACTLY those N — never add entries they did criteria list, extract EXACTLY those N — never add entries they did
@@ -348,7 +353,7 @@ nodes:
observations: observations:
type: string type: string
required: [extra_complaints, observations] required: [extra_complaints, observations]
max_iterations: 30 max_iterations: 45
max_attempts: 2 max_attempts: 2
state_updates: state_updates:
holistic_failure: '{{output}}' holistic_failure: '{{output}}'
@@ -8,6 +8,7 @@ review proceeds fail-closed rather than crashing.
""" """
import json import json
import re
import os import os
import subprocess import subprocess
@@ -22,6 +23,22 @@ def load_state():
state = load_state() state = load_state()
# Zero criteria from a prompt that visibly carries a plan is an extraction
# failure (observed non-deterministically live), not a fail-closed no-plan
# run — re-run the parse ONCE before the verdict fails closed on it.
_crit = state.get("criteria") or []
_prompt = state.get("initial_prompt") or ""
if not _crit and isinstance(_prompt, str) and re.search(
r"acceptance criteria|PLAN\s*—|Plan / acceptance", _prompt, re.I
):
try:
_pr = int(state.get("parse_retries") or 0)
except (TypeError, ValueError):
_pr = 0
if _pr < 1:
print(json.dumps({"_next": "parse", "parse_retries": _pr + 1}))
raise SystemExit(0)
proj = os.path.expanduser( proj = os.path.expanduser(
(state.get("project_dir_in") or "").strip() or state.get("project_dir") or "." (state.get("project_dir_in") or "").strip() or state.get("project_dir") or "."
) )
+2 -2
View File
@@ -147,7 +147,7 @@ nodes:
extra_context: extra_context:
type: string type: string
required: [diff_spec, intent, rigor_in, surfaces_in, project_dir_in, extra_context] required: [diff_spec, intent, rigor_in, surfaces_in, project_dir_in, extra_context]
max_iterations: 3 max_iterations: 6
max_attempts: 2 max_attempts: 2
state_updates: state_updates:
parse_failure: '{{output}}' parse_failure: '{{output}}'
@@ -228,7 +228,7 @@ nodes:
type: string type: string
required: [domain, files] required: [domain, files]
required: [groups] required: [groups]
max_iterations: 3 max_iterations: 6
max_attempts: 2 max_attempts: 2
state_updates: state_updates:
refine_failure: '{{output}}' refine_failure: '{{output}}'
+1 -1
View File
@@ -11545,7 +11545,7 @@ mod tests {
let NodeType::Llm(holistic) = &holistic.node_type else { let NodeType::Llm(holistic) = &holistic.node_type else {
panic!("holistic must be an llm node"); panic!("holistic must be an llm node");
}; };
assert_eq!(holistic.max_iterations, 30); assert_eq!(holistic.max_iterations, 45);
} }
const BUNDLED_GRAPHS: [&str; 6] = [ const BUNDLED_GRAPHS: [&str; 6] = [