@haposoft/cafekit 0.16.6 → 0.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 (194) hide show
  1. package/README.md +14 -22
  2. package/bin/__tests__/codex-hooks-ownership.test.js +2 -2
  3. package/bin/__tests__/codex-hooks.test.js +0 -36
  4. package/bin/__tests__/codex-native.test.js +46 -88
  5. package/bin/__tests__/develop-contract.test.js +26 -57
  6. package/bin/__tests__/docs-sync-on-demand.test.js +93 -0
  7. package/bin/__tests__/grok-envelope.test.js +0 -56
  8. package/bin/__tests__/hook-payload.test.js +4 -6
  9. package/bin/__tests__/legacy-authority-decoupled.test.js +159 -0
  10. package/bin/__tests__/legacy-hooks-retired.test.js +221 -0
  11. package/bin/__tests__/omp-bridge.test.js +20 -17
  12. package/bin/__tests__/omp-hooks.test.js +0 -19
  13. package/bin/__tests__/optional-skill-inventory.test.js +112 -4
  14. package/bin/__tests__/orca-session.test.js +0 -2
  15. package/bin/__tests__/package-inventory.test.js +100 -541
  16. package/bin/__tests__/runtime-dir.test.js +0 -3
  17. package/bin/__tests__/runtime-schema.test.js +3 -2
  18. package/bin/__tests__/skill-routing-source.test.js +27 -15
  19. package/bin/__tests__/spec-narrowing.test.js +0 -27
  20. package/bin/__tests__/specs-v2-execution-closeout.test.js +4 -69
  21. package/bin/__tests__/ui-ux-skill.test.js +101 -0
  22. package/bin/__tests__/usage-hook-retired.test.js +114 -0
  23. package/bin/__tests__/validator-grounding.test.js +9 -28
  24. package/bin/phases/codex-runtime.js +24 -0
  25. package/bin/phases/omp-runtime.js +22 -0
  26. package/package.json +1 -1
  27. package/src/claude/CLAUDE.md +3 -10
  28. package/src/claude/agents/brainstormer.md +7 -3
  29. package/src/claude/agents/code-auditor.md +35 -50
  30. package/src/claude/agents/debugger.md +5 -79
  31. package/src/claude/agents/deployer.md +3 -5
  32. package/src/claude/agents/docs-keeper.md +2 -7
  33. package/src/claude/agents/implementer.md +6 -9
  34. package/src/claude/agents/inspector.md +2 -3
  35. package/src/claude/agents/project-manager.md +7 -15
  36. package/src/claude/agents/researcher.md +9 -3
  37. package/src/claude/agents/spec-maker.md +11 -11
  38. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -1
  39. package/src/claude/hooks/__tests__/spec-gate.test.js +112 -3
  40. package/src/claude/hooks/__tests__/spec-state-touched.test.js +134 -0
  41. package/src/claude/hooks/__tests__/state.test.js +68 -0
  42. package/src/claude/hooks/__tests__/statusline.test.js +140 -11
  43. package/src/claude/hooks/agent.cjs +2 -1
  44. package/src/claude/hooks/lib/context.cjs +0 -89
  45. package/src/claude/hooks/lib/hook-payload.cjs +2 -2
  46. package/src/claude/hooks/rules.cjs +2 -1
  47. package/src/claude/hooks/session.cjs +0 -1
  48. package/src/claude/hooks/spec-gate.cjs +18 -28
  49. package/src/claude/hooks/spec-state.cjs +95 -1
  50. package/src/claude/hooks/state.cjs +21 -2
  51. package/src/claude/migration-manifest.json +30 -15
  52. package/src/claude/rules/ai-dev-rules.md +1 -1
  53. package/src/claude/rules/hook-protocols.md +8 -15
  54. package/src/claude/rules/manage-docs.md +9 -23
  55. package/src/claude/rules/orchestrator.md +3 -4
  56. package/src/claude/rules/review-audit-self-decision.md +3 -3
  57. package/src/claude/rules/skill-domain-routing.md +1 -3
  58. package/src/claude/rules/skill-workflow-routing.md +4 -5
  59. package/src/claude/rules/state-sync.md +3 -12
  60. package/src/claude/rules/workflow.md +10 -18
  61. package/src/claude/runtime.schema.json +5 -3
  62. package/src/claude/scripts/generate-skill-catalog.cjs +7 -6
  63. package/src/claude/scripts/provenance.cjs +23 -5
  64. package/src/claude/scripts/spec-receipt.cjs +52 -6
  65. package/src/claude/scripts/spec-resolver.cjs +1 -2
  66. package/src/claude/scripts/validate-spec-output.cjs +5 -32
  67. package/src/claude/scripts/workflow-policy.cjs +22 -10
  68. package/src/claude/settings/settings.json +1 -32
  69. package/src/claude/skills/{question → ask}/SKILL.md +9 -75
  70. package/src/claude/skills/brainstorm/SKILL.md +43 -131
  71. package/src/claude/skills/code-review/SKILL.md +48 -17
  72. package/src/claude/skills/code-review/references/spec-compliance-review.md +2 -3
  73. package/src/claude/skills/code-review/references/verification-gate.md +22 -27
  74. package/src/claude/skills/debug/SKILL.md +29 -149
  75. package/src/claude/skills/develop/SKILL.md +27 -36
  76. package/src/claude/skills/develop/references/parallel-waves.md +0 -8
  77. package/src/claude/skills/develop/references/quality-gate.md +15 -13
  78. package/src/claude/skills/docs/SKILL.md +2 -2
  79. package/src/claude/skills/docs/references/update-workflow.md +1 -1
  80. package/src/claude/skills/fix/SKILL.md +153 -0
  81. package/src/claude/skills/{hotfix → fix}/references/diagnosis-protocol.md +2 -2
  82. package/src/claude/skills/{hotfix → fix}/references/parallel-patterns.md +2 -2
  83. package/src/claude/skills/{hotfix → fix}/references/prevention-gate.md +3 -3
  84. package/src/claude/skills/{hotfix → fix}/references/review-cycle.md +1 -1
  85. package/src/claude/skills/git/SKILL.md +48 -9
  86. package/src/claude/skills/git/references/commit-protocols.md +35 -16
  87. package/src/claude/skills/git/references/worktree-blueprint.md +42 -6
  88. package/src/claude/skills/orca/SKILL.md +9 -8
  89. package/src/claude/skills/research/SKILL.md +2 -0
  90. package/src/claude/skills/scout/SKILL.md +61 -0
  91. package/src/claude/skills/{inspect → scout}/references/internal-inspection.md +26 -10
  92. package/src/claude/skills/specs/SKILL.md +22 -29
  93. package/src/claude/skills/specs/references/review.md +8 -6
  94. package/src/claude/skills/specs/references/templates.md +38 -44
  95. package/src/claude/skills/sync/SKILL.md +8 -15
  96. package/src/claude/skills/sync/references/rebind-and-audit.md +59 -0
  97. package/src/claude/skills/sync/references/sync-protocols.md +4 -13
  98. package/src/claude/skills/test/SKILL.md +22 -3
  99. package/src/claude/skills/test/references/execution-strategy.md +83 -0
  100. package/src/claude/skills/test/references/failure-triage.md +1 -1
  101. package/src/claude/skills/ui-ux/LICENSE +21 -0
  102. package/src/claude/skills/ui-ux/SKILL.md +497 -0
  103. package/src/claude/skills/ui-ux/references/brand-tokens.md +90 -0
  104. package/src/claude/skills/ui-ux/references/budgets.md +113 -0
  105. package/src/claude/skills/ui-ux/references/checklist.md +271 -0
  106. package/src/claude/skills/ui-ux/references/components/accordion.md +246 -0
  107. package/src/claude/skills/ui-ux/references/components/avatar.md +153 -0
  108. package/src/claude/skills/ui-ux/references/components/banner.md +43 -0
  109. package/src/claude/skills/ui-ux/references/components/breadcrumb.md +201 -0
  110. package/src/claude/skills/ui-ux/references/components/button.md +142 -0
  111. package/src/claude/skills/ui-ux/references/components/card.md +113 -0
  112. package/src/claude/skills/ui-ux/references/components/charts.md +376 -0
  113. package/src/claude/skills/ui-ux/references/components/chat.md +132 -0
  114. package/src/claude/skills/ui-ux/references/components/choice-controls.md +369 -0
  115. package/src/claude/skills/ui-ux/references/components/comment-thread.md +17 -0
  116. package/src/claude/skills/ui-ux/references/components/description-list.md +116 -0
  117. package/src/claude/skills/ui-ux/references/components/empty-state.md +98 -0
  118. package/src/claude/skills/ui-ux/references/components/file-upload.md +107 -0
  119. package/src/claude/skills/ui-ux/references/components/inline-edit.md +128 -0
  120. package/src/claude/skills/ui-ux/references/components/input.md +161 -0
  121. package/src/claude/skills/ui-ux/references/components/list-row.md +56 -0
  122. package/src/claude/skills/ui-ux/references/components/loading.md +198 -0
  123. package/src/claude/skills/ui-ux/references/components/logo.md +147 -0
  124. package/src/claude/skills/ui-ux/references/components/otp-input.md +43 -0
  125. package/src/claude/skills/ui-ux/references/components/quantity-input.md +100 -0
  126. package/src/claude/skills/ui-ux/references/components/range-slider.md +16 -0
  127. package/src/claude/skills/ui-ux/references/components/small-controls.md +340 -0
  128. package/src/claude/skills/ui-ux/references/components/sortable-header.md +86 -0
  129. package/src/claude/skills/ui-ux/references/components/tag-input.md +14 -0
  130. package/src/claude/skills/ui-ux/references/components/timeline.md +38 -0
  131. package/src/claude/skills/ui-ux/references/components/tree.md +30 -0
  132. package/src/claude/skills/ui-ux/references/design-process.md +650 -0
  133. package/src/claude/skills/ui-ux/references/layouts/app-kanban.html +303 -0
  134. package/src/claude/skills/ui-ux/references/layouts/app.md +1369 -0
  135. package/src/claude/skills/ui-ux/references/layouts/form.md +430 -0
  136. package/src/claude/skills/ui-ux/references/layouts/overlay.md +552 -0
  137. package/src/claude/skills/ui-ux/references/layouts/pricing.md +204 -0
  138. package/src/claude/skills/ui-ux/references/locked-rules.md +35 -0
  139. package/src/claude/skills/ui-ux/references/principles.md +408 -0
  140. package/src/claude/skills/ui-ux/references/refactor.md +245 -0
  141. package/src/claude/skills/ui-ux/references/responsive.md +195 -0
  142. package/src/claude/skills/ui-ux/references/review.md +528 -0
  143. package/src/claude/skills/ui-ux/references/rules-color.md +623 -0
  144. package/src/claude/skills/ui-ux/references/rules-form.md +235 -0
  145. package/src/claude/skills/ui-ux/references/rules-state.md +680 -0
  146. package/src/claude/skills/ui-ux/references/rules-type.md +369 -0
  147. package/src/claude/skills/ui-ux/references/styles.md +311 -0
  148. package/src/claude/skills/ui-ux/references/system.md +219 -0
  149. package/src/claude/skills/ui-ux/references/tailwind-v4-traps.md +237 -0
  150. package/src/claude/skills/ui-ux/references/tokens.css +362 -0
  151. package/src/claude/skills/ui-ux/scripts/lint-skill.mjs +216 -0
  152. package/src/claude/skills/ui-ux/scripts/package.json +9 -0
  153. package/src/claude/skills/ui-ux/scripts/probe.mjs +4447 -0
  154. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  155. package/src/claude/status.cjs +149 -144
  156. package/src/codex/AGENTS.md +8 -13
  157. package/src/codex/hooks/agent.cjs +2 -1
  158. package/src/codex/hooks/lib/spec-receipt.cjs +5 -0
  159. package/src/codex/hooks/lib/spec-utils.cjs +0 -7
  160. package/src/codex/hooks/rules.cjs +2 -1
  161. package/src/codex/hooks/session.cjs +0 -2
  162. package/src/codex/hooks/spec-gate.cjs +8 -18
  163. package/src/codex/hooks.json +0 -20
  164. package/src/codex/rules/state-sync.md +3 -12
  165. package/src/common/AGENTS.md +2 -2
  166. package/src/omp/extensions/cafekit-bridge.mjs +6 -6
  167. package/src/claude/hooks/__tests__/completion-authority.test.js +0 -990
  168. package/src/claude/hooks/__tests__/semantic-review-authority.test.js +0 -259
  169. package/src/claude/hooks/completion-authority-check.cjs +0 -56
  170. package/src/claude/hooks/completion-authority-state.cjs +0 -527
  171. package/src/claude/hooks/completion-authority.cjs +0 -163
  172. package/src/claude/hooks/semantic-review-authority.cjs +0 -154
  173. package/src/claude/hooks/task-scaffold-guard.cjs +0 -114
  174. package/src/claude/hooks/usage.cjs +0 -197
  175. package/src/claude/skills/delegate/SKILL.md +0 -124
  176. package/src/claude/skills/delegate/references/codex-delegation.md +0 -71
  177. package/src/claude/skills/delegate/references/grok-delegation.md +0 -84
  178. package/src/claude/skills/hotfix/SKILL.md +0 -289
  179. package/src/claude/skills/inspect/SKILL.md +0 -142
  180. package/src/claude/skills/loop/SKILL.md +0 -114
  181. package/src/claude/skills/loop/references/bounded-loop-protocol.md +0 -104
  182. package/src/claude/skills/loop/references/metric-and-guard-contract.md +0 -76
  183. package/src/claude/skills/route/SKILL.md +0 -94
  184. package/src/claude/skills/route/references/agent-timing.md +0 -46
  185. package/src/claude/skills/route/references/chaining-patterns.md +0 -53
  186. package/src/claude/skills/route/references/task-taxonomy.md +0 -48
  187. package/src/codex/hooks/completion-authority-check.cjs +0 -67
  188. package/src/codex/hooks/completion-authority-state.cjs +0 -527
  189. package/src/codex/hooks/completion-authority.cjs +0 -109
  190. package/src/codex/hooks/semantic-review-authority.cjs +0 -130
  191. package/src/codex/hooks/task-scaffold-guard.cjs +0 -63
  192. /package/src/claude/skills/{question → ask}/templates/question.md +0 -0
  193. /package/src/claude/skills/{hotfix → fix}/references/escalation-tactics.md +0 -0
  194. /package/src/claude/skills/{hotfix → fix}/references/workflow-specialized.md +0 -0
