voidmachine 5.0.8 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/core-assets/.claude-plugin/plugin.json +13 -2
  2. package/core-assets/PHILOSOPHY.md +29 -6
  3. package/core-assets/data/catalog.v3.json +52 -132
  4. package/core-assets/data/certification.json +1 -1
  5. package/core-assets/data/model.json +51 -75
  6. package/core-assets/hooks/_syntax-worker.cjs +1 -1
  7. package/core-assets/hooks/_void-hook.mjs +730 -515
  8. package/core-assets/hooks/outcome-meter.sh +2 -1
  9. package/core-assets/hooks/tdd-guard.md +45 -88
  10. package/core-assets/hooks/viewport-screenshot-gate.sh +3 -3
  11. package/core-assets/packs/pack-monorepo/skills/void-dependency-direction/SKILL.md +27 -146
  12. package/core-assets/packs/pack-monorepo/skills/void-service-package/SKILL.md +5 -8
  13. package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/.source +4 -2
  14. package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/SKILL.md +32 -132
  15. package/core-assets/skills/void-accessibility/SKILL.md +2 -2
  16. package/core-assets/skills/void-async-safety/SKILL.md +37 -24
  17. package/core-assets/skills/void-autopilot/SKILL.md +7 -6
  18. package/core-assets/skills/void-brainstorm/SKILL.md +40 -61
  19. package/core-assets/skills/void-code-review/SKILL.md +24 -11
  20. package/core-assets/skills/void-commit-discipline/SKILL.md +13 -20
  21. package/core-assets/skills/void-debug/SKILL.md +9 -10
  22. package/core-assets/skills/void-domain-driven-design/SKILL.md +1 -1
  23. package/core-assets/skills/void-frontend-design/SKILL.md +3 -3
  24. package/core-assets/skills/void-hexagonal-architecture/SKILL.md +5 -5
  25. package/core-assets/skills/void-implement/SKILL.md +67 -26
  26. package/core-assets/skills/void-llm-cost-discipline/SKILL.md +3 -0
  27. package/core-assets/skills/void-observability/SKILL.md +4 -4
  28. package/core-assets/skills/void-orchestrate/SKILL.md +91 -221
  29. package/core-assets/skills/void-plan/SKILL.md +12 -17
  30. package/core-assets/skills/void-qa/SKILL.md +15 -14
  31. package/core-assets/skills/void-tdd/SKILL.md +33 -84
  32. package/core-assets/skills/void-testing/SKILL.md +5 -5
  33. package/core-assets/skills/void-ticket/SKILL.md +2 -0
  34. package/core-assets/skills/void-typescript-strict/SKILL.md +5 -5
  35. package/core-assets/skills/void-verify/SKILL.md +57 -159
  36. package/dist/main.js +1959 -1633
  37. package/package.json +3 -3
  38. package/core-assets/hooks/block-protected-push.sh +0 -81
@@ -22,12 +22,12 @@ test evidence, and never use exploratory mode to mean "tested elsewhere".
22
22
 
23
23
  ## Modes
24
24
 
25
- Three postures, chosen by context. If unsure of the mode, ask explicitly before coding.
25
+ Three postures, chosen from the actual behavior and project configuration. Resolve routine mode selection from those facts; ask only when a material trade-off needs the user.
26
26
 
27
27
  | Mode | When | Posture |
28
28
  |---|---|---|
29
- | **strict** | New behavior on production code, hotfix on paying surface, refactor that changes observable behavior, DB integration that affects business invariants | Iron Law (zero line of production code without a failing test that requested it) + mutation testing when the project has a mutation runner + 100% coverage + commit/PR evidence trail |
30
- | **souple** | Integration glue tested at a higher level (E2E + handler covers the chain), framework wiring, config | RED-GREEN-REFACTOR without mutation gate, ≥ 80% coverage on business code, no commit-by-phase ritual |
29
+ | **strict** | New behavior on production code, hotfix on paying surface, refactor that changes observable behavior, DB integration that affects business invariants | Iron Law (zero line of production code without a failing test that requested it) + mutation testing when the project has a mutation runner + behavior/risk coverage + observed RED/GREEN evidence |
30
+ | **souple** | Integration glue tested at a higher level (E2E + handler covers the chain), framework wiring, config | RED-GREEN-REFACTOR without mutation gate, project coverage thresholds, no commit-by-phase ritual |
31
31
  | **exploratory** | Documented spike, throwaway POC, scripts marked as such, draft work | No TDD obligation. The file MUST declare throwaway status + deletion date in a header comment. If the code survives the spike, it transitions to strict before merging to prod. |
