strikethroo 3.17.2 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist-web/assets/{arc-C3L1jkFY.js → arc-BlSNa2QY.js} +1 -1
  2. package/dist-web/assets/{architectureDiagram-3BPJPVTR-Dc5wdWPF.js → architectureDiagram-3BPJPVTR-CPcCF2a4.js} +1 -1
  3. package/dist-web/assets/{blockDiagram-GPEHLZMM-BCqaESV7.js → blockDiagram-GPEHLZMM-ECDR0edZ.js} +1 -1
  4. package/dist-web/assets/{c4Diagram-AAUBKEIU-DNecSAwM.js → c4Diagram-AAUBKEIU-oM3VnEAQ.js} +1 -1
  5. package/dist-web/assets/channel-CmU4mBgT.js +1 -0
  6. package/dist-web/assets/{chunk-2J33WTMH-3QS28848.js → chunk-2J33WTMH-DHk5SJLz.js} +1 -1
  7. package/dist-web/assets/{chunk-4BX2VUAB-B6R-x-SN.js → chunk-4BX2VUAB-CjBwgkMu.js} +1 -1
  8. package/dist-web/assets/{chunk-55IACEB6-BYY5vsbu.js → chunk-55IACEB6-D95zqyiV.js} +1 -1
  9. package/dist-web/assets/{chunk-727SXJPM-BZxIJIkN.js → chunk-727SXJPM-DCCPRUfv.js} +1 -1
  10. package/dist-web/assets/{chunk-AQP2D5EJ-Dwpt8x10.js → chunk-AQP2D5EJ-qur7KQyD.js} +1 -1
  11. package/dist-web/assets/{chunk-FMBD7UC4-BkIlqLqc.js → chunk-FMBD7UC4-D46Su7Fv.js} +1 -1
  12. package/dist-web/assets/{chunk-ND2GUHAM-BZAfIvWk.js → chunk-ND2GUHAM-BioGsqxt.js} +1 -1
  13. package/dist-web/assets/{chunk-QZHKN3VN-wAp9ruCQ.js → chunk-QZHKN3VN-C8LdDiqn.js} +1 -1
  14. package/dist-web/assets/classDiagram-4FO5ZUOK-D_FMKQsB.js +1 -0
  15. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-D_FMKQsB.js +1 -0
  16. package/dist-web/assets/{cose-bilkent-S5V4N54A-BWhls-Li.js → cose-bilkent-S5V4N54A-ccY03BRh.js} +1 -1
  17. package/dist-web/assets/{dagre-BM42HDAG-D_rm5H8p.js → dagre-BM42HDAG-BYLmCViB.js} +1 -1
  18. package/dist-web/assets/{diagram-2AECGRRQ-CgrRz62Y.js → diagram-2AECGRRQ-DTvenvXR.js} +1 -1
  19. package/dist-web/assets/{diagram-5GNKFQAL-BRdPFx5y.js → diagram-5GNKFQAL-CCzsYDmr.js} +1 -1
  20. package/dist-web/assets/{diagram-KO2AKTUF-CRkShN2W.js → diagram-KO2AKTUF-QSff7J_V.js} +1 -1
  21. package/dist-web/assets/{diagram-LMA3HP47-Bxah1b5X.js → diagram-LMA3HP47-CVqlEmu2.js} +1 -1
  22. package/dist-web/assets/{diagram-OG6HWLK6-D9gsqeVI.js → diagram-OG6HWLK6-dBVz-I46.js} +1 -1
  23. package/dist-web/assets/{erDiagram-TEJ5UH35-BxuqpCGH.js → erDiagram-TEJ5UH35-B_y4ftNu.js} +1 -1
  24. package/dist-web/assets/{flowDiagram-I6XJVG4X-CVc346ab.js → flowDiagram-I6XJVG4X-M410hT_n.js} +1 -1
  25. package/dist-web/assets/{ganttDiagram-6RSMTGT7-CoV2q8mu.js → ganttDiagram-6RSMTGT7-qiri2OJa.js} +1 -1
  26. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-DpBtbvUQ.js → gitGraphDiagram-PVQCEYII-FqGGBobG.js} +1 -1
  27. package/dist-web/assets/{index-qiGGVGhU.js → index-1SV04K_c.js} +1 -1
  28. package/dist-web/assets/{index-DXAUzXLU.js → index-BaFSLlgl.js} +1 -1
  29. package/dist-web/assets/{index-B5AkN942.js → index-DrUIu0u6.js} +4 -4
  30. package/dist-web/assets/{infoDiagram-5YYISTIA-Cs1LaltR.js → infoDiagram-5YYISTIA-CczHqRr1.js} +1 -1
  31. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-2dwQITAJ.js → ishikawaDiagram-YF4QCWOH-ty1DRy6n.js} +1 -1
  32. package/dist-web/assets/{journeyDiagram-JHISSGLW-C5NXwRcO.js → journeyDiagram-JHISSGLW-D_JYvt6i.js} +1 -1
  33. package/dist-web/assets/{kanban-definition-UN3LZRKU-D8L4UiFp.js → kanban-definition-UN3LZRKU-CT67nUTK.js} +1 -1
  34. package/dist-web/assets/{linear-BmwJXk2t.js → linear-B1HaE_t1.js} +1 -1
  35. package/dist-web/assets/{mermaid.core-CxfmFJso.js → mermaid.core-Dumx_iKV.js} +4 -4
  36. package/dist-web/assets/{mindmap-definition-RKZ34NQL-CCk10yMr.js → mindmap-definition-RKZ34NQL-CVulJo63.js} +1 -1
  37. package/dist-web/assets/{pieDiagram-4H26LBE5-CNaROrHh.js → pieDiagram-4H26LBE5-C1yD5ntZ.js} +1 -1
  38. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-C9eBwT_4.js → quadrantDiagram-W4KKPZXB-B7PoiM8c.js} +1 -1
  39. package/dist-web/assets/{requirementDiagram-4Y6WPE33-CuWFUe-Z.js → requirementDiagram-4Y6WPE33-COvHb3Mv.js} +1 -1
  40. package/dist-web/assets/{sankeyDiagram-5OEKKPKP-xGYYGBDj.js → sankeyDiagram-5OEKKPKP-CAnwm5-J.js} +1 -1
  41. package/dist-web/assets/{sequenceDiagram-3UESZ5HK-Corn4mP3.js → sequenceDiagram-3UESZ5HK-C2KFLIUq.js} +1 -1
  42. package/dist-web/assets/{stateDiagram-AJRCARHV-DP1EwgDv.js → stateDiagram-AJRCARHV-CqmhS5P6.js} +1 -1
  43. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-C3Kw8ZDR.js +1 -0
  44. package/dist-web/assets/{timeline-definition-PNZ67QCA-DgVY9v5q.js → timeline-definition-PNZ67QCA-DvPre9M_.js} +1 -1
  45. package/dist-web/assets/{vennDiagram-CIIHVFJN-B47n0Ab2.js → vennDiagram-CIIHVFJN-Top6i7KH.js} +1 -1
  46. package/dist-web/assets/{wardley-L42UT6IY-ubK4o7Fl.js → wardley-L42UT6IY-_jVLsWqf.js} +1 -1
  47. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-ChirN_61.js → wardleyDiagram-YWT4CUSO-BV4e5mP6.js} +1 -1
  48. package/dist-web/assets/{xychartDiagram-2RQKCTM6-Cf8q2_P7.js → xychartDiagram-2RQKCTM6-Bn1hw4Jk.js} +1 -1
  49. package/dist-web/index.html +1 -1
  50. package/package.json +1 -1
  51. package/templates/harness/skills/st-code-review/SKILL.md +47 -281
  52. package/templates/harness/skills/st-code-review/scripts/code-review.cjs +70 -300
  53. package/templates/harness/skills/st-execute-blueprint/SKILL.md +15 -18
  54. package/templates/harness/skills/st-full-workflow/SKILL.md +15 -18
  55. package/templates/strikethroo/config/hooks/CODE_REVIEW.md +19 -29
  56. package/dist-web/assets/channel-DmY2Krrw.js +0 -1
  57. package/dist-web/assets/classDiagram-4FO5ZUOK-C91aiCZF.js +0 -1
  58. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-C91aiCZF.js +0 -1
  59. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DQIao4rH.js +0 -1