@@ -24,6 +24,7 @@ metadata:
24
24
 
25
25
  <ANSWER-ONLY-GATE>
26
26
  Do NOT implement, scaffold, refactor, modify files, generate full specs, or make final architecture decisions.
27
+ This holds even when the question itself asks for a change ("and fix it", "rồi đổi luôn cho tôi"): answer the cause with evidence, edit nothing, and point to `cf:fix` for the change, or to `cf:debug` when the cause is not yet known.
27
28
  The output is an answer, evidence, confidence, and a follow-up only when needed.
28
29
  </ANSWER-ONLY-GATE>
29
30
 
@@ -43,10 +44,7 @@ Do not use it when:
43
44
  - The user asks to implement, fix, debug, test, commit, or publish.
44
45
  - The user wants ideation/tradeoff exploration; use `cf:brainstorm`.
45
46
  - The user wants a formal spec; use `cf:specs`.
46
- - The user wants full legacy documentation reconstruction: use
47
- `cf:docs --reconstruct` when the optional document bundle is installed;
48
- otherwise use `cf:scout` plus source evidence, or explain how to install the
49
- bundle with `npx @haposoft/cafekit --with-document-skills`.
47
+ - The user wants full legacy documentation reconstruction: use `cf:docs --reconstruct` when the optional document bundle is installed; otherwise use `cf:scout` plus source evidence, or explain how to install the bundle with `npx @haposoft/cafekit --with-document-skills`.
50
48
  - The user wants root-cause diagnosis for a failure; use `cf:debug`.
