@haposoft/cafekit 0.18.0 → 0.18.1

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 (83) hide show
  1. package/README.md +1 -1
  2. package/bin/__tests__/codex-hooks.test.js +169 -236
  3. package/bin/__tests__/codex-native.test.js +54 -114
  4. package/bin/__tests__/develop-contract.test.js +101 -1361
  5. package/bin/__tests__/legacy-authority-decoupled.test.js +14 -19
  6. package/bin/__tests__/package-inventory.test.js +1 -395
  7. package/bin/__tests__/spec-narrowing.test.js +30 -134
  8. package/bin/__tests__/specs-v2-execution-closeout.test.js +0 -372
  9. package/bin/__tests__/test-runtime-dependency-closure.cjs +1 -2
  10. package/bin/__tests__/validator-grounding.test.js +17 -2929
  11. package/bin/lib/managed-writer.js +2 -3
  12. package/bin/phases/codex-runtime.js +6 -3
  13. package/bin/phases/copy-payload.js +13 -28
  14. package/bin/phases/omp-runtime.js +6 -3
  15. package/package.json +2 -3
  16. package/src/claude/agents/code-auditor.md +9 -6
  17. package/src/claude/agents/debugger.md +3 -9
  18. package/src/claude/agents/docs-keeper.md +4 -7
  19. package/src/claude/agents/git-ops.md +2 -4
  20. package/src/claude/agents/implementer.md +6 -7
  21. package/src/claude/agents/inspector.md +2 -0
  22. package/src/claude/agents/project-manager.md +2 -2
  23. package/src/claude/agents/spec-maker.md +4 -4
  24. package/src/claude/agents/test-runner.md +8 -11
  25. package/src/claude/agents/ui-ux-designer.md +0 -1
  26. package/src/claude/hooks/__tests__/spec-gate.test.js +170 -330
  27. package/src/claude/hooks/__tests__/spec-state-touched.test.js +26 -0
  28. package/src/claude/hooks/spec-gate.cjs +8 -63
  29. package/src/claude/hooks/spec-state.cjs +47 -38
  30. package/src/claude/migration-manifest.json +12 -7
  31. package/src/claude/output-styles/coding-level-0-eli5.md +9 -9
  32. package/src/claude/output-styles/coding-level-1-junior.md +3 -3
  33. package/src/claude/output-styles/coding-level-2-mid.md +3 -3
  34. package/src/claude/output-styles/coding-level-3-senior.md +2 -2
  35. package/src/claude/output-styles/coding-level-4-lead.md +5 -5
  36. package/src/claude/output-styles/coding-level-5-god.md +6 -6
  37. package/src/claude/rules/ai-dev-rules.md +1 -2
  38. package/src/claude/rules/workflow.md +1 -1
  39. package/src/claude/scripts/spec-receipt.cjs +0 -114
  40. package/src/claude/scripts/spec-resolver.cjs +41 -457
  41. package/src/claude/scripts/workflow-policy.cjs +3 -1801
  42. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  43. package/src/claude/skills/chrome-devtools/SKILL.md +14 -31
  44. package/src/claude/skills/code-review/SKILL.md +25 -108
  45. package/src/claude/skills/code-review/references/spec-compliance-review.md +4 -7
  46. package/src/claude/skills/develop/SKILL.md +22 -70
  47. package/src/claude/skills/develop/references/subagent-patterns.md +0 -6
  48. package/src/claude/skills/research/SKILL.md +24 -55
  49. package/src/claude/skills/sync/SKILL.md +12 -34
  50. package/src/claude/skills/sync/references/rebind-and-audit.md +2 -2
  51. package/src/claude/skills/test/SKILL.md +39 -123
  52. package/src/claude/skills/test/references/execution-strategy.md +11 -22
  53. package/src/claude/skills/ui-ux/SKILL.md +1 -1
  54. package/src/claude/skills/ui-ux-pro-max/SKILL.md +24 -79
  55. package/src/claude/skills/web-testing/SKILL.md +2 -20
  56. package/src/codex/hooks/lib/spec-receipt.cjs +2 -30
  57. package/src/codex/hooks/lib/spec-utils.cjs +6 -45
  58. package/src/codex/hooks/spec-gate.cjs +11 -68
  59. package/src/codex/hooks/spec-state.cjs +37 -41
  60. package/src/common/AGENTS.md +4 -10
  61. package/bin/__tests__/change-firewall.semantic-firewall.test.js +0 -2133
  62. package/bin/__tests__/finalizer-pass-gate.semantic-firewall.test.js +0 -342
  63. package/bin/__tests__/release-preflight.semantic-firewall.test.js +0 -586
  64. package/bin/__tests__/review-receipt-c2.semantic-firewall.test.js +0 -378
  65. package/bin/__tests__/specs-v2-policy-and-scaffold.test.js +0 -665
  66. package/bin/__tests__/specs-v2-validator-grounder-contract.test.js +0 -1132
  67. package/src/claude/hooks/lib/context.cjs +0 -527
  68. package/src/claude/hooks/lib/detect.cjs +0 -474
  69. package/src/claude/scripts/change-firewall.cjs +0 -1748
  70. package/src/claude/scripts/spec-authoring-digest.cjs +0 -151
  71. package/src/claude/scripts/spec-authoring-validation.cjs +0 -126
  72. package/src/claude/scripts/spec-final-state.cjs +0 -290
  73. package/src/claude/scripts/spec-ground.cjs +0 -650
  74. package/src/claude/scripts/spec-readiness.cjs +0 -425
  75. package/src/claude/scripts/spec-scaffold.cjs +0 -2317
  76. package/src/claude/scripts/spec-semantic-model.cjs +0 -396
  77. package/src/claude/scripts/validate-spec-output.cjs +0 -3914
  78. package/src/claude/skills/code-review/references/verification-gate.md +0 -41
  79. package/src/claude/skills/specs/templates/design.md +0 -82
  80. package/src/claude/skills/specs/templates/requirements-init.md +0 -8
  81. package/src/claude/skills/specs/templates/requirements.md +0 -42
  82. package/src/claude/skills/specs/templates/spec-state.json +0 -56
  83. package/src/claude/skills/specs/templates/task.md +0 -47
