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.
Files changed (99) hide show
  1. package/package.json +2 -2
  2. package/src/bmm-skills/agents/bmad-agent-analyst/customize.toml +1 -3
  3. package/src/bmm-skills/agents/bmad-agent-architect/customize.toml +1 -3
  4. package/src/bmm-skills/agents/bmad-agent-dev/customize.toml +1 -3
  5. package/src/bmm-skills/agents/bmad-agent-pm/customize.toml +1 -3
  6. package/src/bmm-skills/agents/bmad-agent-ux-designer/customize.toml +1 -3
  7. package/src/bmm-skills/plan/bmad-architecture/SKILL.md +1 -1
  8. package/src/bmm-skills/plan/bmad-architecture/customize.toml +5 -6
  9. package/src/bmm-skills/plan/bmad-create-epics-and-stories/customize.toml +1 -3
  10. package/src/bmm-skills/plan/bmad-generate-project-context/SKILL.md +2 -0
  11. package/src/bmm-skills/plan/bmad-prd/customize.toml +5 -6
  12. package/src/bmm-skills/plan/bmad-prfaq/customize.toml +1 -3
  13. package/src/bmm-skills/plan/bmad-product-brief/customize.toml +5 -6
  14. package/src/bmm-skills/plan/bmad-project-context/SKILL.md +23 -12
  15. package/src/bmm-skills/plan/bmad-project-context/references/best-practices.md +26 -7
  16. package/src/bmm-skills/plan/bmad-project-context/references/template.md +1 -1
  17. package/src/bmm-skills/plan/bmad-spec/customize.toml +5 -5
  18. package/src/bmm-skills/plan/bmad-sprint-planning/customize.toml +1 -3
  19. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
  20. package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
  21. package/src/bmm-skills/plan/bmad-ux/customize.toml +1 -3
  22. package/src/bmm-skills/ship/bmad-build/SKILL.md +1 -1
  23. package/src/bmm-skills/ship/bmad-build/customize.toml +13 -16
  24. package/src/bmm-skills/ship/bmad-build/references/claims-check.md +14 -0
  25. package/src/bmm-skills/ship/bmad-build/review-prompts/edge-case-hunter.md +29 -7
  26. package/src/bmm-skills/ship/bmad-build/review-prompts/verification-gap.md +1 -1
  27. package/src/bmm-skills/ship/bmad-build/step-01-clarify-and-route.md +12 -7
  28. package/src/bmm-skills/ship/bmad-build/step-02-plan.md +13 -10
  29. package/src/bmm-skills/ship/bmad-build/step-03-implement.md +3 -1
  30. package/src/bmm-skills/ship/bmad-build/step-04-review.md +7 -5
  31. package/src/bmm-skills/ship/bmad-build/step-oneshot.md +7 -8
  32. package/src/bmm-skills/ship/bmad-build-auto/customize.toml +16 -18
  33. package/src/bmm-skills/ship/bmad-build-auto/references/claims-check.md +14 -0
  34. package/src/bmm-skills/ship/bmad-build-auto/review-prompts/edge-case-hunter.md +29 -7
  35. package/src/bmm-skills/ship/bmad-build-auto/review-prompts/verification-gap.md +1 -1
  36. package/src/bmm-skills/ship/bmad-build-auto/step-03-implement.md +5 -1
  37. package/src/bmm-skills/ship/bmad-build-auto/step-04-review.md +7 -5
  38. package/src/bmm-skills/ship/bmad-checkpoint-preview/customize.toml +1 -3
  39. package/src/bmm-skills/ship/bmad-code-review/customize.toml +14 -17
  40. package/src/bmm-skills/ship/bmad-code-review/references/claims-check.md +14 -0
  41. package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +29 -7
  42. package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +1 -1
  43. package/src/bmm-skills/ship/bmad-code-review/steps/step-01-gather-context.md +22 -15
  44. package/src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md +2 -2
  45. package/src/bmm-skills/ship/bmad-correct-course/SKILL.md +11 -3
  46. package/src/bmm-skills/ship/bmad-correct-course/customize.toml +1 -3
  47. package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/customize.toml +1 -3
  48. package/src/bmm-skills/ship/bmad-retrospective/customize.toml +1 -3
  49. package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
  50. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
  51. package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
  52. package/src/bmm-skills/v6-shims/bmad-create-architecture/SKILL.md +2 -0
  53. package/src/bmm-skills/v6-shims/bmad-create-architecture/customize.toml +1 -3
  54. package/src/bmm-skills/v6-shims/bmad-create-prd/SKILL.md +2 -0
  55. package/src/bmm-skills/v6-shims/bmad-create-prd/customize.toml +1 -3
  56. package/src/bmm-skills/v6-shims/bmad-create-story/SKILL.md +3 -1
  57. package/src/bmm-skills/v6-shims/bmad-create-story/customize.toml +1 -3
  58. package/src/bmm-skills/v6-shims/bmad-dev-auto/SKILL.md +2 -0
  59. package/src/bmm-skills/v6-shims/bmad-dev-story/SKILL.md +2 -0
  60. package/src/bmm-skills/v6-shims/bmad-dev-story/customize.toml +1 -6
  61. package/src/bmm-skills/v6-shims/bmad-document-project/SKILL.md +2 -0
  62. package/src/bmm-skills/v6-shims/bmad-domain-research/SKILL.md +2 -0
  63. package/src/bmm-skills/v6-shims/bmad-edit-prd/SKILL.md +2 -0
  64. package/src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml +1 -3
  65. package/src/bmm-skills/v6-shims/bmad-market-research/SKILL.md +2 -0
  66. package/src/bmm-skills/v6-shims/bmad-quick-dev/SKILL.md +2 -0
  67. package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +2 -0
  68. package/src/bmm-skills/v6-shims/bmad-sprint-status/customize.toml +1 -3
  69. package/src/bmm-skills/v6-shims/bmad-technical-research/SKILL.md +2 -0
  70. package/src/bmm-skills/v6-shims/bmad-validate-prd/SKILL.md +2 -0
  71. package/src/bmm-skills/v6-shims/bmad-validate-prd/customize.toml +1 -3
  72. package/src/core-skills/bmad-advanced-elicitation/SKILL.md +21 -22
  73. package/src/core-skills/bmad-brainstorming/customize.toml +5 -6
  74. package/src/core-skills/bmad-forge-idea/customize.toml +5 -6
  75. package/src/core-skills/bmad-party-mode/customize.toml +4 -4
  76. package/src/core-skills/bmad-review/SKILL.md +5 -4
  77. package/src/core-skills/bmad-review/customize.toml +1 -1
  78. package/src/core-skills/bmad-review/references/lens-edge-case-hunter.md +16 -0
  79. package/src/core-skills/v6-shims/bmad-editorial-review/SKILL.md +2 -0
  80. package/src/core-skills/v6-shims/bmad-editorial-review-prose/SKILL.md +2 -0
  81. package/src/core-skills/v6-shims/bmad-editorial-review-structure/SKILL.md +2 -0
  82. package/src/core-skills/v6-shims/bmad-review-adversarial-general/SKILL.md +2 -0
  83. package/src/core-skills/v6-shims/bmad-review-edge-case-hunter/SKILL.md +2 -0
  84. package/src/core-skills/v6-shims/bmad-review-verification-gap/SKILL.md +2 -0
  85. package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
  86. package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
  87. package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
  88. package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
  89. package/tools/installer/commands/install.js +2 -0
  90. package/tools/installer/core/config.js +3 -0
  91. package/tools/installer/core/installer.js +57 -1
  92. package/tools/installer/core/manifest-generator.js +6 -0
  93. package/tools/installer/core/manifest.js +6 -0
  94. package/tools/installer/core/shim-policy.js +159 -0
  95. package/tools/installer/ide/_config-driven.js +3 -3
  96. package/tools/installer/ide/platform-codes.yaml +7 -0
  97. package/tools/installer/modules/official-modules.js +38 -6
  98. package/tools/installer/prompts.js +15 -2
  99. 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