@@ -166,36 +166,33 @@ Before declaring execution complete, apply the evidence gate in `<root>/config/s
166
166
 
167
167
  #### Run the code review gate
168
168
 
169
- After `POST_EXECUTION.md` reports green and before appending the execution summary, follow the `st-code-review` skill and run one review round with its bundled mechanism:
169
+ After `POST_EXECUTION.md` reports green and before appending the execution summary, follow the `st-code-review` skill and run its bundled mechanism once:
170
170
 
171
171
  ```text
172
- code-review.cjs <plan-id> <current-harness> <round>
172
+ code-review.cjs <plan-id> <current-harness>
173
173
  ```
174
174
 
175
175
  `code-review.cjs` ships with the `st-code-review` skill and lives in that skill's own `scripts` directory, a sibling of this one. Resolve it there; it is not bundled with this skill. If the `st-code-review` skill is not installed on this harness, record that as the review outcome in the execution summary and continue to the summary and archival.
176
176
 
177
- `<current-harness>` is the exact supported harness identifier running this skill. `<round>` is `1` on the first invocation, and thereafter the exact `decision.nextRound` the previous round returned. The command emits exactly one JSON line on stdout. Reviewer output is captured and teed to stderr, so stdout carries the verdict JSON line and nothing else. Read its `kind`, then — when `kind` is `reviewed` — its `decision.kind`, and do exactly what the matching row states.
177
+ `<current-harness>` is the exact supported harness identifier running this skill. The command runs one review and emits exactly one JSON line on stdout. Reviewer output is captured and teed to stderr, so stdout carries the verdict JSON line and nothing else. Read its `kind`, then, when `kind` is `reviewed`, its `verdict.kind`, and do exactly what the matching row states.
178
178
 
179
179
  | Result | What you do |
180
180
  | --- | --- |
181
181
  | `skipped` | The gate is disabled or unconfigured. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. A skip is never a failure. |
182
- | `reviewed`, `decision.kind` = `gate-passed` | The gate passed. Record `findingsGate.recorded` and `findingsGate.aboveFloorWithoutSuggestion` — real findings deliberately not applied — then continue to the summary and archival. |
183
- | `reviewed`, `decision.kind` = `fix-and-continue` | Apply the `actionable` set from `<plan-dir>/review/round-<n>/findings.json` on the implementer route. Re-run `POST_EXECUTION.md` in full. Then run the gate again with `<round>` set to `decision.nextRound`. |
184
- | `reviewed`, `decision.kind` = `budget-exhausted` | Halt exactly as any mechanical gate failure. Leave the plan in `plans/`, do not append a completion summary, do not archive, and report the outstanding findings with actionable next steps. |
185
- | `reviewed`, `decision.kind` = `round-failed` | The round was not certified — the findings document was absent or invalid, or no validator was available. Halt and report `decision.detail`. Never report an uncertified round as clean. |
186
- | `budget-exhausted` | A round past the enforced budget was requested and no reviewer was dispatched. Halt exactly as `decision.kind` = `budget-exhausted` above. |
182
+ | `reviewed`, `verdict.kind` = `review-recorded` | A reviewer ran and its findings were certified. Record `verdict.detail` and the `findingsGate.counts` in the execution summary, then read `<plan-dir>/review/review.xml` and decide for yourself which findings to act on. Nothing was applied for you. |
183
+ | `reviewed`, `verdict.kind` = `review-failed` | The findings were not certified: the document was absent or invalid, or no validator was available. Halt and report `verdict.detail`. Never report an uncertified review as clean. |
187
184
  | `launched-failure` | The reviewer harness exited non-zero. Halt and report `detail`. |
188
- | `fallback` | The reviewer never ran — the harness was unavailable or authentication failed. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. |
185
+ | `fallback` | The reviewer never ran, because the harness was unavailable or authentication failed. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. |
189
186
  | `infrastructure-failure` | A real error. Halt and report `detail`. Do not retry on a different route. |
190
187
 
191
188
  <details>
192
- <summary>Applying an actionable finding</summary>
189
+ <summary>Acting on the findings</summary>
193
190
 
194
- `<plan-dir>/review/round-<n>/findings.json` holds that round's partition. Its `actionable` array is the only set you apply. Its `recorded` array is inspection material and is never applied.
191
+ `<plan-dir>/review/review.xml` is the reviewer's document and `<plan-dir>/review/findings.json` is the same findings as data. Read them and use your own judgement: the reviewer is a second opinion on a diff you know better than it does, and it has neither run the tests nor read the whole codebase.
195
192
 
196
- Each actionable entry names a file, a location, and a suggestion whose `original-code` was copied verbatim from that file. Apply it as an exact text replacement of `original-code` by `proposed-code`, and change nothing else. When `original-code` no longer matches the file, record the finding as not applied and move to the next one. Do not reconstruct the fix, widen it, or refactor around it.
193
+ Fix what is a genuine requirement gap or defect. Ignore what is wrong, out of scope, or already handled elsewhere, and say in the execution summary which findings you ignored and why. `severity` and `confidence` are the reviewer's own triage labels, useful for sorting and never binding; a `low` confidence finding is one the reviewer could not trace, so read it with that in mind.
197
194
 
198
- Dispatch every fix on the implementer route. Earlier rounds' rulings are carried into the next round by the mechanism itself, which reads the partitions it already wrote; do not pass them back on the command line.
195
+ Dispatch any fix you decide to make on the implementer route.
199
196
 
200
197
  </details>
201
198
 
@@ -203,11 +200,11 @@ Hard rules:
203
200
 
204
201
  - The gate creates no task files.
205
202
  - The gate never mutates the Execution Blueprint.
206
- - The gate is terminal only — never per phase, never per task.
203
+ - The gate is terminal only, never per phase and never per task.
207
204
  - The reviewer never fixes its own findings. Detection runs on the reviewer route, fixes run on the implementer route.
208
- - Any applied fix invalidates the green build that preceded it. Re-run `POST_EXECUTION.md` in full — lint, tests, and Self Validation — before the gate runs again. Never re-verify against the prior green build.
209
- - Whether another round runs is `decision.kind`'s to state and yours to obey. Do not count rounds, reason about the budget, or invoke a round the mechanism did not name.
210
- - A green gate is not a correctness guarantee. It reduces the exposure a human PR approval reduces, and it leaves the same exposure behind.
205
+ - Any fix you apply invalidates the green build that preceded it. Re-run `POST_EXECUTION.md` in full (lint, tests, and Self Validation) before declaring execution complete. Never re-verify against the prior green build.
206
+ - The review runs once. Do not re-run the gate to check your own fixes.
207
+ - A certified review is not a correctness guarantee. It reduces the exposure a human PR approval reduces, and it leaves the same exposure behind.
211
208
 
212
209
  ### 9. Append execution summary
213
210
 
@@ -216,7 +213,7 @@ Append an execution summary section to the plan document using the format descri
216
213
  - **Status**: Completed Successfully
217
214
  - **Completed Date**: current date
218
215
  - **Results**: brief summary of deliverables
219
- - **Noteworthy Events**: all decisions, issues, and outcomes encountered during execution. Always record the review gate's outcome here: the reviewer harness, the number of rounds run, and the counts of findings recorded versus applied — or, when the gate did not run, its `reason` and `detail` verbatim. If nothing else occurred, state "No significant issues encountered." after the review outcome.
216
+ - **Noteworthy Events**: all decisions, issues, and outcomes encountered during execution. Always record the review gate's outcome here: the reviewer harness, the finding counts, and which findings you acted on versus ignored and why. When the gate did not run, record its `reason` and `detail` verbatim. If nothing else occurred, state "No significant issues encountered." after the review outcome.
220
217
  - **Necessary follow-ups**: any follow-up actions or optimizations
221
218
 
222
219
  ### 10. Archive the plan
@@ -509,36 +509,33 @@ Before declaring execution complete, apply the evidence gate in `<root>/config/s
509
509
 
