@naswerks/engineering-loop 0.7.1 → 0.9.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 (37) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +199 -0
  4. package/README.md +12 -7
  5. package/bin/verify-staged.mjs +136 -23
  6. package/bin/witness-acts.mjs +64 -0
  7. package/bin/witness-bodycheck.mjs +78 -0
  8. package/bin/witness-edits.mjs +60 -0
  9. package/bin/witness-extract-cmd.mjs +57 -0
  10. package/bin/witness-extract-seed.mjs +65 -0
  11. package/bin/witness-file-ledger.mjs +57 -0
  12. package/bin/witness-gaps.mjs +57 -0
  13. package/bin/witness-latency.mjs +55 -0
  14. package/bin/witness-lib.mjs +124 -0
  15. package/bin/witness-plane-window.mjs +57 -0
  16. package/bin/witness-procs.mjs +71 -0
  17. package/bin/witness-spawn-task.mjs +61 -0
  18. package/bin/witness-tx.mjs +60 -0
  19. package/bin/witness-watch.mjs +405 -0
  20. package/bin/witness-writes.mjs +64 -0
  21. package/package.json +1 -1
  22. package/references/docs-workflow.md +44 -24
  23. package/references/engineering-loop.md +42 -24
  24. package/skills/docs-audit-full/SKILL.md +2 -1
  25. package/skills/docs-process/SKILL.md +13 -7
  26. package/skills/docs-write/SKILL.md +1 -1
  27. package/skills/init/scripts/doctor.mjs +43 -5
  28. package/skills/init/scripts/owned.mjs +10 -0
  29. package/skills/spec-build/SKILL.md +12 -4
  30. package/skills/spec-coordinator/SKILL.md +149 -80
  31. package/skills/spec-ignite/SKILL.md +25 -21
  32. package/skills/spec-pipeline/SKILL.md +151 -82
  33. package/skills/spec-retro/SKILL.md +14 -9
  34. package/skills/spec-review/SKILL.md +32 -14
  35. package/skills/spec-seat/SKILL.md +107 -48
  36. package/skills/spec-witness/SKILL.md +267 -212
  37. package/templates/docs/readme-research.md +2 -2
@@ -22,7 +22,8 @@ Invoked as `spec-build {role} {spec-path}`, or told "you are a build session" wi
22
22
  apply** (`spec-seat`, Step 0). This list is for a build seat working from a spec.
23
23
 
24
24
  1. **Your spec** — fully, INCLUDING any Addendum sections. It is self-contained.
25
- 2. **The umbrella** (`01-{topic}.md`) — settled decisions; don't relitigate them.
25
+ 2. **The brief** (`00-ignition-brief.md`) — the charter: its sections down to § Platform state bind you,
26
+ and the owner's rulings in it are settled; don't relitigate them.
26
27
  3. **The tracker** — `docs/research/{topic}/project-status.md`. The coordinator's live journal and
27
28
  READ-ONLY to you. Prior session rows, deferred findings, and process incidents are your contract: build
28
29
  against what ACTUALLY shipped, not the spec's guesses. **If anything in it disagrees with your spec or
@@ -49,6 +50,9 @@ your role's rows from `docs/_meta/doc-index.md` § Role reading lists into your
49
50
  Read those the same way. If your prompt carries no `EXTRA DOCS` line, read that section yourself once and
50
51
  say in your PLAN TLDR which rows you took.
51
52
 
53
+ **Your role is the one your prompt names** — the brief's sequence row carries it in a `Role` cell when the
54
+ author set one — and `mixed` when neither says.
55
+
52
56
  A role is *which docs does this build session read* — nothing else. Jobs are SEAT KINDS, not roles:
53
57
  `docs-process` is a session type of its own, and a spec that touches a surface with no role of its own is
54
58
  `mixed` with that surface's rows.
@@ -63,9 +67,9 @@ minutes while assuming the work is pending rebuilds what already exists.
63
67
  Run `git status`; identify which dirty files are yours-to-be vs NOT yours (coordinator-owned docs appear
64
68
  mid-run — never stage them). Answer any STANDING RECON QUESTION your spec or prompt carries.
65
69
 
66
- **Measure your own baseline for any lane you touch, BEFORE you edit.** A same-day coordinator-verified
67
- baseline is an acceptable substitute when cited, but measuring your own is the norm — and a number you
68
- cannot reproduce is a finding.
70
+ **The floor is cited, never measured in a pipeline.** The brief's § Baselines was measured at authoring
71
+ and re-measured at the GATE: cite it, lane by lane. **Measure only a lane the brief does not name, and
72
+ measure it before you edit.** A number you cannot reproduce when you do run a lane is a finding.
69
73
 
70
74
  ## Build
71
75
 
@@ -89,6 +93,10 @@ signal that a VERDICT changed, not that the test is stale.
89
93
  Run the suite lanes **SERIALLY** — the lanes and their exact invocations are `patterns/testing.md`
90
94
  § Running tests; concurrent runs flake.
91
95
 
96
+ **A seat that wrote a further repository runs THAT repository's gate too, inside its tree of it** — the
97
+ lanes its own contributing rules name, serially, never beside this repository's — and reports each
98
+ repository's summaries under its own name. This repository's lanes do not run the code you wrote there.
99
+
92
100
  **Capture FULL runner output to a UTF-8 file and search failures by name** — redirect to a file, then
93
101
  search `^failed ` / `Failed!`. Piping through a "last N lines" filter destroys failure names.
94
102
 
@@ -21,8 +21,9 @@ touches the tracker or commits unprompted; you never write feature code — you
21
21
 
22
22
  **Who carries the messages depends on the mode, and the rest of this skill is written for both:**
23
23
 
24
- - **Hand-cranked** — a human relays every message, clicks plan-approve, and authorizes the push. The
25
- ceremony below is the same; the human is the bus.
24
+ - **Hand-cranked** — a human relays every message and approves each plan; an approved seat then runs to
25
+ done, its commits and branch pushes included (§ The hand-cranked relay). The ceremony below is the same;
26
+ the human is the bus.
26
27
  - **Hosted (including unattended)** — **your own verbs are the relay and the gate.** You spawn each seat's
27
28
  session, rule its plan (which is what flips its gate), steer it, receipt its final TLDR and reap it; the
28
29
  retro, the commit and the PR are yours. Pushes ride the unattended lane and are receipted, so they do
@@ -34,38 +35,42 @@ hand-testing what shipped. Everything else that a human does hand-cranked, you d
34
35
 
