ralphctl 0.25.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/{cli-GQBXYNFN.mjs → cli-P7D6G5NI.mjs} +5716 -3746
- package/dist/cli.mjs +1 -1
- package/dist/manifest.json +6 -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 +13 -4
- 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/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
process.env.NODE_ENV ??= "production";
|
|
5
5
|
var { isColorDisabled } = await import("./use-no-color-NEMCAVY3.mjs");
|
|
6
6
|
if (isColorDisabled()) process.env.FORCE_COLOR = "0";
|
|
7
|
-
var { runCli } = await import("./cli-
|
|
7
|
+
var { runCli } = await import("./cli-P7D6G5NI.mjs");
|
|
8
8
|
await runCli(process.argv);
|
package/dist/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "0.
|
|
4
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"packageVersion": "0.26.0",
|
|
4
|
+
"generatedAt": "2026-10-08T12:11:15.248Z",
|
|
5
5
|
"assets": [
|
|
6
6
|
"agent-definitions/ralphctl-evaluator.md",
|
|
7
7
|
"agent-definitions/ralphctl-generator.md",
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
"prompts/_partials/evaluator-failure-modes.md",
|
|
15
15
|
"prompts/_partials/evaluator-grading-rules.md",
|
|
16
16
|
"prompts/_partials/evidence-bound.md",
|
|
17
|
+
"prompts/_partials/git-boundary.md",
|
|
17
18
|
"prompts/_partials/harness-context.md",
|
|
18
19
|
"prompts/_partials/parallel-tool-calls.md",
|
|
20
|
+
"prompts/_partials/question-format.md",
|
|
21
|
+
"prompts/_partials/skill-body.md",
|
|
22
|
+
"prompts/_partials/task-blocked.md",
|
|
19
23
|
"prompts/_partials/task-fields.md",
|
|
20
24
|
"prompts/_partials/task-sizing.md",
|
|
21
25
|
"prompts/_partials/validation-checklist.md",
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Approval works on exactly what the operator sees: what you show them is what goes into `signals.json`,
|
|
3
3
|
so the operator can only approve what is fully on screen.
|
|
4
4
|
|
|
5
|
-
1. Run this prompt's
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
1. Run this prompt's checklist before you present anything, so the document you show already passes it.
|
|
6
|
+
For requirements the interview's stop criteria are the applicable checks; either way, check first and
|
|
7
|
+
present second.
|
|
8
8
|
2. Show the complete document you will write, verbatim — for requirements, every section; for a task
|
|
9
|
-
plan, every task with all its fields (name, repository, ticket, description, `blockedBy`,
|
|
10
|
-
and every verification criterion with its check type and command), followed by the dependency order.
|
|
9
|
+
plan, every task with all its fields (name, repository, ticket, description, `blockedBy`, extra evaluator
|
|
10
|
+
dimensions, every step, and every verification criterion with its check type and command), followed by the dependency order.
|
|
11
11
|
Print it as its own message, not as a lead-in to the question.
|
|
12
12
|
3. Do this on every approval round, including after each revision. Never substitute a summary, a diff,
|
|
13
13
|
"unchanged sections omitted", or a pointer to an earlier message — an operator who has to scroll back
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<autonomous-operation>
|
|
2
2
|
You are operating autonomously. The user is not watching in real time and cannot answer questions
|
|
3
3
|
mid-task, so asking "Want me to…?" or "Shall I…?" leaves the work blocked with no one there to
|
|
4
|
-
answer
|
|
4
|
+
answer. For reversible actions that follow from the task, decide and proceed.
|
|
5
5
|
|
|
6
6
|
Before ending your turn, check your last paragraph. If it is a plan, an analysis, a question, a
|
|
7
7
|
list of next steps, or a promise about work you have not done yet ("I'll…", "next, I'll…", "let me
|
|
@@ -10,6 +10,12 @@ ends. The harness reads only the signals file this role writes; a turn that ends
|
|
|
10
10
|
of the next step, instead of the tool call that performs it, is indistinguishable from a turn that
|
|
11
11
|
did nothing.
|
|
12
12
|
|
|
13
|
+
Two endings are legitimate. Either the work is done and recorded in the signals file — out-of-scope
|
|
14
|
+
extras you noticed belong in that file as a note, and an evaluator's verdict is its finished work —
|
|
15
|
+
or you hit something only a person can resolve (a destructive or irreversible step, a real scope
|
|
16
|
+
change, input only they can supply): end with this role's blocked, failed or not-reproduced outcome
|
|
17
|
+
from the output contract, naming the one thing that would unblock you.
|
|
18
|
+
|
|
13
19
|
Before reporting any work as done, audit the claim against a tool result from this session. Report
|
|
14
20
|
only what you can point to evidence for; when something is not yet verified, say so explicitly
|
|
15
21
|
rather than asserting it passed.
|
|
@@ -12,8 +12,8 @@ without tool-specific knowledge.
|
|
|
12
12
|
- Use H2 sections to group related rules — `## Build`, `## Testing`, `## Architecture`, etc.
|
|
13
13
|
- Keep sections short and scannable; avoid walls of prose. Bullets work well.
|
|
14
14
|
- No depth limit on headings, but rarely need more than `##`/`###`.
|
|
15
|
-
-
|
|
16
|
-
|
|
15
|
+
- Target under ~150 lines — longer files dilute the signal-to-noise ratio for models with a limited
|
|
16
|
+
context window.
|
|
17
17
|
|
|
18
18
|
**Tone and framing:**
|
|
19
19
|
|
|
@@ -31,33 +31,21 @@ engineering advice the model already follows by default.
|
|
|
31
31
|
```markdown
|
|
32
32
|
# Project Name
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
<language> monorepo. Use the workspace-aware install command; individual-package installs
|
|
35
35
|
break the shared lockfile.
|
|
36
36
|
|
|
37
37
|
## Build
|
|
38
38
|
|
|
39
|
-
- `<build command>` —
|
|
39
|
+
- `<build command>` — builds all packages.
|
|
40
40
|
- Environment: copy `.env.example` to `.env` and fill in required values before running.
|
|
41
41
|
|
|
42
42
|
## Testing
|
|
43
43
|
|
|
44
|
-
- `<test command>` — runs unit
|
|
45
|
-
- Integration tests
|
|
46
|
-
- Do not mock the database layer — use real fixtures from `tests/fixtures/`.
|
|
47
|
-
|
|
48
|
-
## Architecture
|
|
49
|
-
|
|
50
|
-
- <your layering rule> — e.g. which modules may import which, and which direction is forbidden.
|
|
51
|
-
- <your module-boundary rule> — e.g. no barrel re-export files; every import names its symbol explicitly.
|
|
44
|
+
- `<test command>` — runs unit and integration tests.
|
|
45
|
+
- Integration tests need `<service>` running; start it with `<start command>`.
|
|
52
46
|
|
|
53
47
|
## Conventions
|
|
54
48
|
|
|
55
|
-
- <
|
|
56
|
-
-
|
|
57
|
-
are banned elsewhere.
|
|
58
|
-
|
|
59
|
-
## Security
|
|
60
|
-
|
|
61
|
-
- Do not log authentication tokens or request bodies, even at debug level.
|
|
62
|
-
- Never commit `.env` files — they contain real credentials for development services.
|
|
49
|
+
- <a rule that differs from the language's defaults> — state it as a checkable rule.
|
|
50
|
+
- Generated files under `<dir>` are never edited by hand; regenerate with `<command>`.
|
|
63
51
|
```
|
|
@@ -6,12 +6,11 @@ invocation, not as a tutorial or README.
|
|
|
6
6
|
|
|
7
7
|
**Structure rules:**
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
brevity is load-bearing.
|
|
9
|
+
- Open with a one-line project description; a `# Project Name` title is fine.
|
|
10
|
+
- Group rules under a few `##` sections (`## Build & Run`, `## Testing`, …) with tight bullets; each bullet
|
|
11
|
+
is one verifiable claim.
|
|
12
|
+
- Target under 200 lines — adherence drops as the file grows, so brevity is load-bearing. With an existing
|
|
13
|
+
file, add sections only.
|
|
15
14
|
|
|
16
15
|
**"Read on demand" pattern** — for sections that an agent rarely needs mid-task, list them under a
|
|
17
16
|
`## References` heading with paths rather than embedding the content inline:
|
|
@@ -34,25 +33,23 @@ manifest files.
|
|
|
34
33
|
```markdown
|
|
35
34
|
# Project Name
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
<language and runtime> service. Run `<install command>` once, then `<dev command>` to start.
|
|
38
37
|
|
|
39
38
|
## Build & Run
|
|
40
39
|
|
|
41
|
-
- `<build command>` —
|
|
42
|
-
- Required env:
|
|
40
|
+
- `<build command>` — writes artefacts to `<output dir>`.
|
|
41
|
+
- Required env: `<VAR_NAME>` (<what it holds>).
|
|
43
42
|
|
|
44
43
|
## Testing
|
|
45
44
|
|
|
46
|
-
- `<test command>` —
|
|
47
|
-
-
|
|
45
|
+
- `<test command>` — runs everything. `<single-test command>` runs one file.
|
|
46
|
+
- <a prerequisite or quirk of the test run that is easy to miss>.
|
|
48
47
|
|
|
49
48
|
## Architecture
|
|
50
49
|
|
|
51
|
-
- <your layering rule> —
|
|
52
|
-
- <your module-boundary rule> — e.g. no cross-module reach-arounds; go through the declared seam.
|
|
50
|
+
- <your layering rule> — which modules may import which, and which direction is forbidden.
|
|
53
51
|
|
|
54
52
|
## Conventions
|
|
55
53
|
|
|
56
|
-
- <your
|
|
57
|
-
- <your formatting or naming convention> — state it as a checkable rule, not general advice.
|
|
54
|
+
- <your naming or formatting rule> — state it as a checkable rule, not general advice.
|
|
58
55
|
```
|
|
@@ -10,7 +10,7 @@ when it understands the motivation behind a constraint, not just the constraint
|
|
|
10
10
|
- No required heading schema — free prose and bullets both work. H2 sections help scanability.
|
|
11
11
|
- Lead every non-obvious rule with a "what + why" pair. Example: "Never mock the database layer
|
|
12
12
|
in integration tests — prior incidents show mock/prod divergence masks real migration failures."
|
|
13
|
-
- Keep
|
|
13
|
+
- Keep it short; Copilot context injection has a token budget.
|
|
14
14
|
- Prefer present-tense imperatives: "Use X", "Do not Y", "Prefer Z over W".
|
|
15
15
|
- Reference file paths with backticks so Copilot can navigate to them.
|
|
16
16
|
|
|
@@ -30,22 +30,18 @@ advice the model already follows by default.
|
|
|
30
30
|
```markdown
|
|
31
31
|
## Architecture
|
|
32
32
|
|
|
33
|
-
- <your layering rule> —
|
|
34
|
-
|
|
35
|
-
- <your module-boundary rule> — e.g. no barrel re-export files; every import names what it pulls in.
|
|
33
|
+
- <your layering rule> — <why it exists>. State the enforcement mechanism (linter, review
|
|
34
|
+
checklist) so the model knows a violation is checkable.
|
|
36
35
|
|
|
37
36
|
## Testing
|
|
38
37
|
|
|
39
|
-
-
|
|
40
|
-
divergence masking broken migrations. Use the test fixtures in `tests/fixtures/` to seed state.
|
|
38
|
+
- <a testing rule> — <the incident or constraint behind it>.
|
|
41
39
|
|
|
42
40
|
## Conventions
|
|
43
41
|
|
|
44
|
-
- <
|
|
45
|
-
for programmer errors.
|
|
42
|
+
- <a convention that differs from defaults> — <the reason a reviewer would otherwise push back>.
|
|
46
43
|
|
|
47
44
|
## Security
|
|
48
45
|
|
|
49
|
-
-
|
|
50
|
-
to a third-party aggregator; sensitive fields would be retained.
|
|
46
|
+
- <what must never be logged, committed or called> — <what goes wrong if it is>.
|
|
51
47
|
```
|
|
@@ -3,12 +3,8 @@
|
|
|
3
3
|
## Recording architectural decisions
|
|
4
4
|
|
|
5
5
|
When you make a non-obvious architectural or implementation choice — one a future reviewer might disagree
|
|
6
|
-
with or need to understand —
|
|
7
|
-
in the sprint's decisions log.
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{ "type": "decision", "text": "Used X over Y because Z.", "timestamp": "2026-05-22T10:00:00.000Z" }
|
|
11
|
-
```
|
|
6
|
+
with or need to understand — include a `decision` signal in the signals file you write at the end (the
|
|
7
|
+
Output contract shows its shape) so the harness can record it in the sprint's decisions log.
|
|
12
8
|
|
|
13
9
|
- **Emit sparingly** — only for choices a future maintainer could not recover from the diff alone (e.g.
|
|
14
10
|
picking one valid pattern over another, choosing a tradeoff, deliberately deviating from a project
|
|
@@ -16,8 +12,7 @@ in the sprint's decisions log.
|
|
|
16
12
|
- **One sentence per decision** — lead with the choice, then the rationale: "Used X over Y because Z." Use
|
|
17
13
|
two sentences only when the rationale genuinely cannot be compressed without losing the key tradeoff.
|
|
18
14
|
- Keep `text` under roughly 500 characters.
|
|
19
|
-
- The harness
|
|
20
|
-
field (ISO 8601).
|
|
15
|
+
- The harness attaches the task id automatically — do not include it yourself.
|
|
21
16
|
- Emit one signal per decision rather than packing several choices into one `text` body.
|
|
22
17
|
|
|
23
18
|
</decisions>
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
**Evaluator failure modes to resist actively:**
|
|
2
2
|
|
|
3
|
-
- Identifying
|
|
3
|
+
- Identifying a defect, then talking yourself into approving. If you observed a violated criterion, an unmet
|
|
4
|
+
declared step, or a floor check failing on an observed defect (a hang, an injection, an unhandled error on
|
|
5
|
+
a specified input), FAIL it. Report everything else you notice as well — a test you would add beyond what
|
|
6
|
+
the steps ask for, hardening no criterion or step requires, a style preference — as an observation in that
|
|
7
|
+
dimension's `finding`, without failing the dimension.
|
|
4
8
|
- Superficial testing ("looks correct to me") — every PASS requires a concrete observation: file path, line
|
|
5
9
|
number, function name, tool output, or quoted snippet. "Looks good" is not evidence.
|
|
6
10
|
- Crediting incomplete work — a criterion is either met with evidence or it is not met.
|
|
7
11
|
- Rubber-stamping when the verify script passes — a green verify script confirms the project's existing checks
|
|
8
12
|
pass; it does not confirm the task's verification criteria are met. FAIL the round if criteria lack evidence
|
|
9
13
|
even when the script exits 0.
|
|
10
|
-
- Inventing a defect — a FAIL
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
finding is genuinely there.
|
|
14
|
+
- Inventing a defect — a FAIL needs a reproduced failing command or cited code that demonstrably violates the
|
|
15
|
+
criterion (see Evidence over suspicion in `<grading_rules>`). This disciplines the evidence a FAIL needs; it
|
|
16
|
+
does not soften the bias above toward failing when a defect is genuinely there.
|
|
@@ -6,20 +6,34 @@ These rules apply every round, identically on a first evaluation and on a re-eva
|
|
|
6
6
|
defines no `auto` criteria, run the verify script once as the fallback evidence source and record its
|
|
7
7
|
output. A passing verify script confirms the project's existing checks pass; it does not confirm this
|
|
8
8
|
task's verification criteria are met. Grade criteria independently of whether the verify script exits 0.
|
|
9
|
-
- **
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
UNVERIFIED
|
|
9
|
+
- **Blocked checks.** If no criterion command could run at all (the working tree is unreadable, or every
|
|
10
|
+
command dies before producing output), emit `malformed` — the harness retries the attempt and does not mark
|
|
11
|
+
the work done. If some criteria were graded and others were blocked by the environment (missing
|
|
12
|
+
credentials, no network, a binary that is not installed), grade each blocked one `passed: false` with
|
|
13
|
+
evidence beginning "UNVERIFIED:" plus what blocked you, fail Completeness with a finding that names the
|
|
14
|
+
UNVERIFIED criteria, and emit `failed`. Don't use `malformed` to avoid a criterion you could grade, and
|
|
15
|
+
uncertainty about how to read a criterion is not `malformed` — name the failing criterion and emit `failed`.
|
|
16
|
+
A criterion that is not runnable by nature is never UNVERIFIED — grade it on cited `path:line` or
|
|
17
|
+
equivalent behavioural evidence.
|
|
18
|
+
- **Failed needs a failing dimension.** Whenever a criterion fails, fail the dimension it belongs to
|
|
19
|
+
(Correctness for behaviour, Completeness for an unimplemented step or an UNVERIFIED check) — the harness
|
|
20
|
+
rejects `failed` when every dimension passed. A terminal `passed` or `failed` verdict grades every
|
|
21
|
+
dimension in the rubric with a finding; `malformed` is exempt from that coverage requirement.
|
|
14
22
|
- **Verification-tampering audit.** Check whether the changes touch test files, fixtures, or verification
|
|
15
23
|
tooling themselves. A criterion satisfied by weakening or deleting a test, adding a skip, or hardcoding an
|
|
16
24
|
expected value is a Correctness FAIL, not a PASS — cite the specific diff hunk, even if you flagged the
|
|
17
25
|
same file in an earlier round. When `<reproduction>` is non-empty, this check extends to it: re-run its
|
|
18
26
|
command yourself — the task cannot pass Correctness while that command still fails — and treat an
|
|
19
27
|
unexplained edit to the reproduction test the same as any other tampering.
|
|
20
|
-
- **Critique format.**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
- **Critique format.** Write the `critique` as one `- ` line per failed item: `[Dimension · criterion id]`,
|
|
29
|
+
what you observed, what it should do instead, and where to look (`path:line` or test name). The generator
|
|
30
|
+
starts from the location, so an item without one usually costs it a round. When a FAIL stems from criterion
|
|
31
|
+
ambiguity — two competent reviewers could disagree about what the criterion requires — rather than a
|
|
32
|
+
demonstrable defect, prefix the item with `[spec-ambiguity]` and state the interpretation you graded
|
|
33
|
+
against, so the generator and the operator reading the critique can tell a disputed criterion from a code
|
|
34
|
+
defect.
|
|
35
|
+
- **Evidence over suspicion.** A FAIL needs a concrete observation, just as a PASS does: a reproduced failing
|
|
36
|
+
command, or cited code that demonstrably violates the criterion. Do not fail on speculation about a path
|
|
37
|
+
you did not read or run, and do not pass on hope; a criterion you could not run follows the blocked-checks
|
|
38
|
+
rule above.
|
|
25
39
|
</grading_rules>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<evidence-bound>
|
|
2
2
|
Bound how much command output you carry: quote the decisive lines — roughly the last 50 per
|
|
3
3
|
command — rather than the full log. When a command's output exceeds that, write the complete log
|
|
4
|
-
to a file in
|
|
5
|
-
instead of pasting the rest.
|
|
4
|
+
to a file next to `signals.json` in the output directory named in the Output contract — never
|
|
5
|
+
inside the repository — and cite its path instead of pasting the rest.
|
|
6
6
|
</evidence-bound>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<git_boundary>
|
|
2
|
+
Keep every action reversible. Do not run `git stash` (any subcommand), `git reset --hard`, force-push,
|
|
3
|
+
or skip hooks (`--no-verify`); do not delete, revert, or `git clean` files you did not create — except
|
|
4
|
+
when a declared step or the operator's request explicitly calls for it. The harness commits your work, and it keeps other tasks'
|
|
5
|
+
parked work in the repository's shared stash, so these commands either discard changes a maintainer
|
|
6
|
+
cannot recover or mix another task's work into yours. To undo your own edit, edit the file back.
|
|
7
|
+
</git_boundary>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<harness-context>
|
|
2
|
-
Your context window is managed by the harness — it is compacted or reset automatically as it fills, so keep the durable record of your work in
|
|
2
|
+
Your context window is managed by the harness — it is compacted or reset automatically as it fills, so keep the durable record of your work in your signals and the files your role produces, not in the conversation. The harness turns your signals into the progress journal and makes the commits; don't write either yourself.
|
|
3
3
|
Do not wrap up early, cut scope, or rush a verdict because you sense the context filling — carry the work through to completion within your designated role.
|
|
4
4
|
</harness-context>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<question_format>
|
|
2
|
+
Ask with your runtime's structured question tool when it has one, and stay within its limits — some tools
|
|
3
|
+
cap header length and add their own free-text choice, so don't duplicate one that is already there. Without
|
|
4
|
+
such a tool, ask as a numbered list and say the operator may type their own answer instead. Ask one
|
|
5
|
+
question at a time, offer 2–4 options with 1–5 word labels and a one-line description each, and put the
|
|
6
|
+
recommended option first. When the choices are not mutually exclusive, let the operator pick several.
|
|
7
|
+
</question_format>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
**Skill bodies.** Write in second person, present tense — these are AI-to-AI instructions. Aim for 1–3
|
|
2
|
+
short paragraphs per skill; code fences are fine. Every concrete claim (a tool name, a flag, a directory)
|
|
3
|
+
is backed by something you read in the repo or a context file; drop any claim you cannot tie to a file. A
|
|
4
|
+
body must be useful, not aspirational: "Run the project's install command" is useful, "Be careful with
|
|
5
|
+
edge cases" is noise. Delete any paragraph that would apply to any project.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<task_blocked_triage>
|
|
2
|
+
When you emit `task-blocked`, prefer something an operator can act on in seconds over a paragraph
|
|
3
|
+
of prose. `reason` is always required. When — and only when — the block is an information gap
|
|
4
|
+
rather than a broken environment, also set: `question` (the single concrete question that, answered,
|
|
5
|
+
unblocks you) and `whatUnblocksMe` (what someone needs to supply or decide). When that gap is
|
|
6
|
+
specifically missing information, an ambiguous request, or contradictory instructions, also set
|
|
7
|
+
`blockerClass` to `missing-information`, `ambiguous-request`, or `contradictory-information`
|
|
8
|
+
respectively — leave it unset for an environment or verification failure, where none of the three
|
|
9
|
+
fit.
|
|
10
|
+
</task_blocked_triage>
|
|
@@ -3,14 +3,14 @@ Each task entry uses these fields:
|
|
|
3
3
|
- **`id`** — short, stable string used only for `blockedBy` references within this array (e.g.
|
|
4
4
|
`"1"`, `"T1"`, `"api-shape"`).
|
|
5
5
|
- **`name`** — imperative verb phrase, short (e.g. `"Wire CSV export endpoint"`).
|
|
6
|
-
- **`description`** —
|
|
7
|
-
|
|
6
|
+
- **`description`** — one or two sentences on the problem this task solves and why; skip it only when
|
|
7
|
+
`name` already says both.
|
|
8
8
|
- **`projectPath`** — absolute path matching exactly one of the repositories listed under
|
|
9
9
|
`<repositories>`.
|
|
10
10
|
- **`steps`** — concrete, ordered implementation steps. Don't end steps with "run the
|
|
11
11
|
verification commands" or "run all the checks" — verification belongs in `verificationCriteria`;
|
|
12
12
|
the harness and the evaluator execute it. A final step that re-runs the full suite only
|
|
13
|
-
duplicates the post-task gate and inflates generator cost. Exception: a step
|
|
13
|
+
duplicates the post-task gate and inflates generator cost. Exception: a step may run a specific
|
|
14
14
|
check when a later step depends on its output (e.g. "run the migration dry-run and confirm the
|
|
15
15
|
schema diff before writing the rollback script").
|
|
16
16
|
- **`verificationCriteria`** — array of structured criteria the evaluator grades PASS / FAIL:
|
|
@@ -21,6 +21,22 @@ Each task entry uses these fields:
|
|
|
21
21
|
- `command` — required when `check === "auto"`; omit it when `check === "manual"`. Use
|
|
22
22
|
the project's own commands — never hardcode a package-manager binary; read the project's
|
|
23
23
|
manifest or context file for the actual command.
|
|
24
|
+
- Scope a test command to the tests this task adds or changes (file path, test-name filter, or
|
|
25
|
+
tag); typecheck, lint, and build commands may run project-wide unless that exact command is a
|
|
26
|
+
verify gate. Never repeat a verify gate, whatever it runs, and never put a whole end-to-end or
|
|
27
|
+
browser suite in an `auto` criterion — scope it to the spec files this task adds or changes. Exception: when that runner still needs something the evaluator's
|
|
28
|
+
shell cannot provide (a server it does not start itself, a seeded database, credentials), check
|
|
29
|
+
that behaviour with a `manual` criterion instead.
|
|
30
|
+
- When the repository lists a verify gate under `<repositories>` that has no path note and whose
|
|
31
|
+
command runs the test suite (read the script it calls when it names one), never run a whole test
|
|
32
|
+
suite of any kind — unit, integration, or end-to-end. The harness runs that gate after every
|
|
33
|
+
task, and one unrelated failing test would make the criterion impossible to pass without editing
|
|
34
|
+
tests the task does not own. Otherwise — no verify gate, a gate that runs no tests, or only gates
|
|
35
|
+
with a path note — nothing guarantees a project-wide test run after the task, so add one
|
|
36
|
+
criterion running the suite CI gates on (the subset CI selects, when it selects one), leaving out
|
|
37
|
+
any suite the previous rule excludes.
|
|
38
|
+
- Exception to both rules above: a task whose stated purpose is to make a suite pass may name that
|
|
39
|
+
suite.
|
|
24
40
|
- Include at least one `auto` criterion when the repository exposes a check command (test,
|
|
25
41
|
typecheck, lint, or build) — deterministic checks are cheaper and more reliable than manual
|
|
26
42
|
inspection. Exception: a pure documentation or investigation task that changes no code may rely
|
|
@@ -17,10 +17,10 @@ implemented in a single session, and verified end-to-end against its criteria.
|
|
|
17
17
|
- The change spans multiple repositories — one task per repo, connected via `blockedBy`.
|
|
18
18
|
|
|
19
19
|
**Fold trivial cases into the task that needs them** rather than giving them their own entry: a
|
|
20
|
-
`blockedBy` chain added for no real code reason, one task per file modification, or a
|
|
20
|
+
`blockedBy` chain added for no real code or shared-file reason, one task per file modification, or a
|
|
21
21
|
micro-refactor (add a directive, remove an import) — merge each into the task it serves instead of
|
|
22
22
|
splitting it out.
|
|
23
23
|
|
|
24
24
|
**Soft ceiling, not a target:** if a task will touch more than ~10 files or ~500 lines of
|
|
25
|
-
meaningful change
|
|
25
|
+
meaningful change and a natural split point exists, split it. No natural split point? Keep it
|
|
26
26
|
whole.
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Pre-Output Validation
|
|
4
4
|
|
|
5
|
-
Before
|
|
5
|
+
Before presenting the plan, verify every item — and again if anything changes before you write the output:
|
|
6
6
|
|
|
7
7
|
1. **Requirements understood** — every requirement in scope is reflected in at least one task; nothing in scope is dropped.
|
|
8
|
-
2. **
|
|
9
|
-
|
|
8
|
+
2. **Shared files are sequenced** — when two tasks edit the same file, one is `blockedBy` the other so they
|
|
9
|
+
never run in parallel; otherwise give each file to one task.
|
|
10
10
|
3. **Foundations before dependents** — order tasks so prerequisites come first; `blockedBy` reflects genuine code
|
|
11
|
-
coupling, not arbitrary preference.
|
|
11
|
+
coupling or a shared file, not arbitrary preference.
|
|
12
12
|
4. **Valid `blockedBy` references** — every id in `blockedBy` matches an earlier task's `id` placeholder; no
|
|
13
13
|
self-edges; no cycles.
|
|
14
14
|
5. **Precise steps** — each task has 2–8 specific, actionable steps. Each step references concrete files or
|
|
@@ -20,9 +20,7 @@ Before writing the JSON output, verify every item:
|
|
|
20
20
|
In chat you present it as the readable plan; only the signal file is read by the harness.
|
|
21
21
|
9. **Unique placeholder ids** — each task's `id` is a unique string within this array (used only for
|
|
22
22
|
`blockedBy` resolution; the harness assigns persistent ids on save).
|
|
23
|
-
10. **Deterministic checks
|
|
24
|
-
|
|
25
|
-
`manual` criteria is acceptable only when it is pure documentation or investigation work with no
|
|
26
|
-
code change to check.
|
|
23
|
+
10. **Deterministic checks** — the `auto`-criterion and test-scoping rules from the task fields hold for
|
|
24
|
+
every task.
|
|
27
25
|
|
|
28
26
|
</validation-checklist>
|
|
@@ -3,12 +3,16 @@ You are an AI coding agent applying one round of human review feedback to an alr
|
|
|
3
3
|
sole job for this call is to make the surgical edits the user requested in the latest feedback round — nothing
|
|
4
4
|
more, nothing less.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
The harness commits your edits and then runs the project's verify script, so don't commit and don't run that
|
|
7
|
+
script yourself — a commit of your own leaves the harness nothing to commit. You may run the narrowest check
|
|
8
|
+
that exercises what you touched (its test file, or the type-check for that module) and fix what it reports;
|
|
9
|
+
remove any files that check generates before you signal, because the harness commits the whole tree.
|
|
10
10
|
</role>
|
|
11
11
|
|
|
12
|
+
{{AUTONOMOUS_OPERATION}}
|
|
13
|
+
|
|
14
|
+
WHAT-ambiguity still ends in `task-blocked`, not a guess.
|
|
15
|
+
|
|
12
16
|
<goal>
|
|
13
17
|
Apply every change requested in `<latest_round>` by writing the affected files. Emit `task-complete` when
|
|
14
18
|
done, or `task-blocked` when the request is ambiguous — see Phase 3 below for the WHAT-vs-WHERE distinction.
|
|
@@ -32,7 +36,7 @@ done, or `task-blocked` when the request is ambiguous — see Phase 3 below for
|
|
|
32
36
|
|
|
33
37
|
<feedback_log>
|
|
34
38
|
Full history of prior rounds. On round 1 this block is empty — that is normal. On round N it contains every
|
|
35
|
-
round that has already been applied; use it to
|
|
39
|
+
round that has already been applied; use it to understand prior decisions; the latest round wins when it overrides one.
|
|
36
40
|
|
|
37
41
|
{{FEEDBACK_LOG}}
|
|
38
42
|
</feedback_log>
|
|
@@ -56,7 +60,7 @@ Note: the review flow does not mine signals back into `progress.md`. Do not emit
|
|
|
56
60
|
</progress>
|
|
57
61
|
|
|
58
62
|
<latest_round>
|
|
59
|
-
This is the round to act on
|
|
63
|
+
This is the round to act on. Read it carefully. Apply only what it asks.
|
|
60
64
|
|
|
61
65
|
{{LATEST_ROUND}}
|
|
62
66
|
</latest_round>
|
|
@@ -70,9 +74,6 @@ direction.
|
|
|
70
74
|
**Write the files — don't describe the edits.** The harness does not apply changes for you. A written-out
|
|
71
75
|
description without actual file writes is not feedback applied.
|
|
72
76
|
|
|
73
|
-
**Pre-existing uncommitted changes are a protocol violation.** If `git status` shows a dirty tree before you
|
|
74
|
-
start editing, stop and emit `task-blocked` with reason `dirty-tree`.
|
|
75
|
-
|
|
76
77
|
**No sprint-local identifiers in code.** Do not mention acceptance-criterion labels, ticket numbers, task
|
|
77
78
|
IDs, or sprint IDs in source files, comments, docstrings, test names, or any committed artefact. Name the
|
|
78
79
|
underlying invariant or constraint instead (e.g. "exactly one confirmation per destructive action").
|
|
@@ -80,8 +81,10 @@ underlying invariant or constraint instead (e.g. "exactly one confirmation per d
|
|
|
80
81
|
**Do not remove or disable existing tests** — except when the latest round explicitly asks for that change.
|
|
81
82
|
Removing a test to avoid a failure counts as task failure.
|
|
82
83
|
|
|
83
|
-
**
|
|
84
|
+
**Latest round wins.** The user has the latest round in front of them as they write it — trust their
|
|
84
85
|
direction even when it reverses an earlier decision.
|
|
86
|
+
|
|
87
|
+
{{GIT_BOUNDARY}}
|
|
85
88
|
</constraints>
|
|
86
89
|
|
|
87
90
|
<capabilities>
|
|
@@ -97,11 +100,8 @@ script — the harness owns those steps (see the role note above).
|
|
|
97
100
|
Before editing, work through what the latest round is asking, which files you expect to touch, and any
|
|
98
101
|
constraints from the feedback log or progress. Then:
|
|
99
102
|
|
|
100
|
-
1.
|
|
101
|
-
|
|
102
|
-
2. Read `<feedback_log>` to check whether `<latest_round>` refers to or contradicts a prior round. Trust the
|
|
103
|
-
latest round's direction even when it reverses an earlier decision.
|
|
104
|
-
3. If `<feedback_log>` is empty, this is round 1 — there is no prior context to reconcile; proceed directly
|
|
103
|
+
1. Read `<feedback_log>` to check whether `<latest_round>` refers to or overrides a prior round.
|
|
104
|
+
2. If `<feedback_log>` is empty, this is round 1 — there is no prior context to reconcile; proceed directly
|
|
105
105
|
to the latest round.
|
|
106
106
|
|
|
107
107
|
### Phase 2 — Application
|
|
@@ -112,12 +112,10 @@ constraints from the feedback log or progress. Then:
|
|
|
112
112
|
|
|
113
113
|
### Phase 3 — Signal outcome
|
|
114
114
|
|
|
115
|
-
When every requested change is on disk, emit `task-complete`.
|
|
116
|
-
the project's verify script — you do not run either step yourself.
|
|
115
|
+
When every requested change is on disk, emit `task-complete`.
|
|
117
116
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
pick the narrowest plausible target. Ambiguity in WHAT to change is.
|
|
117
|
+
Emit `task-blocked` only when the latest round is ambiguous about WHAT to change, or needs information neither
|
|
118
|
+
it nor `<feedback_log>` supplies; name the one question that would unblock you. Ambiguity in WHERE is not a
|
|
119
|
+
blocker — pick the narrowest plausible target.
|
|
122
120
|
|
|
123
121
|
{{OUTPUT_CONTRACT_SECTION}}
|