51
49
 
52
50
  ## Modes
@@ -60,50 +58,19 @@ Do not use it when:
60
58
 
61
59
  If modes conflict, prefer the most explicit source mode in this order: `--both`, `--repo`, `--web`, then default. Apply `--brief` or `--deep` as output depth modifiers.
62
60
 
63
- ## Workflow
61
+ ## Standards
64
62
 
65
- ### 1. Classify The Question
63
+ **Unclear questions.** If `unclear`, ask one focused follow-up with the minimum choices needed.
66
64
 
67
- Pick one primary answer type:
65
+ **Repo evidence priority:** `README.md`, `AGENTS.md`, `CLAUDE.md`; then relevant `docs/`, `specs/`, `.claude/`; then source files, tests, scripts, package manifests, config files; git history only when the question asks about changes or provenance. Use focused search (`rg`, targeted file reads) instead of broad scans. Use `cf:scout` when the user asks where something lives or the source surface is unclear.
68
66
 
69
- ```text
70
- source-code behavior | config/version | spec/docs consistency | dependency/library | workflow/process | external/current knowledge | unclear
71
- ```
72
-
73
- If `unclear`, ask one focused follow-up with the minimum choices needed.
74
-
75
- ### 2. Gather Evidence
76
-
77
- Repo evidence priority:
78
- 1. `README.md`, `AGENTS.md`, `CLAUDE.md`
79
- 2. relevant `docs/`, `specs/`, `.claude/`
80
- 3. source files, tests, scripts, package manifests, config files
81
- 4. git history only when the question asks about changes or provenance
82
-
83
- Use focused search (`rg`, targeted file reads) instead of broad scans. Use `cf:scout` when the user asks where something lives or the source surface is unclear.
84
-
85
- External evidence:
86
- - Use external/current docs when repo evidence is absent, stale, or not authoritative.
87
- - Prefer official docs, standards, source repositories, or primary vendor docs.
88
- - State clearly when an answer is inferred from external docs rather than confirmed in the repo.
67
+ **External evidence.** Use external/current docs when repo evidence is absent, stale, or not authoritative. Prefer official docs, standards, source repositories, or primary vendor docs. State clearly when an answer is inferred from external docs rather than confirmed in the repo.
89
68
 
90
- ### 3. Decide Whether To Answer Or Ask Back
69
+ **Broad questions.** When the question names no aspect or target — "Is this system stable?", "Is the code good?" — ask back before gathering evidence, offering 2-3 aspects (for example code and tests, runtime reliability, deploy readiness), even when a cautious answer would be possible.
91
70
 
92
- Answer directly when at least one of these is true:
93
- - repo evidence answers the question,
94
- - external/current evidence answers the non-project part,
95
- - a cautious answer can separate known facts from inference.
71
+ **Answer or ask back.** Answer directly when at least one of these is true: repo evidence answers the question, external/current evidence answers the non-project part, or a cautious answer can separate known facts from inference. Ask back when the target system/module is not named and multiple targets are plausible, the needed file/source is blocked or private, the question requires business/domain judgment not present in source, the answer would require guessing customer intent, or the question bundles multiple unrelated topics. Ask only one follow-up question. Include 2-3 concrete options if helpful.
96
72
 
97
- Ask back when:
98
- - the target system/module is not named and multiple targets are plausible,
99
- - the needed file/source is blocked or private,
100
- - the question requires business/domain judgment not present in source,
101
- - the answer would require guessing customer intent,
102
- - the question bundles multiple unrelated topics.
103
-
104
- Ask only one follow-up question. Include 2-3 concrete options if helpful.
105
-
106
- ### 4. Output Contract
73
+ ## Output Contract
107
74
 
