bmad-method 6.11.1-next.2 → 6.11.1-next.21
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/package.json +2 -2
- package/src/bmm-skills/agents/bmad-agent-analyst/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-architect/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-dev/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-pm/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-ux-designer/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-architecture/SKILL.md +1 -1
- package/src/bmm-skills/plan/bmad-architecture/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-generate-project-context/SKILL.md +2 -0
- package/src/bmm-skills/plan/bmad-prd/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-prfaq/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-product-brief/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-project-context/SKILL.md +23 -12
- package/src/bmm-skills/plan/bmad-project-context/references/best-practices.md +26 -7
- package/src/bmm-skills/plan/bmad-project-context/references/template.md +1 -1
- package/src/bmm-skills/plan/bmad-spec/customize.toml +5 -5
- package/src/bmm-skills/plan/bmad-sprint-planning/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/plan/bmad-ux/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-build/SKILL.md +1 -1
- package/src/bmm-skills/ship/bmad-build/customize.toml +13 -16
- package/src/bmm-skills/ship/bmad-build/references/claims-check.md +14 -0
- package/src/bmm-skills/ship/bmad-build/review-prompts/edge-case-hunter.md +29 -7
- package/src/bmm-skills/ship/bmad-build/review-prompts/verification-gap.md +1 -1
- package/src/bmm-skills/ship/bmad-build/step-01-clarify-and-route.md +12 -7
- package/src/bmm-skills/ship/bmad-build/step-02-plan.md +13 -10
- package/src/bmm-skills/ship/bmad-build/step-03-implement.md +3 -1
- package/src/bmm-skills/ship/bmad-build/step-04-review.md +7 -5
- package/src/bmm-skills/ship/bmad-build/step-oneshot.md +7 -8
- package/src/bmm-skills/ship/bmad-build-auto/customize.toml +16 -18
- package/src/bmm-skills/ship/bmad-build-auto/references/claims-check.md +14 -0
- package/src/bmm-skills/ship/bmad-build-auto/review-prompts/edge-case-hunter.md +29 -7
- package/src/bmm-skills/ship/bmad-build-auto/review-prompts/verification-gap.md +1 -1
- package/src/bmm-skills/ship/bmad-build-auto/step-03-implement.md +5 -1
- package/src/bmm-skills/ship/bmad-build-auto/step-04-review.md +7 -5
- package/src/bmm-skills/ship/bmad-checkpoint-preview/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-code-review/customize.toml +14 -17
- package/src/bmm-skills/ship/bmad-code-review/references/claims-check.md +14 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +29 -7
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +1 -1
- package/src/bmm-skills/ship/bmad-code-review/steps/step-01-gather-context.md +22 -15
- package/src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md +2 -2
- package/src/bmm-skills/ship/bmad-correct-course/SKILL.md +11 -3
- package/src/bmm-skills/ship/bmad-correct-course/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-retrospective/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/v6-shims/bmad-create-architecture/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-create-architecture/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-create-prd/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-create-prd/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-create-story/SKILL.md +3 -1
- package/src/bmm-skills/v6-shims/bmad-create-story/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-dev-auto/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-dev-story/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-dev-story/customize.toml +1 -6
- package/src/bmm-skills/v6-shims/bmad-document-project/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-domain-research/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-edit-prd/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-market-research/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-quick-dev/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-technical-research/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-validate-prd/SKILL.md +2 -0
- package/src/bmm-skills/v6-shims/bmad-validate-prd/customize.toml +1 -3
- package/src/core-skills/bmad-advanced-elicitation/SKILL.md +21 -22
- package/src/core-skills/bmad-brainstorming/customize.toml +5 -6
- package/src/core-skills/bmad-forge-idea/customize.toml +5 -6
- package/src/core-skills/bmad-party-mode/customize.toml +4 -4
- package/src/core-skills/bmad-review/SKILL.md +5 -4
- package/src/core-skills/bmad-review/customize.toml +1 -1
- package/src/core-skills/bmad-review/references/lens-edge-case-hunter.md +16 -0
- package/src/core-skills/v6-shims/bmad-editorial-review/SKILL.md +2 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-prose/SKILL.md +2 -0
- package/src/core-skills/v6-shims/bmad-editorial-review-structure/SKILL.md +2 -0
- package/src/core-skills/v6-shims/bmad-review-adversarial-general/SKILL.md +2 -0
- package/src/core-skills/v6-shims/bmad-review-edge-case-hunter/SKILL.md +2 -0
- package/src/core-skills/v6-shims/bmad-review-verification-gap/SKILL.md +2 -0
- package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
- package/tools/installer/commands/install.js +2 -0
- package/tools/installer/core/config.js +3 -0
- package/tools/installer/core/installer.js +57 -1
- package/tools/installer/core/manifest-generator.js +6 -0
- package/tools/installer/core/manifest.js +6 -0
- package/tools/installer/core/shim-policy.js +159 -0
- package/tools/installer/ide/_config-driven.js +3 -3
- package/tools/installer/ide/platform-codes.yaml +7 -0
- package/tools/installer/modules/official-modules.js +38 -6
- package/tools/installer/prompts.js +15 -2
- package/tools/installer/ui.js +68 -3
|
@@ -5,10 +5,12 @@ When a diff is provided, scan only the diff hunks and list boundaries that are d
|
|
|
5
5
|
When no diff is provided (full file or function), treat the entire provided content as the scope.
|
|
6
6
|
Ignore the rest of the codebase unless the provided content explicitly references external functions.
|
|
7
7
|
A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
8
|
+
A claims check runs as Step 5.
|
|
8
9
|
|
|
9
10
|
**Inputs:**
|
|
10
|
-
- **content** — Content to review: diff, full file, or function
|
|
11
|
+
- **content** — Content to review, or a path to read it from: diff, full file, or function
|
|
11
12
|
- **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
|
|
13
|
+
- **claims_file** — Path to the spec this change was built from. Do NOT read it before Step 5: the path tracing in Steps 2–3 must finish before the claims are seen.
|
|
12
14
|
|
|
13
15
|
**MANDATORY: Execute steps in the Execution section IN EXACT ORDER. DO NOT skip steps or change the sequence. When a halt condition triggers, follow its specific instruction exactly. Each action within a step is a REQUIRED action to complete that step.**
|
|
14
16
|
|
|
@@ -19,8 +21,8 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
|
19
21
|
|
|
20
22
|
### Step 1: Receive Content
|
|
21
23
|
|
|
22
|
-
-
|
|
23
|
-
- If content is empty, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
24
|
+
- Take the content to review from the parent message that launched you — inline, or by reading the file it points to (never from this instruction file)
|
|
25
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
24
26
|
- Identify content type (diff, full file, or function) to determine scope rules
|
|
25
27
|
|
|
26
28
|
### Step 2: Exhaustive Path Analysis
|
|
@@ -42,7 +44,11 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
|
42
44
|
|
|
43
45
|
If the diff removed or replaced meaningful code (ignore pure renames and whitespace): load `references/deletion-check.md` and follow it.
|
|
44
46
|
|
|
45
|
-
### Step 5:
|
|
47
|
+
### Step 5: Claims Check
|
|
48
|
+
|
|
49
|
+
Load `references/claims-check.md` and follow it.
|
|
50
|
+
|
|
51
|
+
### Step 6: Present Findings
|
|
46
52
|
|
|
47
53
|
Output all findings as a single JSON array following the Output Format specification exactly.
|
|
48
54
|
|
|
@@ -60,12 +66,12 @@ Return ONLY a valid JSON array of objects. Each edge-case finding contains exact
|
|
|
60
66
|
}]
|
|
61
67
|
```
|
|
62
68
|
|
|
63
|
-
No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4, if any, go in the same array with the extra fields defined in `references/deletion-check.md`.
|
|
69
|
+
No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4 and claim findings from Step 5, if any, go in the same array with the extra fields defined in `references/deletion-check.md` and `references/claims-check.md`.
|
|
64
70
|
|
|
65
71
|
|
|
66
72
|
## HALT CONDITIONS
|
|
67
73
|
|
|
68
|
-
- If content is empty or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
74
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
69
75
|
<reference path="references/deletion-check.md">
|
|
70
76
|
# Deletion Check
|
|
71
77
|
|
|
@@ -82,7 +88,23 @@ For a deletion finding the standard fields read as: `location` = the removed ite
|
|
|
82
88
|
|
|
83
89
|
Add nothing if nothing qualifies.
|
|
84
90
|
</reference>
|
|
91
|
+
<reference path="references/claims-check.md">
|
|
92
|
+
# Claims Check
|
|
93
|
+
|
|
94
|
+
Final pass for the Edge Case Hunter. Read the claims file named in the message that launched you now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
|
|
95
|
+
|
|
96
|
+
It is the spec the change was built from. Read only its `## Intent` and `## Tasks & Acceptance` sections — the claims live there; ignore the rest of the file. The spec is the change's own account of itself: testimony, not evidence — a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
|
|
97
|
+
|
|
98
|
+
Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
|
|
99
|
+
|
|
100
|
+
- `kind`: `"claim"`
|
|
101
|
+
- `confidence`: `"high"`, `"medium"`, or `"low"`
|
|
102
|
+
|
|
103
|
+
For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
|
|
104
|
+
|
|
105
|
+
Verified claims produce nothing. Add nothing if nothing is falsified.
|
|
106
|
+
</reference>
|
|
85
107
|
|
|
86
108
|
## CONTENT SOURCE
|
|
87
109
|
|
|
88
|
-
|
|
110
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is.
|
|
@@ -110,4 +110,4 @@ When you find no verification gaps and no other findings, output exactly this si
|
|
|
110
110
|
|
|
111
111
|
## CONTENT SOURCE
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is. If no content is supplied, or the file it points to is missing, empty, or unreadable, say exactly that and stop — never report a clean review for content you could not read.
|
|
@@ -30,10 +30,13 @@ Before listing artifacts or prompting the user, check whether you already know t
|
|
|
30
30
|
Use the same routing as above.
|
|
31
31
|
|
|
32
32
|
3. Otherwise — scan artifacts and ask
|
|
33
|
-
- Active specs (`draft`, `ready-for-dev`, `in-progress`, `in-review`) in `{{.implementation_artifacts}}`? → List them and HALT.
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
33
|
+
- Active specs (`draft`, `ready-for-dev`, `in-progress`, `in-review`) in `{{.implementation_artifacts}}`? → List them and HALT. Give the user a choice:
|
|
34
|
+
- Resume one of the listed specs
|
|
35
|
+
- **New** — start new work
|
|
36
|
+
If `draft` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-02-plan.md]]` (resume planning from the draft)
|
|
37
|
+
If `ready-for-dev` or `in-progress` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-03-implement.md]]`
|
|
38
|
+
If `in-review` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-04-review.md]]`
|
|
39
|
+
If the user chooses **New**: proceed to INSTRUCTIONS
|
|
37
40
|
- Unformatted spec or intent file lacking `status` frontmatter? → Suggest treating its contents as the starting intent. Do NOT attempt to infer a state and resume it.
|
|
38
41
|
|
|
39
42
|
Never ask extra questions if you already understand what the user intends.
|
|
@@ -82,14 +85,16 @@ If the spec is an epic story and `{{.implementation_artifacts}}/sprint-status.ya
|
|
|
82
85
|
4. Multi-goal check (see SCOPE STANDARD). If the intent fails the single-goal criteria:
|
|
83
86
|
- Present detected distinct goals as a bullet list.
|
|
84
87
|
- Explain briefly (2–4 sentences): why each goal qualifies as independently shippable, any coupling risks if split, and which goal you recommend tackling first.
|
|
85
|
-
- HALT and
|
|
86
|
-
|
|
88
|
+
- HALT and give the user a choice:
|
|
89
|
+
- **Split** — pick first goal, defer the rest.
|
|
90
|
+
- **Keep all goals** — accept the risks.
|
|
91
|
+
- If the user chooses **Split**: For each deferred goal, append one new entry to `{{.implementation_artifacts}}/deferred-work.md` using this format. Do not modify existing entries or look for duplicates. Narrow scope to the first-mentioned goal. Continue routing.
|
|
87
92
|
```markdown
|
|
88
93
|
- source_spec: none
|
|
89
94
|
summary: <one sentence naming the deferred goal>
|
|
90
95
|
evidence: <why this was split from the current intent>
|
|
91
96
|
```
|
|
92
|
-
-
|
|
97
|
+
- If the user chooses **Keep all goals**: Proceed as-is.
|
|
93
98
|
5. Route — choose exactly one:
|
|
94
99
|
|
|
95
100
|
If the explicit spec-folder-plus-story-id pair had no matching story file, keep the colocated `spec_file` selected above. Otherwise, derive a valid kebab-case slug from the clarified intent. If the intent references a tracking identifier (story number, issue number, ticket ID), lead the slug with it (e.g. `3-2-digest-delivery`, `gh-47-fix-auth`). If `{{.implementation_artifacts}}/spec-{slug}.md` already exists: if its status is `draft`, treat it as the same work and resume it (set `spec_file` to that path, **EARLY EXIT** → `[[bmad-snapshot:step-02-plan.md]]`); otherwise append `-2`, `-3`, etc. Set `spec_file` = `{{.implementation_artifacts}}/spec-{slug}.md`.
|
|
@@ -14,33 +14,36 @@
|
|
|
14
14
|
5. If intent gaps exist, do not fantasize, do not leave open questions, HALT and ask the human.
|
|
15
15
|
6. Token count check (see SCOPE STANDARD). If spec exceeds 1600 tokens:
|
|
16
16
|
- Show user the token count.
|
|
17
|
-
- HALT and
|
|
18
|
-
|
|
17
|
+
- HALT and give the user a choice:
|
|
18
|
+
- **Split** — carve off secondary goals.
|
|
19
|
+
- **Keep full spec** — accept the risks.
|
|
20
|
+
- If the user chooses **Split**: Propose the split — name each secondary goal. For each deferred goal, append one new entry to `{{.implementation_artifacts}}/deferred-work.md` using this format. Do not modify existing entries or look for duplicates. Rewrite the current spec to cover only the main goal — do not surgically carve sections out; regenerate the spec for the narrowed scope. Continue to checkpoint.
|
|
19
21
|
```markdown
|
|
20
22
|
- source_spec: `{spec_file}`
|
|
21
23
|
summary: <one sentence naming the deferred goal>
|
|
22
24
|
evidence: <why this was split from the current spec>
|
|
23
25
|
```
|
|
24
|
-
-
|
|
26
|
+
- If the user chooses **Keep full spec**: Continue to checkpoint with the full spec.
|
|
25
27
|
|
|
26
28
|
### CHECKPOINT 1
|
|
27
29
|
|
|
28
|
-
Present summary. Display the spec file path as a CWD-relative path (no leading `/`) so it is clickable in the terminal. If token count exceeded 1600 and user chose
|
|
30
|
+
Present summary. Display the spec file path as a CWD-relative path (no leading `/`) so it is clickable in the terminal. If token count exceeded 1600 and the user chose to keep the full spec, include the token count and explain why it may be a problem.
|
|
29
31
|
|
|
30
32
|
After presenting the summary, display this note:
|
|
31
33
|
|
|
32
34
|
---
|
|
33
35
|
|
|
34
|
-
Before approving, you can open the spec file in an editor or ask me questions and tell me what to change. You can also use `bmad-advanced-elicitation
|
|
36
|
+
Before approving, you can open the spec file in an editor or ask me questions and tell me what to change. You can also use `bmad-advanced-elicitation` or `bmad-party-mode`, ideally in another session to avoid context bloat.
|
|
35
37
|
|
|
36
38
|
---
|
|
37
39
|
|
|
38
|
-
HALT and
|
|
40
|
+
HALT and give the user a choice:
|
|
39
41
|
|
|
40
|
-
- **
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
- **Approve and continue** — approve the spec and proceed to implementation in this session.
|
|
43
|
+
- **Approve and stop** — approve the spec, leave it `ready-for-dev`, and stop so a fresh `bmad-build` session can resume at implementation.
|
|
44
|
+
- **Review spec** — review the spec, use a subagent if available, and discuss the findings and revisions with the user until the user is ready to approve, then either stop or continue.
|
|
45
|
+
|
|
46
|
+
Before acting on approval, re-read `{spec_file}` from disk. If it is missing, HALT without recreating it, changing status, or proceeding. If it changed, acknowledge the external edits and continue with the updated version. Set status `ready-for-dev`; everything inside `<frozen-after-approval>` is then locked and only the human can change it.
|
|
44
47
|
|
|
45
48
|
## NEXT
|
|
46
49
|
|
|
@@ -38,7 +38,9 @@ The handoff directs the subagent to load the spec's `context:` files itself, so
|
|
|
38
38
|
|
|
39
39
|
### Tasks & Acceptance Verification
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Stage the diff and read it first: using the repository's version-control tooling, write a unified diff of all changes since `{baseline_commit}` (from `{spec_file}` frontmatter) — untracked files included — to a uniquely-named file in the system temp directory, set `{diff_file}` to its absolute path, and read that file into your own context. Judge against the diff, not against the implementation subagent's report.
|
|
42
|
+
|
|
43
|
+
Verify every task in the `## Tasks & Acceptance` section of `{spec_file}` is complete and every acceptance criterion is satisfied. Mark each finished task `[x]`. If any task is not done or any acceptance criterion is not satisfied, finish the missing work before proceeding — and when that changes code, rewrite `{diff_file}` and re-read it.
|
|
42
44
|
|
|
43
45
|
### Matrix Test Audit
|
|
44
46
|
|
|
@@ -10,19 +10,21 @@
|
|
|
10
10
|
|
|
11
11
|
Change `{spec_file}` status to `in-review` in the frontmatter before continuing.
|
|
12
12
|
|
|
13
|
-
###
|
|
13
|
+
### Stage the Diff
|
|
14
14
|
|
|
15
|
-
Read `{baseline_commit}` from `{spec_file}` frontmatter. If `{baseline_commit}` is missing or `NO_VCS`, use best effort to determine what changed. Otherwise
|
|
15
|
+
Read `{baseline_commit}` from `{spec_file}` frontmatter. If `{baseline_commit}` is missing or `NO_VCS`, use best effort to determine what changed. Otherwise use the repository's version-control tooling to rewrite `{diff_file}` — the temp file staged in step-03, or a uniquely-named file in the system temp directory when this run has none — with a unified diff of all changes since `{baseline_commit}`, untracked files included. The review layers read that file; the diff text is never pasted into their prompts.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Set `{claims_file}` = `{spec_file}`. The spec is the change's own account of itself, and it goes to the edge-case layer alone — as a path, so that layer reads it only after its own tracing and the other layers never see it at all.
|
|
18
|
+
|
|
19
|
+
Writing `{diff_file}` is the only change this section makes. Do NOT `git add` anything.
|
|
18
20
|
|
|
19
21
|
### Review
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
Announce skipped layers first, then launch every active layer before handling any layer's result. Try running all active layers simultaneously: substitute the runtime placeholders (`{diff_file}`, `{claims_file}`) into each layer's instruction. `{diff_file}` is a path: substitute the absolute path and let the layer read the file — a launch prompt never carries diff text. When an instruction launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Parallel means several blocking calls awaited together in this turn — never backgrounded or detached, never ending the turn to await results. When running layers as subagents, spawn every reviewer before reading or reacting to any of their output; begin collection and triage only once all are launched.
|
|
22
24
|
|
|
23
25
|
{workflow.review_layers}
|
|
24
26
|
|
|
25
|
-
If a layer's instruction requires subagents and none are available, for each such layer write under `{{.implementation_artifacts}}`
|
|
27
|
+
If a layer's instruction requires subagents and none are available, for each such layer write under `{{.implementation_artifacts}}` that layer's child prompt with every file it points to — the diff, the claims, the reviewer instruction file — replaced inline by that file's contents, and every other line left exactly as written. That session shares no filesystem with this one, so its prompt has to stand alone; this is the only place you read a reviewer instruction file yourself. Then HALT. Ask the human to run each in a separate session (ideally a different LLM) and paste back the findings.
|
|
26
28
|
|
|
27
29
|
### Classify
|
|
28
30
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- **Language** — Speak in `{{.communication_language}}`. Write any file output in `{{.document_output_language}}`.
|
|
6
6
|
- NEVER auto-push.
|
|
7
7
|
- All review subagents must run at the same model capability as the current session.
|
|
8
|
-
- Run subagents synchronously: launch them together,
|
|
8
|
+
- Run subagents synchronously: launch them together as blocking calls awaited in this turn — never backgrounded or detached, never ending the turn to await results.
|
|
9
9
|
|
|
10
10
|
## INSTRUCTIONS
|
|
11
11
|
|
|
@@ -17,7 +17,7 @@ Implement the clarified intent directly.
|
|
|
17
17
|
|
|
18
18
|
### Review
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Announce skipped layers first, then launch every active layer before handling any layer's result. Try running all active layers simultaneously. After substituting runtime placeholders, when an instruction launches a reviewer subagent, launch that child with the prompt text; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written:
|
|
21
21
|
|
|
22
22
|
{workflow.oneshot_review_layers}
|
|
23
23
|
|
|
@@ -25,18 +25,17 @@ If a layer's instruction requires subagents and none are available, for each suc
|
|
|
25
25
|
|
|
26
26
|
### Classify
|
|
27
27
|
|
|
28
|
-
Deduplicate all review findings
|
|
28
|
+
Deduplicate all review findings, then route each finding in this order:
|
|
29
29
|
|
|
30
|
-
- **patch** —
|
|
31
|
-
- **
|
|
30
|
+
- **patch** — Patch every finding caused or exposed by this change that shows a defect that actually occurs, missing coverage for a specific case, or a broken gate or convention — not a state nothing reaches — and whose smallest fix is trivial, adds no public surface, and guards no state the finding did not demonstrate. Apply that smallest fix immediately.
|
|
31
|
+
- **HALT** — HALT on every finding caused or exposed by this change that shows the same evidence but whose smallest fix fails any of those conditions. Present it to the human for decision before proceeding.
|
|
32
|
+
- **defer** — Defer every other real finding, including pre-existing issues and improvement ideas. Append one new entry to `{{.implementation_artifacts}}/deferred-work.md` using this format. Do not modify existing entries or look for duplicates.
|
|
32
33
|
```markdown
|
|
33
34
|
- source_spec: `{spec_file}`
|
|
34
35
|
summary: <one sentence>
|
|
35
36
|
evidence: <why this is real>
|
|
36
37
|
```
|
|
37
|
-
- **reject** — noise. Drop silently.
|
|
38
|
-
|
|
39
|
-
If a finding is caused by this change but too significant for a trivial patch, HALT and present it to the human for decision before proceeding.
|
|
38
|
+
- **reject** — Reject only noise. Drop silently.
|
|
40
39
|
|
|
41
40
|
### Generate Spec Trace
|
|
42
41
|
|
|
@@ -24,9 +24,7 @@ activation_steps_append = []
|
|
|
24
24
|
# Entries are literal text or file references prefixed with "file:".
|
|
25
25
|
# File entries may use globs and are loaded during activation.
|
|
26
26
|
|
|
27
|
-
persistent_facts = [
|
|
28
|
-
"file:{project-root}/**/project-context.md",
|
|
29
|
-
]
|
|
27
|
+
persistent_facts = []
|
|
30
28
|
|
|
31
29
|
# Instruction run by HALT after writing the terminal result.
|
|
32
30
|
# Empty means no extra terminal behavior.
|
|
@@ -48,8 +46,10 @@ Launch a subagent with no prior conversation context, with this prompt:
|
|
|
48
46
|
|
|
49
47
|
# Review layers for the review step. `instruction` is the layer's whole
|
|
50
48
|
# execution recipe — subagents by default, but an override may run anything
|
|
51
|
-
# (e.g. an external reviewer via bash). {
|
|
52
|
-
# time
|
|
49
|
+
# (e.g. an external reviewer via bash). {diff_file} and {claims_file} are
|
|
50
|
+
# substituted at run time; both are paths, and {diff_file} is the unified diff
|
|
51
|
+
# file the layer reads. `when` (optional) gates a layer; empty `instruction`
|
|
52
|
+
# disables it.
|
|
53
53
|
|
|
54
54
|
[[workflow.review_layers]]
|
|
55
55
|
id = "blind-hunter"
|
|
@@ -64,10 +64,9 @@ Output a Markdown list of findings only — no severity, priority, or ranking.
|
|
|
64
64
|
If the content is empty, stop and say so.
|
|
65
65
|
If you have zero findings, re-check and keep thinking; do not stop with an empty list.
|
|
66
66
|
|
|
67
|
-
CONTENT:
|
|
68
|
-
{diff_output}
|
|
67
|
+
CONTENT: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
69
68
|
|
|
70
|
-
Do not invoke any skill. Return
|
|
69
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
71
70
|
|
|
72
71
|
"""
|
|
73
72
|
|
|
@@ -79,11 +78,11 @@ Launch a context-free subagent with this prompt:
|
|
|
79
78
|
|
|
80
79
|
Read `{skill-root}/review-prompts/edge-case-hunter.md` completely and follow it as your review instructions.
|
|
81
80
|
|
|
82
|
-
|
|
81
|
+
claims_file (leave unread until your instructions call for it): {claims_file}
|
|
83
82
|
|
|
84
|
-
{
|
|
83
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
85
84
|
|
|
86
|
-
Do not invoke any skill. If the instruction file is unreadable, report that exact failure and stop. Return
|
|
85
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
87
86
|
|
|
88
87
|
"""
|
|
89
88
|
|
|
@@ -95,11 +94,9 @@ Launch a context-free subagent with this prompt:
|
|
|
95
94
|
|
|
96
95
|
Read `{skill-root}/review-prompts/verification-gap.md` completely and follow it as your review instructions.
|
|
97
96
|
|
|
98
|
-
Review content:
|
|
97
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
99
98
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Do not invoke any skill. If the instruction file is unreadable, report that exact failure and stop. Return only the review result.
|
|
99
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
103
100
|
|
|
104
101
|
"""
|
|
105
102
|
|
|
@@ -113,9 +110,10 @@ You are an intent-alignment auditor. You have no other context about how this ch
|
|
|
113
110
|
|
|
114
111
|
{verbatim_intent}
|
|
115
112
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
{diff_output}
|
|
113
|
+
The diff is the unified diff at `{diff_file}`. Read that file — it is the change under review.
|
|
119
114
|
|
|
120
115
|
Your task is strictly descriptive — do not prescribe additional work. Report: (1) the defensible readings of the intent, enumerated; (2) which reading this diff implements; (3) where the readings and the diff diverge — specifically, which surface the intent's expectations live at versus which surface the diff's changes and its tests exercise.
|
|
116
|
+
|
|
117
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
118
|
+
|
|
121
119
|
"""
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Claims Check
|
|
2
|
+
|
|
3
|
+
Final pass for the Edge Case Hunter. Read the claims file named in the message that launched you now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
|
|
4
|
+
|
|
5
|
+
It is the spec the change was built from. Read only its `## Intent` and `## Tasks & Acceptance` sections — the claims live there; ignore the rest of the file. The spec is the change's own account of itself: testimony, not evidence — a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
|
|
6
|
+
|
|
7
|
+
Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
|
|
8
|
+
|
|
9
|
+
- `kind`: `"claim"`
|
|
10
|
+
- `confidence`: `"high"`, `"medium"`, or `"low"`
|
|
11
|
+
|
|
12
|
+
For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
|
|
13
|
+
|
|
14
|
+
Verified claims produce nothing. Add nothing if nothing is falsified.
|
|
@@ -5,10 +5,12 @@ When a diff is provided, scan only the diff hunks and list boundaries that are d
|
|
|
5
5
|
When no diff is provided (full file or function), treat the entire provided content as the scope.
|
|
6
6
|
Ignore the rest of the codebase unless the provided content explicitly references external functions.
|
|
7
7
|
A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
8
|
+
A claims check runs as Step 5.
|
|
8
9
|
|
|
9
10
|
**Inputs:**
|
|
10
|
-
- **content** — Content to review: diff, full file, or function
|
|
11
|
+
- **content** — Content to review, or a path to read it from: diff, full file, or function
|
|
11
12
|
- **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
|
|
13
|
+
- **claims_file** — Path to the spec this change was built from. Do NOT read it before Step 5: the path tracing in Steps 2–3 must finish before the claims are seen.
|
|
12
14
|
|
|
13
15
|
**MANDATORY: Execute steps in the Execution section IN EXACT ORDER. DO NOT skip steps or change the sequence. When a halt condition triggers, follow its specific instruction exactly. Each action within a step is a REQUIRED action to complete that step.**
|
|
14
16
|
|
|
@@ -19,8 +21,8 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
|
19
21
|
|
|
20
22
|
### Step 1: Receive Content
|
|
21
23
|
|
|
22
|
-
-
|
|
23
|
-
- If content is empty, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
24
|
+
- Take the content to review from the parent message that launched you — inline, or by reading the file it points to (never from this instruction file)
|
|
25
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
24
26
|
- Identify content type (diff, full file, or function) to determine scope rules
|
|
25
27
|
|
|
26
28
|
### Step 2: Exhaustive Path Analysis
|
|
@@ -42,7 +44,11 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
|
42
44
|
|
|
43
45
|
If the diff removed or replaced meaningful code (ignore pure renames and whitespace): load `references/deletion-check.md` and follow it.
|
|
44
46
|
|
|
45
|
-
### Step 5:
|
|
47
|
+
### Step 5: Claims Check
|
|
48
|
+
|
|
49
|
+
Load `references/claims-check.md` and follow it.
|
|
50
|
+
|
|
51
|
+
### Step 6: Present Findings
|
|
46
52
|
|
|
47
53
|
Output all findings as a single JSON array following the Output Format specification exactly.
|
|
48
54
|
|
|
@@ -60,12 +66,12 @@ Return ONLY a valid JSON array of objects. Each edge-case finding contains exact
|
|
|
60
66
|
}]
|
|
61
67
|
```
|
|
62
68
|
|
|
63
|
-
No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4, if any, go in the same array with the extra fields defined in `references/deletion-check.md`.
|
|
69
|
+
No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4 and claim findings from Step 5, if any, go in the same array with the extra fields defined in `references/deletion-check.md` and `references/claims-check.md`.
|
|
64
70
|
|
|
65
71
|
|
|
66
72
|
## HALT CONDITIONS
|
|
67
73
|
|
|
68
|
-
- If content is empty or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
74
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
69
75
|
<reference path="references/deletion-check.md">
|
|
70
76
|
# Deletion Check
|
|
71
77
|
|
|
@@ -82,7 +88,23 @@ For a deletion finding the standard fields read as: `location` = the removed ite
|
|
|
82
88
|
|
|
83
89
|
Add nothing if nothing qualifies.
|
|
84
90
|
</reference>
|
|
91
|
+
<reference path="references/claims-check.md">
|
|
92
|
+
# Claims Check
|
|
93
|
+
|
|
94
|
+
Final pass for the Edge Case Hunter. Read the claims file named in the message that launched you now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
|
|
95
|
+
|
|
96
|
+
It is the spec the change was built from. Read only its `## Intent` and `## Tasks & Acceptance` sections — the claims live there; ignore the rest of the file. The spec is the change's own account of itself: testimony, not evidence — a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
|
|
97
|
+
|
|
98
|
+
Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
|
|
99
|
+
|
|
100
|
+
- `kind`: `"claim"`
|
|
101
|
+
- `confidence`: `"high"`, `"medium"`, or `"low"`
|
|
102
|
+
|
|
103
|
+
For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
|
|
104
|
+
|
|
105
|
+
Verified claims produce nothing. Add nothing if nothing is falsified.
|
|
106
|
+
</reference>
|
|
85
107
|
|
|
86
108
|
## CONTENT SOURCE
|
|
87
109
|
|
|
88
|
-
|
|
110
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is.
|
|
@@ -110,4 +110,4 @@ When you find no verification gaps and no other findings, output exactly this si
|
|
|
110
110
|
|
|
111
111
|
## CONTENT SOURCE
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is. If no content is supplied, or the file it points to is missing, empty, or unreadable, say exactly that and stop — never report a clean review for content you could not read.
|
|
@@ -33,7 +33,11 @@ Invoke the subagent **synchronously** and wait for it to return in this same tur
|
|
|
33
33
|
|
|
34
34
|
### Verify
|
|
35
35
|
|
|
36
|
-
After the implementation subagent returns: if it reported unfinished work, finish it before proceeding.
|
|
36
|
+
After the implementation subagent returns: if it reported unfinished work, finish it before proceeding.
|
|
37
|
+
|
|
38
|
+
Stage the diff and read it: using the repository's version-control tooling, write a unified diff of all changes since `{baseline_revision}` (from `{spec_file}` frontmatter) — untracked files included — to a uniquely-named file in the system temp directory, set `{diff_file}` to its absolute path, and read that file into your own context. Judge against the diff, not against the implementation subagent's report.
|
|
39
|
+
|
|
40
|
+
Run the commands in `{spec_file}`'s `## Verification` section (or perform its manual checks). If verification fails and the failure cannot be fixed, HALT with status `blocked`, blocking condition `implementation verification failed`, and include the failing command or check and reason. When fixing a failure changes code, rewrite `{diff_file}` and re-read it. Acceptance criteria are judged at review, not here.
|
|
37
41
|
|
|
38
42
|
### Matrix Test Audit
|
|
39
43
|
|
|
@@ -10,17 +10,19 @@
|
|
|
10
10
|
|
|
11
11
|
Change `{spec_file}` status to `in-review` in the frontmatter before continuing.
|
|
12
12
|
|
|
13
|
-
###
|
|
13
|
+
### Stage the Diff
|
|
14
14
|
|
|
15
|
-
Read `{baseline_revision}` from `{spec_file}` frontmatter. If `{baseline_revision}` is missing or `NO_VCS`, use best effort to determine what changed. Otherwise
|
|
15
|
+
Read `{baseline_revision}` from `{spec_file}` frontmatter. If `{baseline_revision}` is missing or `NO_VCS`, use best effort to determine what changed. Otherwise use the repository's version-control tooling to rewrite `{diff_file}` — the temp file staged in step-03, or a uniquely-named file in the system temp directory when this run has none — with a unified diff of all changes since `{baseline_revision}`, untracked files included. The review layers read that file; the diff text is never pasted into their prompts.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Set `{claims_file}` = `{spec_file}`. The spec is the change's own account of itself, and it goes to the edge-case layer alone — as a path, so that layer reads it only after its own tracing and the other layers never see it at all.
|
|
18
|
+
|
|
19
|
+
Writing `{diff_file}` is the only change this section makes. Do NOT `git add` anything.
|
|
18
20
|
|
|
19
21
|
### Review
|
|
20
22
|
|
|
21
|
-
Runtime placeholders: `{
|
|
23
|
+
Runtime placeholders: `{diff_file}` is the diff staged above and `{claims_file}` the narrative staged with it — both paths, substituted absolute so a layer can read them; a launch prompt never carries diff text. `{verbatim_intent}` is the invocation intent exactly as this run received it at step-01; if the run started from an existing spec file rather than a fresh intent, it is the spec's `<intent-contract>` block instead. Before launching a layer, expand its skill-root placeholder to this skill's absolute installed directory; never leave that placeholder unresolved in a child prompt.
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Announce skipped layers first, then launch every active layer before handling any layer's result. Try running all active layers simultaneously: substitute the runtime placeholders (e.g. `{diff_file}`) into each layer's instruction. When an instruction launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Parallel means several blocking calls awaited together in this turn — never backgrounded or detached, never ending the turn to await results (see workflow.md → Subagents). Spawn every reviewer subagent before reading or reacting to any of their output; begin collection and triage only once all are launched.
|
|
24
26
|
|
|
25
27
|
{workflow.review_layers}
|
|
26
28
|
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after the review decision (approve/rework/discuss) is made. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after review findings are presented and sprint status is synced. Override wins.
|
|
@@ -42,8 +40,9 @@ on_complete = ""
|
|
|
42
40
|
|
|
43
41
|
# Review layers for the review step. `instruction` is the layer's whole
|
|
44
42
|
# execution recipe — subagents by default, but an override may run anything
|
|
45
|
-
# (e.g. an external reviewer via bash). {
|
|
46
|
-
# substituted at run time
|
|
43
|
+
# (e.g. an external reviewer via bash). {diff_file} and {spec_file} are
|
|
44
|
+
# substituted at run time; both are paths, and {diff_file} is the unified
|
|
45
|
+
# diff file the layer reads. `when` (optional) gates a layer; empty
|
|
47
46
|
# `instruction` disables it.
|
|
48
47
|
|
|
49
48
|
[[workflow.review_layers]]
|
|
@@ -59,10 +58,9 @@ Output a Markdown list of findings only — no severity, priority, or ranking.
|
|
|
59
58
|
If the content is empty, stop and say so.
|
|
60
59
|
If you have zero findings, re-check and keep thinking; do not stop with an empty list.
|
|
61
60
|
|
|
62
|
-
CONTENT:
|
|
63
|
-
{diff_output}
|
|
61
|
+
CONTENT: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
64
62
|
|
|
65
|
-
Do not invoke any skill. Return
|
|
63
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
66
64
|
|
|
67
65
|
"""
|
|
68
66
|
|
|
@@ -74,11 +72,11 @@ Launch a context-free subagent with this prompt:
|
|
|
74
72
|
|
|
75
73
|
Read `{skill-root}/review-prompts/edge-case-hunter.md` completely and follow it as your review instructions.
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
claims_file (leave unread until your instructions call for it): {claims_file}
|
|
78
76
|
|
|
79
|
-
{
|
|
77
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
80
78
|
|
|
81
|
-
Do not invoke any skill. If the instruction file is unreadable, report that exact failure and stop. Return
|
|
79
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
82
80
|
|
|
83
81
|
"""
|
|
84
82
|
|
|
@@ -90,11 +88,9 @@ Launch a context-free subagent with this prompt:
|
|
|
90
88
|
|
|
91
89
|
Read `{skill-root}/review-prompts/verification-gap.md` completely and follow it as your review instructions.
|
|
92
90
|
|
|
93
|
-
Review content:
|
|
91
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
94
92
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Do not invoke any skill. If the instruction file is unreadable, report that exact failure and stop. Return only the review result.
|
|
93
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
98
94
|
|
|
99
95
|
"""
|
|
100
96
|
|
|
@@ -107,7 +103,8 @@ Launch a subagent with this prompt:
|
|
|
107
103
|
|
|
108
104
|
You are an Acceptance Auditor. Review the provided diff against `{spec_file}` and any loaded context docs. Check for: violations of acceptance criteria, deviations from spec intent, missing implementation of specified behavior, contradictions between spec constraints and actual code. Output findings as a Markdown list. Each finding: one-line title, which AC/constraint it violates, and evidence from the diff.
|
|
109
105
|
|
|
110
|
-
Diff:
|
|
106
|
+
Diff: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
107
|
+
|
|
108
|
+
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
111
109
|
|
|
112
|
-
{diff_output}
|
|
113
110
|
"""
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Claims Check
|
|
2
|
+
|
|
3
|
+
Final pass for the Edge Case Hunter — runs only when the message that launched you named a claims file. Read that file now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
|
|
4
|
+
|
|
5
|
+
The file holds the change's own narrative — commit messages and any stated description. The narrative is the author's testimony, not evidence: a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
|
|
6
|
+
|
|
7
|
+
Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
|
|
8
|
+
|
|
9
|
+
- `kind`: `"claim"`
|
|
10
|
+
- `confidence`: `"high"`, `"medium"`, or `"low"`
|
|
11
|
+
|
|
12
|
+
For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
|
|
13
|
+
|
|
14
|
+
Verified claims produce nothing. Add nothing if nothing is falsified.
|