32
32
 
33
33
  ### Auto-detection heuristic
@@ -37,9 +37,9 @@ If no explicit `Mode:` marker is in the task or a file header comment, apply:
37
37
  - Path matches `<config.paths.business>` and not in `<config.paths.spikes>` nor in `docs/` → **strict**
38
38
  - Path matches `<config.paths.spikes>`, draft folder, or scaffolds → **exploratory**
39
39
  - Path matches `<config.paths.serverActions>` (boundary HTTP / Server Action) AND the pure logic is in `services/` with strict tests → **souple** on the handler, **strict** on the service
40
- - Otherwise → **souple** + ask confirmation if in doubt
40
+ - Otherwise → **souple** for wiring; **strict** for new behavior
41
41
 
42
- Paths come from `voidcorp.config.json`. Defaults are documented in `packages/core/claude/skills/void-tdd/defaults.md`.
42
+ Paths and commands come from `.void/config.json`. Explicit project requirements take precedence.
43
43
 
44
44
  ### Override
45
45
 
@@ -61,14 +61,10 @@ ZERO LINE OF PRODUCTION CODE WITHOUT A FAILING TEST THAT REQUESTED IT.
61
61
 
62
62
  ### If you wrote code before the test (strict)
63
63
 
64
- - You **delete** it. Delete means delete.
65
- - Do not keep anything "as reference"
66
- - Do not "adapt" existing code while writing the tests
67
- - Do not look at the deleted code while re-implementing
68
- - Implement fresh from the tests
69
-
70
- Sunk-cost fallacy: the time is already lost. Keeping unverified code is technical debt, not an asset.
71
-
64
+ Stop and report the missing RED evidence honestly. Reproduce the intended behavior against the
65
+ unchanged base before continuing; preserve unrelated work. Never fabricate test chronology or
66
+ claim a test that first passed on the implementation proved the missing behavior. The reviewer
67
+ must be able to inspect the actual failing test before the production behavior change.
72
68
  ---
73
69
 
74
70
  ## Cycle
@@ -165,24 +161,15 @@ All tests must pass after fix.
165
161
 
166
162
  ### REFACTOR
167
163
 
168
- After GREEN (and after MUTATE/KILL in strict), assess the improvements.
169
-
170
- | Priority | Action | Examples |
171
- |---|---|---|
172
- | Critical | Now | Knowledge duplication, > 3 nesting levels, critical surviving mutations |
173
- | High | This session | Magic numbers, unclear names, functions > 30 lines |
174
- | Nice | Later | Minor renames, single-use helpers |
175
- | Skip | Do not touch | Already clean code |
176
-
177
- Tests must stay green at every step.
178
-
179
- Load the `void-refactor` skill for the detailed methodology (RED-GREEN-REFACTOR strict commit boundaries).
180
-
164
+ After GREEN, make only the refactor needed to keep the changed code clear, correctly bounded
165
+ and free of relevant duplication. KISS and SOLID guide that judgment. Stop once the behavior,
166
+ applicable proofs and design contract hold; optional naming or extraction preferences do not
167
+ start an improvement loop. Keep tests green. `void-refactor` owns behavior-preserving changes.
181
168
  ---
182
169
 
183
170
  ## Stack glue
184
171
 
185
- ### Commands (read from `voidcorp.config.json`)
172
+ ### Commands (read from `.void/config.json`)
186
173
 
187
174
  - Unit: `<config.commands.testUnit>` (e.g. `bunx vitest run`, `pnpm vitest`, `npm test`)
188
175
  - E2E: `<config.commands.testE2e>` (e.g. `bunx playwright test`)
@@ -226,61 +213,23 @@ directly. Full anti-mock-business rationale: the `void-testing` skill.
226
213
 
227
214
  ## Coverage (strict)
228
215
 