108
75
  Default output:
109
76
 
@@ -135,36 +102,3 @@ Use `templates/question.md` when the user asks to save or document the answer.
135
102
  - Keep the answer proportional: concise for simple questions, structured for complex ones.
136
103
  - If external sources were used, include source links or names.
137
104
  - If no evidence exists, say "no evidence found in the current source" and explain what was checked.
138
-
139
- ## Examples
140
-
141
- ### Source Question
142
-
143
- ```text
144
- /cf:ask "In this system, which file does cafekit use to toggle skill routing?"
145
- ```
146
-
147
- Expected behavior:
148
- - read runtime/config/install files,
149
- - answer with exact config file and relevant keys,
150
- - say whether it is runtime-driven or hard-coded.
151
-
152
- ### Mixed Source + Web Question
153
-
154
- ```text
155
- /cf:ask "Which React version does this project use, and does that version still match current best practice?" --both
156
- ```
157
-
158
- Expected behavior:
159
- - read `package.json` or lockfile,
160
- - check current React docs/release info if needed,
161
- - separate local version from external recommendation.
162
-
163
- ### Ask Back
164
-
165
- ```text
166
- /cf:ask "Is this system stable?"
167
- ```
168
-
169
- Expected behavior:
170
- - ask one narrowing question because "stable" could mean architecture, security, performance, UX, tests, or deploy readiness.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: cf:brainstorm
3
- description: "Turn unresolved product or architecture intent into a bounded decision contract, with proportional routing, evidence, and safe handoff."
3
+ description: "Shape an unsettled piece of work into a decided one before anyone builds it. Use when the outcome is already agreed but two or more approaches would each satisfy it with meaningfully different consequences — setup cost, migration, failure behaviour, who carries the work afterwards; use it too when an idea still wants exploring, or when only one approach is viable but the contract and the candidate design still need a decision. It weighs viable approaches against a bounded contract of Outcome, Constraints, Non-goals and Acceptance, records what was chosen and what was rejected and why, and stops there; it writes no code and carries nothing onward by itself. Skip it for a direct factual answer, skip it for a bug or failure that still needs its root cause, and skip it when the request needs a plan and its tasks rather than a choice between designs."
4
4
  user-invocable: true
5
- when_to_use: "Use when material product, scope, or architecture choices remain; skip direct factual answers and already-concrete Specs work."
5
+ when_to_use: "Use when an outcome is agreed and designs compete, an idea wants exploring, or a candidate needs a decision; skip direct factual answers, undiagnosed bugs, and requests that need a plan and its tasks."
6
6
  category: utilities
7
7
  keywords: [ideation, tradeoffs, decisions, scope]
8
8
  argument-hint: "<idea_or_problem>"
@@ -12,9 +12,7 @@ metadata:
12
12
  ---
13
13
  # Brainstorm — proportional pre-delivery design
14
14
 
15
- Turn unresolved intent into a bounded contract without turning clear work into
16
- an interview. `cf:brainstorm` owns the workflow; `brainstormer` is an optional
17
- specialist for real architectural trade-offs.
15
+ Turn unresolved intent into a bounded contract without turning clear work into an interview. `cf:brainstorm` owns the workflow; `brainstormer` is an optional specialist for real architectural trade-offs.
18
16
 
19
17
  <HARD-GATE>
20
18
  Brainstorm never writes implementation, invokes Develop, or treats approval as
@@ -24,64 +22,32 @@ for a new explicit `cf:specs` invocation; it never starts Specs implicitly.
24
22
 
25
23
  ## Control flags
26
24
 
27
- Parse controls only from the leading consecutive token segment. Accept
28
- `--deep`, `--visual`, and `--advice` in any order, each at most once. `--` ends
29
- the control segment. After it or the first content token, every token is user
30
- content. An unknown or duplicate `--*` inside the leading segment returns usage
31
- and performs no scout, question, tool call, write, or workflow action.
25
+ Parse controls only from the leading consecutive token segment. Accept `--deep`, `--visual`, and `--advice` in any order, each at most once. `--` ends the control segment. After it or the first content token, every token is user content. An unknown or duplicate `--*` inside the leading segment returns usage and performs no scout, question, tool call, write, or workflow action.
32
26
 
33
- Parsing identifies controls but does not apply them. Route Direct first, then
34
- apply controls only to requests that remain in Brainstorm. `--deep` may raise
35
- non-direct analysis depth but never lower a gate; `--visual` changes presentation
36
- only; and no control grants persistence, approval, dispatch, or implementation
37
- authority. Use `-- --dry-run` when literal flag-like content leads the prompt.
27
+ Parsing identifies controls but does not apply them. Route Direct first, then apply controls only to requests that remain in Brainstorm. `--deep` may raise non-direct analysis depth but never lower a gate; `--visual` changes presentation only; and no control grants persistence, approval, dispatch, or implementation authority. Use `-- --dry-run` when literal flag-like content leads the prompt.
38
28
 
39
29
  ## Front-door routing — before scout or questions
40
30
 
41
31
  Classify intent first. This routing never waives safety or permission rules.
42
32
 
