voidmachine 6.0.0 → 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.
- package/core-assets/.claude-plugin/plugin.json +2 -2
- package/core-assets/PHILOSOPHY.md +18 -5
- package/core-assets/data/catalog.v3.json +29 -109
- package/core-assets/data/certification.json +1 -1
- package/core-assets/data/model.json +28 -52
- package/core-assets/hooks/_syntax-worker.cjs +1 -1
- package/core-assets/hooks/_void-hook.mjs +8 -6
- package/core-assets/hooks/tdd-guard.md +45 -88
- package/core-assets/hooks/viewport-screenshot-gate.sh +3 -3
- package/core-assets/packs/pack-monorepo/skills/void-dependency-direction/SKILL.md +27 -146
- package/core-assets/packs/pack-monorepo/skills/void-service-package/SKILL.md +5 -8
- package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/.source +4 -2
- package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/SKILL.md +32 -132
- package/core-assets/skills/void-accessibility/SKILL.md +2 -2
- package/core-assets/skills/void-async-safety/SKILL.md +37 -24
- package/core-assets/skills/void-autopilot/SKILL.md +4 -3
- package/core-assets/skills/void-code-review/SKILL.md +1 -1
- package/core-assets/skills/void-commit-discipline/SKILL.md +5 -11
- package/core-assets/skills/void-frontend-design/SKILL.md +2 -2
- package/core-assets/skills/void-hexagonal-architecture/SKILL.md +5 -5
- package/core-assets/skills/void-implement/SKILL.md +7 -3
- package/core-assets/skills/void-observability/SKILL.md +4 -4
- package/core-assets/skills/void-orchestrate/SKILL.md +50 -222
- package/core-assets/skills/void-testing/SKILL.md +4 -4
- package/core-assets/skills/void-verify/SKILL.md +1 -1
- package/dist/main.js +1055 -1321
- package/package.json +2 -2
- package/core-assets/hooks/block-protected-push.sh +0 -81
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: void-commit-discipline
|
|
3
|
-
description: Conventional Commits + mandatory "why" in body + scope + breaking-change marking.
|
|
3
|
+
description: Conventional Commits + mandatory "why" in body + scope + breaking-change marking. Co-author trailer for AI pair. The git log is documentation. Use at every commit.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# commit-discipline — voidcorp craftsman edition
|
|
@@ -27,7 +27,7 @@ The git log is the project's living narrative. "fix stuff" / "wip" / "asdf" dest
|
|
|
27
27
|
|---|---|
|
|
28
28
|
| `feat` | New observable behavior (new feature, new endpoint, new component visible to users / consumers) |
|
|
29
29
|
| `fix` | Bug fix. Composes with `void-debug` (the why = the root cause) |
|
|
30
|
-
| `
|
|
30
|
+
| `refactor` | Structural change without behavior change. Composes with `void-refactor` (named Fowler move) |
|
|
31
31
|
| `test` | Add / modify tests without changing production code. Includes `test: reproduce <bug>` from `void-debug` |
|
|
32
32
|
| `docs` | Documentation only |
|
|
33
33
|
| `chore` | Repo maintenance (config, scripts, tooling) without user-visible effect |
|
|
@@ -48,11 +48,11 @@ No invented types (`improve:`, `tweak:`, `cleanup:`). Reach for one of the above
|
|
|
48
48
|
|
|
49
49
|
### Body rules
|
|
50
50
|
|
|
51
|
-
- Always present for `feat`, `fix`, `
|
|
51
|
+
- Always present for `feat`, `fix`, `refactor`, `perf` commits. Optional for trivial `chore` / `style`.
|
|
52
52
|
- Wrapped at ≤ 72 columns
|
|
53
53
|
- Explains the WHY: rationale, constraint, spec link, root cause
|
|
54
54
|
- Multi-line bullets fine
|
|
55
|
-
-
|
|
55
|
+
- Follow the philosophy's prose rule: avoid decorative filler; meaningful punctuation and glyphs are allowed.
|
|
56
56
|
|
|
57
57
|
### Footers
|
|
58
58
|
|
|
@@ -145,10 +145,6 @@ The author cannot tell, the reviewer cannot tell, future maintainers cannot tell
|
|
|
145
145
|
|
|
146
146
|
The companion hook `tidying-commit-prefix` (already shipped) flags `refactor:` with behavior-change keywords in body.
|
|
147
147
|
|
|
148
|
-
### Em dash, emoji, non-ASCII
|
|
149
|
-
|
|
150
|
-
The harness invariant: English ASCII commit messages. Hyphens (`-`) for ranges, hyphens for parenthetical, not em dash. The companion hook `no-emdash-no-emoji-in-commit-msg` blocks.
|
|
151
|
-
|
|
152
148
|
### Missing "why" for substantive commits
|
|
153
149
|
|
|
154
150
|
`feat:` / `fix:` / `refactor:` / `perf:` without a body explaining why = rejected. The commit message is documentation.
|
|
@@ -174,7 +170,6 @@ prove that chronology. Retain the actual test commands/results and explain the r
|
|
|
174
170
|
- `commitlint-precommit` (commit-msg, in `pack-monorepo`) — already in void-starter. Enforces conventional commits.
|
|
175
171
|
- `tidying-commit-prefix` (commit-msg, already shipped in core/hooks) — warns on mixed-intent `refactor:` commits.
|
|
176
172
|
- `refactor-named-grep` (commit-msg, already shipped) — warns on `refactor:` without a Fowler name.
|
|
177
|
-
- `no-emdash-no-emoji-in-commit-msg` (commit-msg, in `pack-monorepo`) — blocks em dash and emoji.
|
|
178
173
|
|
|
179
174
|
---
|
|
180
175
|
|
|
@@ -192,7 +187,6 @@ prove that chronology. Retain the actual test commands/results and explain the r
|
|
|
192
187
|
|
|
193
188
|
- MUST NOT decide whether the change itself is correct (that is the upstream skills' job).
|
|
194
189
|
- MUST NOT permit vacuous subjects.
|
|
195
|
-
- MUST NOT permit em dash / emoji / non-ASCII.
|
|
196
190
|
- MUST NOT permit `feat:` / `fix:` / `refactor:` without a body why.
|
|
197
191
|
- MUST NOT substitute phase commit messages for observed RED/GREEN evidence.
|
|
198
192
|
- MUST NOT silently allow invented commit types.
|
|
@@ -202,7 +196,7 @@ prove that chronology. Retain the actual test commands/results and explain the r
|
|
|
202
196
|
## Final rule
|
|
203
197
|
|
|
204
198
|
```
|
|
205
|
-
Every commit → conventional format + imperative subject ≤ 72 + body explains WHY +
|
|
199
|
+
Every commit → conventional format + imperative subject ≤ 72 + body explains WHY + AI co-author trailer.
|
|
206
200
|
Substantive (feat/fix/refactor/perf) → body mandatory.
|
|
207
201
|
Otherwise → it is not voidcorp commit-discipline.
|
|
208
202
|
```
|
|
@@ -19,7 +19,7 @@ Every UI is designed mobile-first AND must reach first-class quality on both vie
|
|
|
19
19
|
|
|
20
20
|
- **Layout starts at 360–390px** (iPhone 12 mini → 15 Pro range), progressively enhanced wider.
|
|
21
21
|
- **Never the reverse.** No "desktop-first then squeeze for mobile."
|
|
22
|
-
- **Both viewports screenshot-reviewed before merge** — `viewport-screenshot-gate`
|
|
22
|
+
- **Both viewports screenshot-reviewed before merge** — inspect actual captures; the optional `viewport-screenshot-gate` script only checks PR text.
|
|
23
23
|
- **No mobile-only / desktop-only features** without an explicit decision recorded through the `void-decide` skill.
|
|
24
24
|
- **Performance budget enforced for both**: LCP < 2.5s on slow 4G mobile AND on desktop fiber (measure with the project's perf tooling — Lighthouse CI, WebPageTest, bundlesize).
|
|
25
25
|
|
|
@@ -234,7 +234,7 @@ import { Button } from '@repo/ui';
|
|
|
234
234
|
|
|
235
235
|
## Companion hooks
|
|
236
236
|
|
|
237
|
-
- `viewport-screenshot-gate` (pre-PR on UI changes, shared with `void-accessibility`) —
|
|
237
|
+
- `viewport-screenshot-gate` (pre-PR on UI changes, shared with `void-accessibility`) — optional PR-text heuristic, not a wired native/CI gate or image validation. Review actual captures.
|
|
238
238
|
- `anti-ai-slop-grep` (pre-commit) — warns on banned copy patterns. Initial list of ~10; grows from `void-learn` harness-gap feedback.
|
|
239
239
|
|
|
240
240
|
See `../../hooks/`.
|
|
@@ -31,9 +31,9 @@ The domain decides; the world translates. Ports are interfaces the domain owns.
|
|
|
31
31
|
infrastructure (Drizzle, fetch, Resend SDK, ...)
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Read it: the domain depends on its own port interfaces. Adapters depend on the port interfaces and on infrastructure.
|
|
34
|
+
Read it: the domain depends on its own port interfaces. Adapters depend on the port interfaces and on infrastructure. The domain never imports concrete infrastructure. Adapters may depend on domain-owned ports.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Review enforces this architectural direction. The `boundary-direction-check` hook checks declared package dependencies; it does not infer domain/adapters layers from paths.
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
@@ -124,7 +124,7 @@ export function createDrizzleOrdersAdapter(db: Database): OrdersPort {
|
|
|
124
124
|
|
|
125
125
|
- Business decisions ("if order total > $1000, set priority")
|
|
126
126
|
- Cross-port coordination ("save to DB AND emit event in one method")
|
|
127
|
-
-
|
|
127
|
+
- Business invariants belong in the domain. Validate untrusted external data at adapter ingress (for example with Zod), before passing typed input to a use-case.
|
|
128
128
|
|
|
129
129
|
### The "fat port" smell
|
|
130
130
|
|
|
@@ -231,13 +231,13 @@ Replayable event log is an audit / temporal tool, not a default persistence stra
|
|
|
231
231
|
|
|
232
232
|
### Domain → infrastructure imports
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
Review rejects this dependency direction; a package-manifest check alone cannot prove internal layer isolation.
|
|
235
235
|
|
|
236
236
|
---
|
|
237
237
|
|
|
238
238
|
## Companion hooks
|
|
239
239
|
|
|
240
|
-
- **`boundary-direction-check`** (
|
|
240
|
+
- **`boundary-direction-check`** (PreToolUse) checks scoped package imports against the nearest package manifest. It does not validate internal layer imports. See `void-dependency-direction` for the pack convention.
|
|
241
241
|
|
|
242
242
|
---
|
|
243
243
|
|
|
@@ -28,6 +28,9 @@ executes it: never delegate this complete workflow again. Tiny direct work and
|
|
|
28
28
|
capability fallbacks follow that policy without skipping triggered quality gates.
|
|
29
29
|
Preserve one `leadWriterId` through corrections; the coordinator retains user intent
|
|
30
30
|
and decisions. Pass any orchestrator-owned panel contract unchanged.
|
|
31
|
+
For the writer and delegated reviewers, compose `void-orchestrate` to publish
|
|
32
|
+
observed worker lifecycle events in the canonical mission. Display metadata never
|
|
33
|
+
replaces the implementation or independent review receipts below.
|
|
31
34
|
|
|
32
35
|
## Optional usage linkage
|
|
33
36
|
|
|
@@ -78,7 +81,7 @@ materializes its runtime-neutral specialist envelopes from the current plan.
|
|
|
78
81
|
unaffected conclusions and proofs; invalidate only affected evidence. A new targeted blocker
|
|
79
82
|
must demonstrate a regression from the correction or a defect within the original scope.
|
|
80
83
|
Carry unresolved blockers until an explicit, evidenced resolution; silence is not resolution.
|
|
81
|
-
7. Maximum two correction batches after the initial general review. A batch is submitted
|
|
84
|
+
7. Maximum two correction batches after the initial general review. Under `void-autopilot`, its tighter two-total-review-round budget applies (initial plus one corrected head); see `docs/BOUNDED-REVIEWS.md`. A batch is submitted
|
|
82
85
|
corrections awaiting targeted verification. Agent restart, incomplete review, transport repair
|
|
83
86
|
and mission resumption neither consume a batch nor reset the budget. At the limit, stop
|
|
84
87
|
automatic corrective dispatch, retain history and expose a cause, owner and next action.
|
|
@@ -92,8 +95,9 @@ materializes its runtime-neutral specialist envelopes from the current plan.
|
|
|
92
95
|
prior reviews, resolutions, budgets and effects. Existing attestation-only stops need explicit
|
|
93
96
|
validation of the original review's subject, available provenance and result before recovery;
|
|
94
97
|
never promote a degraded historical result automatically or recreate the mission to bypass it.
|
|
95
|
-
9. Collect the final result
|
|
96
|
-
branches and useful proofs on their distinct
|
|
98
|
+
9. Collect the final result, then publish the worker terminal state and finished event
|
|
99
|
+
through `void-orchestrate`. Keep worktrees, branches and useful proofs on their distinct
|
|
100
|
+
lifecycle. External presentation tools own their surfaces; the harness does not close them.
|
|
97
101
|
|
|
98
102
|
The CLI and existing Mission Engine implement this bounded cycle. A runtime certification is
|
|
99
103
|
not an additional delivery gate. Concrete independence, permission, isolation, evidence and
|
|
@@ -45,7 +45,7 @@ logger.error({ err, orderId }, 'payment_failed');
|
|
|
45
45
|
| `error` | Operation failed; user impact |
|
|
46
46
|
| `warn` | Unexpected but handled |
|
|
47
47
|
| `info` | Significant business event |
|
|
48
|
-
| `
|
|
48
|
+
| `debug` | Developer-time signal |
|
|
49
49
|
| `trace` | Very granular (rarely committed) |
|
|
50
50
|
|
|
51
51
|
---
|
|
@@ -110,7 +110,7 @@ The adapter (per `void-hexagonal-architecture`) is where the catch lives. The er
|
|
|
110
110
|
try { await doSomething(); } catch (e) { /* swallow */ }
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
Logging alone does not recover a failed operation. Propagate a typed failure or rethrow; explicit recovery must preserve the caller's contract. Log at the boundary that owns the diagnosis, without duplicating the same failure at every layer.
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
@@ -121,7 +121,7 @@ Majors' rule. Log:
|
|
|
121
121
|
- User ID (anonymized — `userId: hash(realId)` for Sentry; raw in internal logs only if compliance allows)
|
|
122
122
|
- Org / tenant ID
|
|
123
123
|
- Feature flags active
|
|
124
|
-
-
|
|
124
|
+
- Non-secret correlation ID (generated for tracing, never an authentication credential)
|
|
125
125
|
- Browser / device / region
|
|
126
126
|
- Business-meaningful tags (plan tier, signup source, conversion path)
|
|
127
127
|
|
|
@@ -184,7 +184,7 @@ Defense in depth. The discipline says "don't log it." The config says "even if y
|
|
|
184
184
|
## What NOT to log
|
|
185
185
|
|
|
186
186
|
- Full request bodies (PII / secrets / massive payloads). Log specific fields with explicit allowlist.
|
|
187
|
-
- Passwords, tokens, API keys, session IDs, JWTs (composes with `void-security-guidance`)
|
|
187
|
+
- Passwords, tokens, API keys, authentication session IDs/cookies, JWTs (composes with `void-security-guidance`)
|
|
188
188
|
- Email addresses unredacted in production logs (consider hashing or partial redaction depending on compliance)
|
|
189
189
|
- Full database rows (PII risk)
|
|
190
190
|
- LLM full prompts / responses (PII + cost) — log token counts and structural metadata, not content
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: void-orchestrate
|
|
3
|
-
description: Delegate independent research and substantial implementation through native agents; choose context, isolation and bounded concurrency, collect results and preserve review evidence.
|
|
3
|
+
description: Delegate independent research and substantial implementation through native agents; choose context, isolation and bounded concurrency, collect results and preserve review evidence. Publish observed worker lifecycle events.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Orchestrate
|
|
@@ -17,16 +17,10 @@ context, permissions, completion and resume capabilities. Use the best supported
|
|
|
17
17
|
capabilities for the task in the current session; an installed executable or an
|
|
18
18
|
environment hint alone does not validate a host, identity or permission.
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
(such as tmux) when its required capabilities and ownership can be verified. This
|
|
25
|
-
policy adds no tmux transport and never relaunches through the legacy kernel.
|
|
26
|
-
Without supported presentation, retain native delegation and report the limitation;
|
|
27
|
-
do not claim durability from a pane or unsupported API. Failed or ambiguous host
|
|
28
|
-
discovery blocks the affected host action: diagnose it, never silently switch hosts
|
|
29
|
-
or act on an unrelated project. Native work independent of that action may continue.
|
|
20
|
+
Use native execution independently of presentation. The harness publishes worker
|
|
21
|
+
observations; external plugins own windows, tabs and panes. Never discover or call
|
|
22
|
+
a multiplexer to delegate, and never duplicate an agent to make it visible.
|
|
23
|
+
An absent display cannot change execution permissions or invalidate real evidence.
|
|
30
24
|
|
|
31
25
|
- Work directly for a tiny targeted change, a single tool call, mechanical processing,
|
|
32
26
|
or tightly coupled work where delegation adds no useful separation.
|
|
@@ -70,22 +64,6 @@ conflict, rather than silently upgrading or claiming the quality requirement is
|
|
|
70
64
|
and report the effective model only when the runtime supplies it; otherwise it is unknown.
|
|
71
65
|
Use existing evidence/reporting, not a new registry. Report cost/time only when observed.
|
|
72
66
|
|
|
73
|
-
## First ticket and optional worker tabs
|
|
74
|
-
|
|
75
|
-
SessionStart discovers Herdr even before central mission files exist. Its advice
|
|
76
|
-
requires a fresh caller pane at the canonical checkout and process ownership;
|
|
77
|
-
environment variables alone never authorize a host action. Revalidate before launch.
|
|
78
|
-
On a new implementation ticket, reuse the assigned writer if one exists. Otherwise,
|
|
79
|
-
in a validated Herdr session, register the mission and planned worker first, then
|
|
80
|
-
create one background tab in the resolved coordinator workspace with the assigned
|
|
81
|
-
worktree as cwd. Read the installed `herdr tab` schema, preserve focus with
|
|
82
|
-
`--no-focus`, and use the returned root pane for the single agent start below.
|
|
83
|
-
Reattach a matching existing worker instead of opening another tab. The coordinator
|
|
84
|
-
stays in its existing pane. Hooks only discover and advise; they never create tabs,
|
|
85
|
-
launch agents or write central files. Without Herdr, use native delegation normally.
|
|
86
|
-
An invalid host or explicit mission selection refuses only that host action;
|
|
87
|
-
independent native work may continue with the limitation stated.
|
|
88
|
-
|
|
89
67
|
## Brief and bound the delegation
|
|
90
68
|
|
|
91
69
|
Use a fresh context by default. Choose a supported fork only when the task needs
|
|
@@ -98,7 +76,7 @@ Formal specialist envelopes and evidence follow the independent contract below.
|
|
|
98
76
|
|
|
99
77
|
Count writer, research and review children together against observed available runtime slots
|
|
100
78
|
and the coordinator's bounded dispatch; queue work when full. Preserve tighter caller
|
|
101
|
-
limits, including Autopilot's ticket cap
|
|
79
|
+
limits, including Autopilot's ticket cap.
|
|
102
80
|
This is no machine-wide quota. Do not create recursive child coordinators or redispatch
|
|
103
81
|
the same complete workflow. Required formal specialists remain dispatched by their
|
|
104
82
|
designated owner within the shared available capacity. Do not duplicate a child's work
|
|
@@ -150,206 +128,56 @@ Preserve the complete result; incomplete results go back to the same agent.
|
|
|
150
128
|
With `panel.provider: orchestrator`, only ORCH launches and collects this panel.
|
|
151
129
|
Missing required native capability is reported with cause and next action.
|
|
152
130
|
|
|
153
|
-
##
|
|
154
|
-
|
|
155
|
-
The following Herdr sections apply when the session-host policy selects this adapter.
|
|
156
|
-
Native delegation without it does not require these central files or pane discovery.
|
|
157
|
-
|
|
158
|
-
Read project instructions, the approved task and the current Git status. Preserve
|
|
159
|
-
other writers' changes. Resolve the canonical Git common directory, SHA-256 its
|
|
160
|
-
absolute real path as UTF-8, and inspect
|
|
161
|
-
`~/.local/state/orchestra/<project>/<mission>/`. Never use an inherited workspace
|
|
162
|
-
variable or a stale pane ID as authority. Read mission.md, the applicable
|
|
163
|
-
workers/<label>/brief.md and report.md. Re-read `herdr pane list` before every
|
|
164
|
-
identity decision. Match **label + worktree**, using the canonical worktree path.
|
|
165
|
-
Refuse multiple matches, incomplete discovery, symlinks, traversal and invalid data.
|
|
166
|
-
After reattachment/restart, ORCH atomically updates pane_id and coordinator.workspace
|
|
167
|
-
from that validated fresh inventory. Hooks and workers never write these hints.
|
|
168
|
-
A missing unrelated historical worktree does not invalidate a current identity.
|
|
169
|
-
|
|
170
|
-
The coordinator is the existing ORCH session, never a second agent opened for display.
|
|
171
|
-
Resolve its own label + worktree before selecting its workspace. Keep each writer
|
|
172
|
-
in its assigned worktree. Do not affect any other project, workspace or pane.
|
|
173
|
-
An uncertain launch or prompt acknowledgement requires reconciliation of that same
|
|
174
|
-
worker before retrying. A timeout proves neither launch failure nor prompt loss.
|
|
175
|
-
|
|
176
|
-
## Herdr adapter: explicit coordinator context
|
|
177
|
-
|
|
178
|
-
If unique discovery refuses multiple compatible missions, ORCH reads the target
|
|
179
|
-
mission and reports, then atomically replaces its local, unversioned
|
|
180
|
-
`<canonical worktree>/.void/machine/orchestra-selection.json`. Schema 1 is strict
|
|
181
|
-
JSON, at most 4096 UTF-8 bytes: `{ "schema": 1, "project": "<project-sha256>",
|
|
182
|
-
"mission": "<existing-id>", "coordinator": { "label": "ORCH", "worktree":
|
|
183
|
-
"/absolute/canonical/worktree" } }`. ORCH alone writes it; hooks never repair it.
|
|
184
|
-
No unknown or duplicate keys, YAML, traversal, symlinks or partial writes.
|
|
185
|
-
|
|
186
|
-
This selects context only, never execution state or permissions. Full bounded
|
|
187
|
-
central discovery still runs; malformed unrelated missions or limits refuse.
|
|
188
|
-
A stale/invalid binding never falls back. Verify selected coordinator label and
|
|
189
|
-
canonical worktree against the current worktree and a fresh `herdr pane list`;
|
|
190
|
-
missing or duplicate live matches refuse. Never prefer timestamps, running status
|
|
191
|
-
or pane tokens to decide intent. Without a binding, preserve unique discovery.
|
|
192
|
-
Clear/compact/resume re-read selection and central state without launching workers.
|
|
193
|
-
Separate worker worktrees retain their own mission, attempt and report discovery.
|
|
194
|
-
A selected terminal mission retains the guarded cleanup below: never clear tokens
|
|
195
|
-
belonging to another mission. No binding belongs in the programme descriptor.
|
|
196
|
-
|
|
197
|
-
## Herdr adapter: central files and ownership
|
|
198
|
-
|
|
199
|
-
Use schema: 1 YAML frontmatter, strict string keys and one document, followed by
|
|
200
|
-
Markdown. Reject duplicate keys, tags, anchors, aliases and unknown fields. Bound
|
|
201
|
-
mission/report to 64 KiB, brief to 256 KiB, discovery to 64 entries and 1 MiB of
|
|
202
|
-
mission bytes; exceeding a bound is incomplete, never a unique match.
|
|
203
|
-
See the shipped technical contract `docs/ORCHESTRA.md` in the harness source for
|
|
204
|
-
schemas; the operational fields are listed here so an installed skill is sufficient.
|
|
205
|
-
|
|
206
|
-
- mission.md: schema, mission, project, status, updated_at
|
|
207
|
-
(ISO with `Z` or `+HH:MM`/`-HH:MM`; prefer UTC `Z`), repository
|
|
208
|
-
(canonical Git common path), coordinator {label, worktree, workspace?}, workers.
|
|
209
|
-
- Worker entries: label, agent (codex or claude), worktree, branch, ticket, status,
|
|
210
|
-
attempt; optional pane_id and session are hints only. At most four workers.
|
|
211
|
-
- Coordinator status and worker status: planned, running, blocked, done, failed.
|
|
212
|
-
- report.md: schema, mission, attempt, worker, branch, status (running, blocked,
|
|
213
|
-
done, failed), commits (full SHAs), tests (passed, failed, not_run), updated_at.
|
|
214
|
-
Body: actual commands/results, proof locations, risks, questions and remaining work.
|
|
215
|
-
- brief.md: absolute paths, exact base, footprint, acceptance criteria, ownership,
|
|
216
|
-
permissions, forbidden effects and current attempt. No secrets. Explicitly warn
|
|
217
|
-
that other writers exist and their changes must be preserved.
|
|
218
|
-
|
|
219
|
-
ORCH alone writes mission and briefs; each worker alone writes its report. Use an
|
|
220
|
-
atomic replacement: write an exclusive temporary sibling, then rename. Hooks never
|
|
221
|
-
write these files. A new work turn gets a new attempt; resume keeps its attempt.
|
|
222
|
-
A valid report for the current mission/attempt overrides workers[].status at every
|
|
223
|
-
event. An absent report falls back to the manifest. Malformed, foreign, partial or
|
|
224
|
-
unrecognized stale reports refuse usage; never turn a parse failure into absence.
|
|
225
|
-
The files carry coordination state, not independent review proof.
|
|
226
|
-
|
|
227
|
-
## Herdr adapter: copyable starting files
|
|
228
|
-
|
|
229
|
-
Replace the example project hash with SHA-256 of the canonical common Git path.
|
|
230
|
-
Replace every path, branch, ticket and timestamp from actual observations. These
|
|
231
|
-
three files are authored by their owner, never by the hook.
|
|
232
|
-
|
|
233
|
-
mission.md:
|
|
234
|
-
|
|
235
|
-
```yaml
|
|
236
|
-
---
|
|
237
|
-
schema: 1
|
|
238
|
-
mission: dev-42
|
|
239
|
-
project: "<project-sha256>"
|
|
240
|
-
status: planned
|
|
241
|
-
updated_at: "2026-10-08T10:00:00.000Z"
|
|
242
|
-
repository: /absolute/repository/.git
|
|
243
|
-
coordinator:
|
|
244
|
-
label: ORCH
|
|
245
|
-
worktree: /absolute/repository
|
|
246
|
-
workspace: wA
|
|
247
|
-
workers:
|
|
248
|
-
- label: WORK-1
|
|
249
|
-
agent: codex
|
|
250
|
-
worktree: /absolute/worktrees/dev-42
|
|
251
|
-
branch: work/dev-42
|
|
252
|
-
ticket: DEV-42
|
|
253
|
-
status: planned
|
|
254
|
-
attempt: implementation-1
|
|
255
|
-
---
|
|
256
|
-
# Mission
|
|
257
|
-
Scope, acceptance criteria, canonical mission journal and proof locations.
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
workers/WORK-1/brief.md:
|
|
261
|
-
|
|
262
|
-
```yaml
|
|
263
|
-
---
|
|
264
|
-
schema: 1
|
|
265
|
-
mission: dev-42
|
|
266
|
-
attempt: implementation-1
|
|
267
|
-
worker: WORK-1
|
|
268
|
-
---
|
|
269
|
-
# Work
|
|
270
|
-
Worktree: /absolute/worktrees/dev-42. Branch: work/dev-42.
|
|
271
|
-
Base: <verified full commit SHA>. Ticket: DEV-42.
|
|
272
|
-
Footprint: <exact owned files/directories>; preserve every other writer's edits.
|
|
273
|
-
Acceptance: <complete observable criteria and verification commands>.
|
|
274
|
-
Limits: <role permissions, forbidden effects, human gates>.
|
|
275
|
-
Report: /absolute/mission/workers/WORK-1/report.md, owned only by this worker.
|
|
276
|
-
Resume: <actual runtime session and the recipe from the table below>.
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
workers/WORK-1/report.md:
|
|
280
|
-
|
|
281
|
-
```yaml
|
|
282
|
-
---
|
|
283
|
-
schema: 1
|
|
284
|
-
mission: dev-42
|
|
285
|
-
attempt: implementation-1
|
|
286
|
-
worker: WORK-1
|
|
287
|
-
branch: work/dev-42
|
|
288
|
-
status: running
|
|
289
|
-
commits: []
|
|
290
|
-
tests: not_run
|
|
291
|
-
updated_at: "2026-10-08T10:00:00.000Z"
|
|
292
|
-
---
|
|
293
|
-
# Checkpoint
|
|
294
|
-
Completed: <actual changes>. Verification: <commands, results and proof paths>.
|
|
295
|
-
Remaining: <work and exact next action>. Risks/questions: <observed limitations>.
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
## Herdr adapter: durable workers
|
|
299
|
-
|
|
300
|
-
Read installed `herdr --help`, `herdr agent --help` and the live schema before
|
|
301
|
-
issuing commands. Use structured argv, exact acknowledged identities and bounded
|
|
302
|
-
waits/output. The launch recipes for the selected worktree are:
|
|
131
|
+
## Publish worker observations
|
|
303
132
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
133
|
+
For each mission worker or reviewer, keep one `run_<opaque-id>` for its assignment.
|
|
134
|
+
Reuse the unit's open canonical mission; if it has none, create it with
|
|
135
|
+
`void-machine mission start --title <unit> --json` and retain its returned ID.
|
|
136
|
+
Do not recreate a mission to evade a refusal. This publication never substitutes
|
|
137
|
+
for the mission's implementation, verification or independent review receipts.
|
|
308
138
|
|
|
309
|
-
|
|
139
|
+
After an actual successful native dispatch acknowledgement, publish:
|
|
310
140
|
|
|
311
141
|
```sh
|
|
312
|
-
|
|
142
|
+
void-machine agents record --mission <mis_id> --event-file <observation.json>
|
|
313
143
|
```
|
|
314
144
|
|
|
315
|
-
The
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
After collection and acceptance ORCH may close its owned surfaces; retain worktrees,
|
|
352
|
-
branches and evidence according to their own lifecycle. Do not close the coordinator.
|
|
145
|
+
The file contains `observationId`, `kind` and `payload`. Use a stable observation ID
|
|
146
|
+
and exactly the same content on a retry. The payload always carries `schemaVersion: 1`
|
|
147
|
+
and `runId`. Publish these three kinds at their real boundaries:
|
|
148
|
+
|
|
149
|
+
- `worker.dispatched`: add `missionId`, `ticket` (or `unknown`), `role` (`work` or
|
|
150
|
+
`review`), `runtime` (`claude` or `codex`), the verified absolute `worktree`,
|
|
151
|
+
`branch` (`detached` requires `headSha`), and `attachCommand` (verified argv or
|
|
152
|
+
`unknown`). Never invent an attachment recipe or use presentation hints as identity.
|
|
153
|
+
- `worker.state`: add `state` (`running`, `blocked`, `done`, `failed`) and the UTC
|
|
154
|
+
`observedAt`; optional `reason` explains a wait. Publish the initial running state
|
|
155
|
+
and subsequent observed changes. A turn ending while awaiting the coordinator
|
|
156
|
+
is blocked, not done. No observation means unknown, never inferred failure.
|
|
157
|
+
- `worker.finished`: add `outcome` (`succeeded`, `failed`, `stopped`) after final
|
|
158
|
+
collection or confirmed terminal failure/stop, preceded by done for succeeded,
|
|
159
|
+
failed otherwise. Finish before closing the mission. It does not mean merged.
|
|
160
|
+
|
|
161
|
+
Keep the same assignment through corrections and resume. Repeated running states
|
|
162
|
+
across distinct turns need distinct observation IDs. A finished assignment is closed;
|
|
163
|
+
new work afterwards gets a new run ID. Keep real native identities in the existing
|
|
164
|
+
brief/evidence; the observation ID is not a fabricated native receipt.
|
|
165
|
+
|
|
166
|
+
A publication error is visible and retried with the same identity/content after its
|
|
167
|
+
cause is resolved; it never authorizes another launch. No brief, transcript, secret
|
|
168
|
+
or result content belongs in these metadata. Native calls outside this procedure are
|
|
169
|
+
not automatically captured, including unsupported Codex observation paths.
|
|
170
|
+
|
|
171
|
+
`void-machine agents status --json` reads all project mission journals and reports
|
|
172
|
+
active assignments, their last observed state and coverage issues. It does not poll
|
|
173
|
+
runtimes or control presentation. Partial coverage is explicit and exits nonzero;
|
|
174
|
+
never treat an unreadable history as no workers. External tools consume this public
|
|
175
|
+
contract; the harness does not open or close their surfaces.
|
|
176
|
+
|
|
177
|
+
Existing legacy runs retain their session and journal. Their mutating CLI commands
|
|
178
|
+
publish the same events; `void-machine agents publish <runId>` retries publication
|
|
179
|
+
from saved transitions without re-executing or stopping the runtime. This does not
|
|
180
|
+
make the legacy launcher mandatory for new work.
|
|
353
181
|
|
|
354
182
|
## Independent review
|
|
355
183
|
|
|
@@ -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
|
|
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
|
|
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`** —
|
|
263
|
-
- **`test-name-lint`** —
|
|
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
|
|
|
@@ -77,7 +77,7 @@ Remove unrelated scope unless the requested behavior requires it.
|
|
|
77
77
|
Give the result, relevant commands/results, independent review outcome and material limits.
|
|
78
78
|
Do not print a twelve-item checklist with irrelevant N/A rows. Keep applicability reasoning in
|
|
79
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
|
|
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
81
|
The PR evidence and final report reuse the same observed results rather than duplicate work.
|
|
82
82
|
|
|
83
83
|
Once at ticket end, the coordinator closes each explicitly bound source with
|