510
510
  ##### Run the code review gate
511
511
 
512
- After `POST_EXECUTION.md` reports green and before appending the execution summary, follow the `st-code-review` skill and run one review round with its bundled mechanism:
512
+ After `POST_EXECUTION.md` reports green and before appending the execution summary, follow the `st-code-review` skill and run its bundled mechanism once:
513
513
 
514
514
  ```text
515
- code-review.cjs <plan-id> <current-harness> <round>
515
+ code-review.cjs <plan-id> <current-harness>
516
516
  ```
517
517
 
518
518
  `code-review.cjs` ships with the `st-code-review` skill and lives in that skill's own `scripts` directory, a sibling of this one. Resolve it there; it is not bundled with this skill. If the `st-code-review` skill is not installed on this harness, record that as the review outcome in the execution summary and continue to the summary and archival.
519
519
 
520
- `<current-harness>` is the exact supported harness identifier running this skill. `<round>` is `1` on the first invocation, and thereafter the exact `decision.nextRound` the previous round returned. The command emits exactly one JSON line on stdout. Reviewer output is captured and teed to stderr, so stdout carries the verdict JSON line and nothing else. Read its `kind`, then — when `kind` is `reviewed` — its `decision.kind`, and do exactly what the matching row states.
520
+ `<current-harness>` is the exact supported harness identifier running this skill. The command runs one review and emits exactly one JSON line on stdout. Reviewer output is captured and teed to stderr, so stdout carries the verdict JSON line and nothing else. Read its `kind`, then, when `kind` is `reviewed`, its `verdict.kind`, and do exactly what the matching row states.
521
521
 