- - Load the content to review strictly from the parent message that launched you (not from this instruction file)
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: Present Findings
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
- Review the content supplied under "Review content:" in the message that launched you.
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
- Review the content supplied under "Review content:" in the message that launched you. If none is supplied, stop with exactly: `No verification gaps found.`
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. Ask user which to resume (or `[N]` for new).
34
- - If `draft` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-02-plan.md]]` (resume planning from the draft)
35
- - If `ready-for-dev` or `in-progress` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-03-implement.md]]`
36
- - If `in-review` selected: Set `spec_file`. Run **Story-key resolution** (below). **EARLY EXIT** → `[[bmad-snapshot:step-04-review.md]]`
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 ask human: `[S] Split — pick first goal, defer the rest` | `[K] Keep all goals — accept the risks`
86
- - On **S**: 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.
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
- - On **K**: Proceed as-is.
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 ask human: `[S] Split — carve off secondary goals` | `[K] Keep full spec — accept the risks`
18
- - On **S**: 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.
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
- - On **K**: Continue to checkpoint with full spec.
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 [K], include the token count and explain why it may be a problem.
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`, `bmad-party-mode`, or `bmad-code-review` skills, ideally in another session to avoid context bloat.
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 ask human: `[A] Approve` | `[E] Edit`
40
+ HALT and give the user a choice:
39
41
 
40
- - **A**: Re-read `{spec_file}` from disk.
41
- - **If the file is missing:** HALT. Tell the user the spec file is gone and STOP do not write anything to `{spec_file}`, do not set status, do not proceed to Step 3. Nothing below this point runs.
42
- - **If the file exists:** Compare the content to what you wrote. If it has changed since you wrote it, acknowledge the external edits — show a brief summary of what changed — and proceed with the updated version. Then set status `ready-for-dev` in `{spec_file}`. Everything inside `<frozen-after-approval>` is now locked — only the human can change it. → Step 3.
43
- - **E**: Apply changes, then return to CHECKPOINT 1.
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
- Before leaving this step, 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.
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
- ### Construct Diff
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, construct `{diff_output}` covering all changes tracked and untracked — since `{baseline_commit}`.
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
- Do NOT `git add` anythingthis is read-only inspection.
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
- Execute these review layers in parallel wherever their execution methods allow: substitute the runtime placeholders (e.g. `{diff_output}`) 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. 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.
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}}` the exact child prompt from that layer's instruction after placeholder substitution (not a path-only pointer), then HALT. Ask the human to run each in a separate session (ideally a different LLM) and paste back the findings.
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, then wait for all results before continuing.
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
- Execute these review layers in parallel wherever their execution methods allow. 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:
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. Three categories only:
28
+ Deduplicate all review findings, then route each finding in this order:
29
29
 