229
- 100% by default on the business layer (services + domain). Verification before PR approval:
230
-
231
- ```bash
232
- <config.commands.testUnit> --coverage
233
- ```
234
-
235
- Target reading:
236
-
237
- ```
238
- All files | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
239
- ----------|---------|----------|---------|---------|---
240
- All files | 100 | 100 | 100 | 100 |
241
- ```
242
-
243
- ### Exception
244
-
245
- If 100% is impossible (e.g. a Sentry wrapper whose init branch is not testable without an HTTP cassette):
246
-
247
- 1. Document in the package README: why + where the missing coverage is compensated (integration/E2E)
248
- 2. Explicit Folpe approval
249
- 3. List in repo CLAUDE.md under "Test coverage exceptions"
250
-
251
- Burden of proof on the requester. 100% remains the default.
252
-
253
- ---
216
+ The project's configured coverage thresholds remain binding; never lower them to obtain green.
217
+ Cover the changed invariants, error paths and boundaries, including meaningful counterexamples.
218
+ Use coverage to find missing behavior, not to create assertions that only mirror implementation.
219
+ No universal percentage overrides the project's policy. If a branch is covered at a higher
220
+ level, cite that real proof rather than duplicate it. A safety-critical gap still blocks.
254
221
 
255
222
  ## TDD Evidence (strict)
256
223
 
257
- The commit history must show the RED → GREEN → [MUTATE → KILL] → REFACTOR progression.
258
-
259
- ```
260
- abc123 test: add failing test for retryOperation backoff
261
- def456 feat: implement retryOperation exponential backoff
262
- ghi789 test: strengthen boundary tests post-mutation (kills 3 survivors)
263
- jkl012 refactor: extract backoff helper for clarity
264
- ```
265
-
266
- ### Documented exceptions
267
-
268
- If evidence is not linear (multi-session, grouped refactor, context resume), document in the PR:
269
-
270
- ```markdown
271
- ## TDD Evidence
272
-
273
- RED phase: commit c925187
274
- GREEN phase: commits 5e0055b, 9a246d0
275
- MUTATE + KILL: commit 7b8c9d0
276
- REFACTOR: commit 11dbd1a
277
-
278
- Test Evidence:
279
- - 4/4 tests passing (vitest run, 7.7s)
280
- - Mutation score: 94% (3/52 documented survivors)
281
- ```
224
+ Observe a failing test before changing production behavior. Keep the RED command and result
225
+ from before the implementation, why it failed, then the GREEN command and result after it.
226
+ Bind results to the tested source state and scope so later changes invalidate affected proofs.
227
+ Separate RED and GREEN commits are not required; keep final commits logical and bisectable.
228
+ A test file's existence, a skill read, or an arbitrary failed command is not RED evidence.
282
229
 
283
- Exception on the evidence presentation, **never on the process**.
230
+ Record the actual runner result and relevant assertion, not a ritual checklist. Existing
231
+ project evidence storage is enough; no extra telemetry service or transcript export is required.
232
+ Missing evidence is unknown, never reconstructed from memory as an observed run.
284
233
 
285
234
  ---
286
235
 
@@ -317,7 +266,7 @@ Source: superpowers/test-driven-development. Keep the full list — this is the
317
266
  - "TDD is dogmatic, I am pragmatic"
318
267
  - "This case is different because..."
319
268
 
320
- → **All these phrases mean: delete, start over in strict.**
269
+ → **Stop, identify the missing proof, and restore the test-first discipline without destroying unrelated work.**
321
270
 
322
271
  ---
323
272
 
@@ -352,11 +301,11 @@ Before marking the work complete:
352
301
  - [ ] Tests use real code (mocks only where unavoidable)
353
302
  - [ ] Edge cases and errors covered
354
303
  - [ ] Mutation testing run + survivors handled (strict, when `commands.mutation` exists)
355
- - [ ] Coverage verified 100% or exception documented (strict)
356
- - [ ] Commit history shows TDD evidence or documented exception (strict)
357
- - [ ] Refactor evaluated and applied where it has value (all Critical/High priorities addressed)
304
+ - [ ] Relevant behavior covered and configured coverage thresholds satisfied
305
+ - [ ] Actual RED-before-implementation and GREEN evidence retained (strict)
306
+ - [ ] Necessary refactoring complete; optional improvements do not reopen the cycle
358
307
 
359
- Cannot check every box in strict? You skipped TDD. Restart.
308
+ A missing required proof must be resolved or reported; do not restart already-proven work.
360
309
 
361
310
  ---
362
311
 
@@ -368,7 +317,7 @@ Cannot check every box in strict? You skipped TDD. Restart.
368
317
  | Test too complex | Design too complex. Simplify the API. |