522
522
  | Result | What you do |
523
523
  | --- | --- |
524
524
  | `skipped` | The gate is disabled or unconfigured. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. A skip is never a failure. |
525
- | `reviewed`, `decision.kind` = `gate-passed` | The gate passed. Record `findingsGate.recorded` and `findingsGate.aboveFloorWithoutSuggestion` — real findings deliberately not applied — then continue to the summary and archival. |
526
- | `reviewed`, `decision.kind` = `fix-and-continue` | Apply the `actionable` set from `<plan-dir>/review/round-<n>/findings.json` on the implementer route. Re-run `POST_EXECUTION.md` in full. Then run the gate again with `<round>` set to `decision.nextRound`. |
527
- | `reviewed`, `decision.kind` = `budget-exhausted` | Halt exactly as any mechanical gate failure. Leave the plan in `plans/`, do not append a completion summary, do not archive, and report the outstanding findings with actionable next steps. |
528
- | `reviewed`, `decision.kind` = `round-failed` | The round was not certified — the findings document was absent or invalid, or no validator was available. Halt and report `decision.detail`. Never report an uncertified round as clean. |
529
- | `budget-exhausted` | A round past the enforced budget was requested and no reviewer was dispatched. Halt exactly as `decision.kind` = `budget-exhausted` above. |
525
+ | `reviewed`, `verdict.kind` = `review-recorded` | A reviewer ran and its findings were certified. Record `verdict.detail` and the `findingsGate.counts` in the execution summary, then read `<plan-dir>/review/review.xml` and decide for yourself which findings to act on. Nothing was applied for you. |
526
+ | `reviewed`, `verdict.kind` = `review-failed` | The findings were not certified: the document was absent or invalid, or no validator was available. Halt and report `verdict.detail`. Never report an uncertified review as clean. |
530
527
  | `launched-failure` | The reviewer harness exited non-zero. Halt and report `detail`. |