30
- - **patch** — trivially fixable. Auto-fix immediately.
31
- - **defer** — pre-existing issue not caused by this change. Append one new entry to `{{.implementation_artifacts}}/deferred-work.md` using this format. Do not modify existing entries or look for duplicates.
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). {diff_output} is substituted at run
52
- # time. `when` (optional) gates a layer; empty `instruction` disables it.
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 only the review result.
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
- Review content:
81
+ claims_file (leave unread until your instructions call for it): {claims_file}
83
82
 
84
- {diff_output}
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 only the review result.
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
- {diff_output}
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
- Here is the diff:
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
- - Load the content to review strictly from the parent message that launched you (not from this instruction file)
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: Present Findings
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
- Review the content supplied under "Review content:" in the message that launched you.
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
- Review the content supplied under "Review content:" in the message that launched you. If none is supplied, stop with exactly: `No verification gaps found.`
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. 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. Acceptance criteria are judged at review, not here.
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
- ### Construct Diff
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, construct `{diff_output}` covering all changes tracked and untracked — since `{baseline_revision}`.
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
- Do NOT `git add` anythingthis is read-only inspection.
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: `{diff_output}` is the diff constructed above. `{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.
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
- Execute these review layers in parallel wherever their execution methods allow: substitute the runtime placeholders (e.g. `{diff_output}`) 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.
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). {diff_output} and {spec_file} are
46
- # substituted at run time. `when` (optional) gates a layer; empty
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 only the review result.
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
- Review content:
75
+ claims_file (leave unread until your instructions call for it): {claims_file}
78
76
 
79
- {diff_output}
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 only the review result.
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
- {diff_output}
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.