ralphctl 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/chunk-BAAV7AGY.mjs +11 -0
- package/dist/{cli-FHPDHGP5.mjs → cli-P7D6G5NI.mjs} +12817 -8910
- package/dist/cli.mjs +3 -1
- package/dist/manifest.json +7 -2
- package/dist/prompts/_partials/approval-gate.md +5 -5
- package/dist/prompts/_partials/autonomous-operation.md +7 -1
- package/dist/prompts/_partials/conventions-agents-md.md +8 -20
- package/dist/prompts/_partials/conventions-claude-md.md +12 -15
- package/dist/prompts/_partials/conventions-copilot-instructions.md +6 -10
- package/dist/prompts/_partials/decisions.md +3 -8
- package/dist/prompts/_partials/evaluator-failure-modes.md +8 -5
- package/dist/prompts/_partials/evaluator-grading-rules.md +24 -10
- package/dist/prompts/_partials/evidence-bound.md +2 -2
- package/dist/prompts/_partials/git-boundary.md +7 -0
- package/dist/prompts/_partials/harness-context.md +1 -1
- package/dist/prompts/_partials/question-format.md +7 -0
- package/dist/prompts/_partials/skill-body.md +5 -0
- package/dist/prompts/_partials/task-blocked.md +10 -0
- package/dist/prompts/_partials/task-fields.md +19 -3
- package/dist/prompts/_partials/task-sizing.md +2 -2
- package/dist/prompts/_partials/validation-checklist.md +6 -8
- package/dist/prompts/apply-feedback/template.md +19 -21
- package/dist/prompts/create-pr/template.md +16 -12
- package/dist/prompts/detect-scripts/template.md +4 -6
- package/dist/prompts/detect-skills/template.md +17 -23
- package/dist/prompts/distill-learnings/template.md +10 -8
- package/dist/prompts/evaluate/template.md +72 -93
- package/dist/prompts/evaluate-continuation/template.md +18 -21
- package/dist/prompts/ideate/template.md +34 -44
- package/dist/prompts/implement/template.md +49 -66
- package/dist/prompts/implement-continuation/template.md +21 -20
- package/dist/prompts/implement-crash-resume/template.md +42 -0
- package/dist/prompts/plan/template.md +73 -61
- package/dist/prompts/readiness/template.md +35 -28
- package/dist/prompts/refine/template.md +34 -44
- package/dist/prompts/reproduce/template.md +9 -7
- package/dist/prompts/select-candidate/template.md +17 -10
- package/dist/use-no-color-NEMCAVY3.mjs +9 -0
- package/package.json +1 -1
|
@@ -15,20 +15,17 @@ tooling, and render a verdict.
|
|
|
15
15
|
|
|
16
16
|
{{FLOOR_RUBRIC_SECTION}}
|
|
17
17
|
|
|
18
|
+
{{EXTRA_DIMENSIONS_SECTION}}
|
|
19
|
+
|
|
18
20
|
Grade any task-specific dimensions the planner attached with the same binary pass/fail logic. Every
|
|
19
21
|
PASS requires a concrete observation (file path, line number, function name, tool output, or quoted
|
|
20
22
|
snippet); "looks correct" is not evidence. A terminal `passed` or `failed` verdict MUST grade each
|
|
21
23
|
dimension in the rubric above with a finding — a verdict missing a floor dimension is rejected and
|
|
22
|
-
re-requested.
|
|
24
|
+
re-requested.
|
|
23
25
|
|
|
24
|
-
**Verdict values — `passed`, `failed`, `malformed`:**
|
|
25
|
-
|
|
26
|
-
`failed
|
|
27
|
-
task; it retries the attempt while the budget remains. If you can name a concrete failing criterion,
|
|
28
|
-
the verdict is `failed` with a critique, never `malformed`. A false `passed` ships a bug; a false
|
|
29
|
-
`failed` costs one generator round — but a FAIL still needs a concrete observation (see `<grading_rules>`). When a FAIL stems from criterion ambiguity
|
|
30
|
-
rather than a demonstrable defect, prefix that critique bullet with `[spec-ambiguity]` and state the
|
|
31
|
-
interpretation you graded against.
|
|
26
|
+
**Verdict values — `passed`, `failed`, `malformed`:** `malformed` means "no verdict yet", and the
|
|
27
|
+
blocked-check rules in `<grading_rules>` say when it applies. A false `passed` ships a bug; a false
|
|
28
|
+
`failed` costs one generator round — but a FAIL still needs a concrete observation.
|
|
32
29
|
|
|
33
30
|
{{EVALUATOR_FAILURE_MODES}}
|
|
34
31
|
</role>
|
|
@@ -64,13 +61,13 @@ For the complete history — older than the excerpt above — read `{{PROGRESS_F
|
|
|
64
61
|
|
|
65
62
|
<evaluation_discipline>
|
|
66
63
|
If a `<generator_hints>` block is present, its notes are unverified generator claims — useful as environment
|
|
67
|
-
context (e.g. which server/port to target for e2e), but
|
|
64
|
+
context (e.g. which server/port to target for e2e), but never as evidence. Every `auto` criterion still
|
|
68
65
|
requires your own execution run.
|
|
69
66
|
|
|
70
67
|
Before writing `signals.json`, work through each acceptance criterion and each floor dimension
|
|
71
|
-
explicitly.
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
explicitly. Grade each criterion and floor dimension as you gather its evidence rather than deciding them
|
|
69
|
+
all at the end; the `criteria` array and dimension findings are where each verdict lands, and
|
|
70
|
+
`signals.json` is written last.
|
|
74
71
|
</evaluation_discipline>
|
|
75
72
|
|
|
76
73
|
<protocol>
|
|
@@ -91,7 +88,7 @@ Re-grade this round the same way you graded the first:
|
|
|
91
88
|
path again this round and cite the observed output — a diff read or a green verify script alone
|
|
92
89
|
does not substitute for that observation. A criterion you passed last round can regress; one you
|
|
93
90
|
failed can now be met — verify, do not assume. A criterion you were blocked from executing
|
|
94
|
-
follows the
|
|
91
|
+
follows the blocked-checks rule in `<grading_rules>`. Record each criterion's fresh verdict structurally in the
|
|
95
92
|
`evaluation` signal's `criteria` array — one entry per criterion with its `id`, a `passed` boolean,
|
|
96
93
|
and a one-line `evidence` citation — in addition to the floor `dimensions`, so the harness keeps a
|
|
97
94
|
durable per-criterion checklist across rounds.
|
|
@@ -100,7 +97,7 @@ Re-grade this round the same way you graded the first:
|
|
|
100
97
|
Do not run `git stash`, `git add`, or `git commit` — those are write operations. Do not run setup or
|
|
101
98
|
migration commands — your session is read-only except for `signals.json`. The only file you may write
|
|
102
99
|
is the `signals.json` named in the output contract below — plus, only when a command's output overflows the
|
|
103
|
-
evidence bound above, one overflow log in
|
|
100
|
+
evidence bound above, one overflow log in that same output directory (never inside the repository). You may additionally emit `learning` or `note` signals
|
|
104
101
|
for durable insights discovered while grading; the `evaluation` signal remains exactly one and mandatory.
|
|
105
102
|
</protocol>
|
|
106
103
|
|
|
@@ -133,11 +130,11 @@ no new error/failure-recovery path.
|
|
|
133
130
|
|
|
134
131
|
Verdict: `status: "failed"`, critique:
|
|
135
132
|
|
|
136
|
-
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
133
|
+
- [Correctness · C1] `store.increment()` at `src/middleware/rate-limit.ts:52` now runs twice per request —
|
|
134
|
+
once for the limit check, once while building the `Retry-After` header — doubling the effective
|
|
135
|
+
rate-limit consumption and failing `rate-limit.test.ts:34` (this criterion passed in round 1; the header
|
|
136
|
+
fix introduced the regression); it should compute `Retry-After` from the existing counter value without
|
|
137
|
+
incrementing again; look at `src/middleware/rate-limit.ts:52`.
|
|
141
138
|
|
|
142
139
|
Signals:
|
|
143
140
|
|
|
@@ -189,7 +186,7 @@ Signals:
|
|
|
189
186
|
"evidence": "Retry-After header set from store TTL at src/middleware/rate-limit.ts:60"
|
|
190
187
|
}
|
|
191
188
|
],
|
|
192
|
-
"critique": "[Correctness · C1]
|
|
189
|
+
"critique": "- [Correctness · C1] store.increment() at src/middleware/rate-limit.ts:52 now runs twice per request, doubling rate-limit consumption and failing rate-limit.test.ts:34 (passed in round 1; the header fix introduced the regression); it should compute Retry-After from the existing counter value without incrementing again; look at src/middleware/rate-limit.ts:52.",
|
|
193
190
|
"timestamp": "2026-01-01T00:00:00.000Z"
|
|
194
191
|
}
|
|
195
192
|
]
|
|
@@ -20,7 +20,9 @@ only after the user has approved both phases in sequence.
|
|
|
20
20
|
- Phase 2 approval recorded before writing `signals.json`.
|
|
21
21
|
- `signals.json` contains exactly one `ideated-tickets` signal.
|
|
22
22
|
- The `outputJson` field is a valid JSON string.
|
|
23
|
-
- Parsed `outputJson` has exactly two top-level keys
|
|
23
|
+
- Parsed `outputJson` has exactly two top-level keys — `requirements` (string) and `tasks` (a non-empty
|
|
24
|
+
array) — unless you cannot produce a plan, in which case it is the `{"blocked": "…"}` object described
|
|
25
|
+
in the output contract.
|
|
24
26
|
- Every task's `projectPath` matches one of the absolute paths in `<repositories>`.
|
|
25
27
|
- Every task's `blockedBy` references only `id` values that exist in the same `tasks` array.
|
|
26
28
|
- Every `auto`-check verification criterion includes a `command` field; every `manual`-check criterion
|
|
@@ -39,22 +41,21 @@ only after the user has approved both phases in sequence.
|
|
|
39
41
|
<repositories>
|
|
40
42
|
{{REPOSITORIES}}
|
|
41
43
|
These paths are fixed — repository selection is not part of this session.
|
|
44
|
+
A `verify gate:` line under a repository is a command the harness runs after every task to catch regressions — only when the task's diff touches the noted path, when a path is noted. No such line means none is configured.
|
|
42
45
|
</repositories>
|
|
43
46
|
|
|
44
47
|
<prior_progress>
|
|
45
48
|
{{PRIOR_PROGRESS}}
|
|
46
49
|
</prior_progress>
|
|
47
50
|
|
|
51
|
+
When `<prior_learnings>` lists entries: observed insights are orientation — verify any that bear on
|
|
52
|
+
your plan before relying on one; listed decisions are deliberate prior choices — keep to them, and to
|
|
53
|
+
revisit one say why in the plan. When either conflicts with what the repository shows now, trust the
|
|
54
|
+
repository and record the conflict. Use them as background to scope tasks accurately and to pick
|
|
55
|
+
verification commands that exist in the target repo.
|
|
56
|
+
|
|
48
57
|
<prior_learnings>
|
|
49
58
|
{{PRIOR_LEARNINGS}}
|
|
50
|
-
|
|
51
|
-
If the block above is empty, no learnings from prior sprints have been recorded for this project
|
|
52
|
-
yet. When present, these are facts earlier sprints earned on the repositories listed above — which
|
|
53
|
-
check command a repo actually exposes, where hidden coupling lives, which patterns to mirror. Use
|
|
54
|
-
them as background to scope tasks accurately and to pick verification commands that exist in the
|
|
55
|
-
target repo — they are orientation, not instructions: confirm any that bear on the plan against the
|
|
56
|
-
current code before relying on them. Any architectural decisions listed are deliberate prior
|
|
57
|
-
choices — honour them; do not re-litigate a prior decision without surfacing why.
|
|
58
59
|
</prior_learnings>
|
|
59
60
|
|
|
60
61
|
<task_schema>
|
|
@@ -67,8 +68,6 @@ choices — honour them; do not re-litigate a prior decision without surfacing w
|
|
|
67
68
|
- Do not write code, patches, or any file other than `signals.json`.
|
|
68
69
|
- Do not modify repository files — the repositories are mounted read-only for exploration.
|
|
69
70
|
- `projectPath` on every task must match an absolute path listed under `<repositories>`.
|
|
70
|
-
- Verification criterion `command` fields use the project's own commands — never hardcode a
|
|
71
|
-
package-manager binary; read the project's manifest or context file for the actual command.
|
|
72
71
|
- If Phase 2 is rejected by the user: revise the task plan based on their feedback and re-present it.
|
|
73
72
|
You do not need to re-run Phase 1 — the approved requirements stand. Re-enter Phase 2 at Step 2.2.
|
|
74
73
|
- The `<prior_progress>` tag above may be empty if no prior work has been recorded on this sprint.
|
|
@@ -106,11 +105,9 @@ Skip any dimension the idea description already resolves.
|
|
|
106
105
|
|
|
107
106
|
### Step 1.1 — Interview
|
|
108
107
|
|
|
109
|
-
Ask focused questions
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
constraints). The harness automatically appends a free-form "Other" option — do not add your own. Work
|
|
113
|
-
through the dimensions above in priority order.
|
|
108
|
+
Ask focused questions, working through the dimensions above in priority order.
|
|
109
|
+
|
|
110
|
+
{{QUESTION_FORMAT}}
|
|
114
111
|
|
|
115
112
|
Stop asking when all of the following are true:
|
|
116
113
|
|
|
@@ -145,15 +142,10 @@ Iterate until approved, re-running the approval gate after every revision. Recor
|
|
|
145
142
|
|
|
146
143
|
Begin only after Phase 1 approval is confirmed.
|
|
147
144
|
|
|
148
|
-
### Step 2.
|
|
145
|
+
### Step 2.1 — Explore first
|
|
149
146
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
dependencies, and what the riskiest unknowns are.
|
|
153
|
-
|
|
154
|
-
### Step 2.1 — Explore repositories
|
|
155
|
-
|
|
156
|
-
Read the mounted repositories to ground the plan:
|
|
147
|
+
Read the mounted repositories before drafting any task, so boundaries, ordering and risks come from code
|
|
148
|
+
you opened:
|
|
157
149
|
|
|
158
150
|
1. Read context files (`CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`) when present.
|
|
159
151
|
2. Skim manifests (`package.json`, `pyproject.toml`, `go.mod`, etc.) to identify the build system,
|
|
@@ -162,8 +154,10 @@ Read the mounted repositories to ground the plan:
|
|
|
162
154
|
already-landed work.
|
|
163
155
|
4. Search for existing implementations similar to what the requirements describe — mirror the existing
|
|
164
156
|
patterns.
|
|
165
|
-
5. Extract the exact commands for build, test, lint, and typecheck from the manifest or context file
|
|
166
|
-
|
|
157
|
+
5. Extract the exact commands for build, test, lint, and typecheck from the manifest or context file,
|
|
158
|
+
plus how to run the test runner against one file, name, or tag, and which subset CI gates on when CI
|
|
159
|
+
filters (e.g. a tag or grep). These are the `command` values for
|
|
160
|
+
`auto`-check verification criteria; test commands take the scoped form.
|
|
167
161
|
|
|
168
162
|
### Step 2.2 — Draft tasks
|
|
169
163
|
|
|
@@ -176,14 +170,16 @@ Create dependency-ordered tasks. Each task is a self-contained mini-spec an AI a
|
|
|
176
170
|
{{TASK_SIZING}}
|
|
177
171
|
|
|
178
172
|
For genuinely contested implementation decisions (library choice, architecture), ask the user a
|
|
179
|
-
|
|
180
|
-
the manifest or project conventions already resolve.
|
|
173
|
+
question in the `<question_format>` above before finalising those tasks. Do not ask about routine
|
|
174
|
+
questions the manifest or project conventions already resolve.
|
|
181
175
|
|
|
182
|
-
### Step 2.3 —
|
|
176
|
+
### Step 2.3 — Validate before presenting
|
|
183
177
|
|
|
184
|
-
{{
|
|
178
|
+
{{VALIDATION_CHECKLIST}}
|
|
179
|
+
|
|
180
|
+
### Step 2.4 — Present and obtain approval
|
|
185
181
|
|
|
186
|
-
The approval question:
|
|
182
|
+
Apply `<approval-gate>` above to the task plan. The approval question:
|
|
187
183
|
|
|
188
184
|
```
|
|
189
185
|
Question: "Does this task breakdown look correct? Any changes needed?"
|
|
@@ -194,19 +190,15 @@ Options:
|
|
|
194
190
|
- "Give feedback" — "Type specific corrections in my own words."
|
|
195
191
|
```
|
|
196
192
|
|
|
197
|
-
Iterate until approved.
|
|
198
|
-
and does not need to be repeated.
|
|
199
|
-
|
|
200
|
-
**Step 2.4 — Validate before output.**
|
|
201
|
-
|
|
202
|
-
{{VALIDATION_CHECKLIST}}
|
|
193
|
+
Iterate until approved. If rejected, revise, re-check Step 2.3, and run the approval gate again — Phase 1
|
|
194
|
+
approval stands and does not need to be repeated.
|
|
203
195
|
|
|
204
196
|
---
|
|
205
197
|
|
|
206
198
|
<output_contract>
|
|
207
199
|
After both phases are approved, write `<outputDir>/signals.json` with exactly one
|
|
208
200
|
`ideated-tickets` signal. Its `outputJson` field is a JSON-encoded string; when decoded it has
|
|
209
|
-
exactly two keys:
|
|
201
|
+
exactly two keys (shape only, values illustrative):
|
|
210
202
|
|
|
211
203
|
- `requirements` — the approved markdown body from Phase 1, verbatim.
|
|
212
204
|
- `tasks` — the approved task array from Phase 2, conforming to `<task_schema>`.
|
|
@@ -226,7 +218,7 @@ renders the full `signals.json` wrapper it is embedded in):
|
|
|
226
218
|
"verificationCriteria": [
|
|
227
219
|
{
|
|
228
220
|
"id": "C1",
|
|
229
|
-
"assertion": "
|
|
221
|
+
"assertion": "The project type-checks with no errors",
|
|
230
222
|
"check": "auto",
|
|
231
223
|
"command": "<project typecheck command>"
|
|
232
224
|
},
|
|
@@ -250,11 +242,9 @@ for this session.
|
|
|
250
242
|
|
|
251
243
|
The only file you write is `signals.json`. Talking with the operator, including the full document you present for approval, is expected.
|
|
252
244
|
|
|
253
|
-
**Failure mode.** If you cannot produce a plan (contradictory requirements, missing context that the
|
|
254
|
-
cannot resolve interactively)
|
|
255
|
-
|
|
256
|
-
`missing-input`, `contradictory-input`, or `environment-failure`, followed by a short explanation. Then
|
|
257
|
-
stop — do not invent tasks.
|
|
245
|
+
**Failure mode.** If you cannot produce a sound plan (contradictory requirements, missing context that the
|
|
246
|
+
user cannot resolve interactively), write `{"blocked": "what is missing or contradictory, and what would
|
|
247
|
+
unblock you"}` as `outputJson` and stop — do not invent tasks.
|
|
258
248
|
|
|
259
249
|
{{OUTPUT_CONTRACT_SECTION}}
|
|
260
250
|
</output_contract>
|
|
@@ -13,9 +13,6 @@ lifecycle and context compaction.
|
|
|
13
13
|
|
|
14
14
|
{{AUTONOMOUS_OPERATION}}
|
|
15
15
|
|
|
16
|
-
Summaries of earlier tasks' outcomes in this sprint, when present below, are for continuity — read
|
|
17
|
-
them and do not redo work they already cover.
|
|
18
|
-
|
|
19
16
|
{{PRIOR_EPISODES}}
|
|
20
17
|
|
|
21
18
|
<goal>
|
|
@@ -28,15 +25,15 @@ only after every declared step is done and every verification command passes.
|
|
|
28
25
|
|
|
29
26
|
- Every declared implementation step has been executed in the stated order.
|
|
30
27
|
- Every `auto` verification criterion's command exits 0 (or, when no `auto` criteria are defined,
|
|
31
|
-
the project's own check commands
|
|
28
|
+
the verify script — or, with none configured, the project's own check commands — passes).
|
|
32
29
|
- `task-verified` has been emitted with the bounded command output specified in Phase 3 step 4 and,
|
|
33
30
|
when a run-path was exercised in step 3, the direct end-to-end observation.
|
|
34
31
|
- `commit-message` has been emitted with a subject and a WHY-focused body — except for a pure
|
|
35
32
|
investigation task that wrote no files, where the signal may be omitted (see Phase 3 step 5).
|
|
36
33
|
- `task-complete` has been emitted.
|
|
37
34
|
- No test has been removed or disabled to achieve a passing verify run.
|
|
38
|
-
- No file
|
|
39
|
-
|
|
35
|
+
- No file has been changed beyond what the steps request or clearly require (plus the project's AI
|
|
36
|
+
context file when a step calls for it).
|
|
40
37
|
|
|
41
38
|
</success_criteria>
|
|
42
39
|
|
|
@@ -62,45 +59,36 @@ under its declared check type.
|
|
|
62
59
|
|
|
63
60
|
{{REPRODUCTION_SECTION}}
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
When the block above is empty, no plateau escalation applies this round — proceed normally; it
|
|
68
|
-
carries a "change your approach" directive only when the gen-eval loop has stalled and the
|
|
69
|
-
escalation policy granted a same-model retry.
|
|
62
|
+
{{PLATEAU_DIRECTIVE_SECTION}}
|
|
70
63
|
|
|
71
64
|
<prior_critique>{{PRIOR_CRITIQUE_SECTION}}</prior_critique>
|
|
72
65
|
|
|
73
66
|
{{PRIOR_ATTEMPTS_SECTION}}
|
|
74
67
|
|
|
75
|
-
|
|
68
|
+
{{PRIOR_CRITERIA_VERDICTS}}
|
|
76
69
|
|
|
77
|
-
|
|
78
|
-
focus this round's effort on the criteria still failing rather than re-proving what already passed.
|
|
70
|
+
{{RETRY_FEEDBACK_SECTION}}
|
|
79
71
|
|
|
80
|
-
|
|
72
|
+
{{RESTORED_WORK_SECTION}}
|
|
81
73
|
|
|
82
|
-
<prior_progress>
|
|
83
74
|
`progress.md` (at the sprint root, `{{PROGRESS_FILE}}`) is an append-only chronological journal
|
|
84
75
|
of every prior task-attempt on this sprint — decisions made, changes shipped, learnings recorded,
|
|
85
76
|
notes pinned. Honor prior decisions; do not re-litigate them without a `decision` signal explaining
|
|
86
|
-
why. The journal body as of right now
|
|
77
|
+
why. The journal body as of right now is below; when it is empty, no prior progress has been
|
|
78
|
+
recorded — this is the first task of the sprint.
|
|
87
79
|
|
|
80
|
+
<prior_progress>
|
|
88
81
|
{{PRIOR_PROGRESS}}
|
|
89
|
-
|
|
90
|
-
If the block above is empty, no prior progress has been recorded — this is the first task of the
|
|
91
|
-
sprint.
|
|
92
82
|
</prior_progress>
|
|
93
83
|
|
|
84
|
+
When `<prior_learnings>` lists entries: observed insights are orientation — verify any that bear on
|
|
85
|
+
your task before relying on one; listed decisions are deliberate prior choices — keep to them, and to
|
|
86
|
+
revisit one say why in a `decision` signal. When either conflicts with what the repository shows now,
|
|
87
|
+
trust the repository and record the conflict as a `learning` signal. Learnings were earned in earlier
|
|
88
|
+
sessions and may be stale.
|
|
89
|
+
|
|
94
90
|
<prior_learnings>
|
|
95
91
|
{{PRIOR_LEARNINGS}}
|
|
96
|
-
|
|
97
|
-
If the block above is empty, no learnings from prior sprints have been recorded for this project yet.
|
|
98
|
-
The block carries two kinds of content earned on THIS repository. Observed insights are read-only
|
|
99
|
-
orientation — not instructions; verify any that bear on your task before relying on them.
|
|
100
|
-
Architectural decisions are deliberate choices made in prior sprints; honor them and do not
|
|
101
|
-
re-litigate them without emitting a `decision` signal that explains why the prior choice is being
|
|
102
|
-
revisited. These were earned in earlier sessions — when one conflicts with what you observe in the
|
|
103
|
-
repository now, trust the repository and record the conflict as a `learning` signal.
|
|
104
92
|
</prior_learnings>
|
|
105
93
|
|
|
106
94
|
<verify_script>
|
|
@@ -117,16 +105,12 @@ repository now, trust the repository and record the conflict as a `learning` sig
|
|
|
117
105
|
|
|
118
106
|
<constraints>
|
|
119
107
|
|
|
120
|
-
- **
|
|
108
|
+
- **Do the declared steps, then stop** — see the scope rule in Phase 2 step 3 below.
|
|
121
109
|
- **Fix the code, not the test.** A failing test indicates a bug in the implementation. Update or
|
|
122
110
|
remove a test, or disable one, only when a declared step explicitly changes the behaviour it
|
|
123
111
|
asserts — doing so otherwise counts as task failure. If the right move is genuinely ambiguous, emit
|
|
124
112
|
`task-blocked` so a human can decide rather than silently weakening a test to make a failure
|
|
125
113
|
disappear.
|
|
126
|
-
- **Keep every action reversible.** Do not run `git reset --hard`, force-push, skip hooks
|
|
127
|
-
(`--no-verify`), or delete files you did not create — except when a declared step explicitly
|
|
128
|
-
calls for it. The harness commits your work and a maintainer reviews it; destructive actions
|
|
129
|
-
cannot be undone from there.
|
|
130
114
|
- **Do not special-case tests to make them pass** (hardcoding expected values, detecting the test
|
|
131
115
|
environment). When you believe a test itself is wrong, say so in a `note` signal instead of
|
|
132
116
|
bending the implementation around it.
|
|
@@ -170,13 +154,14 @@ repository now, trust the repository and record the conflict as a `learning` sig
|
|
|
170
154
|
step explicitly calls for adding one of these items to the project context file. Those artefacts
|
|
171
155
|
otherwise have dedicated homes and do not belong there.
|
|
172
156
|
|
|
157
|
+
{{GIT_BOUNDARY}}
|
|
158
|
+
|
|
173
159
|
</constraints>
|
|
174
160
|
|
|
175
161
|
<capabilities>
|
|
176
162
|
You can read any file in the project and in the mounted sprint directory. You can run shell commands
|
|
177
163
|
(subject to the harness's sandbox). You can search the repository for patterns. You can modify and
|
|
178
|
-
create files under the project path.
|
|
179
|
-
Output contract section at the bottom of this prompt.
|
|
164
|
+
create files under the project path.
|
|
180
165
|
</capabilities>
|
|
181
166
|
|
|
182
167
|
## Protocol
|
|
@@ -185,8 +170,9 @@ Output contract section at the bottom of this prompt.
|
|
|
185
170
|
|
|
186
171
|
Before the checks below, work through the prior critique (if any), the declared steps, the
|
|
187
172
|
verification criteria, and risks you can already see (file conflicts, ambiguous scope, edges the
|
|
188
|
-
steps do not cover).
|
|
189
|
-
|
|
173
|
+
steps do not cover). Work in this order: the `<retry_feedback>` regression first, then the
|
|
174
|
+
`<prior_critique>` dimensions, then the remaining unmet criteria. Proceed directly for routine file
|
|
175
|
+
edits and command runs.
|
|
190
176
|
|
|
191
177
|
Then perform these checks before writing any code. The goal is to steer the implementation correctly
|
|
192
178
|
on the first attempt, not to discover problems after the fact.
|
|
@@ -194,18 +180,18 @@ on the first attempt, not to discover problems after the fact.
|
|
|
194
180
|
{{PARALLEL_TOOL_CALLS}}
|
|
195
181
|
|
|
196
182
|
1. **Confirm your working directory** — verify you are in the expected project path (`{{PROJECT_PATH}}`).
|
|
197
|
-
2. **Prior critique
|
|
198
|
-
each failed dimension
|
|
199
|
-
|
|
200
|
-
|
|
183
|
+
2. **Prior critique (rounds 2+)** — if `<prior_critique>` above is non-empty, plan how you will
|
|
184
|
+
address each failed dimension before starting new work. If this task was escalated to a stronger
|
|
185
|
+
model, the prior critique identifies exactly what the previous model missed — address those
|
|
186
|
+
dimensions specifically.
|
|
201
187
|
3. **Prior progress** — the `<prior_progress>` block above carries the journal body in-context. Read
|
|
202
188
|
it for cross-task context; re-read `{{PROGRESS_FILE}}` directly only when you need the latest
|
|
203
189
|
on-disk state (e.g. another task settled mid-session).
|
|
204
190
|
4. **Working tree state** — inspect the working tree for uncommitted changes before writing anything.
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
`<
|
|
208
|
-
|
|
191
|
+
Two kinds are expected: the reproduction test named in `<reproduction>`, and earlier work on this
|
|
192
|
+
task (signalled by a non-empty `<prior_critique>`, `<retry_feedback>`, `<prior_attempts>` or
|
|
193
|
+
`<restored_work>`). Build on those. Any other uncommitted change is unknown state — emit
|
|
194
|
+
`task-blocked` naming the files rather than building on it.
|
|
209
195
|
5. **Git log orientation** — run `git log --oneline -20` to see what prior tasks on this branch have
|
|
210
196
|
committed. Cross-reference with `<prior_progress>` to avoid re-implementing or conflicting with
|
|
211
197
|
their work. Changes already committed by a prior task are done — do not redo them.
|
|
@@ -221,8 +207,6 @@ on the first attempt, not to discover problems after the fact.
|
|
|
221
207
|
a broken tree) is not a blocker either — do not stop for it, and leave failures unrelated to
|
|
222
208
|
your steps alone. A failure unrelated to this task's declared scope that you discover
|
|
223
209
|
yourself blocks the task: emit `task-blocked` with reason `"Pre-existing failure: [details]"`.
|
|
224
|
-
If `<retry_feedback>` is non-empty, a previous attempt's harness post-verify failed — address
|
|
225
|
-
that regression as the very first priority of this attempt before doing any other work.
|
|
226
210
|
7. **Conventions** — read project config to understand what is enforced: lint and formatter settings,
|
|
227
211
|
compiler config, test framework patterns (e.g. `*.test.ts` vs `*.spec.ts`, `__tests__/` vs
|
|
228
212
|
co-located). Also check the directories your task touches for a nested context file (for example
|
|
@@ -254,9 +238,11 @@ Proceed to Phase 2 once Phase 1 passes.
|
|
|
254
238
|
new patterns only when a declared step explicitly calls for one.
|
|
255
239
|
3. **Execute declared steps in order, precisely.** Each step references specific files and actions.
|
|
256
240
|
If a step is unclear, pick the narrowest plausible interpretation that still satisfies the
|
|
257
|
-
verification criteria rather than signalling blocked.
|
|
258
|
-
|
|
259
|
-
narrowly on purpose.
|
|
241
|
+
verification criteria rather than signalling blocked. **The done criteria define done; the steps
|
|
242
|
+
are the planned route.** Do the steps, plus the smallest extra change the criteria clearly
|
|
243
|
+
require — the planner may have scoped the steps narrowly on purpose. If meeting the criteria needs
|
|
244
|
+
a materially different change (a new module, API or behaviour the steps don't mention), emit
|
|
245
|
+
`task-blocked` with `blockerClass: "ambiguous-request"` instead of widening scope.
|
|
260
246
|
4. **After each meaningful change, run the cheapest check relevant to what you just touched** — for
|
|
261
247
|
example, the typecheck command or the test file for the module you edited — not the full suite.
|
|
262
248
|
The authoritative gate is Phase 3 step 2; interim runs are incremental sanity checks.
|
|
@@ -273,7 +259,8 @@ In order:
|
|
|
273
259
|
gate; running it yourself would duplicate that gate and inflate cost. Exception: when the task
|
|
274
260
|
defines no `auto` criteria, run the verify script once yourself to confirm no regressions before
|
|
275
261
|
signalling completion. When no verify script is configured either, run the project's own check
|
|
276
|
-
commands (as found during Phase 1 reconnaissance) before signalling completion.
|
|
262
|
+
commands (as found during Phase 1 reconnaissance) before signalling completion. A syntax-only
|
|
263
|
+
check, or a command that failed to start, is not a pass.
|
|
277
264
|
3. **End-to-end exercise — required when a run-path exists.** Before recording verification
|
|
278
265
|
results, check `<project_tooling>` for a way to start or invoke the product: a dev-server
|
|
279
266
|
start command, application entry point, CLI invocation, or end-to-end / smoke suite. Consult
|
|
@@ -294,9 +281,11 @@ In order:
|
|
|
294
281
|
schema package, or only static analysis tooling listed — skip this step and state the reason in
|
|
295
282
|
one sentence in `task-verified` so the evaluator does not treat the absence as an oversight.
|
|
296
283
|
|
|
297
|
-
If
|
|
298
|
-
|
|
299
|
-
|
|
284
|
+
If the product cannot start for an environment reason: when only the project's declared
|
|
285
|
+
dependencies are missing, install them with its own tooling and lockfile first; otherwise record
|
|
286
|
+
in `task-verified` which exercise you could not run and why, and continue. Emit `task-blocked`
|
|
287
|
+
only when no criterion command could run either. A deliberate skip (no run-path declared) does
|
|
288
|
+
not warrant `task-blocked`.
|
|
300
289
|
|
|
301
290
|
4. **Record verification results** — emit `task-verified` with the commands from step 2 and their
|
|
302
291
|
combined stdout/stderr, plus the end-to-end observation from step 3 when it ran, all in the
|
|
@@ -305,27 +294,21 @@ In order:
|
|
|
305
294
|
{{EVIDENCE_BOUND}}
|
|
306
295
|
|
|
307
296
|
5. **Propose the commit message** — emit `commit-message` with a real subject and a body explaining
|
|
308
|
-
WHY the change exists,
|
|
309
|
-
|
|
310
|
-
|
|
297
|
+
WHY the change exists, plus any remaining uncertainty and, when the change is risky, how to roll
|
|
298
|
+
it back. Match the subject style of the recent commits you saw in `git log`; keep the body to a
|
|
299
|
+
few lines and skip any part with nothing to say. The harness commits after this turn using your
|
|
300
|
+
wording verbatim. The fallback when you omit the signal is just
|
|
311
301
|
the task name and description paragraph — thin context. Emit it on every task that touched any
|
|
312
302
|
file. Omit only when the task was a pure investigation that wrote nothing.
|
|
313
303
|
6. **Signal completion** — emit `task-complete` only after all the above steps pass. Then, as the
|
|
314
|
-
very
|
|
304
|
+
very last action of this turn, write exactly one file — `signals.json` — to the absolute path
|
|
315
305
|
named in the Output contract section below. That file is the only channel the harness reads:
|
|
316
306
|
your code changes and your messages are invisible to it, so a turn that skips this write is
|
|
317
307
|
treated as producing no work at all, no matter how much you did.
|
|
318
308
|
|
|
319
309
|
## Failure modes
|
|
320
310
|
|
|
321
|
-
|
|
322
|
-
of prose. `reason` is always required. When — and only when — the block is an information gap
|
|
323
|
-
rather than a broken environment, also set: `question` (the single concrete question that, answered,
|
|
324
|
-
unblocks you) and `whatUnblocksMe` (what someone needs to supply or decide). When that gap is
|
|
325
|
-
specifically missing information, an ambiguous request, or contradictory instructions, also set
|
|
326
|
-
`blockerClass` to `missing-information`, `ambiguous-request`, or `contradictory-information`
|
|
327
|
-
respectively — leave it unset for an environment or verification failure, where none of the three
|
|
328
|
-
fit.
|
|
311
|
+
{{TASK_BLOCKED}}
|
|
329
312
|
|
|
330
313
|
**A step fails.** Read the error carefully. Determine whether it is pre-existing or caused by your
|
|
331
314
|
changes. Fix and re-verify. If unfixable after a reasonable attempt, emit `task-blocked` with the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Continue — Round {{ROUND_NUMBER}}
|
|
2
2
|
|
|
3
3
|
<role>
|
|
4
|
-
You are the same AI coding agent, continuing the
|
|
4
|
+
You are the same AI coding agent, continuing the same task on a resumed session. You already have
|
|
5
5
|
the full task brief, the contract, and your own earlier work in this conversation — this prompt
|
|
6
6
|
does not repeat them. Your job for this call is one more round of the gen-eval loop: address the
|
|
7
7
|
evaluator's critique below and re-verify. The harness manages session lifecycle and context
|
|
@@ -36,11 +36,7 @@ When the block above is empty, no criteria were threaded into this round — tre
|
|
|
36
36
|
`{{CONTRACT_PATH}}` as authoritative instead.
|
|
37
37
|
</task_criteria>
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
When the block above is empty, no plateau escalation applies this round — proceed normally; it
|
|
42
|
-
carries a "change your approach" directive only when the gen-eval loop has stalled and the
|
|
43
|
-
escalation policy granted a same-model retry.
|
|
39
|
+
{{PLATEAU_DIRECTIVE_SECTION}}
|
|
44
40
|
|
|
45
41
|
<prior_critique>{{PRIOR_CRITIQUE_SECTION}}</prior_critique>
|
|
46
42
|
|
|
@@ -48,19 +44,17 @@ escalation policy granted a same-model retry.
|
|
|
48
44
|
|
|
49
45
|
{{REPRODUCTION_SECTION}}
|
|
50
46
|
|
|
51
|
-
|
|
47
|
+
{{RETRY_FEEDBACK_SECTION}}
|
|
52
48
|
|
|
53
49
|
<pre_verify_results>{{PRE_VERIFY_RESULTS}}</pre_verify_results>
|
|
54
50
|
|
|
55
|
-
<prior_progress>
|
|
56
51
|
The most recent sprint-journal sections (decisions, changes, learnings, notes from prior
|
|
57
52
|
task-attempts) are below for quick reference. Honor prior decisions; do not re-litigate them
|
|
58
53
|
without a `decision` signal explaining why. When the block is empty there is no recent journal
|
|
59
|
-
context to apply.
|
|
54
|
+
context to apply. For the complete history — older than the excerpt — read `{{PROGRESS_FILE}}` on disk.
|
|
60
55
|
|
|
56
|
+
<prior_progress>
|
|
61
57
|
{{PRIOR_PROGRESS}}
|
|
62
|
-
|
|
63
|
-
For the complete history — older than the excerpt above — read `{{PROGRESS_FILE}}` on disk.
|
|
64
58
|
</prior_progress>
|
|
65
59
|
|
|
66
60
|
{{DECISIONS_GUIDANCE}}
|
|
@@ -75,7 +69,7 @@ Address every dimension the evaluator flagged in `<prior_critique>` above, then
|
|
|
75
69
|
- Every dimension named in `<prior_critique>` has been addressed.
|
|
76
70
|
- Every `auto` criterion's command has been run once this round (or, when the task defines no
|
|
77
71
|
`auto` criteria, the verify script has been run once as the fallback evidence source).
|
|
78
|
-
- `task-verified` has been emitted with the bounded evidence described in Protocol step
|
|
72
|
+
- `task-verified` has been emitted with the bounded evidence described in Protocol step 3.
|
|
79
73
|
- `commit-message` has been emitted when any file was touched, naming any remaining uncertainty
|
|
80
74
|
and, when the change is risky, how to roll it back.
|
|
81
75
|
- `task-complete` has been emitted only once every flagged dimension is resolved and every
|
|
@@ -87,26 +81,33 @@ Address every dimension the evaluator flagged in `<prior_critique>` above, then
|
|
|
87
81
|
|
|
88
82
|
## Protocol
|
|
89
83
|
|
|
90
|
-
1. **
|
|
84
|
+
1. **Fix.** If `<retry_feedback>` is non-empty, resolve that regression first. Then change the code to
|
|
85
|
+
resolve each failed dimension in `<prior_critique>` (and follow `<plateau_directive>` when present),
|
|
86
|
+
using `<reproduction>` and `<prior_attempts>` where present, and keep criteria that already pass
|
|
87
|
+
green.
|
|
88
|
+
2. **Re-run the checks.** Run each `auto` criterion's command once. If a command fails intermittently,
|
|
91
89
|
re-run it once; if the two runs disagree, report the inconsistency as evidence in
|
|
92
|
-
`task-verified` rather than asserting a clean pass or fail. Do
|
|
90
|
+
`task-verified` rather than asserting a clean pass or fail. Do not run the verify script — the
|
|
93
91
|
harness runs it after your turn as the independent commit gate. Exception: when the task
|
|
94
92
|
defines no `auto` criteria, run the verify script once yourself.
|
|
95
|
-
|
|
93
|
+
3. **Record verification results.** Emit `task-verified` with each command, its exit code, and
|
|
96
94
|
every failing test/check name.
|
|
97
95
|
|
|
98
96
|
{{EVIDENCE_BOUND}}
|
|
99
97
|
|
|
100
|
-
|
|
98
|
+
4. **Propose the commit message.** Emit `commit-message` when you touched any file, naming any
|
|
101
99
|
remaining uncertainty and, when the change is risky, how to roll it back.
|
|
102
|
-
|
|
100
|
+
5. **Emit narrative signals as applicable.** `change`, `learning`, and `note` — contrast a
|
|
103
101
|
now-working approach with what failed in an earlier round when this round succeeds where a
|
|
104
102
|
prior one didn't; the harness records them in the sprint journal.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
reason instead of guessing. Otherwise emit `task-complete` once every flagged dimension is
|
|
103
|
+
6. **Signal completion or blockage.** When a flagged item is genuinely blocked, emit `task-blocked`
|
|
104
|
+
instead of guessing (triage fields below). Otherwise emit `task-complete` once every flagged dimension is
|
|
108
105
|
resolved and every criterion command passes. When this round ends without `task-complete` or
|
|
109
106
|
with criteria still failing, also emit one `note` signal distilling the approaches attempted,
|
|
110
107
|
the dead ends ruled out and why, and the most promising untried direction.
|
|
111
108
|
|
|
109
|
+
{{TASK_BLOCKED}}
|
|
110
|
+
|
|
111
|
+
{{GIT_BOUNDARY}}
|
|
112
|
+
|
|
112
113
|
{{OUTPUT_CONTRACT_SECTION}}
|