531
- | `fallback` | The reviewer never ran — the harness was unavailable or authentication failed. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. |
528
+ | `fallback` | The reviewer never ran, because the harness was unavailable or authentication failed. Record `reason` and `detail` verbatim in the execution summary, then continue to the summary and archival. |
532
529
  | `infrastructure-failure` | A real error. Halt and report `detail`. Do not retry on a different route. |
533
530
 
534
531
  <details>
535
- <summary>Applying an actionable finding</summary>
532
+ <summary>Acting on the findings</summary>
536
533
 
537
- `<plan-dir>/review/round-<n>/findings.json` holds that round's partition. Its `actionable` array is the only set you apply. Its `recorded` array is inspection material and is never applied.
534
+ `<plan-dir>/review/review.xml` is the reviewer's document and `<plan-dir>/review/findings.json` is the same findings as data. Read them and use your own judgement: the reviewer is a second opinion on a diff you know better than it does, and it has neither run the tests nor read the whole codebase.
538
535
 
539
- Each actionable entry names a file, a location, and a suggestion whose `original-code` was copied verbatim from that file. Apply it as an exact text replacement of `original-code` by `proposed-code`, and change nothing else. When `original-code` no longer matches the file, record the finding as not applied and move to the next one. Do not reconstruct the fix, widen it, or refactor around it.
536
+ Fix what is a genuine requirement gap or defect. Ignore what is wrong, out of scope, or already handled elsewhere, and say in the execution summary which findings you ignored and why. `severity` and `confidence` are the reviewer's own triage labels, useful for sorting and never binding; a `low` confidence finding is one the reviewer could not trace, so read it with that in mind.
540
537
 