35
36
  ## Read first
36
37
 
37
- **Step 0 — the same floor every seat reads, all seven, plus every standard doc this repository has.**
38
- You verify every seat's work, so you start from the context they build in. A coordinator that has not
39
- read `testing.md` cannot judge a receipt; one that has not read `codegen.md` (when the repo has one)
40
- cannot spot a hand-written generated file.
38
+ **Step 0 — two reads, and neither is optional.** You verify every seat's work, so you start from the
39
+ context they build in. A coordinator that has not read `testing.md` cannot judge a receipt; one that has
40
+ not read `codegen.md` (when the repo has one) cannot spot a hand-written generated file.
41
41
 
42
- `_meta/doc-index.md` · `_meta/docs-workflow.md` · `_meta/engineering-loop.md` ·
43
- `patterns/code-organization.md` · `patterns/backend-patterns.md` · `patterns/frontend-patterns.md` ·
44
- `patterns/testing.md` — then every doc `doc-index.md` § Role reading lists carries a path for.
42
+ 1. **The floor every seat reads, all seven:** `_meta/doc-index.md` · `_meta/docs-workflow.md` ·
43
+ `_meta/engineering-loop.md` · `patterns/code-organization.md` · `patterns/backend-patterns.md` ·
44
+ `patterns/frontend-patterns.md` · `patterns/testing.md`.
45
+ 2. **Then every doc `doc-index.md` § Role reading lists carries a path for.** Open that section and read
46
+ each one. The floor alone is not Step 0.
45
47
 
46
48
  **Step 1 — the effort**, in order:
47
49
 
48
50
  1. `docs/research/{topic}/project-status.md` — the tracker. **You own it.**
49
- 2. `00-ignition-brief.md` if there is one — this run's standing orders.
50
- 3. `01-{topic}.md` — the umbrella. Its settled decisions govern; don't relitigate them.
51
- 4. **EVERY numbered spec, before arming the first seat.** You judge plans against them and
52
- cut each prompt from the previous session's actual shapes — you cannot do either from the tracker
53
- alone. Specs cross-reference: reading them as they come up means ruling on slice 3 without knowing
54
- slice 6 depends on its column name.
55
-
56
- **Then run the SHAPE COHERENCE CHECK — it takes seconds and it has caught real defects.** The shape
57
- lives in exactly three places:
58
-
59
- > the brief's `## The sequence` · the umbrella's row table · the tracker's `## Session status`
60
-
61
- **They must list the same rows, in the same order.** Check it now, and again before you cut the retro. **A
62
- disagreement is a finding, not a typo** — it means one seat changed the shape and the other two still
63
- describe the old one, and the seat most likely to act on the stale copy is the one reading only that file.
64
- Say which is right, fix the others, and journal it.
51
+ 2. `00-ignition-brief.md` — **your spec, and the charter every seat reads.** Its sections down to
52
+ § Platform state bind every seat; the owner's rulings in it are settled — don't relitigate them; the
53
+ sections after § Platform state are your orders.
54
+ 3. **EVERY numbered spec, before arming the first seat.** Every numbered file is one build seat's spec.
55
+ You judge plans against them and cut each prompt from the previous session's actual shapes — you cannot
56
+ do either from the tracker alone. Specs cross-reference: reading them as they come up means ruling on
57
+ slice 3 without knowing slice 6 depends on its column name.
58
+
59
+ **When no ignition copilot verified the brief — a run by hand — the GATE is yours.** Check that the
60
+ predecessor merged (only that: never a gate on another pipeline's seats), re-verify § Reference against
61
+ HEAD, and re-measure § Baselines, before the first seat is armed. A seat cites those baselines; it measures
62
+ only a lane the brief does not name.
63
+
64
+ **Then run the SHAPE CHECK — one comparison, seconds, and it has caught real defects.** The sequence is
65
+ written once, in the brief's `## The sequence`; the tracker's `## Session status` carries one status line
66
+ per row, by the brief's ids. **Every row has its status line and every status line has its row.** Check it
67
+ now, and again before you cut the retro. **A disagreement is a finding, not a typo** — it means the shape
68
+ changed in one place and not the other. Say which is right, fix the other, and journal it.
65
69
 
66
70
  Then produce a **5-line status readback** — shipped / in flight / next action / next prompt you expect to
67
- cut. Hand-cranked that goes to the human so they can confirm the seat transferred; hosted it is your
68
- opening journal entry in `project-status.md`, which is how anyone watching the cockpit catches up.
71
+ cut — opening with how many docs each of Step 0's two reads took. Hand-cranked that goes to the human so
72
+ they can confirm the seat transferred; hosted it is your opening journal entry in `project-status.md`,
73
+ which is how anyone watching the cockpit catches up.
69
74
 
70
75
  **Same-session graduation:** you just ran `spec-pipeline`, so you already hold most of Step 1 — confirm
71
76
  the tracker exists and cut Prompt #1. **Step 0 still applies.**
@@ -85,7 +90,7 @@ plus the human relay.
85
90
  | Verb | What it does | The part that bites |
86
91
  |---|---|---|
87
92
  | `seat_spawn` | Opens a DECLARED sibling's session | **It can never CREATE a seat** — the topology is the create door's, decided by a human — and you may only drive seats you `supervises`/`reviews`. With no `hostId` it opens on the host carrying your own session; `model` and `effort` override the seat's own for this session, judged against what the runner offers |
88
- | `accept_plan` | The verdict act: `accept` · `accept-with-riders` · `blocking-precondition`, **and NOTHING ELSE carries a go** — and it DELIVERS ITSELF: the seat's live session receives a one-line pointer to the ruling, for an accepting verdict and for any verdict that filed a ruling in the seat's file | Write the ruling into the seat's `tldr.md` FIRST (`## COORDINATOR RULING (plan rev N — {verdict})`), then call with a one-line `ruling`: the file is mirrored before your act and the pointer names your section. Pass the workspace HEAD you observed (a backticked sha is fine); an accepting verdict whose seat planned against a different tree is REFUSED, naming both shas. READ THE REPLY'S `delivery:` and `file:` LINES — `NOT DELIVERED` means the seat is idle and only a `callout` reaches it. When the verdict also answers the seat's question, pass `answeringActId` — one act rules and closes it |
93
+ | `accept_plan` | The verdict act: `accept` · `accept-with-riders` · `blocking-precondition`, **and NOTHING ELSE carries a go** — and it DELIVERS ITSELF: the seat's live session receives a one-line pointer to the ruling, for an accepting verdict and for any verdict that filed a ruling in the seat's file | Write the ruling into the seat's `tldr.md` FIRST (`## COORDINATOR RULING (plan rev N — {verdict})`), then call with a one-line `ruling`: the file is mirrored before your act and the pointer names your section. Pass the workspace HEAD you observed as the bare 40-hex sha `git rev-parse HEAD` prints — a backticked or quoted one is refused and records nothing, though a seat's board may fence its own; an accepting verdict whose seat planned against a different tree is REFUSED, naming both shas. READ THE REPLY'S `delivery:` and `file:` LINES — `NOT DELIVERED` means the seat is idle and only a `callout` reaches it. When the verdict also answers the seat's question, pass `answeringActId` — one act rules and closes it |
89
94
  | `accept` | The rev-bound FINAL receipt — and it TELLS the seat, so it carries your commit call | Put the next instruction (commit, push, close-out) in `ruling`, or write it under `## COORDINATOR ACCEPT` in the seat's `tldr.md` first — the receipt then binds to that mirrored revision. It binds to the seat's CURRENT tldr revision, so if the seat posts NEW CONTENT again your acceptance no longer covers what it publishes. **Re-accept — it is idempotent and cheap.** This receipt is what the push bar reads; prose is not a receipt. `answeringActId` closes the question it answers, as on `accept_plan` |
90
95
  | `complete` | The reap, and it is HONEST | It re-reads the seat and reports ok only after the terminal state is OBSERVED |
91
96
  | `callout` | **THE ONLY WAY YOU REACH A CHARGE** (besides the pointers `accept_plan` and `accept` send) | A charge that posted and ended its turn cannot resume any other way — without this verb it waits for a human. Your ruling must carry a DETERMINATE NEXT ACTION it can execute without inference. **Write it into the seat's `tldr.md` first and pass a one-line `ruling`:** the file is mirrored before your act and the seat is pointed at your section. Without a file, KEEP IT TO A LINE: over 600 chars the body is stored as a `ruling` artifact on the board and the seat receives a POINTER — the seat reads the body once, never twice |
@@ -134,7 +139,12 @@ and a seat's close-out. Never reconstruct it at the close.
134
139
  opening line and appends nothing of its own to your text, because you are the one who knows the prior
135
140
  rows' shapes. **The seed names skills; it never restates ceremony.** A seed that inlines procedure is a
136
141
  defect even when it works: there are then two sources for one contract and only one of them gets
137
- corrected.
142
+ corrected. **Hosted, the control plane's opening line already names the skills and the role** — start
143
+ your text at the spec, and never restate either.
144
+
145
+ **Keep each seed as you sent it.** Save the task text verbatim in the effort's record (the tracker's
146
+ session entry, or a `seed.md` beside the seat's board) at the moment you send it. The review and the
147
+ retro grade what each seat was told, and a seed reconstructed later from memory is not that.
138
148
 
139
149
  **Pick the docs:** the floor and the loop's standard docs are settled (`spec-seat`'s Step 0 +
140
150
  `spec-build`'s role table). **This repository's own docs are yours to seed, by path, every time:** copy
@@ -144,7 +154,7 @@ and a seat's close-out. Never reconstruct it at the close.
144
154
  seat guessing.
145
155
 
146
156
  **The seed-retirement rule:** each new seed restates ONLY what OVERRIDES a default (every seat
147
- re-acquires the defaults from the skill + umbrella from scratch) and DROPS what merely confirms them.
157
+ re-acquires the defaults from the skill + the brief from scratch) and DROPS what merely confirms them.
148
158
  A correction the platform has since absorbed retires from the seed the session after it ships — seeds
