voidmachine 5.0.8 → 6.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.
- package/core-assets/.claude-plugin/plugin.json +12 -1
- package/core-assets/PHILOSOPHY.md +11 -1
- package/core-assets/data/catalog.v3.json +35 -35
- package/core-assets/data/certification.json +1 -1
- package/core-assets/data/model.json +34 -34
- package/core-assets/hooks/_void-hook.mjs +722 -509
- package/core-assets/hooks/outcome-meter.sh +2 -1
- package/core-assets/skills/void-autopilot/SKILL.md +3 -3
- package/core-assets/skills/void-brainstorm/SKILL.md +40 -61
- package/core-assets/skills/void-code-review/SKILL.md +23 -10
- package/core-assets/skills/void-commit-discipline/SKILL.md +8 -9
- package/core-assets/skills/void-debug/SKILL.md +9 -10
- package/core-assets/skills/void-domain-driven-design/SKILL.md +1 -1
- package/core-assets/skills/void-frontend-design/SKILL.md +1 -1
- package/core-assets/skills/void-implement/SKILL.md +60 -23
- package/core-assets/skills/void-llm-cost-discipline/SKILL.md +3 -0
- package/core-assets/skills/void-orchestrate/SKILL.md +42 -0
- package/core-assets/skills/void-plan/SKILL.md +12 -17
- package/core-assets/skills/void-qa/SKILL.md +15 -14
- package/core-assets/skills/void-tdd/SKILL.md +33 -84
- package/core-assets/skills/void-testing/SKILL.md +1 -1
- package/core-assets/skills/void-ticket/SKILL.md +2 -0
- package/core-assets/skills/void-typescript-strict/SKILL.md +5 -5
- package/core-assets/skills/void-verify/SKILL.md +57 -159
- package/dist/main.js +925 -333
- package/package.json +3 -3
|
@@ -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
|
|
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 +
|
|
30
|
-
| **souple** | Integration glue tested at a higher level (E2E + handler covers the chain), framework wiring, config | RED-GREEN-REFACTOR without mutation gate,
|
|
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**
|
|
40
|
+
- Otherwise → **souple** for wiring; **strict** for new behavior
|
|
41
41
|
|
|
42
|
-
Paths come from
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
169
|
-
|
|
170
|
-
|
|
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
|
|
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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
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
|
-
|
|
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
|
-
→ **
|
|
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
|
-
- [ ]
|
|
356
|
-
- [ ]
|
|
357
|
-
- [ ]
|
|
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
|
-
|
|
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 |
|
|
320
|
+
| Mode not obvious | Inspect the changed behavior and project policy; ask only about a material trade-off. |
|
|
372
321
|
|
|
373
322
|
---
|
|
374
323
|
|
|
@@ -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`
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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 plan, update its existing resume point; the tracker owns mutable programme progress.
|
|
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
|
|