@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.
- package/README.md +1 -1
- package/bin/__tests__/codex-hooks.test.js +169 -236
- package/bin/__tests__/codex-native.test.js +54 -114
- package/bin/__tests__/develop-contract.test.js +101 -1361
- package/bin/__tests__/legacy-authority-decoupled.test.js +14 -19
- package/bin/__tests__/package-inventory.test.js +1 -395
- package/bin/__tests__/spec-narrowing.test.js +30 -134
- package/bin/__tests__/specs-v2-execution-closeout.test.js +0 -372
- package/bin/__tests__/test-runtime-dependency-closure.cjs +1 -2
- package/bin/__tests__/validator-grounding.test.js +17 -2929
- package/bin/lib/managed-writer.js +2 -3
- package/bin/phases/codex-runtime.js +6 -3
- package/bin/phases/copy-payload.js +13 -28
- package/bin/phases/omp-runtime.js +6 -3
- package/package.json +2 -3
- package/src/claude/agents/code-auditor.md +9 -6
- package/src/claude/agents/debugger.md +3 -9
- package/src/claude/agents/docs-keeper.md +4 -7
- package/src/claude/agents/git-ops.md +2 -4
- package/src/claude/agents/implementer.md +6 -7
- package/src/claude/agents/inspector.md +2 -0
- package/src/claude/agents/project-manager.md +2 -2
- package/src/claude/agents/spec-maker.md +4 -4
- package/src/claude/agents/test-runner.md +8 -11
- package/src/claude/agents/ui-ux-designer.md +0 -1
- package/src/claude/hooks/__tests__/spec-gate.test.js +170 -330
- package/src/claude/hooks/__tests__/spec-state-touched.test.js +26 -0
- package/src/claude/hooks/spec-gate.cjs +8 -63
- package/src/claude/hooks/spec-state.cjs +47 -38
- package/src/claude/migration-manifest.json +12 -7
- package/src/claude/output-styles/coding-level-0-eli5.md +9 -9
- package/src/claude/output-styles/coding-level-1-junior.md +3 -3
- package/src/claude/output-styles/coding-level-2-mid.md +3 -3
- package/src/claude/output-styles/coding-level-3-senior.md +2 -2
- package/src/claude/output-styles/coding-level-4-lead.md +5 -5
- package/src/claude/output-styles/coding-level-5-god.md +6 -6
- package/src/claude/rules/ai-dev-rules.md +1 -2
- package/src/claude/rules/workflow.md +1 -1
- package/src/claude/scripts/spec-receipt.cjs +0 -114
- package/src/claude/scripts/spec-resolver.cjs +41 -457
- package/src/claude/scripts/workflow-policy.cjs +3 -1801
- package/src/claude/skills/agent-browser/SKILL.md +1 -1
- package/src/claude/skills/chrome-devtools/SKILL.md +14 -31
- package/src/claude/skills/code-review/SKILL.md +25 -108
- package/src/claude/skills/code-review/references/spec-compliance-review.md +4 -7
- package/src/claude/skills/develop/SKILL.md +22 -70
- package/src/claude/skills/develop/references/subagent-patterns.md +0 -6
- package/src/claude/skills/research/SKILL.md +24 -55
- package/src/claude/skills/sync/SKILL.md +12 -34
- package/src/claude/skills/sync/references/rebind-and-audit.md +2 -2
- package/src/claude/skills/test/SKILL.md +39 -123
- package/src/claude/skills/test/references/execution-strategy.md +11 -22
- package/src/claude/skills/ui-ux/SKILL.md +1 -1
- package/src/claude/skills/ui-ux-pro-max/SKILL.md +24 -79
- package/src/claude/skills/web-testing/SKILL.md +2 -20
- package/src/codex/hooks/lib/spec-receipt.cjs +2 -30
- package/src/codex/hooks/lib/spec-utils.cjs +6 -45
- package/src/codex/hooks/spec-gate.cjs +11 -68
- package/src/codex/hooks/spec-state.cjs +37 -41
- package/src/common/AGENTS.md +4 -10
- package/bin/__tests__/change-firewall.semantic-firewall.test.js +0 -2133
- package/bin/__tests__/finalizer-pass-gate.semantic-firewall.test.js +0 -342
- package/bin/__tests__/release-preflight.semantic-firewall.test.js +0 -586
- package/bin/__tests__/review-receipt-c2.semantic-firewall.test.js +0 -378
- package/bin/__tests__/specs-v2-policy-and-scaffold.test.js +0 -665
- package/bin/__tests__/specs-v2-validator-grounder-contract.test.js +0 -1132
- package/src/claude/hooks/lib/context.cjs +0 -527
- package/src/claude/hooks/lib/detect.cjs +0 -474
- package/src/claude/scripts/change-firewall.cjs +0 -1748
- package/src/claude/scripts/spec-authoring-digest.cjs +0 -151
- package/src/claude/scripts/spec-authoring-validation.cjs +0 -126
- package/src/claude/scripts/spec-final-state.cjs +0 -290
- package/src/claude/scripts/spec-ground.cjs +0 -650
- package/src/claude/scripts/spec-readiness.cjs +0 -425
- package/src/claude/scripts/spec-scaffold.cjs +0 -2317
- package/src/claude/scripts/spec-semantic-model.cjs +0 -396
- package/src/claude/scripts/validate-spec-output.cjs +0 -3914
- package/src/claude/skills/code-review/references/verification-gate.md +0 -41
- package/src/claude/skills/specs/templates/design.md +0 -82
- package/src/claude/skills/specs/templates/requirements-init.md +0 -8
- package/src/claude/skills/specs/templates/requirements.md +0 -42
- package/src/claude/skills/specs/templates/spec-state.json +0 -56
- 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
|
-
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
282
|
+
mkdir -p "$SKILL_DIR/../tmp"
|
|
290
283
|
|
|
291
284
|
# Write a test script
|
|
292
|
-
cat > $SKILL_DIR
|
|
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
|
|
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
|
-
|
|
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/
|
|
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
|
-
- `--
|
|
473
|
-
- `--
|
|
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 `--
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
##
|
|
31
|
+
## Standards
|
|
45
32
|
|
|
46
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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.
|