43
- 1. **Direct request:** for a factual answer, a specific command, or an explicitly
44
- different workflow, leave Brainstorm before scout, questions, approval, or
45
- persistence. Read-only product or architecture exploration is not direct merely
46
- because it writes no files.
47
- 2. **Hydrate the contract, then keep routing:** for every request that remains,
48
- reuse accepted Outcome, Constraints, Non-goals, and Acceptance field by field
49
- only when current user text or an approved artifact binds them to the same
50
- target and revision. Preserve current non-conflicting fields; treat missing,
51
- stale, or conflicting fields as gaps. Never infer approval. Hydration is not a
52
- terminal route; continue to exactly one intent route below.
53
- 3. **Bug or failure:** before diagnosis, capture the repaired-behavior Outcome,
54
- Constraints, Non-goals, and Acceptance evidence. Then use `cf:debug` until
55
- root cause is evidenced. Do not brainstorm fixes from a symptom. If at least
56
- two cause-aligned remedies remain, compare 2–3 here. Hand off to `cf:fix`
57
- only when the user explicitly requested a fix; diagnosis-only work returns the
58
- root-cause report and stops.
59
- 4. **Non-bug exploration only:** inspect enough evidence, give a chat
60
- recommendation, and stop. Do not request design approval, persist a report, or
61
- invoke another workflow without a new explicit request.
62
- 5. **Feature or documentation delivery:** continue through the design workflow.
33
+ 1. **Direct request:** for a factual answer, a specific command, or an explicitly different workflow, leave Brainstorm before scout, questions, approval, or persistence. Read-only product or architecture exploration is not direct merely because it writes no files.
34
+ 2. **Plan-and-tasks request:** when the user asks for a plan, a task list, or work split into tasks rather than a choice between designs, leave Brainstorm before scout or questions: say in one or two sentences that Specs owns plans and tasks, and ask the user to invoke `cf:specs` in a new request. Do not interview, compare options, write the list, or start Specs. Open this answer with `Route: plan-and-tasks · Depth: Standard`.
35
+ 3. **Hydrate the contract, then keep routing:** for every request that remains, reuse accepted Outcome, Constraints, Non-goals, and Acceptance field by field only when current user text or an approved artifact binds them to the same target and revision. Preserve current non-conflicting fields; treat missing, stale, or conflicting fields as gaps. Never infer approval. Hydration is not a terminal route; continue to exactly one intent route below.
36
+ 4. **Bug or failure:** before diagnosis, capture the repaired-behavior Outcome, Constraints, Non-goals, and Acceptance evidence. Then use `cf:debug` until root cause is evidenced. Do not brainstorm fixes from a symptom. If at least two cause-aligned remedies remain, compare 2–3 here. Hand off to `cf:fix` only when the user explicitly requested a fix; diagnosis-only work returns the root-cause report and stops.
37
+ 5. **Non-bug exploration only:** inspect enough evidence, give a chat recommendation, and stop. Do not request design approval, persist a report, or invoke another workflow without a new explicit request.
38
+ 6. **Feature or documentation delivery:** continue through the design workflow.
63
39
 
64
40
  ## Adaptive analysis depth
65
41
 
66
- For every non-direct request, choose the smallest adequate depth from current
67
- evidence and material risk:
42
+ For every non-direct request, choose the smallest adequate depth from current evidence and material risk:
68
43
 
69
44
  - **Standard:** bounded single-surface work with no material risk signal.
70
- - **Deep:** critical safety/security risk; public compatibility or data migration;
71
- cross-service state or concurrency; costly or irreversible rollback; or
72
- unresolved feasibility at a material boundary.
73
- - With no Deep signal, use Standard. `--deep` raises Standard to Deep. If three
74
- or more subsystems are independently deliverable, split them instead of using
75
- Deep as a monolithic substitute.
76
-
77
- Deep is selective, not a checklist. Apply a lens only when its trigger is
78
- present and otherwise record `skipped: <reason>`: feasibility for an unresolved
79
- material boundary; stakeholders for externally affected roles; system boundaries
80
- for cross-component state; failure isolation for partial or cascading failure
81
- across boundaries; reversibility and recovery for costly or irreversible failure;
82
- operability for runtime ownership; migration/rollback for data or public
83
- compatibility; testability for a material proof gap; and second-order effects
84
- for downstream behavior or incentives.
45
+ - **Deep:** critical safety/security risk; public compatibility or data migration; cross-service state or concurrency; costly or irreversible rollback; or unresolved feasibility at a material boundary.
46
+ - With no Deep signal, use Standard. `--deep` raises Standard to Deep. If three or more subsystems are independently deliverable, split them instead of using Deep as a monolithic substitute.
47
+
48
+ Open every non-direct answer with one line naming its route and depth, for example `Route: feature delivery · Depth: Standard`. When the answer is a `cf:debug` report, that report's heading comes first and this line follows it.
49
+
50
+ Deep is selective, not a checklist. Apply a lens only when its trigger is present and otherwise record `skipped: <reason>`: feasibility for an unresolved material boundary; stakeholders for externally affected roles; system boundaries for cross-component state; failure isolation for partial or cascading failure across boundaries; reversibility and recovery for costly or irreversible failure; operability for runtime ownership; migration/rollback for data or public compatibility; testability for a material proof gap; and second-order effects for downstream behavior or incentives.
85
51
 
86
52
  ## Contract and evidence
87
53
 
@@ -92,118 +58,64 @@ For feature/docs delivery and every bug/failure, resolve four user-owned fields:
92
58
  - **Non-goals:** nearby work excluded from this delivery.
93
59
  - **Acceptance:** observable evidence that proves completion.
94
60
 
95
- After front-door routing, run `cf:scout` or a narrow equivalent before
96
- technical design. Inspect relevant modules, patterns, docs/plans, contracts, and
97
- runtime constraints; summarize only useful findings in 3–6 bullets.
61
+ After front-door routing, run `cf:scout` or a narrow equivalent before technical design. Inspect relevant modules, patterns, docs/plans, contracts, and runtime constraints; summarize only useful findings in 3–6 bullets.
98
62
 
99
- For supplied images, video, PDFs, or mockups, use `cf:ai-multimodal` when the
100
- optional document bundle is installed; otherwise use the runtime's available
101
- multimodal capability or report the evidence gap. Add a diagram only when it
102
- clarifies a material choice or flow.
63
+ For supplied images, video, PDFs, or mockups, use `cf:ai-multimodal` when the optional document bundle is installed; otherwise use the runtime's available multimodal capability or report the evidence gap. Add a diagram only when it clarifies a material choice or flow.
103
64
 
104
- Derive technical touchpoints from repository evidence. Ask the user about a
105
- touchpoint only when its ownership or scope boundary is a product decision that
106
- cannot be discovered. Keep intent separate from current-state evidence.
65
+ Derive technical touchpoints from repository evidence. Ask the user about a touchpoint only when its ownership or scope boundary is a product decision that cannot be discovered. Keep intent separate from current-state evidence.
107
66
 
108
- On every route, keep feasibility (`confirmed | plausible | unknown |
109
- infeasible`), confidence (`high | medium | low`), and disposition (`chosen |
110
- rejected | deferred`) separate and cite evidence or basis. Missing evidence
111
- forces feasibility `unknown` and confidence `low`. A numeric estimate requires
112
- range, unit, basis, evidence, and assumptions; otherwise report `unknown`.
67
+ On every route, keep feasibility (`confirmed | plausible | unknown | infeasible`), confidence (`high | medium | low`), and disposition (`chosen | rejected | deferred`) separate and cite evidence or basis. Missing evidence forces feasibility `unknown` and confidence `low`. A numeric estimate requires range, unit, basis, evidence, and assumptions; otherwise report `unknown`.
113
68
 
114
- If the request spans three or more independently deliverable subsystems, split
115
- it. A subsystem is independent only when its outcome, boundary, and verification
116
- or deployment path can move through the lifecycle separately.
69
+ If the request spans three or more independently deliverable subsystems, split it. A subsystem is independent only when its outcome, boundary, and verification or deployment path can move through the lifecycle separately.
117
70
 