149
159
  carry deltas, not history. By session 15 an accreted seed is unreadable.
150
160
 
@@ -163,6 +173,8 @@ and a seat's close-out. Never reconstruct it at the close.
163
173
  call out / hand the human both sides when the call is genuinely theirs.
164
174
  **The accepting verdict carries the workspace HEAD you observed, and a seat that planned against a
165
175
  different tree is REFUSED with both shas named.** So read the BELIEFS sha before you rule, not after.
176
+ **A seat whose row names a further repository states that tree too,** on an `ALSO WRITING` line beneath
177
+ its BELIEFS: diff its commit and branch against that repository's branch, with your own `git` read of it.
166
178
  **AND GRADE THE `CONTROLS` LINE — it is a required PLAN TLDR field and you are its only reader.** For
167
179
  every probe or pin the seat plans, it must name the positive control and what would make it FAIL. A
168
180
  missing or hand-wavy `CONTROLS` line is a rider, not a nit: a control that cannot fail is a green light
@@ -180,6 +192,8 @@ and a seat's close-out. Never reconstruct it at the close.
180
192
  But spot-check the riskiest claim yourself (never trust self-reported "N green"), and **verify your own
181
193
  rulings were APPLIED** — a ruling can silently drop, and a seat can rebuild the exact problem
182
194
  the ruling solved. Diff the shipped behavior against your ruling list before accepting.
195
+ **A seat that wrote two repositories returns two of everything:** a staging list and its receipt per
196
+ repository, and each repository's gate under its own name. A green in one says nothing about the other.
183
197
  **VERIFY THE CLAIM WHOSE FAILURE WOULD BE SILENT; MACHINE-COMPARE THE REST.** That is the rule that
184
198
  keeps your own share of the spend honest — a seat producing receipts that reconcile arithmetically has
185
199
  already done the work you would be repeating.
@@ -194,10 +208,14 @@ and a seat's close-out. Never reconstruct it at the close.
194
208
  **Advance the tracker AT EVERY CHECKPOINT.** Plan accepted: the row says so; final TLDR accepted: the
195
209
  row says so; push confirmed: SHIPPED with the hash. A stale tracker is your omission.
196
210
 
