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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
2
|
+
# PostToolUse outcomes and repeated-read advice share this non-blocking process.
|
|
3
|
+
# PostToolUseFailure resets advice only; Stop retains its canonical event.
|
|
3
4
|
set -uo pipefail
|
|
4
5
|
|
|
5
6
|
ROOT="${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
@@ -18,7 +18,7 @@ reviewed pull request instead. Promotion to the branch that deploys stays human.
|
|
|
18
18
|
## What this skill does NOT do
|
|
19
19
|
|
|
20
20
|
It owns no ticket cycle. Every worker runs the canonical `void-implement` skill, whole, once per
|
|
21
|
-
ticket,
|
|
21
|
+
ticket, with applicability owned there. If you find yourself writing "then the worker runs the tests,
|
|
22
22
|
then reviews..." inside autopilot, stop: that behaviour has one owner, and two copies drift until
|
|
23
23
|
a ticket gets a different standard depending on how it was started.
|
|
24
24
|
|
|
@@ -31,9 +31,9 @@ names none. When the person says they merge themselves, run `void-machine autopi
|
|
|
31
31
|
Promotion from the integration branch to the one that deploys stays human.
|
|
32
32
|
|
|
33
33
|
It never merges a change to the machinery that judges merges. A pull request touching
|
|
34
|
-
`.github/**`,
|
|
34
|
+
`.github/**`, `.void/program.md`, `packages/core/hooks/**`,
|
|
35
35
|
what a judging workflow runs from outside `.github`
|
|
36
|
-
(`scripts/
|
|
36
|
+
(`scripts/auto-merge-contract.mjs`, `scripts/verify.mjs`,
|
|
37
37
|
`packages/core/enforce/**`), what judges a publication (`scripts/prepare-release-artifact.mjs`,
|
|
38
38
|
`scripts/verify-release-publication.mjs` and the two release contracts they read), the loop code that believes a verdict and merges (`loop.ts`,
|
|
39
39
|
`loop-observe.ts`, `branch-identity.ts`, `commands/autopilot-loop.ts`), the local chain of judgment
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: void-brainstorm
|
|
3
|
-
description: "
|
|
3
|
+
description: "Resolve a raw idea or consequential design ambiguity: inspect context, compare alternatives and record approved choices. Clear authorized implementation requests go directly to void-implement."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# brainstorm — voidcorp craftsman edition
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Use this skill when intent, behavior or a consequential boundary remains undecided. Inspect the existing context, resolve the decisions that change the outcome, and record the approved design. `void-implement` owns applicability: a clear implementation request does not need a design interview.
|
|
9
9
|
|
|
10
10
|
**Attribution**: see `.source`. Primary source: superpowers/brainstorm; the upstream idea-pressure-test mode is the distilled `gstack:/office-hours` diagnostic, vendored for void-machine.
|
|
11
11
|
|
|
@@ -53,23 +53,22 @@ everyone to skip Step 0 when it matters.
|
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## Decision gate
|
|
57
57
|
|
|
58
|
-
Do
|
|
58
|
+
Do not implement an unresolved choice that materially changes scope, safety, external effects
|
|
59
|
+
or a lasting contract. Present the decision and its trade-offs together, then obtain the needed
|
|
60
|
+
approval. Work that does not depend on it may continue.
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
**This applies to EVERY project, regardless of perceived simplicity.**
|
|
65
|
-
|
|
66
|
-
The anti-pattern is "this is too simple to need a design." Every project goes through this process. Simple projects' specs are short (a few sentences for truly trivial ones), but they MUST be written and approved.
|
|
62
|
+
For already authorized scope, do not request approval again merely because it has been written
|
|
63
|
+
into a spec or plan. The user's explicit request and accepted decisions are valid inputs.
|
|
64
|
+
A durable spec is useful for a structural or multi-step change; a mechanical fix or bounded
|
|
65
|
+
request may go directly to `void-implement` with its acceptance criteria.
|
|
67
66
|
|
|
68
67
|
---
|
|
69
68
|
|
|
70
69
|
## Ingesting a forge spec
|
|
71
70
|
|
|
72
|
-
If `docs/specs/` holds a spec with `source: forge` in its frontmatter (the forge→harness artifact contract), the up-front thinking is already done. **Verify and fill the gaps — do not re-ask what the spec already answers.** The 18 recon variables cover persona, pain, positioning, competition, pricing, and the visual identity; the winning design and critique verdict are attached. Read them, confirm they still hold, and ask only about what is missing (a partial spec — recon without critique, or a field absent in an older `forge_version` — is ingested for what it has, with the holes listed as the only open questions).
|
|
71
|
+
If `docs/specs/` holds a spec with `source: forge` in its frontmatter (the forge→harness artifact contract), the up-front thinking is already done. **Verify and fill the gaps — do not re-ask what the spec already answers.** The 18 recon variables cover persona, pain, positioning, competition, pricing, and the visual identity; the winning design and critique verdict are attached. Read them, confirm they still hold, and ask only about what is missing (a partial spec — recon without critique, or a field absent in an older `forge_version` — is ingested for what it has, with the holes listed as the only open questions). Record the accepted scope and resolve only remaining choices. Do not restart the interview or approval from scratch.
|
|
73
72
|
|
|
74
73
|
## Pressure-testing a raw idea (upstream mode)
|
|
75
74
|
|
|
@@ -86,7 +85,9 @@ Runs ONLY when the input is a raw *product idea* ("I want to build X"), not an a
|
|
|
86
85
|
5. **Observation & surprise.** Have you watched someone use it without helping — what did they do that surprised you? Red flag: surveys and demo calls (surveys lie, demos are theater).
|
|
87
86
|
6. **Future-fit.** If the world looks meaningfully different in 3 years, does this become more essential or less? Red flag: "the market grows 20%/yr" — every competitor cites the same tailwind.
|
|
88
87
|
|
|
89
|
-
**
|
|
88
|
+
**Respect the mandate.** If the user says to proceed, reuse known answers and make routine
|
|
89
|
+
reversible implementation choices. Ask only about a missing decision that materially changes
|
|
90
|
+
the outcome or requires separate authority; do not make the user repeat the instruction.
|
|
90
91
|
|
|
91
92
|
## Process
|
|
92
93
|
|
|
@@ -119,7 +120,7 @@ Wait for the user's response. If they decline, proceed in text-only.
|
|
|
119
120
|
|
|
120
121
|
### Step 4 — Ask clarifying questions
|
|
121
122
|
|
|
122
|
-
-
|
|
123
|
+
- Ask only unresolved consequential questions; group closely related questions when it reduces interruptions.
|
|
123
124
|
- Multi-choice preferred when applicable (2–4 distinct mutually-exclusive options with brief descriptions and a recommended option labeled).
|
|
124
125
|
- Open-ended fine when no obvious options exist.
|
|
125
126
|
- Focus on: purpose, constraints, success criteria.
|
|
@@ -135,7 +136,10 @@ Wait for the user's response. If they decline, proceed in text-only.
|
|
|
135
136
|
|
|
136
137
|
Runs on **every brainstorm, whatever the subject** — a product idea, a guard, a contract, a migration. Demand pressure-testing above belongs to a raw product idea, because a merge gate has no market to interrogate; ambition is not scoped that way, since timidity is not a property of product ideas. This pass lived inside the product-idea mode and therefore never fired on a technical subject, which is most of what gets designed here.
|
|
137
138
|
|
|
138
|
-
Before settling
|
|
139
|
+
Before settling an unresolved design, consider whether a simpler or materially better approach
|
|
140
|
+
changes the outcome. Include an ambitious or lateral option only when it answers that question.
|
|
141
|
+
Do not expand an already accepted scope or reopen a completed decision to manufacture alternatives.
|
|
142
|
+
YAGNI prunes the options before asking the user to evaluate them.
|
|
139
143
|
|
|
140
144
|
### Step 5 — Propose 2–3 approaches
|
|
141
145
|
|
|
@@ -153,7 +157,7 @@ Once the intent is clear, present the design in sections:
|
|
|
153
157
|
- Rollout / phases (if non-trivial)
|
|
154
158
|
- TDD mode per implementation phase (strict / souple / exploratory — composes with `void-tdd` skill)
|
|
155
159
|
|
|
156
|
-
|
|
160
|
+
Present related decisions together and obtain approval for the unresolved consequential choices. Do not request approval section by section for explanatory prose.
|
|
157
161
|
|
|
158
162
|
### Step 7 — Write the spec
|
|
159
163
|
|
|
@@ -188,17 +192,15 @@ Read the spec with fresh eyes:
|
|
|
188
192
|
|
|
189
193
|
Fix issues inline. No need to re-review — just fix and move on.
|
|
190
194
|
|
|
191
|
-
### Step 9 —
|
|
192
|
-
|
|
193
|
-
Ask the user to review the spec file before proceeding:
|
|
194
|
-
|
|
195
|
-
> "Spec written and committed to `docs/specs/<file>.md`. Please review and let me know if you want changes before we start the implementation plan."
|
|
195
|
+
### Step 9 — Confirm unresolved choices
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
Link the written spec and identify any decision not yet authorized. Ask only about those
|
|
198
|
+
remaining choices. If it records decisions already approved in this conversation, proceed.
|
|
198
199
|
|
|
199
|
-
### Step 10 — Transition to
|
|
200
|
+
### Step 10 — Transition to execution
|
|
200
201
|
|
|
201
|
-
|
|
202
|
+
Use `void-plan` when dependencies, multiple units or later-session continuity need a durable
|
|
203
|
+
sequence. A bounded single unit with clear acceptance criteria goes to `void-implement`.
|
|
202
204
|
|
|
203
205
|
---
|
|
204
206
|
|
|
@@ -221,58 +223,35 @@ Smaller, well-bounded units are easier to work with — easier for the agent to
|
|
|
221
223
|
|
|
222
224
|
---
|
|
223
225
|
|
|
224
|
-
## Red Flags — thoughts that mean STOP
|
|
225
|
-
|
|
226
|
-
| Thought | Reality |
|
|
227
|
-
|---|---|
|
|
228
|
-
| "This is too simple to need a design" | The gate applies to every project. Write the short version. |
|
|
229
|
-
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
|
|
230
|
-
| "Let me explore the codebase first" | Sure, but the design discipline still applies. |
|
|
231
|
-
| "I can check git/files quickly" | Files lack conversation context. Stay in the process. |
|
|
232
|
-
| "Let me gather information first" | Process telling you HOW to gather information. |
|
|
233
|
-
| "This doesn't need a formal skill" | If a skill exists, use it. |
|
|
234
|
-
| "I'll just do this one thing first" | Check BEFORE doing anything. |
|
|
235
|
-
| "This feels productive" | Undisciplined action wastes time. |
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
226
|
## Key principles
|
|
240
227
|
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
-
|
|
228
|
+
- Read the actual contract before asking what it says.
|
|
229
|
+
- Resolve a material ambiguity once; retain the answer through implementation.
|
|
230
|
+
- Keep KISS, useful boundaries and the smallest sufficient scope.
|
|
231
|
+
- Compare credible alternatives when they change the result, not for a fixed option count.
|
|
232
|
+
- Document lasting structural decisions through `void-decide`.
|
|
233
|
+
- Optional improvements do not reopen accepted scope or cause another review cycle.
|
|
247
234
|
|
|
248
235
|
---
|
|
249
236
|
|
|
250
237
|
## Composition with other skills
|
|
251
238
|
|
|
252
239
|
- **Raw product idea** ("I have an idea..."): pressure-test it first via the upstream mode above (the vendored `/office-hours` diagnostic), then design. Broader product *roadmap / strategy* routes to `void-plan-review` (CEO lens — challenges a written plan's premise and ambition).
|
|
253
|
-
- **Downstream
|
|
240
|
+
- **Downstream**: `void-plan` for dependent work; `void-implement` for a bounded approved unit.
|
|
254
241
|
- **With `void-tdd`**: the spec declares the TDD mode for each major implementation step. Plans then uses this.
|
|
255
242
|
- **With `void-hexagonal-architecture` + `void-domain-driven-design`**: these skills inform the design's structure (bounded contexts, ports, aggregates). Brainstorming consumes their vocabulary; does not duplicate their decisions.
|
|
256
|
-
- **With `void-code-review`**:
|
|
243
|
+
- **With `void-code-review`**: review against the accepted behavior and constraints; an absent spec alone is not a defect.
|
|
257
244
|
|
|
258
245
|
---
|
|
259
246
|
|
|
260
247
|
## Anti-rules
|
|
261
248
|
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
- MUST NOT skip the spec-write step "because the conversation is clear."
|
|
267
|
-
- MUST NOT transition to any skill other than `void-plan` post-approval.
|
|
268
|
-
|
|
269
|
-
---
|
|
249
|
+
- Do not implement a consequential unresolved decision or infer external authorization.
|
|
250
|
+
- Do not restart discovery or approvals already resolved by the user's request.
|
|
251
|
+
- Do not widen product scope during implementation under the guise of ambition.
|
|
252
|
+
- Do not hide material uncertainty behind a complete-looking template.
|
|
270
253
|
|
|
271
254
|
## Final rule
|
|
272
255
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
Otherwise → it is not voidcorp brainstorm.
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
The hard gate exists because LLM agents write very fast code for very wrong problems. The discipline pays for itself in the first project that does not have to be rewritten.
|
|
256
|
+
Unresolved design → inspect → compare useful options → resolve consequential decisions →
|
|
257
|
+
record → plan only as needed → implement the accepted scope.
|
|
@@ -5,7 +5,7 @@ description: Pre-PR critical pass. Six dimensions (correctness, tests, security,
|
|
|
5
5
|
|
|
6
6
|
# code-review — voidcorp craftsman edition
|
|
7
7
|
|
|
8
|
-
A review
|
|
8
|
+
A review examines the accepted behavior and the consequences of shipping the change. This skill provides the framework: six dimensions in order, blocker vs nit, evidence block in the PR body, two modes, explicit composition with Claude Code's native `/void-code-review` and specialized agents. The skill orchestrates; it does not duplicate the deep-pass agents.
|
|
9
9
|
|
|
10
10
|
**Attribution**: see `.source` in this directory.
|
|
11
11
|
|
|
@@ -41,9 +41,9 @@ Every comment is explicitly prefixed:
|
|
|
41
41
|
- **`QUESTION:`** — clarification request. May escalate to BLOCKER if answer reveals a defect.
|
|
42
42
|
- **`PRAISE:`** — explicit acknowledgement of good code (rare, but valued).
|
|
43
43
|
|
|
44
|
-
Style
|
|
44
|
+
Style, naming and optional refactoring are advisory. Correctness, security or a broken boundary blocks only with a concrete consequence. A missing test blocks when a demonstrated behavior or regression risk lacks an adequate proof, not because a checklist asks for another test.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Use these prefixes to make decisions legible; formatting alone never creates a blocking defect. The companion hook `blocker-prefix-grep` produces the BLOCKER/NIT count for the evidence block.
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -57,7 +57,7 @@ Every PR in strict mode includes a Review Evidence block:
|
|
|
57
57
|
- **Mode**: strict
|
|
58
58
|
- **Reviewer runtime**: native independent reviewer or codex CLI (one general pass)
|
|
59
59
|
- **Dimensions covered**:
|
|
60
|
-
- [x] Correctness —
|
|
60
|
+
- [x] Correctness — actual RED command/result before implementation, then GREEN on candidate
|
|
61
61
|
- [x] Tests — 4/4 passing, mutation score 94%, no business mocks
|
|
62
62
|
- [x] Security — trust boundary validated via Zod at /api/checkout
|
|
63
63
|
- [x] Structure — services do not touch DB (repository pattern verified)
|
|
@@ -117,9 +117,20 @@ The skill is the orchestration. Specialized agents and the native `/void-code-re
|
|
|
117
117
|
|
|
118
118
|
- The PR's HEAD has been built and tested locally / in CI. No build errors or failing required tests. Lint findings block only for a demonstrated consequence.
|
|
119
119
|
- Inspect output for leaked data and actionable errors; advisory diagnostics do not reopen review.
|
|
120
|
-
-
|
|
120
|
+
- Recover the accepted behavior and rationale from the task, request or PR; ask only if a missing decision changes correctness or scope.
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
A failing required proof or invalid subject prevents acceptance. Missing prose or advisory output does not prevent the reviewer from inspecting the candidate.
|
|
123
|
+
|
|
124
|
+
### Reviewer runtime
|
|
125
|
+
|
|
126
|
+
Prefer an available supported runtime different from the writer for the one independent general
|
|
127
|
+
review. Verify its real invocation and read-only permissions; never relabel a same-runtime session.
|
|
128
|
+
A canonical mission's authenticated envelope remains authoritative: current canonical dispatch
|
|
129
|
+
binds its runtime to the coordinator. This preference does not add cross-runtime routing or allow
|
|
130
|
+
foreign receipts into that journal. Use the supported independent path and state the limitation;
|
|
131
|
+
no repeated probe or extra general review is required merely to obtain a different brand.
|
|
132
|
+
Retain the actual reviewer for targeted corrections. Runtime diversity complements independence
|
|
133
|
+
and consequence-based findings; it is not proof of correctness by itself.
|
|
123
134
|
|
|
124
135
|
### Pass
|
|
125
136
|
|
|
@@ -139,6 +150,8 @@ If any pre-condition fails, the review pauses — fix the pre-condition first.
|
|
|
139
150
|
5. Follow `void-implement`'s maximum two correction batches. Incomplete review, resumption and
|
|
140
151
|
transport repair do not consume or reset that budget. Advisory findings never request a
|
|
141
152
|
correction cycle. At the limit, report unresolved defects with cause and next action.
|
|
153
|
+
Advisory findings never start a correction cycle; stop after acceptance, required proofs and independent review hold.
|
|
154
|
+
|
|
142
155
|
6. The orchestrator may request one independent opinion on a disputed point and retain it
|
|
143
156
|
as evidence for targeted verification, without reopening general review or resetting the
|
|
144
157
|
budget. No separate automatic arbitration command is provided. Escalate beyond-mandate
|
|
@@ -149,7 +162,7 @@ If any pre-condition fails, the review pauses — fix the pre-condition first.
|
|
|
149
162
|
### Author response (Google practices)
|
|
150
163
|
|
|
151
164
|
- Address every BLOCKER (fix or reasoned pushback).
|
|
152
|
-
- Read
|
|
165
|
+
- Read NITs as optional advice. Once acceptance and proofs hold, leave them out; they never reopen the completed work or trigger another cycle.
|
|
153
166
|
- Treat QUESTION as a thinking prompt — answer or escalate.
|
|
154
167
|
- Push back when you disagree. Reviewer may hold ground with a clear "why."
|
|
155
168
|
|
|
@@ -159,7 +172,7 @@ If any pre-condition fails, the review pauses — fix the pre-condition first.
|
|
|
159
172
|
|
|
160
173
|
### "LGTM" reviews
|
|
161
174
|
|
|
162
|
-
A
|
|
175
|
+
A bare verdict with no examined subject or evidence is insufficient. State the dimensions actually checked and concrete findings briefly; repeated checklist prose adds no proof.
|
|
163
176
|
|
|
164
177
|
### File-by-file linear walk
|
|
165
178
|
|
|
@@ -214,11 +227,11 @@ See `../../hooks/`.
|
|
|
214
227
|
| Problem | Solution |
|
|
215
228
|
|---|---|
|
|
216
229
|
| Review feels shallow | You skipped a dimension. Walk all six in order. |
|
|
217
|
-
| Cannot tell BLOCKER from NIT |
|
|
230
|
+
| Cannot tell BLOCKER from NIT | A demonstrated defect or missing proof of a concrete risk blocks; optional improvement is advisory. |
|
|
218
231
|
| Diff is too large to review | Ask the author to split, or invoke `large-cl-justification:` if truly atomic. |
|
|
219
232
|
| Found a structural rot beyond the diff | `QUESTION:` + suggest follow-up issue. Do not block this PR on it. |
|
|
220
233
|
| Claude and Codex disagree | Surface the delta. Let the author/user decide. |
|
|
221
|
-
|
|
|
234
|
+
| Diagnostics remain | Resolve actionable defects; name unrelated warnings without restarting review. |
|
|
222
235
|
|
|
223
236
|
---
|
|
224
237
|
|
|
@@ -159,14 +159,13 @@ Commits produced in pair with an AI agent include `Co-Authored-By`. Authorship t
|
|
|
159
159
|
|
|
160
160
|
---
|
|
161
161
|
|
|
162
|
-
## Bug fix
|
|
162
|
+
## Bug fix evidence (composes with void-debug)
|
|
163
163
|
|
|
164
|
-
A
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
Combined into one commit = rejected. The pair makes the regression-prevention explicit in `git log`.
|
|
164
|
+
Separate `test:` and `fix:` commits are optional. A regression test and its fix may share one
|
|
165
|
+
logical, bisectable commit; unrelated changes still belong in separate commits.
|
|
166
|
+
The proof is the observed RED result before the production fix, followed by GREEN on the
|
|
167
|
+
candidate, as required by `void-tdd` and `void-debug`. A pair of commit messages alone cannot
|
|
168
|
+
prove that chronology. Retain the actual test commands/results and explain the root cause.
|
|
170
169
|
|
|
171
170
|
---
|
|
172
171
|
|
|
@@ -182,7 +181,7 @@ Combined into one commit = rejected. The pair makes the regression-prevention ex
|
|
|
182
181
|
## Composition with other skills
|
|
183
182
|
|
|
184
183
|
- **Runs AFTER `void-verify`** — the completion handoff produces the "what done"; this skill frames it for git.
|
|
185
|
-
- **With `void-debug`** —
|
|
184
|
+
- **With `void-debug`** — observed RED/GREEN proof and root cause; phase commits are optional.
|
|
186
185
|
- **With `void-refactor`** — Two-Hat principle, named Fowler refactors in subjects.
|
|
187
186
|
- **With `void-brainstorm` + `void-plan`** — substantive commits link to their spec / plan in the body.
|
|
188
187
|
- **With `void-code-review`** — review comments respect the commit boundaries (do not request mixing intent).
|
|
@@ -195,7 +194,7 @@ Combined into one commit = rejected. The pair makes the regression-prevention ex
|
|
|
195
194
|
- MUST NOT permit vacuous subjects.
|
|
196
195
|
- MUST NOT permit em dash / emoji / non-ASCII.
|
|
197
196
|
- MUST NOT permit `feat:` / `fix:` / `refactor:` without a body why.
|
|
198
|
-
- MUST NOT
|
|
197
|
+
- MUST NOT substitute phase commit messages for observed RED/GREEN evidence.
|
|
199
198
|
- MUST NOT silently allow invented commit types.
|
|
200
199
|
|
|
201
200
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: void-debug
|
|
3
|
-
description: "Four phases (investigate, analyze, hypothesize, implement). Iron Law: no fix without a failing test reproducing the bug AND a root cause.
|
|
3
|
+
description: "Four phases (investigate, analyze, hypothesize, implement). Iron Law: no fix without a failing test reproducing the bug AND a root cause. Observed RED/GREEN evidence. Use on bug or test failure."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# debug — voidcorp craftsman edition
|
|
@@ -67,16 +67,15 @@ If the hypothesis does not predict a falsifiable behavior change, it is a guess.
|
|
|
67
67
|
|
|
68
68
|
In this order:
|
|
69
69
|
|
|
70
|
-
1. **Write the reproducing test** (
|
|
71
|
-
2. **
|
|
72
|
-
3. **Implement the fix
|
|
73
|
-
4. **Commit
|
|
74
|
-
5. **Verify
|
|
75
|
-
6. **
|
|
76
|
-
|
|
70
|
+
1. **Write and run the reproducing test** (strict per `void-tdd`) against the unchanged base. Observe failure for the root cause, not an environment error.
|
|
71
|
+
2. **Retain RED evidence**: command, relevant failure and tested source state, before implementation.
|
|
72
|
+
3. **Implement the fix**, then observe the focused regression and affected tests passing.
|
|
73
|
+
4. **Commit a logical, bisectable change** with its root cause; separate failing-test commits are optional.
|
|
74
|
+
5. **Verify output** for actionable errors, leaks and unexplained warnings.
|
|
75
|
+
6. **Explain the root cause briefly** in the PR, linking the actual RED/GREEN proof.
|
|
77
76
|
### Banned
|
|
78
77
|
|
|
79
|
-
-
|
|
78
|
+
- Treating a commit message or test file as proof that the regression actually failed before the fix.
|
|
80
79
|
- Adding the test "later" after the fix.
|
|
81
80
|
- Marking the bug closed without an explanation that survives scrutiny.
|
|
82
81
|
|
|
@@ -170,7 +169,7 @@ Retry-until-green is rejected.
|
|
|
170
169
|
|
|
171
170
|
**3-strike rule.** Three failed hypotheses → stop treating it as a simple bug. It is likely architectural: instrument-and-wait, or escalate to a structural review (see "When the root cause is structural").
|
|
172
171
|
|
|
173
|
-
**Blast-radius
|
|
172
|
+
**Blast-radius check.** If the fix touches > 5 files, verify that every change is necessary to the root cause. Ask only when the required scope exceeds the mandate; file count alone does not require approval.
|
|
174
173
|
|
|
175
174
|
**Recurring bug = architectural smell.** `git log` the affected files for prior fixes. The same file fixed three times is not coincidence — the root is structural, not the latest symptom.
|
|
176
175
|
|
|
@@ -140,7 +140,7 @@ export function createEmail(raw: string): Result<Email, ValidationError> {
|
|
|
140
140
|
}
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
Use a branded type when it prevents a concrete mix-up or enforces an invariant: for example distinct `UserId`/`OrgId`, validated `Email`, or monetary units. Preserve existing meaningful brands. A local primitive with no distinct invariant needs no wrapper merely to satisfy a pattern.
|
|
144
144
|
|
|
145
145
|
Composes with `void-typescript-strict` (branded type mechanics) and `void-functional` (smart constructors return `Result`).
|
|
146
146
|
|
|
@@ -259,7 +259,7 @@ See `../../hooks/`.
|
|
|
259
259
|
| Hero feels weak | Singular primary action. Recess everything else. Cut decorative gradient if generic. |
|
|
260
260
|
| Too many font sizes | Reduce to the 3-token system. Vary by weight and color. |
|
|
261
261
|
| Motion feels excessive | Cut decorative animations. Keep only state-change communication. |
|
|
262
|
-
| Mobile screenshot fails |
|
|
262
|
+
| Mobile screenshot fails | Diagnose and repair the affected layout at 360–390px; retain unaffected proofs and verify desktop parity. |
|
|
263
263
|
| Cannot reach AA contrast | Design system token failure. Adjust palette tokens, not per-component overrides. |
|
|
264
264
|
|
|
265
265
|
---
|