118
71
  ## Discovery Question Framework
119
72
 
120
- Load `references/question-framework.md` before the first discovery question.
121
- Generate questions from scout evidence, user intent, contract gaps, applicable
122
- domain guidance, and risk surfaces. Never ask the user for a technical fact that
123
- code, docs, or trusted current research can answer.
73
+ Load `references/question-framework.md` before the first discovery question. Generate questions from scout evidence, user intent, contract gaps, applicable domain guidance, and risk surfaces. Never ask the user for a technical fact that code, docs, or trusted current research can answer.
74
+
75
+ Use the runtime's native structured user-input tool when available. Ask one highest-impact question by default; batch at most three independent questions only when none depends on an earlier answer. Record confirmed decisions, assumptions, and open questions separately in the decision register.
124
76
 
125
- Use the runtime's native structured user-input tool when available. Ask one
126
- highest-impact question by default; batch at most three independent questions
127
- only when none depends on an earlier answer. Record confirmed decisions,
128
- assumptions, and open questions separately in the decision register.
77
+ Stop asking when remaining details have safe implementation defaults. Do not force questions merely to consume a budget.
129
78
 
130
- Stop asking when remaining details have safe implementation defaults. Do not
131
- force questions merely to consume a budget.
79
+ When the user delegates a choice ("pick whichever is fastest"), choose from the recorded evidence, say that you chose on the user's behalf and why, record it in the Decision register as a delegated choice, and ask only for the approvals its route requires.
132
80
 
133
81
  ## Options and specialist use
134
82
 
135
- A material design choice exists only when at least two viable paths would satisfy
136
- the contract with meaningfully different consequences.
83
+ A material design choice exists only when at least two viable paths would satisfy the contract with meaningfully different consequences.
137
84
 
138
- - For a material choice, compare 2–3 mechanically distinct viable approaches by
139
- setup cost, runtime complexity, maintenance, UX/DX, compatibility/migration,
140
- risk, and time-to-value.
141
- - With one viable path, present it and explain briefly why alternatives would be
142
- artificial or fail the contract. Never create strawman options.
85
+ - For a material choice, compare 2–3 mechanically distinct viable approaches by setup cost, runtime complexity, maintenance, UX/DX, compatibility/migration, risk, and time-to-value.
86
+ - With one viable path, present it and explain briefly why alternatives would be artificial or fail the contract. Never create strawman options.
143
87
  - Recommend the smallest path that satisfies the contract.
144
88
 
145
- Call `brainstormer` only for a material architectural choice that benefits from
146
- deeper pressure-testing. Use researcher only for current external facts the
147
- repository cannot establish. The controller remains responsible for questions,
148
- approval, persistence, and handoff.
89
+ Unless the user names `brainstormer`, call it only for a material architectural choice that benefits from deeper pressure-testing. When the user names `brainstormer`, call it; tell it which route applies; the routes are feature delivery; an explicitly authorized fix; diagnosis-only bug work; non-bug exploration. Pass the contract with it; it may return a single-path conclusion. Use researcher only for current external facts the repository cannot establish. The controller remains responsible for questions, approval, persistence, and handoff.
149
90
 
150
- `--visual` may present inline Mermaid or ASCII for any non-direct analysis and
151
- falls back to equivalent text when rendering is unavailable. Durable or external
152
- rendering requires explicit user authority before invocation. `--advice` invokes
153
- `brainstormer` only after the material-choice gate; if advice is unavailable or
154
- fails, label it unavailable and continue with controller analysis. Before an
155
- external visual tool or adviser handoff, minimize context and redact secrets,
156
- credentials, private keys, access tokens, and unnecessary PII. Neither overlay
157
- writes, approves, persists, dispatches, or completes work.
91
+ `--visual` may present inline Mermaid or ASCII for any non-direct analysis and falls back to equivalent text when rendering is unavailable. Durable or external rendering requires explicit user authority before invocation. `--advice` invokes `brainstormer` only after the material-choice gate; if advice is unavailable or fails, label it unavailable and continue with controller analysis. Before an external visual tool or adviser handoff, minimize context and redact secrets, credentials, private keys, access tokens, and unnecessary PII. Neither overlay writes, approves, persists, dispatches, or completes work.
158
92
 
159
93
  ## Delivery design and approval
160
94
 
161
95
  For feature or documentation delivery:
162
96
 
163
- 1. Draft one coherent candidate scaled to the work: architecture, data flow,
164
- interfaces/UX, error behavior, verification, and rollout only when material.
97
+ 1. Draft one coherent candidate scaled to the work: architecture, data flow, interfaces/UX, error behavior, verification, and rollout only when material.
165
98
  2. Run the internal 4-point review before presentation:
166
99
  - remove placeholders and vague instructions;
167
100
  - reconcile contradictory behavior;
168
101
  - remove scope creep;
169
102
  - make observable behavior and proof concrete.
170
103
  3. Present the reviewed candidate.
171
- 4. Before final approval, require a separate explicit section decision when
172
- the design changes auth/secrets/privacy, destructive or irreversible behavior
173
- or data-loss risk, money/privilege/safety, or production-state mutation.
174
- 5. After critical section decisions and revisions, request one final approval by
175
- default.
104
+ 4. Before final approval, require a separate explicit section decision when the design changes auth/secrets/privacy, destructive or irreversible behavior or data-loss risk, money/privilege/safety, or production-state mutation.
105
+ 5. After critical section decisions and revisions, request one final approval by default.
176
106
 
177
- Revise material disagreement before handoff. An already accepted, current
178
- contract is not re-approved unless new evidence changes it.
107
+ Revise material disagreement before handoff. An already accepted, current contract is not re-approved unless new evidence changes it.
179
108
 
180
109
  ## Persistence and handoff
181
110
 