197
- **REAPING A HUMAN ROW: TAKE THE RECEIPT, DO NOT WRITE IT.** A human row has no seat to post a TLDR,
198
- so the temptation is to transcribe the sitting into your tracker and call the row recorded. **That
199
- leaves the row with ONE voice — yours — and it is the only row in the effort with one.** Ask the human
200
- for `sessions/{slug}/receipt.md` in the row's own commit: each check id, what was run, the literal
211
+ **WHEN A BRANCH A SEAT PUSHES HAS A PULL REQUEST OPEN, READ ITS CHECKS AT EVERY SEAT REPORT,** in
212
+ whichever repository it is, with your own read and not the seat's sentence about it: a check read at
213
+ the first commit says nothing about the tenth.
214
+
215
+ **CLOSING A HUMAN STEP: TAKE THE RECEIPT, DO NOT WRITE IT.** A `step` row has no seat to post a TLDR,
216
+ so the temptation is to transcribe the sitting into your tracker and call the step recorded. **That
217
+ leaves it with ONE voice — yours — and it is the only row in the effort with one.** Ask the human
218
+ for `sessions/{step-slug}/receipt.md` in the step's own commit: each check id, what was run, the literal
201
219
  result, who observed it. Your tracker entry then reads *against* it, the way you read every other row's
202
220
  tldr.
203
221
 
@@ -212,8 +230,8 @@ and a seat's close-out. Never reconstruct it at the close.
212
230
  `plan.md` + `tldr.md` immediately before the FINAL push**, leaving a residual git already records.
213
231
 
214
232
  **AND TRANSCRIBE THE SEAT'S RECEIPT SWEEP.** A seat's close-out reports which receipts its
215
- change made false. It can correct `live-checks.md` itself; it may **not** write `project-status.md` or
216
- `sessions/**`, so **those corrections arrive as a list in its FINAL TLDR and they are yours to apply.**
233
+ change made false. It may **not** write `project-status.md`, `sessions/**` or a row of `live-checks.md`
234
+ (the owner's), so **those corrections arrive as a list in its FINAL TLDR and they are yours to apply.**
217
235
  Do not hand a seat "just fix the false receipts" without checking who owns them — a coordinator that
218
236
  does finds the receipts are its own or immutable, and has handed the seat a dead end. Likewise
219
237
  **check off every BINDING instruction you gave**: if you said "report the count either way" and no
@@ -303,13 +321,15 @@ and a seat's close-out. Never reconstruct it at the close.
303
321
  nothing in that column is the pass's first finding. Then read your own session entries: **if any of
304
322
  them needs superseding, stop and record that as a finding** — it means the ledger was not kept, and
305
323
  the retro must say so rather than quietly correcting it.
306
- 2. **Aggregate the effort's `live-checks.md` — YOURSELF, with ordinary edits.** The effort home's
307
- `.md` files (`live-checks.md`, the numbered specs, the umbrella) are inside your scoped write path —
308
- same gate, same receipt as your ledger. **This also means a line you have PROVEN false in a spec or
309
- a live-check row is yours to strike at the source.** Research stage only — after docs-process
310
- files the folder, only the ledger remains writable.
311
- Every session's TLDR section (e) row belongs there, plus any status only you observed. Unaggregated
312
- rows are the most common thing to fall through, and the human's sitting is what they are for.
324
+ 2. **Offer the owner a short, ordered quick pass — in the chat.** Live checks are the owner's, never
325
+ a seat's job and never a row you aggregate. From the seats' section (e) ("what the owner could try")
326
+ pick the few that matter most and write them as a numbered pass the owner can follow cold: what to
327
+ open, what to do, what passing looks like. A long list nobody can follow is the failure this
328
+ replaces. `live-checks.md` holds only the rows the owner dictates; write a row there only when the
329
+ owner dictates it. The effort home's `.md` files (`live-checks.md`, the numbered specs, the brief)
330
+ are inside your scoped write path — same gate, same receipt as your ledger — so **a line you have
331
+ PROVEN false in a spec, or a dictated row a seat reported false, is yours to strike at the source.**
332
+ Research stage only — after docs-process files the folder, only the ledger remains writable.
313
333
  3. **Run `spec-retro`.** It is written FROM the tracker, which is why step 1 comes first — a retro
314
334
  assembled from a stale ledger invents. It is a READ: findings become proposed fixits, and it fixes
315
335
  nothing. **If the effort had a review, your retro may cite `sessions/code-review.md` — and the two
@@ -320,9 +340,7 @@ and a seat's close-out. Never reconstruct it at the close.
320
340
  `docs/_meta/engineering-loop.md` § This repository's rails (repository-owned) says (when it names no
321
341
  route, ask the human once and suggest recording the answer there); if one is already open the push is
322
342
  enough. These are your own git — gated and receipted like any other publish. **The
323
- push command must be the ENTIRE command** (a leading `cd` disqualifies it), and keep git-verb words
324
- out of any echo label around it — the deny layer matches TEXT, not parsed verbs, and a decorative
325
- `=== remote tip ===` header over a read-only block will park.
343
+ push command must be the ENTIRE command** (a leading `cd` disqualifies it).
326
344
  6. **Report the close:** commits, receipts, total cost with its uncosted-turn count, the findings ledger,
327
345
  and the explicit list of what the human still owns. **The merge is theirs, never yours.**
328
346
  7. **If the effort has a DOCS-PROCESS row, it runs last** — after the PR exists, as its own session,
@@ -331,7 +349,7 @@ and a seat's close-out. Never reconstruct it at the close.
331
349
 
332
350
  **P MOVES THE EFFORT HOME OUT OF YOUR REACH — the tracker pass in step 1 is your LAST chance at
333
351
  the specs and live-checks.** P `git mv`s `docs/research/{topic}/` to the archive home
334
- `docs/_meta/docs-workflow.md` § The archive convention (repository-owned) names, or to the umbrella's
352
+ `docs/_meta/docs-workflow.md` § The archive convention (repository-owned) names, or to the brief's
335
353
  `Archive:` line when it carries one. The ledger survives the