541
- Dispatch every fix on the implementer route. Earlier rounds' rulings are carried into the next round by the mechanism itself, which reads the partitions it already wrote; do not pass them back on the command line.
538
+ Dispatch any fix you decide to make on the implementer route.
542
539
 
543
540
  </details>
544
541
 
@@ -546,11 +543,11 @@ Hard rules:
546
543
 
547
544
  - The gate creates no task files.
548
545
  - The gate never mutates the Execution Blueprint.
549
- - The gate is terminal only — never per phase, never per task.
546
+ - The gate is terminal only, never per phase and never per task.
550
547
  - The reviewer never fixes its own findings. Detection runs on the reviewer route, fixes run on the implementer route.
551
- - Any applied fix invalidates the green build that preceded it. Re-run `POST_EXECUTION.md` in full — lint, tests, and Self Validation — before the gate runs again. Never re-verify against the prior green build.
552
- - Whether another round runs is `decision.kind`'s to state and yours to obey. Do not count rounds, reason about the budget, or invoke a round the mechanism did not name.
553
- - A green gate is not a correctness guarantee. It reduces the exposure a human PR approval reduces, and it leaves the same exposure behind.
548
+ - Any fix you apply invalidates the green build that preceded it. Re-run `POST_EXECUTION.md` in full (lint, tests, and Self Validation) before declaring execution complete. Never re-verify against the prior green build.
549
+ - The review runs once. Do not re-run the gate to check your own fixes.
550
+ - A certified review is not a correctness guarantee. It reduces the exposure a human PR approval reduces, and it leaves the same exposure behind.
554
551
 
555
552
  #### 7. Append execution summary