@@ -236,7 +236,7 @@ agent-browser snapshot -i
236
236
  agent-browser fill @e1 "user@example.com"
237
237
  agent-browser fill @e2 "password123"
238
238
  agent-browser click @e3 # Submit button
239
- agent-browser wait url "/dashboard"
239
+ agent-browser wait --url "/dashboard"
240
240
  ```
241
241
 
242
242
  ### State Persistence (Auth)
@@ -52,8 +52,7 @@ Browser visibility is resolved automatically by `resolveHeadless()` in `lib/brow
52
52
 
53
53
  Override with `--headless true` or `--headless false` on any script.
54
54
 
55
- - Run multiple scripts/sessions in parallel to simulate real user interactions.
56
- - Run multiple scripts/sessions in parallel to simulate different device types (mobile, tablet, desktop).
55
+ Scripts share one browser and its first tab through `.browser-session.json`, so run them one at a time; parallel runs drive the same page.
57
56
 
58
57
  ## ARIA Snapshot (Element Discovery)
59
58
 
@@ -104,7 +103,6 @@ node "$SKILL_DIR/aria-snapshot.js" --url https://example.com --output ./packages
104
103
 
105
104
  ### Interact by Ref
106
105
 
107
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
108
106
  Use `select-ref.js` to interact with elements by their ref:
109
107
 
110
108
  ```bash
@@ -129,7 +127,6 @@ node "$SKILL_DIR/select-ref.js" --ref e5 --action hover
129
127
 
130
128
  ### Store Snapshots
131
129
 
132
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
133
130
  Store snapshots for analysis in `<project>/packages/spec/src/claude/chrome-devtools/snapshots/`:
134
131
 
135
132
  ```bash
@@ -162,7 +159,6 @@ node "$SKILL_DIR/aria-snapshot.js" --url https://example.com --output packages/s
162
159
 
163
160
  ## Local HTML Files
164
161
 
165
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
166
162
  **IMPORTANT**: Never browse local HTML files via `file://` protocol. Always serve via local server:
167
163
  **Why**: `file://` protocol blocks many browser features (CORS, ES modules, fetch API, service workers). Local server ensures proper HTTP behavior.
168
164
 
@@ -176,7 +172,7 @@ python -m http.server 3000 --directory ./dist &
176
172
  node "$SKILL_DIR/navigate.js" --url http://localhost:3000
177
173
  ```
178
174
 
179
- **Note**: when port 3000 is busy, find an available port with `lsof -i :3000` and use a different one.
175
+ **Note**: when port 3000 is busy, find its owner with `lsof -i :3000`; stop it if you started it, otherwise ask the user. Do not move to another port (`rules/process-management.md`).
180
176
 
181
177
  ## Quick Start
182
178
 
@@ -207,11 +203,10 @@ chrome-devtools auto-detects Chrome at standard OS paths and uses it automatical
207
203
 
208
204
  ### Manual Configuration
209
205
 
210
- To force a specific Chrome installation, copy `.env.example` to `.env` and set `CHROME_EXECUTABLE_PATH`:
206
+ To force a specific Chrome installation, export `CHROME_EXECUTABLE_PATH` (or `PUPPETEER_EXECUTABLE_PATH`) in the shell that runs the scripts; they read the environment, not a `.env` file:
211
207
 
212
208
  ```bash
213
- cp "$SKILL_DIR/.env.example" "$SKILL_DIR/.env"
214
- # Edit .env and set CHROME_EXECUTABLE_PATH to your Chrome executable
209
+ export CHROME_EXECUTABLE_PATH="/path/to/chrome"
215
210
  ```
216
211
 
217
212
  ### Skip Chromium Download
@@ -249,7 +244,6 @@ node "$SKILL_DIR/navigate.js" --url about:blank --close true
249
244
 
250
245
  ## Available Scripts
251
246
 
252
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
253
247
  All in `packages/spec/src/claude/skills/chrome-devtools/scripts/`:
254
248
 
255
249
  | Script | Purpose |
@@ -281,15 +275,14 @@ All in `packages/spec/src/claude/skills/chrome-devtools/scripts/`:
281
275
 
282
276
  ## Writing Custom Test Scripts
283
277
 
284
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
285
- For complex automation, write scripts to `<project>/packages/spec/src/claude/chrome-devtools/tmp/`:
278
+ For complex automation, write scripts to `$SKILL_DIR/../tmp/` (beside `scripts/`, so the `../scripts/lib/browser.js` import resolves):
286
279
 
287
280
  ```bash
288
281
  # Create tmp directory for test scripts
289
- mkdir -p $SKILL_DIR/packages/spec/src/claude/chrome-devtools/tmp
282
+ mkdir -p "$SKILL_DIR/../tmp"
290
283
 