336
354
  rename (its write predicate admits `docs/{research|archive}/*/project-status.md`; a home elsewhere
337
355
  is outside it, so there P's write to the tracker is the last one), but the effort-home lane
@@ -356,10 +374,10 @@ and a seat's close-out. Never reconstruct it at the close.
356
374
  while any seat is still live or when none shipped. Hand-cranked there is no `finish`; the human closes
357
375
  the effort.
358
376
 
359
- **The human hand-tests.** Live verification is the human's role, not a seat's claim — when a slice
360
- ships something clickable, tell the human concretely what to drive (the 2-3 highest-value clicks), and
361
- make sure user-run smokes accumulate in the effort's `live-checks.md` rather than piling up in chat —
362
- **written by you with ordinary edits, gated and receipted like your ledger.**
377
+ **The human hand-tests.** Live verification is the owner's, not a seat's claim and not a seat's job —
378
+ when a slice ships something clickable, tell the owner concretely what to drive (the 2-3 highest-value
379
+ clicks), in the chat. A check becomes a row of `live-checks.md` only when the owner dictates it, and then
380
+ you write it, with ordinary edits, gated and receipted like your ledger.
363
381
 
364
382
  ## What you will have to prove at close — make it runnable NOW
365
383
 
@@ -387,7 +405,7 @@ so read them as run-time obligations, not close-out ones:
387
405
  - **Verify a query FIRES on a known-positive before you trust a clean result.** A silently-empty result
388
406
  is usually a broken query, not an empty table — and a false all-clear on an audit query is worse than
389
407
  no query.
390
- - **Costs: uncosted turns count $0**, so any total is a FLOOR while the uncosted-turn count is above zero.
408
+ - **Costs: an uncosted turn counts as nothing**, so any total is a FLOOR while the uncosted-turn count is above zero.
391
409
  Report it with the count. **Never sum across instruments** — session footers ride the seats' wakes and
392
410
  omit your own spend.
393
411
 
@@ -395,18 +413,34 @@ so read them as run-time obligations, not close-out ones:
395
413
 
396
414
  - Plan TLDR as **plain text BEFORE any plan-approval mode**; questions as **plain numbered text, then
397
415
  STOP** — never an interactive question tool (the human can't copy from it).
398
- - **No commit/push without your relayed call.** Explicit staging only — never `git add -A`.
416
+ - **Approved work includes its commit, its push and the PR — you do not ask for them.** Hand-cranked, an
417
+ approved seat commits and pushes its branch itself (the relay, below); hosted, the commit call rides your
418
+ acceptance. The PR is yours at the close. The merge is the human's, always. Explicit staging only —
419
+ never `git add -A` — and never a push to the base branch.
420
+ - **Pipelines never intertwine.** A brief's GATE checks only that its predecessor merged; never gate a run
421
+ on another pipeline's seats, and never make a seat wait on one. Independent pipelines may run at the same
422
+ time, each on its own branch; never two over the same files or on one branch. When the base branch moves
423
+ under your run, take it in between seats, by a merge, never under a live seat and never as a rebase.
424
+ - **Never advise or run a runner restart while a seat is live.** A restart ends every live session on that
425
+ runner, and the plane may not notice. "Restarting it is fine" said to the human in that state is how a
426
+ run loses every seat at once; say instead which seats are live and that the restart waits.
427
+ - **When your plane calls fail, stop — never sleep-poll.** Journal the failure, report it, and end your
428
+ turn. A timer that wakes you to retry a plane that is not answering spends a whole context on every wake
429
+ and produces nothing; the human resumes you when the plane is back.
430
+ - **An escalation is an act, never chat text alone.** Write it where it is read — the seat's board under a
431
+ coordinator-voice heading, and the tracker — and carry it with a verb the owner's queue shows. Text in
432
+ your own terminal reaches the owner only if they happen to read that terminal.
399
433
  - **This repository's rails add to these rules.** `docs/_meta/engineering-loop.md` § This repository's rails
400
434
  (repository-owned) names the policy, the gates a commit passes, the suite before a PR, the PR route and
401
435
  any stricter staging — bake every rail in beside these, and never let one subtract from them.
402
436
  - **The unattended git form, and it binds YOU as much as the seats: one git command per call, no shell
403
437
  metacharacters.** The FORM check reads the whole command string, so chaining, redirects or substitution
404
438
  disqualify it — `git add … && git commit … && git push …` parks, while the same three sent separately
405
- flow. Pushes always name the refspec; a push without one parks by design. Keep git-verb words out of
406
- echo text and section labels — **including `branch`**, which parks a read-only branch LISTING on the
407
- branch-deletion backstop. The fence fires on the commands a careful seat runs to PROVE its work.
408
- - Seats never edit `project-status.md` or memory files; never run `docs-write` unprompted; respect the
409
- umbrella's out-of-scope list; codegen only through the command `patterns/codegen.md` § Running codegen
439
+ flow. Pushes always name the refspec; a push without one parks by design. The gate reads the command
440
+ the shell would run, not its words: an echo label or a quoted search naming a git verb is data, unless
441
+ a shell or an interpreter is on the same line.
442
+ - Seats never edit `project-status.md`, `live-checks.md` or memory files; never run `docs-write` unprompted;
443
+ respect the brief's § What this effort does NOT do; codegen only through the command `patterns/codegen.md` § Running codegen
410
444
  names (when the repo has one); component files laid out as `patterns/frontend-patterns.md` § Component files states. Run the
411
445
  suite lanes SERIALLY.
412
446
  - Cross-slice changes (touching a shipped spec's files) need your explicit approval and get recorded as
@@ -414,9 +448,11 @@ so read them as run-time obligations, not close-out ones:
414
448
  - **Cite symbols, not bare `file:line`.** In a seed, a ruling, or the tracker, name the symbol and use the
415
449
  line as a hint — a line number is a comment, not an address, and the seat documenting why a line matters
416
450
  is what moves it.
417
- - Model policy: seats run **the effort's declared default model** (allowlist-exact, set at creation);
418
- investigation-heavy sessions may warrant a reasoning-heavier one. Parallel sessions only when
419
- the specs share no files — and sequence the *commits* regardless.
451
+ - Model policy: seats run **the effort's declared default model and effort** — the pair the brief's
452
+ `## Birth` names (allowlist-exact, set at creation); investigation-heavy sessions may warrant a
453
+ reasoning-heavier one. **A seat's BELIEFS line states the pair it started on, and one the brief does not
454
+ name is settled before you rule its plan:** re-open the seat on the named pair, or rule the difference in
455
+ by name. Parallel sessions only when the specs share no files — and sequence the *commits* regardless.
420
456
  - **The gate is inverted (means are free, protocol is law):** benign tools/methods flow with audit rows;
421
457
  only the ceremony's boundaries park — in EVERY tier, recon included. Reads, execs, suites, pipes,
422
458
  redirects and in-worktree writes all flow pre-accept. **Do not seed tool-avoidance rules the platform
@@ -434,6 +470,12 @@ so read them as run-time obligations, not close-out ones:
434
470
  catch. Cite, and your beliefs become checkable too.
435
471
  - **No message of yours carries a build order except the plan ruling itself.** Answers, callouts, and
436
472
  status requests are steering or information; the go IS the `accept`/`accept-with-riders` verdict.
473
+ - **A ruling that binds a running seat goes onto that seat's board in the same act as your tracker entry.**
474
+ Recorded is not delivered: a ruling that lives only in your tracker never reaches the seat it binds.
475
+ Hosted, write it into the seat's file and call the verb (a `callout` when no verdict carries it).
476
+ - **A ruling counts only when its act lands.** Write it into the file, call the verb, and say "landed" only
477
+ from the verb's reply. A ruling written ahead of its act — a claim about a build that has not finished, a
478
+ verdict the verb then refuses — is a board ahead of the ledger, and the seat may act on the board.
437
479
  - **If the next action is yours and nothing gates it, TAKE it — do not describe it.** Any turn of
438
480
  yours that ends with a plan instead of an act is a defect, and not a close-out quirk: a coordinator
439
481
  that rules a fixit IN, writes the brief, and ends the turn sits idle with nothing gating it. The human
@@ -474,10 +516,14 @@ The ceremony rides the **`spec-build` skill** — the prompt is an IGNITER, not
474
516
  ```
475
517
  You are a BUILD SEAT in a coordinator-run effort: invoke the spec-build skill with
476
518
  role={backend | frontend | mixed} before anything else, and ALWAYS after `spec-seat`: the seat header
477
- names `spec-seat` first, the job skill second.
519
+ names `spec-seat` first, the job skill second. <- hand-cranked only; hosted, start at the spec
478
520
 
479
521
  Your spec: {absolute path to the spec}
480
- Pipeline context: {umbrella path} (settled decisions — don't relitigate) + {project-status.md path}
522
+ {only when the seat's row names a further repository, one line each; hand-cranked only — hosted, the
523
+ seed says where:}
524
+ You also write: {repository} — your tree of it is {absolute path}, on branch {branch}. Never its owner's checkout.
525
+ Pipeline context: {brief path} — the charter: its sections down to § Platform state bind you, and the owner's
526
+ rulings in it are settled (don't relitigate) + {project-status.md path}
481
527
  (READ-ONLY, coordinator-owned — prior rows, deferred findings, and process incidents are your contract).
482
528
 
483
529
  EXTRA DOCS for this task (beyond your role's floor — read them):
@@ -493,11 +539,15 @@ MY BELIEFS, WITH PROVENANCE (a mismatch is worth more than a build hour — repo
493
539
 
494
540
  STANDING RECON QUESTION (answer in your PLAN TLDR): {if any}
495
541
  Known coordinator-owned dirty files (never stage): {list}
496
- Baselines: {per lane, as patterns/testing.md names them: N (+known pre-existing reds)}
542
+ Baselines (cite, don't re-measure): {per lane, from the brief's § Baselines: N (+known pre-existing reds)}
497
543
 
498
544
  THE TASK: {compressed spec restatement with the load-bearing specifics inline.}
499
545
  ```
500
546
 
547
+ **A seat that also writes a further repository is told WHERE, and nothing else about it:** what it does
548
+ there is `spec-seat` § Git shapes, and a prompt that restates it is a second copy of the contract. A seat
549
+ whose row names none gets no such line, and a prompt exactly as it would have been.
550
+
501
551
  For investigation-first work, add **STEP 0 — INVESTIGATE, REPORT, STOP** before the task, or use
502
552
  `role={...} fixit` for no-spec defect sessions (the skill carries the fix-it ceremony). Fallback: if the
503
553
  seat can't invoke skills, paste the ceremony from the `spec-build` skill inline.
@@ -515,7 +565,12 @@ second** — this is the whole point of the row.
515
565
  ```
516
566
  REVIEW row (R):
517
567
  You are the REVIEW SEAT: invoke the spec-review skill before anything else.
518
- Topic: {topic} · branch: {branch} · diff range: {base}...{branch}
568
+ Topic: {topic} · branch: {branch} · diff range: origin/{base}...{branch}
569
+ {when the run wrote a further repository, one more line each:}
570
+ Also: {repository}, at {its path} · diff range: origin/{its base}...{its branch}, or by its release
571
+ tags ({the release before}...{this run's release}) when the run released it mid-run
572
+ The brief, down to § Platform state and never past it (read as claims, not facts):
573
+ docs/research/{topic}/00-ignition-brief.md
519
574
  Specs (read as claims, not facts): {every numbered spec path}
520
575
  Session artifacts: docs/research/{topic}/sessions/ (each seat's plan.md + tldr.md)
521
576
  Working docs for THIS effort: {explicit list of docs/working/*.md}
@@ -526,7 +581,8 @@ REVIEW row (R):
526
581
  DOCS-PROCESS row (P):
527
582
  You are the DOCS-PROCESS seat: invoke the docs-process skill before anything else.
528
583
  Effort: {topic} · archive target: {per docs/_meta/docs-workflow.md § The archive convention
529
- (repository-owned), or the umbrella's Archive: line when it carries one} · shape: {as that section says}
584
+ (repository-owned), or the brief's Archive: line when it carries one} · shape: {as that section says}
585
+ Your board: docs/research/{topic}/sessions/docs-process/ (plan.md + tldr.md; never a gitignored folder)
530
586
  Working docs for THIS effort, and ONLY these: {explicit list — docs/working/ is a shared
531
587
  queue and may hold other efforts' docs; do not infer membership from the folder}
532
588
  Research/spec docs to archive: docs/research/{topic}/
@@ -552,7 +608,7 @@ Answers:
552
608
  mandatory: seats generalize from the WHY to the next hundred micro-decisions.}
553
609
  2. ...
554
610
  {Optional call-outs that don't block.}
555
- Go build. Ending ceremony as before; no commit without the relayed call.
611
+ {Hand-cranked: the run-to-done order (the relay, below). Hosted: Go build; the ending ceremony as before.}
556
612
  ```
557
613
 
558
614
  Rules: one numbered ruling per question, decision-first then rationale, never leave a question
@@ -566,9 +622,10 @@ still open, however good the prose; the seat is still holding and the re-raise i
566
622
  **The blackboard append.** Hand-cranked, the seat's `plan.md` and `tldr.md` are live FILES at
567
623
  `docs/research/{topic}/sessions/{spec-slug}/` — read the TLDR there with normal file tools instead of
568
624
  asking for a paste (`read-full-plan` = read `plan.md`, a pull, never force-fed). Deliver every ruling by
569
- **APPENDING it verbatim to the seat's `tldr.md`**, right under the questions it answers. Hosted, the same
570
- append, then the verb: the control plane mirrors the file before your act and points the seat at the
571
- section (§ Your hands, the coordinator's append).
625
+ **APPENDING it verbatim at the END of the seat's `tldr.md`** — never between its sections, not even under
626
+ the question it answers: the file is the conversation read top to bottom, in message order, and an insert
627
+ above a later post rewrites that order. Hosted, the same append, then the verb: the control plane mirrors
628
+ the file before your act and points the seat at the section (§ Your hands, the coordinator's append).
572
629
 
573
630
  **Anchor grammar (canonical — the witness greps these):** rulings land under
574
631
  `## COORDINATOR RULING (plan — {verdict})` hand-cranked, `## COORDINATOR RULING (plan rev N — {verdict})`
@@ -587,21 +644,31 @@ re-pasting a multi-KB block into a composer.
587
644
  before cutting each next prompt, sweep `sessions/*/tldr.md` mtimes for appends you were never nudged
588
645
  about. A missed nudge must cost one `ls`, not a wedged run.
589
646
 
590
- **Human relay mechanic:** when pasting a ruling into the seat's session, the human prepends *"Here
591
- is the response from the coordinator, take account for the notes and pop up the plan i will approve it."*
592
- — so the seat applies the rulings, then presents its plan for the human's explicit approve. This
593
- plan-approval click is the human's counterpart of the product's accept-gate — keep it.
647
+ **The hand-cranked relay.** A seat posts its PLAN TLDR and numbered questions **in the chat**, before any
648
+ plan-approval presentation. The human relays them, and you answer in **ONE message of notes**: the
649
+ verdict, the answers, the riders, and the standing run-to-done order. The seat folds them in and the human
650
+ approves its plan — that approval is the human's counterpart of the product's accept-gate. The seat then
651
+ writes `plan.md` and `tldr.md`, your notes transcribed verbatim under `## COORDINATOR RULING (plan —
652
+ {verdict})`, and **runs to done without a stop**: build, suites, `docs-write`, commits with
653
+ `verify-staged`, its branch pushes (never the base branch), and its FINAL TLDR in the chat. Its only stops
654
+ are a destructive act outside the effort's branches, a credential exposure, a host restart and a
655
+ `verify-staged` failure; a red it cannot fix takes its escape hatch, and it still closes out. A mid-build
656
+ question gets your ruling appended to its `tldr.md`. After its last push you review the FINAL against the
657
+ tree and write `## COORDINATOR ACCEPT (final — {slice})` into its `tldr.md` yourself. The hosted ceremony —
658
+ the acceptance that carries the commit call, the receipted push bar — is unchanged.
594
659
 
595
660
  ## Docs-write + commit call template
596
661
 
662
+ The hosted close-out call. Hand-cranked, the relay's run-to-done order carries the same content and the
663
+ seat closes out without waiting for it.
664
+
597
665
  ```
598
666
  COORDINATOR RESPONSE — FINAL TLDR ACCEPTED {(+ what I verified myself)}.
599
667
  1. Run docs-write. Carry: {departures, honest gaps, deferred findings verbatim, gotchas}.
600
- 2. COMMIT CALL — approved. Stage explicitly (never git add -A): YOUR diff + working doc,
601
- PLUS docs/research/{topic}/project-status.md — my ledger rides your commit,
602
- which is its only route to durability. You stage it; you never edit it. Other research
603
- notes stay untouched. Re-copy plan.md + tldr.md into sessions/{slug}/ ONCE, immediately
604
- before the final push.
668
+ 2. COMMIT CALL — approved. Stage explicitly (never git add -A): YOUR diff + working doc +
669
+ sessions/{slug}/. Never stage docs/research/{topic}/project-status.md — I commit my ledger
670
+ myself. Other research notes stay untouched. Re-copy plan.md + tldr.md into sessions/{slug}/
671
+ ONCE, immediately before the final push.
605
672
  VERIFY before committing: verify-staged {same list} — commit only on exit 0. Non-zero means
606
673
  git add silently dropped files (usually a .gitignore rule); STOP, report the output verbatim,
607
674
  and wait — do not force-add, do not widen .gitignore.
@@ -642,7 +709,9 @@ post-merge.
642
709
  - **The tracker is the seat — ONE ledger, and you write it live.** `project-status.md` is your journal: you
643
710
  own it, you advance it at every boundary, and the human never edits it. That file, not the chat, is the
644
711
  product of this skill. **The mechanism is ordinary file tools** — edit it exactly as a seat edits
645
- `tldr.md`/`plan.md`; the gate permits the path. Git commits are the receipt: timestamped, attributed,
712
+ `tldr.md`/`plan.md`; the gate permits the path. **Never a shell heredoc or an interpreter one-liner,
713
+ for the tracker or for a seat's board:** one collapses backslashes in what it writes, and one whose
714
+ text quotes a publish is held as if it ran it. Git commits are the receipt: timestamped, attributed,
646
715
  carrying the diff.
647
716
  - **The session entry is a JOURNAL entry, not a status cell.** The ruling *and its reasoning*, recon
648
717
  corrections, what you verified yourself, mid-build directives, and anything you don't want to forget —
@@ -30,9 +30,10 @@ the named-finding discipline are UNCHANGED either way — **only the mouse hand
30
30
  1. Confirm the specs are **committed to the base branch** — seats read specs from their checkouts, so
31
31
  uncommitted specs reach no worktree. If they are not committed, that commit is the coordinator's call
32
32
  first.
33
- 2. Enumerate the **ignition gates** explicitly and check each: dependency efforts landed AND merged (name
34
- the PRs); known-blocker fixits landed (name them); the control plane up and a runner connected; the
35
- human's words per stage. Report any gate not yet green — you WAIT, never work around.
33
+ 2. Enumerate the **ignition gates** explicitly and check each: the predecessor merged (name the PR) — one
34
+ pipeline runs at a time, so that is the only gate on another pipeline, never one of its seats; known-blocker
35
+ fixits landed (name them); the control plane up and a runner connected; the human's words per stage.
36
+ Report any gate not yet green — you WAIT, never work around.
36
37
  3. **VERIFY the ignition brief — you do not author it.** `spec-pipeline` wrote `00-ignition-brief.md`
37
38
  complete, from the hot session that placed the specs. **You may be a cold session, and that is fine,
38
39
  because your job is the check:** re-run the **Baselines** and confirm the quoted numbers; re-verify each
@@ -53,32 +54,33 @@ the named-finding discipline are UNCHANGED either way — **only the mouse hand
53
54
  | Payload field | Derived from | Note |
54
55
  |---|---|---|
55
56
  | `topic` | the folder name (`docs/research/{topic}/`) | kebab-case, as authored |
56
- | `title` | the umbrella `01-*.md` H1 | |
57
+ | `title` | the brief's H1 (the pipeline's title) | |
57
58
  | `specPath` | `docs/research/{topic}/` | **the folder, trailing slash** — a seat's own spec is a different field |
58
59
  | `shape` | the brief's `## Birth` | closed set; the create door refuses an unknown by name |
59
60
  | `defaultModel` | the brief's `## Birth` | **allowlist-exact** — a near-miss is refused, not coerced |
60
61
  | `defaultEffort` | the brief's `## Birth` | |
61
62
  | `seats[0]` | **THE COORDINATOR — it is a SEAT, and it is not one of the numbered specs** | omit it and the start door answers `pipeline-has-no-coordinator`; two answer `pipeline-has-many-coordinators` |
62
- | `seats[1..]` | the brief's `## The sequence`, in order | one row per numbered spec, plus the review / docs-process rows if the pipeline has them |
63
+ | `seats[1..]` | the brief's `## The sequence`, in order | one row per numbered spec, plus the review / docs-process rows if the pipeline has them. **A `step` row is shown on the card and never staged** — it is a human act, not a seat |
63
64
  | `seats[].kind` | the sequence row's kind, **verbatim from the closed vocabulary** | `build · fixit · review · docs-process · coordinator · retro · witness`. A kind nobody has heard of composes NOTHING; `unknown-seat-kind` names it |
65
+ | `seats[].role` | the row's `Role` cell, when the sequence has the column | `backend · frontend · mixed`; omitted when absent, and the seat's default applies |
64
66
  | `seats[].title` | the spec's H1, or the sequence row's label | |
65
67
  | `seats[].specPath` | `docs/research/{topic}/NN-{slug}.md` | **the FILE.** Confirm each exists — a spec named in the sequence and missing from disk reaches no worktree |
66
68
  | `seats[].stageOrdinal` / `ordinal` | position in the sequence | sequential unless the brief declares stages |
67
69
  | `edges[]` | the shape + the sequence | `fromSeatIndex`/`toSeatIndex` are **indices into your own `seats` array**, not seat ids — the ids do not exist until the create answers. `unknown-seat-relation` names a bad relation |
68
70
 
69
- **A FIXIT ROW IS NEVER IN THE CREATE PAYLOAD.** `spec-pipeline` authors at most one and only as a
70
- possibility — *"MAY materialise… not authored up front; the coordinator charters it from the review's
71
- named list."* Staging a seat for it invents a seat the run may never want, and the coordinator cannot
72
- un-charter it.
71
+ **A CONDITIONAL FIXIT IS A PLANNED SEAT, NEVER A SPEC.** `spec-pipeline` authors at most one and only
72
+ as a possibility — *"MAY materialise… not authored up front; the coordinator charters it from the
73
+ review's named list."* When the card carries it, the control plane creates it as a planned seat the
74
+ coordinator supervises, shown as "if needed": it opens only when the coordinator charters it, and
75
+ `finish` closes it as not chartered when it never opened. Never give it a spec file, and never stage a
76
+ second one.
73
77
 
74
- **DERIVING THE CARD *IS* THE THREE-DOCUMENT CHECK, AND THAT IS WHY THIS SEAT DERIVES IT.**
75
- `spec-pipeline` requires the sequence to appear in THREE places and agree: the brief's
76
- `## The sequence`, the umbrella's row table, and the tracker's `## Session status`. Build the seat
77
- list from the brief, then read the other two and confirm they list the same rows in the same order.
78
- **A disagreement is a finding, reported to the authoring seat — never something you reconcile
79
- silently by picking one.** An effort whose three documents disagree has a seat acting on a shape the
80
- others have stopped describing, and the create you are about to stage would make one of them true by
81
- force.
78
+ **DERIVING THE CARD *IS* THE SHAPE CHECK, AND THAT IS WHY THIS SEAT DERIVES IT.** The sequence is
79
+ written once, in the brief's `## The sequence`; the tracker's `## Session status` carries one status
80
+ line per row by the brief's ids. Build the seat list from the brief, then confirm every row has its
81
+ status line and every status line its row. **A disagreement is a finding, reported to the authoring
82
+ seat — never something you reconcile silently by picking one** — the create you are about to stage
83
+ would make one of them true by force.
82
84
 
83
85
  **The card names only controls that exist.** A card that promises a budget cap or an artifact prefix
84
86
  the launcher cannot take hands over values the form refuses and omits the ones it needs. **If you want
@@ -105,7 +107,8 @@ the named-finding discipline are UNCHANGED either way — **only the mouse hand
105
107
  if a retry is needed, re-announce and say the failed attempts had zero side effects.
106
108
  9. Verify ignition receipts — the coordinator's opening ledger write, its first `seat_spawn`, any scripted
107
109
  probe's refusal — and **narrate each beat as it lands**, plain language. A loud row at ignite is
108
- information, not a failure.
110
+ information, not a failure. **When a witness is on duty, hand it the packet** (`spec-witness` § The
111
+ packet) before you go hands-off: it watches from outside the plane and cannot read the kick for itself.
109
112
  10. **HANDS OFF.** Heartbeats only (one line per phase change; long output to files, never into context).
110
113
  The human owns the parks, the reaps, and the kill-switch from the first second. If the run wedges:
111
114
  report state + STOP — the kill-switch is theirs.
@@ -130,9 +133,10 @@ reviewed the way a committed file can, so anything longer than a pointer is law
130
133
  place — and accumulated prompt-law breaks the coordinator it was meant to steer.
131
134
 
132
135
  **Your job is to READ it and confirm the brief behind it holds up** — the coordinator reviews the text
133
- before kick. Before you hand it over, check the brief actually covers: the sequence and roles · the
134
- coordinator's beliefs with provenance · effort-specific law and per-spec riders · verified baselines ·
135
- platform state · close-out (artifact filing, live-checks aggregation, what the PR must say). **A gap you
136
+ before kick. Before you hand it over, check the brief actually covers: why the effort exists · the
137
+ sequence and roles · the owner's rulings · the law and per-spec riders · the reference facts · what the
138
+ effort does not do · verified baselines · platform state · the coordinator's beliefs with provenance ·
139
+ close-out (artifact filing, what the PR must say, the owner's quick pass). **A gap you
136
140
  find is a finding to report, not a section for you to write** — send it back to the authoring seat.
137
141
 
138
142
  <!-- control-plane-specific -->