369
318
  | Must mock everything | Code too coupled. Use parameter injection (see `void-hexagonal-architecture` skill). |
370
319
  | Huge test setup | Extract helpers. Still complex? Rethink the design. |
371
- | Mode not obvious | Ask the user. Default to souple > strict when in doubt. |
320
+ | Mode not obvious | Inspect the changed behavior and project policy; ask only about a material trade-off. |
372
321
 
373
322
  ---
374
323
 
@@ -128,7 +128,7 @@ Describe the behavior. Imperative. Specific.
128
128
  - `it should retry` (the "should" is fluff)
129
129
  </Bad>
130
130
 
131
- The companion hook `test-name-lint` warns on weak patterns (`test`, `works`, `should` as the entire name).
131
+ The `test-name-lint` write hook blocks detected generic names: exactly `test`, or names starting with `should `, `work` or `works`. The owning rule defines the lexical scope.
132
132
 
133
133
  ---
134
134
 
@@ -231,7 +231,7 @@ Each snapshot has a reason. No `.toMatchSnapshot()` outside the whitelist withou
231
231
 
232
232
  Banned in committed code. They mean "I will not run this." If you mean "this case is intentionally not yet tested," write a `it.todo('description')` — the test runner reports todos.
233
233
 
234
- The companion hook `no-only-no-skip` blocks commits with `.only` / `fdescribe` / `xit` in the staged diff (allowed in `**/__skip-on-purpose__/**` whitelist with justifying comment).
234
+ The `no-only-no-skip` write hook rejects focused and skipped calls in proposed test files, including `fit`, `fdescribe`, `xit`, `xdescribe` and suite `.skip`. There is no path whitelist; use an explicit `todo` for pending coverage.
235
235
 
236
236
  ### Implementation spies as primary assertion
237
237
 
@@ -259,8 +259,8 @@ Use pglite or dev branch. Mocking Drizzle breaks at every schema change while pr
259
259
 
260
260
  ## Companion hooks
261
261
 
262
- - **`no-only-no-skip`** — block on `.only` / `fdescribe` / `xit` / `.skip` in staged diff (whitelist: `**/__skip-on-purpose__/**`)
263
- - **`test-name-lint`** — warn on weak test names matching `/^\s*(test|works|should)\s*$/i`
262
+ - **`no-only-no-skip`** — blocks focused/skipped calls on supported test writes; no path exemption
263
+ - **`test-name-lint`** — blocks the generic test-name patterns described above
264
264
  - **`no-business-mock`** — warn on `vi.mock\('@/(services|domain)/...'\)` patterns
265
265
  - **`no-snapshot-default`** — warn on new `.toMatchSnapshot()` outside `**/__visual__/**` whitelist
266
266
 
@@ -271,7 +271,7 @@ See `../../hooks/`.
271
271
  ## Anti-rules
272
272
 
273
273
  - MUST NOT decide WHETHER a test exists. That is `void-tdd`'s Iron Law.
274
- - MUST NOT decide coverage thresholds. That is `void-tdd`'s 100%-on-business-layer default + documented exceptions.
274
+ - MUST NOT decide coverage thresholds. That is the project's configured policy, applied by `void-tdd` alongside behavior/risk coverage.
275
275
  - MUST NOT decide architecture (what is a port, what is an adapter). Hexagonal owns that.
276
276
  - MUST NOT decide framework specifics (which Vitest reporter, Playwright trace mode). Pack-level config.
277
277
  - MUST NOT silently allow snapshot creep.
@@ -20,6 +20,8 @@ A ticket an implementation agent can execute with zero follow-up questions. It d
20
20
  - Always writes to the project's tracker (Linear / Jira / GitHub / ...). On a project with a fixed tracker, team, and label conventions, use them and do not re-ask.
21
21
 
22
22
  Do NOT use this to execute a ticket (`void-implement`) or to sequence many steps (`void-plan`).
23
+ This skill is not a prerequisite for an explicit user request with clear acceptance criteria;
24
+ create tracker work only when requested or required by the declared programme.
23
25
 
24
26
  ---
25
27
 
@@ -5,7 +5,7 @@ description: TS strict baseline. Zero any budget, branded types for domain primi
5
5
 
6
6
  # typescript-strict — voidcorp craftsman edition
7
7
 
