Repository navigation
Expand file tree
/
Copy pathgraph-large.yaml
More file actions
148 lines (132 loc) · 3.46 KB
/
Copy pathgraph-large.yaml
File metadata and controls
148 lines (132 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# The pipeline for changes too large for one pass, on codebases too large to
# read whole.
#
# context map the repository and rank files against the goal (no model)
# plan break the goal into small steps, as plan.md with a json list
# approval a person approves the steps, and may edit or remove them
# subtasks each step runs graph-subtask.yaml: code, affected tests, fix
# test the full suite, once, over the whole change
# review the quality gate over the changed files only
# advise a second opinion on the whole diff
#
# The inner loop is fast because it runs only the tests a step can affect; the
# outer checks are exhaustive because they run once. On a legacy codebase the
# gate judges the change rather than years of existing debt.
version: 1
entry: context
defaults:
agent: claude_code
model: claude-opus-5
timeout_seconds: 900
limits:
fix:
max_attempts: 3
on_exceeded: give_up
nodes:
context:
impl: aeg.nodes.context
kind: deterministic
config:
max_relevant_files: 25
max_chars: 12000
# The decomposing planner, under the name the approval gate and the output
# nodes already read from.
plan:
impl: aeg.nodes.decompose
kind: agentic
model: claude-sonnet-5
skills: [testing-standards]
tools:
allowed: [Read, Glob, Grep]
disallowed: [Write, Edit, MultiEdit, Bash, WebFetch, WebSearch]
config:
max_subtasks: 8
await_approval:
impl: aeg.nodes.await_approval
kind: deterministic
subtasks:
impl: aeg.nodes.subtasks
kind: orchestration
config:
subtask_graph: graph-subtask.yaml
max_subtasks: 8
test:
impl: aeg.nodes.test
kind: deterministic
timeout_seconds: 1800
config:
command: ["{python}", "-m", "pytest", "-q"]
coverage_report: coverage.xml
review:
impl: aeg.nodes.review_sonar_cli
kind: deterministic
timeout_seconds: 1800
config:
scanner: tools/sonar-scanner-7.3.0.5189-windows-x64/bin/sonar-scanner.bat
host_url: http://localhost:9000
token_file: infra/.sonar-token
project_key: "aeg-{run_id}"
qualitygate_timeout: 600
scope: changed
advise:
impl: aeg.nodes.advise
kind: agentic
model: claude-sonnet-5
skills: [security-review]
timeout_seconds: 600
tools:
allowed: [Read, Glob, Grep]
disallowed: [Write, Edit, MultiEdit, Bash, WebFetch, WebSearch]
config:
advisory_only: true
max_findings: 20
# Between a failed test run and fix: rerun the failures once. Flaky tests
# move on, broken environments park the run, real bugs go to fix.
diagnose:
impl: aeg.nodes.diagnose
kind: deterministic
timeout_seconds: 600
fix:
impl: aeg.nodes.fix
kind: agentic
skills: [python-conventions, testing-standards]
tools:
allowed: [Read, Write, Edit, MultiEdit, Glob, Grep]
disallowed: [WebFetch, WebSearch]
write:
impl: aeg.nodes.write
kind: deterministic
give_up:
impl: aeg.nodes.give_up
kind: deterministic
END:
kind: terminal
edges:
context:
done: plan
plan:
done: await_approval
await_approval:
approved: subtasks
rejected: give_up
subtasks:
done: test
fail: give_up
test:
pass: review
fail: diagnose
diagnose:
pass: review
fail: fix
review:
pass: advise
fail: fix
advise:
pass: write
fail: fix
fix:
done: test
write:
done: END
give_up:
done: END