556
553
 
@@ -559,7 +556,7 @@ Append an execution summary section to the plan document using the format descri
559
556
  - **Status**: Completed Successfully
560
557
  - **Completed Date**: current date
561
558
  - **Results**: brief summary of deliverables
562
- - **Noteworthy Events**: all decisions, issues, and outcomes encountered during execution. Always record the review gate's outcome here: the reviewer harness, the number of rounds run, and the counts of findings recorded versus applied — or, when the gate did not run, its `reason` and `detail` verbatim. If nothing else occurred, state "No significant issues encountered." after the review outcome.
559
+ - **Noteworthy Events**: all decisions, issues, and outcomes encountered during execution. Always record the review gate's outcome here: the reviewer harness, the finding counts, and which findings you acted on versus ignored and why. When the gate did not run, record its `reason` and `detail` verbatim. If nothing else occurred, state "No significant issues encountered." after the review outcome.
563
560
  - **Necessary follow-ups**: any follow-up actions or optimizations
564
561
 
565
562
  #### 8. Archive the plan
@@ -2,13 +2,13 @@
2
2
 
3
3
  ## Automated Code Review Gate
4
4
 
5
- This hook governs an unattended review loop that runs at the end of blueprint execution, after mechanical gates (lint, tests, Self Validation) report success. A reviewer on a discovered external harness critiques the plan's cumulative diff and emits findings; findings at or above the severity and confidence floors trigger automatic remediation, followed by a full re-run of the mechanical gates and re-verification.
5
+ This hook governs a review step that runs at the end of blueprint execution, after the mechanical gates (lint, tests, Self Validation) report success. A reviewer on a discovered external harness critiques the plan's cumulative diff and emits findings. The findings are validated against the vendored schema and recorded.
6
6
 
7
- The gate terminates on exhausted round budget or when no findings above threshold remain.
7
+ The gate reports; it does not decide. Nothing is applied automatically, and the implementer reads the recorded findings and chooses what to act on.
8
8
 
9
9
  ## Mandate: Conformance and Defects Only
10
10
 
11
- The reviewer checks the diff against the **plan's stated requirements** and for **demonstrable defects**. It does **not** raise general code-quality opinions, style notes, design critiques, or taste judgments — the linter owns style. Every finding must cite concrete evidence and trace to:
11
+ The reviewer checks the diff against the **plan's stated requirements** and for **demonstrable defects**. It does **not** raise general code-quality opinions, style notes, design critiques, or taste judgments. The linter owns style. Every finding must cite concrete evidence and trace to:
12
12
 
13
13
  - An explicit requirement stated in the plan, **or**
14
14
  - A demonstrable defect in the code as written
@@ -17,41 +17,31 @@ Anything else is out of scope and must not be included in findings.
17
17
 
18
18
  ## Finding Categories In Scope
19
19
 
20
- - **Requirement conformance** — the code does not implement what the plan explicitly asked for
21
- - **Demonstrable defects** — the code fails at runtime, produces wrong behaviour, violates a contract it declares, has a security hole, causes data loss, or breaks something else in the plan
20
+ - **Requirement conformance**: the code does not implement what the plan explicitly asked for
21
+ - **Demonstrable defects**: the code fails at runtime, produces wrong behaviour, violates a contract it declares, has a security hole, causes data loss, or breaks something else in the plan
22
22
 
23
- ## Severity Floor: `major`
23
+ ## Severity and Confidence
24
24
 
25
- Findings below `major` are recorded in the review output but never auto-applied. The severity levels, ordered from most to least consequential:
25
+ Both are advisory triage labels carried on every finding so that whoever reads the review can sort it. Nothing thresholds on them and nothing is filtered out before the implementer sees it.
26
26
 