8
- Types describe truth. The compiler runs first. `any` is banned. `as` is rejected outside narrow exceptions. Domain primitives wear branded types. Discriminated unions model state. Exhaustive switches are verified by `never`. This skill is the language baseline — every other skill composes on top of it.
8
+ Types describe truth. The compiler runs first. `any` is banned. `as` is rejected outside narrow exceptions. Non-interchangeable domain primitives use branded types. Discriminated unions model state. Exhaustive switches are verified by `never`. This skill is the language baseline — every other skill composes on top of it.
9
9
 
10
10
  **Attribution**: see `.source` in this directory.
11
11
 
@@ -169,7 +169,7 @@ ESLint rule `@typescript-eslint/switch-exhaustiveness-check` (configured in `pac
169
169
 
170
170
  ## Branded types for domain primitives
171
171
 
172
- Raw `string` for things with semantics is the #1 source of "passed the wrong ID" bugs. Brand it.
172
+ Brand a primitive when accidental substitution or invalid construction violates a real domain contract. Preserve existing meaningful brands; avoid wrappers for local values with no distinct invariant.
173
173
 
174
174
  ```typescript
175
175
  // in @voidcorp/core/branded
@@ -189,7 +189,7 @@ function createUserId(raw: string): UserId {
189
189
 
190
190
  A function taking `UserId` cannot accept a raw `string`. The compiler refuses. Same shape, different identity.
191
191
 
192
- Apply to:
192
+ Typical candidates, when the contract requires non-interchangeability:
193
193
 
194
194
  - IDs (`UserId`, `OrgId`, `OrderId`, ...)
195
195
  - Email, PhoneNumber, IsoDate, IsoDuration
@@ -255,7 +255,7 @@ See `../../hooks/`.
255
255
  ## Composition with other skills
256
256
 
257
257
  - **With `void-functional`**: this skill provides the type machinery (discriminated unions, `Result`, branded primitives); `void-functional` decides WHEN to model with sum types vs records, when to return `Result` vs throw.
258
- - **With `void-domain-driven-design`**: this skill enforces branded types for domain primitives; DDD decides which entities are aggregates and which are value objects.
258
+ - **With `void-domain-driven-design`**: this skill enforces meaningful non-interchangeable domain types; DDD decides which entities are aggregates and which are value objects.
259
259
  - **With `void-hexagonal-architecture`**: ports are typed interfaces; types travel across boundaries via Zod schemas.
260
260
  - **With `void-tdd`**: a RED test using a branded type forces the production code to surface a smart constructor.
261
261
  - **With `void-code-review`**: review skill flags untyped IDs, `any` slips, missing `satisfies`.
@@ -287,7 +287,7 @@ See `../../hooks/`.
287
287
  ## Final rule
288
288
 
289
289
  ```
290
- Every TypeScript file → no any, no rogue as, exhaustive switches, branded domain primitives.
290
+ Every TypeScript file → no any, no rogue as, exhaustive switches, brands where domain contracts require them.
291
291
  Otherwise → this is not voidcorp typescript-strict.
292
292
  ```
293
293
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: void-verify
3
- description: Final pre-flight checklist. Twelve items observed (not assumed) — typecheck, tests, hooks, mobile+desktop, commit why, review evidence. Skipping requires reason. Use at end of every task.
3
+ description: Verify acceptance with applicable tests, types, hooks and independent review; reuse unaffected proofs and report concrete limits. Use before claiming completion.
4
4
  ---
5
5
 
6
6
  # verify — voidcorp craftsman edition
7
7
 
8
- "Task complete" claims diverge from reality when they are based on belief, not observation. Tests "passed earlier." Lint "should be clean." The mobile view "is probably fine." This skill is the final pre-flight: a twelve-item checklist, read at the end, each item OBSERVED, skipping documented.
8
+ Completion rests on observed acceptance and applicable proofs. This skill checks evidence and communicates limits; `void-implement` owns which passes the change needs.
9
9
 
10
10
  **Attribution**: see `.source`. Primary source: superpowers/verify + citypaul completion checklists.
11
11
 
@@ -13,9 +13,7 @@ description: Final pre-flight checklist. Twelve items observed (not assumed) —
13
13
 
14
14
  ## When to run
15
15
 
16
- At the end of EVERY task before reporting "done." Even tasks that feel trivial. The checklist for a one-line fix is short; the discipline is the same.
17
-
18
- If you find yourself wanting to skip the checklist "because it's a small change," that is the signal: run it anyway, the small ones are where it pays the most.
16
+ Before claiming a deliverable complete. Scale verification to the affected behavior and project requirements; a small change still needs the proof of its result.
19
17
 
20
18
  ---
21
19
 
@@ -38,160 +36,60 @@ They defer draft validation with an explicit non-success outcome, rerun on readi
38
36
  and preserve merge queue checks. Never install them or change remote protection merely
39
37
  because this skill was invoked.
40
38
 
41
- ## The checklist
42
-
43
- Read item by item. Do not run from memory. Each item is OBSERVED, not assumed.
44
-
45
- | # | Item | Composed with |
46
- |---|---|---|
47
- | 1 | Typecheck passes (`tsc --noEmit`) | `void-typescript-strict` + `tsc-noemit-precommit` hook |
48
- | 2 | Tests pass — **observed after last code change** | `void-tdd` + `void-testing` |
49
- | 3 | Lint passes (Biome) | `pack-monorepo` config |
50
- | 4 | Coverage acceptable (per `void-tdd` mode strict / souple / exploratory) | `void-tdd` |
51
- | 5 | Hooks pass (pre-commit dry-run on staged set) | All hooks (`tdd-guard`, `tigerstyle-check`, `no-any-grep`, ...) |
52
- | 6 | UI changes verified in BOTH mobile and desktop viewports | `void-frontend-design` + `void-accessibility` (mobile-first dual-quality) |
53
- | 7 | Observability hooks present for new business logic | `void-observability` |
54
- | 8 | Security review check for any boundary / auth / secret change | `void-security-guidance` + `void-security-audit` |
55
- | 9 | Documentation updated if any convention changed | `void-commit-discipline` "always say why" |
56
- | 10 | Commit message includes the why (not just what) | `void-commit-discipline` |
57
- | 11 | Independent review ran on the final change with no demonstrated blocking defect left open; review evidence block present in PR body (strict mode). A missing citation or explanation alone never fails this item | `void-code-review` |
58
- | 12 | Spec / plan linked if work derives from one; plan resume point updated | `void-brainstorm` + `void-plan` |
59
-
60
- Items 6, 7, 8 only fire when the change touches their domain.
61
-
62
- ---
63
-
64
- ## Observed, not assumed
65
-
66
- | Sign | What it means |
67
- |---|---|
68
- | "Tests should pass" | NOT observed. Run them again, then check. |
69
- | "Linting was fine earlier" | Not observed since last change. Re-run. |
70
- | "Mobile is probably the same" | NOT observed. Screenshot via `void-qa` (claude-in-chrome) on a phone viewport. |
71
- | "Sentry is set up, so observability is handled" | NOT for this code path. Did you add the breadcrumb? The log? |
72
- | "The hook ran before, why check" | Did you edit since? If yes, run again. |
73
-
74
- "Should" and "probably" are the words this skill exists to eliminate. The named excuses (vendored from gstack `/ship`): "should work now" → run it; "I'm confident" → confidence is not evidence; "trivial change" → trivial changes break prod. If code changed since the last run, the last run is stale.
75
-
76
- ---
77
-
78
- ## Plan completion audit (vendored from gstack `/ship`)
79
-
80
- The 12-item checklist verifies *the build works*. This verifies *you built what was specified*. When the work derives from a plan or ticket, classify **every actionable item** against the diff:
81
-
82
- - `DONE` / `PARTIAL` / `NOT DONE` / `CHANGED` (deliberately deviated) / `UNVERIFIABLE` (cannot be proven from the diff — cross-repo, external state, runtime-only).
83
- - **Honesty rule**: code that *handles* a deliverable is not the deliverable. "Added the webhook handler" ≠ "the webhook fires end-to-end."
84
- - **Per-item confirmation for `UNVERIFIABLE`**: surface each one individually and ask — never a single blanket "all done?" over a list you cannot actually verify.
85
- - **Scope drift**: did you build exactly what was asked? Name every piece of creep ("while I was in there…") and every missing requirement. **Creep is removed, or it carries one line in the commit saying why the change would be wrong without it.** This check was informational for its whole life and caught nothing: naming a creep and shipping it anyway satisfied it. Measured on 2026-08-31, in the session that hardened this very skill — a marker scaffold no gate had asked for, defensible, and nothing would have made anyone say so. Stop when the requirement is satisfied; the smallest sufficient change is the deliverable, not the floor.
86
-
87
- ---
88
-
89
- ## Skipping items
90
-
91
- Items can be skipped, but ONLY with an explicit stated reason in the completion report.
92
-
93
- ```markdown
94
- - [x] Item 1: Typecheck passes (observed)
95
- - [x] Item 2: Tests pass (observed, vitest run, 4/4 passing)
96
- - [-] Item 6: UI viewports SKIPPED — no UI change in this diff
97
- - [-] Item 7: Observability SKIPPED — pure refactor (no new business logic)
98
- - [x] Item 9: Documentation N/A — no convention changed
99
- - [x] Item 10: Commit message includes why (linked to spec)
100
- - [x] Item 11: Review evidence block written
101
- - [x] Item 12: Plan resume point updated (next step: 5)
102
- ```
103
-
104
- Silent skipping is the bug class this skill exists to prevent. Explicit skip with reason is fine; explicit skip without reason is not.
105
-
106
- ---
107
-
108
- ## Output format
109
-
110
- When reporting "done," include the checklist with check / skip status and the reason for any skip. The user sees the signals.
111
-
112
- For multi-step plans (composes with `void-plan`): update the plan's "Resume point" section with the completed step.
113
-
114
- For PRs (composes with `void-code-review`): the checklist feeds the Review Evidence block — they are not separate work.
115
-
116
- ---
117
-
118
- ## Examples
119
-
120
- ### Small fix
121
-
122
- ```markdown
123
- Done. Verification:
124
-
125
- 1. ✅ Typecheck (observed)
126
- 2. ✅ Tests pass (vitest run, 1 new test for the bug, all green)
127
- 3. ✅ Lint passes
128
- 4. ✅ Coverage holds (line + branch unchanged)
129
- 5. ✅ Pre-commit hooks (tdd-guard allowed test+fix pair, others green)
130
- 6. — N/A (no UI)
131
- 7. — N/A (no new business logic)
132
- 8. — N/A (no boundary change)
133
- 9. — N/A (no convention change)
134
- 10. ✅ Commit messages: `test: reproduce X` + `fix: <root cause>`
135
- 11. ✅ Review evidence block written (single-blocker resolved, 0 nits)
136
- 12. ✅ Spec linked (plan N/A — bug fix, no plan)
137
- ```
138
-
139
- ### Plan step
140
-
141
- ```markdown
142
- Step 4 of plan `2026-06-01-checkout-flow-plan.md` complete. Verification:
143
-
144
- 1. ✅ Typecheck (observed)
145
- 2. ✅ Tests pass (vitest run --filter checkoutCart, 6/6 passing, mutation 96%)
146
- 3. ✅ Lint passes
147
- 4. ✅ Coverage 100% on services/checkout (strict mode)
148
- 5. ✅ Pre-commit hooks all pass
149
- 6. — N/A (use-case layer, not UI)
150
- 7. ✅ Observability: structured logs added at use-case entry/exit
151
- 8. ✅ Security: zod validation at boundary, no secret in commit
152
- 9. ✅ docs/DOMAIN.md updated with "checkout intent" term
153
- 10. ✅ Commits: test:reproduce / feat:implement / refactor:extract per Two-Hat
154
- 11. ✅ Review evidence block prepared (waiting for code-review run)
155
- 12. ✅ Plan resume point updated to Step 5
156
-
157
- Next: invoke `void-code-review` for the Step 4 commits.
158
- ```
159
-
160
- ---
161
-
162
- ## Composition with other skills
163
-
164
- - **Runs LAST**, after every other skill.
165
- - **With `void-tdd`**: items 2, 4 are tdd-mode-aware.
166
- - **With `void-testing`**: item 2 includes "pristine output."
167
- - **With `void-typescript-strict`**: item 1.
168
- - **With `void-code-review`**: item 11 feeds the Review Evidence block.
169
- - **With `void-commit-discipline`**: items 9, 10.
170
- - **With `void-plan`**: item 12 — completion updates the plan resume point.
171
- - **With `void-frontend-design` + `void-accessibility`**: item 6.
172
- - **With `void-observability`**: item 7.
173
- - **With `void-security-guidance`**: item 8.
174
-
175
- ---
176
-
177
- ## Anti-rules
178
-
179
- - MUST NOT define what "complete" means functionally — the task defines that.
180
- - MUST NOT skip items silently.
181
- - MUST NOT report completion in the middle of work (e.g., "Step 1 done, moving to Step 2" without verifying Step 1).
182
- - MUST NOT substitute "looks fine" for observed signals.
183
- - MUST NOT take the user out of the loop — the user sees the signals.
184
-
185
- ---
186
-
187
- ## Final rule
188
-
189
- ```
190
- Task → all 12 items observed (or skip with stated reason) → user sees the signals → THEN report "done."
191
- Otherwise → it is not voidcorp completion.
192
- ```
193
-
194
- Checklists prevent omissions even for experts. The discipline pays for itself the first time it catches the test that "should have" been run.
39
+ ## Applicable evidence
40
+
41
+ Inspect the accepted scope and actual diff. Reuse current unaffected proofs when their declared
42
+ inputs are unchanged; rerun affected checks and required candidate/merge-group checks. A changed
43
+ comment does not invalidate an unrelated behavior proof, but uncertainty about dependencies
44
+ must stay explicit. Never reuse a stale subject or downgrade a project's required CI.
45
+
46
+ | Concern | Evidence when applicable |
47
+ | --- | --- |
48
+ | Behavior | Actual RED before production behavior, then relevant tests GREEN; `void-tdd` + `void-testing` |
49
+ | Types and static checks | Configured typecheck/lint for affected packages; no invented commands |
50
+ | Coverage | Changed invariants, boundaries and errors; configured thresholds remain binding |
51
+ | Hooks | Actual required hook result for the edit or staged set, not merely installed configuration |
52
+ | UI | Affected controls/states verified on mobile and desktop, including keyboard and touch |
53
+ | Security | Affected trust boundaries inspected during implementation and final review |
54
+ | Observability | New failure/side-effect paths have useful diagnostics without secrets |
55
+ | Documentation | Changed public behavior or convention documented; no template-only requirement |
56
+ | Review | Exact candidate/base, independent reviewer, original findings and evidenced resolutions |
57
+ | Delivery | Accepted criteria met; required CI/merge/deployment states observed separately |
58
+
59
+ Installed, applicable, invoked and passed are different claims. An unknown result is never
60
+ reported as passed. A skill read does not prove its instructions were applied; a hook's presence
61
+ does not prove it ran; a test file does not prove a RED/GREEN cycle. Show available evidence and
62
+ name unobservable parts without manufacturing a new blocking gate for telemetry alone.
63
+
64
+ ## Scope and completion
65
+
66
+ For each acceptance criterion determine whether it is done, partial, changed or unverified.
67
+ Code that handles a deliverable is not proof of that deliverable: a webhook handler is not proof
68
+ that the provider delivered its event. Resolve the actual missing proof or permission. Ask only
69
+ for a decision beyond the mandate, not approval of a routine verification step.
70
+
71
+ Stop when the accepted outcome, applicable proofs and independent review hold. Fix concrete
72
+ blocking defects; optional improvements never request another general review or correction.
73
+ Remove unrelated scope unless the requested behavior requires it.
74
+
75
+ ## Reporting
76
+
77
+ Give the result, relevant commands/results, independent review outcome and material limits.
78
+ Do not print a twelve-item checklist with irrelevant N/A rows. Keep applicability reasoning in
79
+ the existing task/review evidence; summarize it when it explains a real omission or decision.
80
+ For a standalone sequential plan, update its existing resume point. For a programme, the declared tracker alone owns mutable progress; do not add a current/next unit to the plan.
81
+ The PR evidence and final report reuse the same observed results rather than duplicate work.
82
+
83
+ Once at ticket end, the coordinator closes each explicitly bound source with
84
+ `void-machine mission usage-unbind --id <mission> --source <session-journal>`; this remains possible
85
+ after mission closure. Close is final for that source/mission pair and retries never reopen it.
86
+ Never recreate a mission to bypass a verdict or reopen proof. Then, if a mission ID exists,
87
+ include the informational recap from
88
+ `void-machine mission inspect --id <mission> --usage` (`--json` for structured output).
89
+ Reuse that recap in the final report; do not run it per edit or chain its exit status as a new
90
+ completion gate. Its exit status remains the mission verdict, not telemetry coverage. Missing
91
+ mission linkage or telemetry is explicitly unknown. Codex skill reads are not invocation hits.
92
+ For the complete catalogue and triggers, use `void-machine cheatsheet --format markdown`.
195
93
 
196
94
  ## Bounded review evidence
197
95