182
- Persist only approved decisions and semantics, only with user authority, and
183
- only when they must survive the session or feed Specs. Use the repository's
184
- configured report path and naming convention. Do not create a report merely to
185
- satisfy this skill. Before writing, redact live secrets, credentials, private
186
- keys, access tokens, and unnecessary PII; preserve exact approved meaning with a
187
- safe placeholder and ownership reference instead of copying the sensitive value.
188
-
189
- The default handoff stays in chat Markdown. Use these exact headings:
190
- `Target and evidence freshness`, `Outcome`, `Constraints`, `Non-goals`,
191
- `Acceptance`, `Touchpoints`, `Direction and alternatives`, `Relevant impacts
192
- and failure behavior`, `Rollout and recovery`, `Proof mapping`, `Decision
193
- register`, `Assumptions`, and `Open questions`. The first section records target
194
- identity, current source revision and worktree state or `[UNVERIFIED]`, an
195
- evidence-as-of value, and what change invalidates the brief. Durable file output
196
- requires explicit authority and creates no readiness, approval, proof, or
197
- execution state.
198
-
199
- - Feature/docs delivery: provide the approved summary and ask the user to invoke
200
- `cf:specs` explicitly in a new request.
111
+ Persist only approved decisions and semantics, only with user authority, and only when they must survive the session or feed Specs. Use the repository's configured report path and naming convention. Do not create a report merely to satisfy this skill. Before writing, redact live secrets, credentials, private keys, access tokens, and unnecessary PII; preserve exact approved meaning with a safe placeholder and ownership reference instead of copying the sensitive value.
112
+
113
+ The default handoff stays in chat Markdown. Use these exact headings: `Target and evidence freshness`, `Outcome`, `Constraints`, `Non-goals`, `Acceptance`, `Touchpoints`, `Direction and alternatives`, `Relevant impacts and failure behavior`, `Rollout and recovery`, `Proof mapping`, `Decision register`, `Assumptions`, and `Open questions`. The first section records target identity, current source revision and worktree state or `[UNVERIFIED]`, an evidence-as-of value, and what change invalidates the brief. Durable file output requires explicit authority and creates no readiness, approval, proof, or execution state.
114
+
115
+ - Feature/docs delivery: provide the approved summary and ask the user to invoke `cf:specs` explicitly in a new request.
201
116
  - Diagnosed bug: follow the fix-authority rule in front-door routing.
202
117
  - Non-bug exploration: recommendation already returned in chat; stop.
203
118
 
204
119
  ## Completion bar
205
120
 
206
- Brainstorm is complete when the selected route is explicit, current evidence is
207
- separated from intent, every material user-owned gap is resolved or named, and
208
- the route-specific output has been returned without unauthorized persistence or
209
- implementation. Never claim live behavior from this written contract alone.
121
+ Brainstorm is complete when the selected route is explicit, current evidence is separated from intent, every material user-owned gap is resolved or named, and the route-specific output has been returned without unauthorized persistence or implementation. Never claim live behavior from this written contract alone.
@@ -28,7 +28,7 @@ is `BLOCKED`; review never migrates it.
28
28
 
29
29
  For process-first proof consumption, this skill's `## Execution-proof boundary`
30
30
  is authoritative. Do not load or follow legacy separate-receipt paragraphs from
31
- references; they apply only after the Legacy route below is selected.
31
+ references; they apply only to a legacy packet.
32
32
 
33
33
  Select review depth from `assurance_level`, risk, and blast radius. Lane is a
34
34
  derived view:
@@ -73,6 +73,17 @@ runtime binding, concrete `evidence`, and literal `verdict: "PASS"`.
73
73
  `independent: true`, `PASS_WITH_WARNINGS`, missing binding, or reused session
74
74
  provenance is insufficient.
75
75
 
76
+ ## Test-run boundary
77
+
78
+ Review reads code; it does not run tests. Never run the project's test suite or a
79
+ test file, not even as a sanity check. A read-only run of the reviewed code (for
80
+ example `node -e` on the changed function) may reproduce a defect; cite it as a
81
+ reproduction, never as test evidence. Never report a test result, pass count, or
82
+ exit code as the review's evidence. Without a `test-proof-v1` handoff, write the
83
+ proof line exactly as `**Execution proof:** unavailable (owned by cf:test)` and do
84
+ not otherwise say whether tests pass; the review still returns its correctness
85
+ verdict.
86
+
76
87
  ## Execution-proof boundary
77
88
 
78
89
  For process-first work, consume only the controller-validated `test-proof-v1`
@@ -85,10 +96,34 @@ process-first receipt; Develop alone writes Status and inline `## Receipt` after
85
96
  proof and review are both literal `PASS`.
86
97
 
87
98
  Never rerun commands to manufacture proof. If execution proof is missing or
88
- invalid, say `execution proof unavailable` and leave closeout unfinished; do not
89
- claim feature PASS from review alone. A review may still return a correctness
99
+ invalid, write the proof line from the test-run boundary and leave closeout
100
+ unfinished; do not claim feature PASS from review alone. A review may still return a correctness
90
101
  verdict when its review inputs are complete, but that verdict is not execution
91
- proof or C3 approval.
102
+ proof or GATE-DONE approval.
103
+
104
+ ## Severity
105
+
106
+ Rate each finding by its production impact. Write the labels `Critical`, `High`,
107
+ `Medium`, and `Low` verbatim in English, whatever language the report uses.
108
+
109
+ - Critical: a concrete failure a user or operator hits that loses or corrupts
110
+ data, breaks security, or stops the product (a login bypass).
111
+ - High: a concrete wrong result a user or operator hits (an order exactly at a
112
+ tier boundary priced with the wrong discount).
113
+ - Medium: a real risk with a failure scenario that has not reached users (a
114
+ changed boundary with no test; a leftover debug log).
115
+ - Low: cleanup, clarity, or a question (a naming nit; a behavior the change's
116
+ README or docs state as intended).
117
+
118
+ A leftover debug log is at most Medium; if it prints a secret or credential,
119
+ report that exposure as a separate security finding at its own severity. A
120
+ behavior the change's README or docs state as intended is not a Medium or
121
+ heavier defect; raise it as Low or a question. Task and spec compliance findings
122
+ are Critical only when a task or spec is supplied, and there `UNVERIFIED` means
123
+ supplied proof that failed, never proof that is unavailable. A blocking Medium is
124
+ one with a concrete failure before merge. A review whose heaviest remaining
125
+ finding is a non-blocking Medium returns `PASS_WITH_WARNINGS`; one with only Low
126
+ findings returns `PASS`.
92
127
 
93
128
  ## Verdict
94
129
 
@@ -98,14 +133,18 @@ Use the shared adapter surface exactly:
98
133
 
99
134
  Legacy adapter inputs may include `PASS | FAIL | BLOCKED`, but they are
100
135
  normalized to the shared surface and no second enum is allowed. `PASS` means no