291
284
  # Write a test script
292
- cat > $SKILL_DIR/packages/spec/src/claude/chrome-devtools/tmp/login-test.js << 'EOF'
285
+ cat > "$SKILL_DIR/../tmp/login-test.js" << 'EOF'
293
286
  import { getBrowser, getPage, disconnectBrowser, outputJSON } from '../scripts/lib/browser.js';
294
287
 
295
288
  async function loginTest() {
@@ -315,7 +308,7 @@ loginTest();
315
308
  EOF
316
309
 
317
310
  # Run the test
318
- node $SKILL_DIR/packages/spec/src/claude/chrome-devtools/tmp/login-test.js
311
+ node "$SKILL_DIR/../tmp/login-test.js"
319
312
  ```
320
313
 
321
314
  **Key principles for custom scripts**:
@@ -327,11 +320,7 @@ node $SKILL_DIR/packages/spec/src/claude/chrome-devtools/tmp/login-test.js
327
320
 
328
321
  ## Screenshots
329
322
 
330
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
331
-
332
- **IMPORTANT:** Store browser artifacts in a project-local screenshots or reports folder and include exact output paths in the final report.
333
-
334
- Store screenshots for analysis in `<project>/packages/spec/src/claude/chrome-devtools/screenshots/`:
323
+ Store screenshots in `<project>/packages/spec/src/claude/chrome-devtools/screenshots/` and give their exact output paths in the final report:
335
324
 
336
325
  ```bash
337
326
  # Basic screenshot
@@ -356,15 +345,13 @@ node "$SKILL_DIR/screenshot.js" --url https://example.com --output ./packages/sp
356
345
  node "$SKILL_DIR/screenshot.js" --url https://example.com --output ./packages/spec/src/claude/chrome-devtools/screenshots/page.png --max-size 3
357
346
 
358
347
  # Disable compression
359
- node "$SKILL_DIR/screenshot.js" --url https://example.com --output ./packages/spec/src/claude/chrome-devtools/screenshots/page.png --no-compress
348
+ node "$SKILL_DIR/screenshot.js" --url https://example.com --output ./packages/spec/src/claude/chrome-devtools/screenshots/page.png --no-compress true
360
349
  ```
361
350
 
362
351
  Store screenshots for analysis in `<project>/packages/spec/src/claude/chrome-devtools/screenshots/`.
363
352
 
364
353
  ## Console Log Collection & Analysis
365
354
 
366
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
367
-
368
355
  ### Capture Logs
369
356
 
370
357
  ```bash
@@ -407,7 +394,6 @@ node "$SKILL_DIR/console.js" --url https://example.com --types error --duration
407
394
 
408
395
  ## Finding Elements
409
396
 
410
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
411
397
  Use `snapshot.js` to discover selectors before interacting:
412
398
 
413
399
  ```bash
@@ -423,12 +409,11 @@ node "$SKILL_DIR/snapshot.js" --url https://example.com | jq '.elements[] | sele
423
409
 
424
410
  ## Error Recovery
425
411
 
426
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
427
412
  If script fails:
428
413
 
429
414
  ```bash
430
415
  # 1. Capture current state (without navigating to preserve state)
431
- node "$SKILL_DIR/screenshot.js" --output ./packages/spec/src/claude/skills/chrome-devtools/screenshots/debug.png
416
+ node "$SKILL_DIR/screenshot.js" --output ./packages/spec/src/claude/chrome-devtools/screenshots/debug.png
432
417
 
433
418
  # 2. Get console errors
434
419
  node "$SKILL_DIR/console.js" --url about:blank --types error --duration 1000
@@ -469,22 +454,20 @@ node "$SKILL_DIR/performance.js" --url https://example.com | jq '.vitals'
469
454
  All scripts support:
470
455
  - `--headless true/false` - Override auto-detected headless mode (default: auto by OS)
471
456
  - `--close true` - Close browser completely (default: stay running)
472
- - `--timeout 30000` - Set timeout (ms)
473
- - `--wait-until networkidle2` - Wait strategy
457
+ - `--wait-until networkidle2` - Wait strategy when the script loads `--url`
458
+ - `--timeout <ms>` - read by the scripts that load a page or wait for one (`navigate.js`, `click.js`, `fill.js`, `connect-chrome.js`, `import-cookies.js`, `inject-auth.js`)
474
459
 
475
460
  `navigate.js` additionally supports:
476
461
  - `--wait-for-login <pattern>` - Interactive login: open headed, wait for URL regex match
477
462
  - `--login-timeout <ms>` - Max wait for login completion (default: 300000 = 5 min)
478
463
 
479
464
  ## Troubleshooting
480
- Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
481
-
482
465
  | Error | Solution |
483
466
  |-------|----------|
484
467
  | `Cannot find package 'puppeteer'` | Run `npm install` in scripts directory |
485
468
  | `libnss3.so` missing (Linux) | Run `./install-deps.sh` |
486
469
  | Element not found | Use `snapshot.js` to find correct selector |
487
- | Script hangs | Use `--timeout 60000` or `--wait-until load` |
470
+ | Script hangs | Use `--wait-until load`, or `--timeout 60000` on a script that reads it |
488
471
  | Screenshot >5MB | Auto-compressed; use `--max-size 3` for lower |
489
472
  | Session stale | Delete `.browser-session.json` and retry |
490
473
 
@@ -12,118 +12,50 @@ metadata:
12
12
  ---
13
13
  # Code Review — correctness and compliance owner
14
14
 
15
- Review evaluates correctness, security, scope, architecture, and specification
16
- compliance. It does not execute the test suite, create a canonical execution
17
- receipt, or turn a missing test result into a review-owned proof. `cf:test`
18
- owns execution proof; the single closeout owner combines both results.
15
+ Review evaluates correctness, security, scope, architecture, and specification compliance. It does not execute the test suite, create a canonical execution receipt, or turn a missing test result into a review-owned proof. `cf:test` owns execution proof; the single closeout owner combines both results.
19
16
 
20
17
  ## Input and depth
21
18
 
22
- With no argument, review the pending diff. Supported targets are a PR, commit,
23
- pending changes, or an explicit path. Load only current target bytes and needed
24
- references. For a valid process-first target, read `plan.md`, the active flat
25
- `task-NN-*.md`, and the controller-validated `test-proof-v1` handoff. Mixed,
26
- orphaned, malformed, symlinked, nonregular, or identity-conflicting packet state
27
- is `BLOCKED`; review never migrates it.
19
+ With no argument, review the pending diff. Supported targets are a PR, commit, pending changes, or an explicit path. Load only current target bytes and needed references. For a valid process-first target, read `plan.md`, the active flat `task-NN-*.md`, and the controller-validated `test-proof-v1` handoff. Orphaned, malformed, symlinked, nonregular, or identity-conflicting packet state is `BLOCKED`; review never migrates it.
28
20
 
29
- For process-first proof consumption, this skill's `## Execution-proof boundary`
30
- is authoritative. Do not load or follow legacy separate-receipt paragraphs from
31
- references; they apply only to a legacy packet.
21
+ For proof consumption, this skill's `## Execution-proof boundary` is authoritative.
32
22
 
33
- Select review depth from `assurance_level`, risk, and blast radius. Lane is a
34
- derived view:
23
+ Select review depth from risk and blast radius: for a process-first task, its coverage-profile Risk/evidence. Lane is a derived view:
35
24
 
36
25
  - Direct: targeted correctness/security/spec check;
37
26
  - Standard: bounded feature review at closeout;
38
27
  - Critical: independent, adversarial review covering every required obligation.
39
28
 
40
- Do not use file count as the depth selector. `execution_tier` is a read-only
41
- legacy adapter and cannot choose a review sequence. The review contract has no
42
- fixed Light/Standard/Deep sequence.
29
+ Do not use file count as the depth selector. The review contract has no fixed Light/Standard/Deep sequence.
43
30
 
44
- ## Review stages
31
+ ## Standards
45
32
 
46
- ### 1. Specification compliance
33
+ **Specification compliance.** For process-first work, compare the diff with current plan scope and the active task's Outcome, Scope, Coverage, Ownership, Acceptance, Dependencies, Verification Plan, and declared runtime reachability. Identify missing behavior, unjustified extras, contract substitution, orphaned outputs, and incorrect completion claims. If a design image or document carries requirements, load its multimodal reference only when needed; do not guess from a filename.
47
34
 
48
- For process-first work, compare the diff with current plan scope and the active
49
- task's Outcome, Scope, Coverage, Ownership, Acceptance, Dependencies,
50
- Verification Plan, and declared runtime reachability. Identify missing behavior,
51
- unjustified extras, contract substitution, orphaned outputs, and incorrect
52
- completion claims. If a design image or document carries requirements, load its
53
- multimodal reference only when needed; do not guess from a filename.
35
+ **Correctness and security.** Trace changed entrypoints and callers. Check boundary validation, error paths, resource handling, race assumptions, secrets, authorization, persistence, and failure recovery in proportion to risk. Apply YAGNI/KISS/DRY as maintainability signals, not as a numeric score.
54
36
 
55
- ### 2. Correctness and security
56
-
57
- Trace changed entrypoints and callers. Check boundary validation, error paths,
58
- resource handling, race assumptions, secrets, authorization, persistence, and
59
- failure recovery in proportion to risk. Apply YAGNI/KISS/DRY as maintainability
60
- signals, not as a numeric score.
61
-
62
- ### 3. Adversarial checks
63
-
64
- Try empty, malformed, unauthorized, duplicate, stale, boundary, and concurrent
65
- inputs where the changed contract makes them relevant. For Critical obligations,
66
- review the required independent evidence and provenance. A marker such as
67
- `Audit: PASS` is not independent evidence.
68
-
69
- The independent-audit proof must be a durable object with exactly
70
- `schema_version: "1"`, distinct concrete `reviewer_session_id` and
71
- `implementation_session_id`, `expected_provenance: { base, head }` matching the
72
- runtime binding, concrete `evidence`, and literal `verdict: "PASS"`.
73
- `independent: true`, `PASS_WITH_WARNINGS`, missing binding, or reused session
74
- provenance is insufficient.
37
+ **Adversarial checks.** Try empty, malformed, unauthorized, duplicate, stale, boundary, and concurrent inputs where the changed contract makes them relevant. For Critical obligations, review the required independent evidence and provenance. A marker such as `Audit: PASS` is not independent evidence.
75
38
 
76
39
  ## Test-run boundary
77
40
 
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.
41
+ Review reads code; it does not run tests. Never run the project's test suite or a test file, not even as a sanity check. A read-only run of the reviewed code (for example `node -e` on the changed function) may reproduce a defect; cite it as a reproduction, never as test evidence. Never report a test result, pass count, or exit code as the review's evidence. Without a `test-proof-v1` handoff, write the proof line exactly as `**Execution proof:** unavailable (owned by cf:test)` and do not otherwise say whether tests pass; the review still returns its correctness verdict.
86
42
 
87
43
  ## Execution-proof boundary
88
44
 
89
- For process-first work, consume only the controller-validated `test-proof-v1`
90
- handoff. Require its exact closed schema, stable digest, current Base/Head,
91
- target task, exact command, exit/counts, raw output, reachability, proof level,
92
- artifacts, branches, and redactions. Unknown keys/verdicts, duplicate or missing
93
- branches, stale provenance, zero execution, required skips, unsafe redaction, or
94
- `PASS_WITH_WARNINGS` remain unfinished. Never create or search for a separate
95
- process-first receipt; Develop alone writes Status and inline `## Receipt` after
96
- proof and review are both literal `PASS`.
97
-
98
- Never rerun commands to manufacture proof. If execution proof is missing or
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
101
- verdict when its review inputs are complete, but that verdict is not execution
102
- proof or GATE-DONE approval.
45
+ For process-first work, consume only the controller-validated `test-proof-v1` handoff. Require its exact closed schema, stable digest, current Base/Head, target task, exact command, exit/counts, raw output, reachability, proof level, artifacts, branches, and redactions. Unknown keys/verdicts, duplicate or missing branches, stale provenance, zero execution, required skips, unsafe redaction, or `PASS_WITH_WARNINGS` remain unfinished. Never create or search for a separate process-first receipt; Develop alone writes Status and inline `## Receipt` after proof and review are both literal `PASS`.
46
+
47
+ Never rerun commands to manufacture proof. If execution proof is missing or invalid, write the proof line from the test-run boundary and leave closeout unfinished; do not claim feature PASS from review alone. A review may still return a correctness verdict when its review inputs are complete, but that verdict is not execution proof or GATE-DONE approval.
103
48
 
104
49
  ## Severity
105
50
 
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`.
51
+ Rate each finding by its production impact. Write the labels `Critical`, `High`, `Medium`, and `Low` verbatim in English, whatever language the report uses.
52
+
53
+ - Critical: a concrete failure a user or operator hits that loses or corrupts data, breaks security, or stops the product (a login bypass).
54
+ - High: a concrete wrong result a user or operator hits (an order exactly at a tier boundary priced with the wrong discount).
55
+ - Medium: a real risk with a failure scenario that has not reached users (a changed boundary with no test; a leftover debug log).
56
+ - Low: cleanup, clarity, or a question (a naming nit; a behavior the change's README or docs state as intended).
57
+
58
+ A leftover debug log is at most Medium; if it prints a secret or credential, report that exposure as a separate security finding at its own severity. A behavior the change's README or docs state as intended is not a Medium or heavier defect; raise it as Low or a question. Task and spec compliance findings are Critical only when a task or spec is supplied, and there `UNVERIFIED` means supplied proof that failed, never proof that is unavailable. A blocking Medium is one with a concrete failure before merge. A review whose heaviest remaining finding is a non-blocking Medium returns `PASS_WITH_WARNINGS`; one with only Low findings returns `PASS`.
127
59
 
128
60
  ## Verdict
129
61
 
@@ -131,19 +63,9 @@ Use the shared adapter surface exactly:
131
63
 
132
64
  `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`
133
65
 
134
- Legacy adapter inputs may include `PASS | FAIL | BLOCKED`, but they are
135
- normalized to the shared surface and no second enum is allowed. `PASS` means no
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
141
- closeout result; only literal `PASS` can finish a task. `BLOCKED` means the review input or a user-owned
142
- decision is unavailable.
66
+ No second verdict enum is allowed. `PASS` means no Critical, High, or Medium finding remains; Low findings may remain. `PASS_WITH_WARNINGS` means the heaviest remaining finding is a non-blocking Medium. `FAIL` means a Critical, High, or blocking Medium finding requires remediation. Finding count never selects depth or overrides missing execution proof. A review `PASS_WITH_WARNINGS` remains an unfinished closeout result; only literal `PASS` can finish a task. `BLOCKED` means the review input or a user-owned decision is unavailable.
143
67
 
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.
68
+ Copy the header line `# Code Review Results [cf:code-review]`, the field labels, and the severity labels verbatim in English; write the content in the user's language.
147
69
 
148
70
  ```markdown
149
71
  # Code Review Results [cf:code-review]
@@ -163,15 +85,10 @@ language.
163
85
  - Reachability/provenance review: PASS | WARN | FAIL
164
86
  ```
165
87
 
166
- Do not add a test command, a fabricated receipt, or an `Audit: PASS` marker to
167
- make the review look complete. Return unresolved questions at the end.
88
+ Do not add a test command, a fabricated receipt, or an `Audit: PASS` marker to make the review look complete. Return unresolved questions at the end.
168
89
 
169
90
  ## References
170
91
 
171
- - `references/spec-compliance-review.md` — load only its detailed scope checks;
172
- its separate-receipt paragraph is Legacy-only.
92
+ - `references/spec-compliance-review.md` — load for its detailed scope checks.
173
93
  - `references/pre-landing-checklists.md` — load for the selected risk surface.
174
94
  - `references/adversarial-review.md` — load for Critical/adversarial depth.
175
- - `references/verification-gate.md` — Legacy separate-receipt consumption only;
176
- process-first proof uses this skill's execution-proof boundary. Execution
177
- always stays with `cf:test`.
@@ -24,15 +24,12 @@ Do not attempt a standard text-based review if the project includes Visual Specs
24
24
  - requirement bullets
25
25
  - task `Outcome`, `Scope`, `Anchors and Ownership`, `Changes`, `Acceptance`,
26
26
  `Dependencies`, and `Verification Plan`
27
- - typed `coordination.boundaries` as the only ownership/DAG/proof/parallel authority
28
- - task `Verification Plan`
29
- - canonical contracts/invariants from `design.md`
27
+ - the plan's acceptance criteria and coverage profile rows the task references
30
28
  Then verify the changed files against those concrete obligations.
31
29
 
32
- Execution proof is separate from the task plan. Consume
33
- `receipts/<task-basename>.md` first and legacy `## Evidence` only as fallback;
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.
30
+ Execution proof is separate from the task plan and lives only in the task's
31
+ inline `## Receipt`. Review never creates a receipt and never treats a receipt as
32
+ approval, readiness, audit status, or semantic judgment.
36
33
 
37
34
  ## 3. Verdict Scale
38
35
 
@@ -12,10 +12,7 @@ metadata:
12
12
  ---
13
13
  # Develop — implement, prove, synchronize
14
14
 
15
- Implement only the explicitly requested scope. For a process-first feature,
16
- `plan.md` and flat tasks are the durable packet; one closeout owner coordinates
17
- verification, review, sync, and docs impact without borrowing evidence.
18
- Develop never starts merely because Specs finished. The user invokes it.
15
+ Implement only the explicitly requested scope. For a process-first feature, `plan.md` and flat tasks are the durable packet; one closeout owner coordinates verification, review, sync, and docs impact without borrowing evidence. Develop never starts merely because Specs finished. The user invokes it.
19
16
 
20
17
  ## Usage and pre-state guard
21
18
 
@@ -28,8 +25,7 @@ Develop never starts merely because Specs finished. The user invokes it.
28
25
  /cf:develop <feature> --notes
29
26
  ```
30
27
 
31
- `--notes` is opt-in. Only then load `references/implementation-notes-template.html`;
32
- record decisions, scope exceptions, risks, gaps, and verification limits. Never create it by default.
28
+ `--notes` is opt-in. Only then load `references/implementation-notes-template.html`; record decisions, scope exceptions, risks, gaps, and verification limits. Never create it by default.
33
29
 
34
30
  Before any state mutation, reject `--flash` combined with `--parallel`:
35
31
 
@@ -41,31 +37,22 @@ The pair exits `2` before a task edit, receipt, worktree, subagent, or commit. D
41
37
 
42
38
  ## Resolve the work packet
43
39
 
44
- 1. Resolve one `specs/<feature>/plan.md` plus flat `task-NN-*.md`; an explicit task path wins.
45
- 2. Read GATE-SCOPE scope, exclusions, acceptance mapping, ownership, and task order.
46
- 3. A task is unblocked only when every named dependency is `done` with a valid current inline Receipt.
47
- 4. Without a packet, work directly only when the change is clear, isolated, reversible, and low-risk.
40
+ - Resolve one `specs/<feature>/plan.md` plus flat `task-NN-*.md`; an explicit task path wins.
41
+ - Read GATE-SCOPE scope, exclusions, acceptance mapping, ownership, and task order.
42
+ - A task is unblocked only when every named dependency is `done` with a valid current inline Receipt.
43
+ - Without a packet, work directly only when the change is clear, isolated, reversible, and low-risk.
48
44
 
49
45
  Ambiguity, overlapping ownership, a dependency cycle, or a missing Verification Plan is a blocker. Do not guess.
50
46
 
51
47
  ### Accepted process-first fast path
52
48
 
53
- When line two is `Specs-Contract: process-first-ready-v1`, reuse the accepted GATE-SCOPE/GATE-REVIEW.
54
- Perform only a narrow freshness scout for target revision, scope drift, ownership
55
- conflict, and dependency/state changes. Reopen GATE-SCOPE only for evidenced scope drift;
56
- do not research, replan, or add a routine user gate before a real blocker or GATE-DONE.
57
- This is a source instruction contract, not a parser/runtime or live-model guarantee;
58
- live-model adherence is `[UNVERIFIED]` without a host invocation.
49
+ When line two is `Specs-Contract: process-first-ready-v1`, reuse the accepted GATE-SCOPE/GATE-REVIEW. Perform only a narrow freshness scout for target revision, scope drift, ownership conflict, and dependency/state changes. Reopen GATE-SCOPE only for evidenced scope drift; do not research, replan, or add a routine user gate before a real blocker or GATE-DONE. This is a source instruction contract, not a parser/runtime or live-model guarantee; live-model adherence is `[UNVERIFIED]` without a host invocation.
59
50
 
60
- Load the plan index into working context once. Later byte rereads are narrow drift
61
- checks; load only the active task's referenced coverage-profile rows, Outcome,
62
- Scope, Ownership, Steps, Acceptance, Dependencies, Verification Plan, Failure Protocol, owned code, and consumers.
51
+ Load the plan index into working context once. Later byte rereads are narrow drift checks; load only the active task's referenced coverage-profile rows, Outcome, Scope, Ownership, Steps, Acceptance, Dependencies, Verification Plan, Failure Protocol, owned code, and consumers.
63
52
 
64
53
  ## Current-byte selection
65
54
 
66
- Reread current plan/task bytes before each selection and controller write. Concurrent
67
- Develop invocations are unsupported; detected state, task, or owned-path drift stops
68
- before any Status or Receipt write.
55
+ Reread current plan/task bytes before each selection and controller write. Concurrent Develop invocations are unsupported; detected state, task, or owned-path drift stops before any Status or Receipt write.
69
56
 
70
57
  | Current bytes | Feature mode | Explicit task mode |
71
58
  |---|---|---|
@@ -77,89 +64,54 @@ before any Status or Receipt write.
77
64
  | No task is active | Select the first dependency-valid `pending` row in `plan.md` order. | Start only the exact pending target when dependencies are valid. |
78
65
  | Status is missing, duplicate, or unknown | Stop as malformed state. | Stop as malformed state. |
79
66
 
80
- Feature mode repeats this selection only after the current task closes. Specific-task
81
- mode never touches a sibling and returns after its successful sync without chaining or GATE-DONE.
67
+ Feature mode repeats this selection only after the current task closes. Specific-task mode never touches a sibling and returns after its successful sync without chaining or GATE-DONE.
82
68
 
83
69
  ## Modes
84
70
 
85
71
  ### Sequential feature or specific task
86
72
 
87
- The controller sets the selected task's single `Status:` to `in_progress`.
88
- Implement its Outcome and Acceptance only. Keep one unblocked task at a time;
89
- never start the next before proof, review, and sync finish for the current task.
73
+ The controller sets the selected task's single `Status:` to `in_progress`. Implement its Outcome and Acceptance only. Keep one unblocked task at a time; never start the next before proof, review, and sync finish for the current task.
90
74
 
91
75
  ### Parallel (`--parallel [N]`)
92
76
 
93
- Load `references/parallel-waves.md`. Require disjoint writes, satisfied dependencies,
94
- isolated worktrees, a bounded wave, and one controller writer; otherwise work sequentially.
77
+ Load `references/parallel-waves.md`. Require disjoint writes, satisfied dependencies, isolated worktrees, a bounded wave, and one controller writer; otherwise work sequentially.
95
78
 
96
79
  ### Flash (`--flash`)
97
80
 
98
- Load `references/quality-gate.md`. Flash is an explicit speed trade-off, never completion: run a
99
- cheap preflight, skip dedicated tests, keep `Status: in_progress` with `FLASH_UNVERIFIED` and the
100
- blocker `awaiting /cf:test <feature>`, do not unblock dependents or report PASS, and
101
- stop this invocation without chaining.
102
- Only a later explicit non-Flash invocation may recover the task.
103
- It treats Flash output as ephemeral, inspects current bytes and the owned diff, and obtains fresh
104
- canonical proof through the trusted sync-finalize path. Never weaken, delete, or rewrite tests to make Flash look complete.
81
+ Load `references/quality-gate.md`. Flash is an explicit speed trade-off, never completion: run a cheap preflight, skip dedicated tests, keep `Status: in_progress` with `FLASH_UNVERIFIED` and the blocker `awaiting /cf:test <feature>`, do not unblock dependents or report PASS, and stop this invocation without chaining. Only a later explicit non-Flash invocation may recover the task. It treats Flash output as ephemeral, inspects current bytes and the owned diff, and obtains fresh canonical proof through the trusted sync-finalize path. Never weaken, delete, or rewrite tests to make Flash look complete.
105
82
 
106
83
  ## Task cycle
107
84
 
108
85
  ### 1. Scout
109
86
 
110
- Trace entrypoints, callers, dependents, registration, errors, and owned files.
111
- Read the test or probe that will judge this task before implementing against it.
112
- Compilation does not prove an unmounted UI, unregistered route, uncalled service,
113
- or missing consumer.
87
+ Trace entrypoints, callers, dependents, registration, errors, and owned files. Read the test or probe that will judge this task before implementing against it. Compilation does not prove an unmounted UI, unregistered route, uncalled service, or missing consumer.
114
88
 
115
- For an interrupted `in_progress` task, preserve and inspect current owned changes;
116
- discard ephemeral, remembered, or prior-attempt proof; compare unmet Acceptance
117
- against current task bytes and owned diff. Do not blindly replay a non-idempotent
118
- mutation. Resume only unmet work, then run fresh verification.
89
+ For an interrupted `in_progress` task, preserve and inspect current owned changes; discard ephemeral, remembered, or prior-attempt proof; compare unmet Acceptance against current task bytes and owned diff. Do not blindly replay a non-idempotent mutation. Resume only unmet work, then run fresh verification.
119
90
 
120
91
  ### 2. Implement
121
92
 
122
93
  Unless under `--flash` or the command costs money or writes artifacts, run the task's exact Verification Plan command once before changing anything and expect it to fail; this pre-change run is not a repair round.
123
94
  Passing before any change, outside a resumed task, means the plan cannot judge the work and is a blocker; so is a failure naming something other than the unmet Acceptance, which is a blocker to raise, not a defect to work around while implementing. A failure from the command itself — a wrong path, a missing tool or module, the environment — is BLOCKED, not FAIL, even when the runner reports `not ok` and even when the Acceptance or a test file shows the right command: set the task's single `Status:` to `blocked` with a `Blocker:` line naming the command and its error, write no Receipt, revert any edit made in this run, and report; you may suggest a corrected command for the plan, but never run it as proof.
124
95
 
125
- Honor Scope, Ownership, Acceptance, and Dependencies. Do not silently replace named contracts;
126
- scope expansion requires evidence and a return to GATE-SCOPE, not implementation convenience.
127
- Load `references/subagent-patterns.md` when dispatch helps; only the controller writes Status or Receipt.
96
+ Honor Scope, Ownership, Acceptance, and Dependencies. Do not silently replace named contracts; scope expansion requires evidence and a return to GATE-SCOPE, not implementation convenience. Load `references/subagent-patterns.md` when dispatch helps; only the controller writes Status or Receipt.
128
97
 
129
98
  ### 3. Verify, review, and close
130
99
 
131
- The test owner executes each exact Verification Plan and records real output. The
132
- review owner evaluates correctness, security, scope, and reachability without
133
- manufacturing proof. Use `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`; only literal PASS can close.
100
+ The test owner executes each exact Verification Plan and records real output. The review owner evaluates correctness, security, scope, and reachability without manufacturing proof. Use `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`; only literal PASS can close.
134
101
 
135
- Load `references/quality-gate.md`. Remediate an observed failure (a blocked Command is not a failure to remediate), then rerun only
136
- affected proof/review. Do not blind-retry a blocked environment. One repair round is one
137
- observed failure plus its repair and rerun, from proof or from review alike. After three
138
- failed repair rounds, stop and ask the user.
102
+ Load `references/quality-gate.md`. Remediate an observed failure (a blocked Command is not a failure to remediate), then rerun only affected proof/review. Do not blind-retry a blocked environment. One repair round is one observed failure plus its repair and rerun, from proof or from review alike. After three failed repair rounds, stop and ask the user.
139
103
 
140
- **The Receipt is written last, after proof and review have both passed**; writing it earlier
141
- and reopening the task is a defect, not a shortcut. After a real pass, the controller writes the task's final inline `## Receipt` with
142
- `Verification: PASS`, exact `Command`, `Exit: 0`, `Base:` and `Head:` copied from the `Base` and `Head` fields of `node .claude/scripts/provenance.cjs --project-root . --specs-root specs --spec-file <task file> --feature-name <feature> --session <any label> --json` run after the last change outside the specs root (never typed or computed by hand),
143
- non-empty current output, and required negative/reachability/artifact proof; then it
144
- sets `Status: done` and only implemented checkboxes. Missing, stale, contradictory,
145
- zero-test, placeholder, marker-only, skipped, or remembered proof is unfinished.
104
+ **The Receipt is written last, after proof and review have both passed**; writing it earlier and reopening the task is a defect, not a shortcut. After a real pass, the controller writes the task's final inline `## Receipt` with `Verification: PASS`, exact `Command`, `Exit: 0`, `Base:` and `Head:` copied from the `Base` and `Head` fields of `node .claude/scripts/provenance.cjs --project-root . --specs-root specs --spec-file <task file> --feature-name <feature> --session <any label> --json` run after the last change outside the specs root (never typed or computed by hand), non-empty current output in a fenced block, and required negative/reachability/artifact proof; then it sets `Status: done` and only implemented checkboxes. Missing, stale, contradictory, zero-test, placeholder, marker-only, skipped, or remembered proof is unfinished.
146
105
 
147
106
  ### 4. Finish the requested boundary
148
107
 
149
- Reread the task after sync and recompute the queue from current bytes. Specific-task
150
- mode has already returned. Full-feature mode continues one task at a time, then runs
151
- the named feature-level integration and reachability checks. Before GATE-DONE, apply the
152
- quality-gate final-Head fixed point; show current evidence and limitations, and let
153
- the user decide completion.
108
+ Reread the task after sync and recompute the queue from current bytes. Specific-task mode has already returned. Full-feature mode continues one task at a time, then runs the named feature-level integration and reachability checks. Before GATE-DONE, apply the quality-gate final-Head fixed point; show current evidence and limitations, and let the user decide completion.
154
109
 
155
- Evaluate docs impact from behavior actually changed: `none` means report only;
156
- `minor` or `major` updates only affected existing docs through the docs flow.
110
+ Evaluate docs impact from behavior actually changed: `none` means report only; `minor` or `major` updates only affected existing docs through the docs flow.
157
111
 
158
112
  ## Definition of done
159
113
 
160
- Done requires satisfied acceptance, reachable behavior, current executable proof,
161
- stable Base/Head binding, resolved blocking review findings, and no scope substitution.
162
- `PASS_WITH_WARNINGS`, `NO_TESTS`, `FLASH_UNVERIFIED`, or review-only pass cannot close.
114
+ Done requires satisfied acceptance, reachable behavior, current executable proof, stable Base/Head binding, resolved blocking review findings, and no scope substitution. `PASS_WITH_WARNINGS`, `NO_TESTS`, `FLASH_UNVERIFIED`, or review-only pass cannot close.
163
115
 
164
116
  ## Attached references
165
117
 
@@ -50,9 +50,3 @@ After interruption, preserve the owned diff but discard ephemeral handoffs and
50
50
  remembered proof. Do not tell an implementation worker to repeat a non-idempotent
51
51
  action blindly; scope the resumed brief to unmet Acceptance and require fresh
52
52
  verification. Concurrent invocations remain unsupported, so drift blocks handoff.
53
-
54
- ## Legacy workflow compatibility
55
-
56
- When the selected packet is legacy, include its persisted lane snapshot and
57
- obligations in the dispatch, but do not let workers edit that state or infer an
58
- independent result from a role label.