27
- - `critical` — causes data loss, security hole, crash, or corruption on a path real usage reaches
28
- - `major` — produces wrong behaviour or breaks a documented contract; nothing destroyed
29
- - `minor` — real but bounded (mishandled edge case, missing test, maintenance hazard); behaviour correct today
30
- - `info` — no defect (style, naming, question for author, recorded context)
27
+ Severity, from most to least consequential:
31
28
 
32
- If a finding omits the severity attribute, it falls below the floor and is never auto-applied.
29
+ - `critical`: causes data loss, a security hole, a crash, or corruption on a path real usage reaches
30
+ - `major`: produces wrong behaviour or breaks a documented contract; nothing destroyed
31
+ - `minor`: real but bounded (mishandled edge case, maintenance hazard); behaviour correct today
32
+ - `info`: no defect (recorded context, a question for the author)
33
33
 
34
- ## Confidence Floor: `high`
34
+ Confidence, from most to least sure:
35
35
 
36
- Findings below `high` are recorded but never auto-applied. The confidence levels, ordered from most to least sure:
36
+ - `high`: the evidence is in the code that was read, and the failure traces from the diff alone
37
+ - `medium`: likely real, but rests on one assumption that was not verified (how a caller behaves, what a dependency guarantees, what a requirement was)
38
+ - `low`: speculative (failure scenario imagined rather than traced, constraint invented, intent could not be inferred)
37
39
 
38
- - `high` — evidence is in the code that was read; failure can be traced from the diff alone, no assumptions needed
39
- - `medium` — likely real, but rests on one assumption not verified (how a caller behaves, what a dependency guarantees, what a requirement was)
40
- - `low` — speculative (failure scenario imagined, not traced; constraint invented; intent could not be inferred)
40
+ Confidence matters most when it is low. LLM reviewers overstate certainty, so a reviewer that marks its own guess as `medium` is doing the reader a service. Record the label honestly rather than upgrading it to be taken seriously.
41
41
 
42
- If a finding omits the confidence attribute, it falls below the floor and is never auto-applied.
42
+ ## What the Gate Guarantees
43
43
 
44
- This attribute has no schema default on purpose. Findings that omit confidence are treated as falling below any floor. An automated consumer relies on confidence being lowered honestly; LLM reviewers systematically overstate certainty.
45
-
46
- ## Round Budget: 3
47
-
48
- The gate runs up to three detect-and-fix cycles:
49
-
50
- 1. Reviewer critiques the cumulative diff → findings
51
- 2. If findings above floor exist: implement fixes, re-run mechanical gates, verify
52
- 3. Reviewer re-checks → repeat until no new findings above floor or budget exhausted
53
-
54
- This value expressed here is advisory prose only. **Termination is enforced in code and cannot be bypassed by editing this file.** If the round budget is exhausted, the gate halts exactly as any mechanical gate failure does: the plan stays in `plans/`, findings are recorded, and the failure is documented.
44
+ Exactly one thing, and it is enforced in code rather than here: a review that could not be certified is never reported as a clean one. A findings document that is absent, invalid against the schema, or unvalidatable because `xmllint` is missing halts the gate and says which of those happened. "The reviewer found nothing" and "the reviewer never ran" are never collapsed into each other.
55
45
 
56
46
  ## Disable the Gate
57
47
 
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-CxfmFJso.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-BZxIJIkN.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-FMBD7UC4-BkIlqLqc.js";import"./chunk-ND2GUHAM-BZAfIvWk.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-BZxIJIkN.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-FMBD7UC4-BkIlqLqc.js";import"./chunk-ND2GUHAM-BZAfIvWk.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{b as e,a as r,s as a,S as s}from"./chunk-AQP2D5EJ-Dwpt8x10.js";import{b as i}from"./mermaid.core-CxfmFJso.js";import"./chunk-55IACEB6-BYY5vsbu.js";import"./chunk-2J33WTMH-3QS28848.js";import"./index-B5AkN942.js";var u={parser:a,get db(){return new s(2)},renderer:r,styles:e,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{u as diagram};