101
- Critical/High correctness, security, or compliance finding. `PASS_WITH_WARNINGS`
102
- means only documented non-blocking findings remain. `FAIL` requires remediation;
103
- `PASS` also requires no blocking Medium finding. `PASS_WITH_WARNINGS` may carry
104
- documented non-blocking findings. Finding count never selects depth or overrides
105
- missing execution proof. A review `PASS_WITH_WARNINGS` remains an unfinished
136
+ Critical, High, or Medium finding remains; Low findings may remain.
137
+ `PASS_WITH_WARNINGS` means the heaviest remaining finding is a non-blocking
138
+ Medium. `FAIL` means a Critical, High, or blocking Medium finding requires
139
+ remediation. Finding count never selects depth or overrides missing execution
140
+ proof. A review `PASS_WITH_WARNINGS` remains an unfinished
106
141
  closeout result; only literal `PASS` can finish a task. `BLOCKED` means the review input or a user-owned
107
142
  decision is unavailable.
108
143
 
144
+ Copy the header line `# Code Review Results [cf:code-review]`, the field labels,
145
+ and the severity labels verbatim in English; write the content in the user's
146
+ language.
147
+
109
148
  ```markdown
110
149
  # Code Review Results [cf:code-review]
111
150
 
@@ -127,14 +166,6 @@ decision is unavailable.
127
166
  Do not add a test command, a fabricated receipt, or an `Audit: PASS` marker to
128
167
  make the review look complete. Return unresolved questions at the end.
129
168
 
130
- ## Legacy workflow compatibility
131
-
132
- For a valid legacy packet only, retain its current spec/task resolution,
133
- separate `receipts/<task-basename>.md` fallback, feature receipt, persisted audit
134
- obligations, and legacy verdict normalization. If separate and embedded legacy
135
- proof identities conflict, fail closed. Never copy that adapter into a flat
136
- process-first packet.
137
-
138
169
  ## References
139
170
 
140
171
  - `references/spec-compliance-review.md` — load only its detailed scope checks;
@@ -31,9 +31,8 @@ Do not attempt a standard text-based review if the project includes Visual Specs
31
31
 
32
32
  Execution proof is separate from the task plan. Consume
33
33
  `receipts/<task-basename>.md` first and legacy `## Evidence` only as fallback;
34
- conflicting proof identities fail closed. At final integration, consume
35
- `feature-receipt.md`. Review never creates either receipt and never treats a
36
- receipt as approval, readiness, audit status, or semantic judgment.
34
+ conflicting proof identities fail closed. Review never creates a receipt and
35
+ never treats a receipt as approval, readiness, audit status, or semantic judgment.
37
36
 
38
37
  ## 3. Verdict Scale
39
38
 
@@ -1,46 +1,41 @@
1
1
  ---
2
2
  name: verification-gate
3
- description: The Iron Law of Proof. Prohibits reporting a 'PASS' status without providing concrete execution proofs (like exit code 0 or successfully passing tests).
3
+ description: Legacy proof consumption. Defines what supplied execution proof contains when a review of a legacy packet consumes it; the reviewer never produces that proof.
4
4
  ---
5
5
 
6
- # Verification Gate: The Iron Law of Proof
6
+ # Verification Gate: legacy proof consumption
7
7
 
8
- In the Hapo ecosystem, words are cheap. Code that "looks right" to an AI can easily break in production. This reference defines the strictest, most uncompromising rule for Code Review.
8
+ This reference applies only to a legacy packet. A
9
+ review never runs tests, builds, or linters to produce proof; `cf:test` owns
10
+ execution, and the test-run boundary in `SKILL.md` applies here as well.
9
11
 
10
- ## 1. The Iron Law
11
- **You MUST NOT issue a final verdict of PASS unless you hold concrete, verifiable execution proof.**
12
+ ## 1. What supplied proof contains
12
13
 
13
- ## 2. Hallucination Block
14
- Never use the following phrases or implications to assess code functionality:
15
- - "The code looks good."
16
- - "The logic seems sound."
17
- - "This should work as expected."
18
- - "There are no obvious errors."
14
+ Proof reaches the review from the test owner, never from the review itself. It
15
+ may be:
19
16
 
20
- If you have not compiled it, ran it, or seen it pass tests, **you do not know if it works**.
21
-
22
- ## 3. Accepted Proofs of Execution
23
- To clear the Verification Gate, you must cite one of the following concrete proofs in your report:
24
-
25
- - **Test Suite Logs:** Output showing tests ran and passed (e.g., `PASS src/components/Login.test.tsx`).
26
- - **Compilation/Build Status:** Terminal output proving the typescript compiler (`tsc`) or bundler succeeded with `Exit code: 0`.
27
- - **Linter Completion:** Output proving no syntax errors exist.
28
- - **Multimodal Visual Evidence:** `cf:ai-multimodal` when installed, or another available runtime visual capability; otherwise report visual parity as `UNPROVEN`.
17
+ - **Test suite logs:** output showing which tests ran and their result.
18
+ - **Compilation or build status:** compiler or bundler output with its exit code.
19
+ - **Linter completion:** output showing the lint run and its result.
20
+ - **Multimodal visual evidence:** `cf:ai-multimodal` when installed, or another
21
+ available runtime visual capability; otherwise visual parity is `UNPROVEN`.
29
22
 
30
23
  For Specs v2, accepted proof must be persisted by the test owner at
31
24
  `receipts/<task-basename>.md`; legacy `## Evidence` remains fallback-only. The
32
25
  receipt includes identity/path, exact command, exit/result, expected versus
33
26
  observed behavior, applicable negative/reachability/artifact proof, and bound
34
- Base/Head. Final integration uses `feature-receipt.md`. Missing final receipt is
35
- normal before closeout, but mandatory at closeout. Neither receipt grants
36
- approval, readiness, audit status, or product semantics.
27
+ Base/Head. Closing a legacy `spec.json` packet that has no `schema_version` still
28
+ requires `feature-receipt.md`. A receipt never grants approval, readiness, audit
29
+ status, or product semantics.
37
30
 
38
31
  For v2.1, the semantic receipt is reviewed input, not execution proof. It binds
39
32
  exact criteria and counterexamples shaped as `criterion`, `case_kind`,
40
33
  `scenario`, `expected`, `decision_refs`, and `verification_ref`. Deterministic
41
34
  validator success is never a semantic-review verdict.
42
35
 
43
- ## 4. How to Handle Missing Proof
44
- If you are asked to review a PR or commit and no execution proof is available:
45
- 1. **Return `BLOCKED`** and name missing commands, artifacts, permissions, or environment access.
46
- 2. Do not issue `PASS`, do not downgrade to a tentative pass, and do not blind-retry. Resume only after proof arrives.
36
+ ## 2. When supplied proof is missing or failed
37
+
38
+ A missing legacy receipt leaves the closeout unfinished: the review still
39
+ returns its correctness verdict and states execution proof as unavailable (owned
40
+ by `cf:test`). Supplied proof that failed is a finding the review reports. Never
41
+ rerun or retry anything to fill the gap.