@naswerks/engineering-loop 0.7.0 → 0.8.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 +125 -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 +41 -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 +17 -5
  28. package/skills/init/scripts/owned.mjs +10 -0
  29. package/skills/spec-build/SKILL.md +8 -4
  30. package/skills/spec-coordinator/SKILL.md +125 -66
  31. package/skills/spec-ignite/SKILL.md +25 -21
  32. package/skills/spec-pipeline/SKILL.md +128 -80
  33. package/skills/spec-retro/SKILL.md +9 -4
  34. package/skills/spec-review/SKILL.md +22 -10
  35. package/skills/spec-seat/SKILL.md +63 -31
  36. package/skills/spec-witness/SKILL.md +267 -212
  37. package/templates/docs/readme-research.md +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spec-pipeline
3
- description: Graduate a plan into a numbered spec pipeline in docs/research/{topic}/ — an umbrella plus one self-contained spec per planned seat. Use when a research idea is "really getting into it" and a plan has come through (a plan-approval mode, if your harness has one) and you want to commit it as specs instead of executing it directly, or run spec-pipeline.
3
+ description: Graduate a plan into a numbered spec pipeline in docs/research/{topic}/ — one ignition brief (the coordinator's spec and the charter every seat reads) plus one self-contained spec per build seat. Use when a research idea is "really getting into it" and a plan has come through (a plan-approval mode, if your harness has one) and you want to commit it as specs instead of executing it directly, or run spec-pipeline.
4
4
  ---
5
5
 
6
6
  # spec-pipeline
@@ -8,7 +8,7 @@ description: Graduate a plan into a numbered spec pipeline in docs/research/{top
8
8
  Turn a *plan* into a durable, numbered **spec pipeline** in `docs/research/{topic}/`. This is phase 2 of
9
9
  the two-phase backlog model: `docs-backlog` parks an idea; `spec-pipeline` graduates the plan behind it
10
10
  into specs. **The plan is throwaway — the specs carry every crumb.** A future session reads ONE spec + the
11
- umbrella and can build without the plan or the original conversation.
11
+ brief and can build without the plan or the original conversation.
12
12
 
13
13
  **Find the format first.** This repository writes its formats (the doc header and status words, where an effort is filed, its rails) in the sections `rg -n '^#+ .*\(repository-owned\)' docs/_meta/` lists; read the one a step names before that step writes. This skill names the section, never the format.
14
14
 
@@ -24,23 +24,29 @@ umbrella and can build without the plan or the original conversation.
24
24
  ## What a pipeline folder contains
25
25
 
26
26
  > **THIS FOLDER IS THE CREATE PAYLOAD.** Ignition does not compose a pipeline from memory or from a
27
- > conversation — it DERIVES one from these files: the folder name is the topic, the umbrella's H1 is the
28
- > title, `## The sequence` is the seat list, and the numbered specs are the seats. Author them knowing
29
- > they will be read mechanically, and the ignition step becomes a verification rather than a
30
- > transcription. The mapping is the table in `spec-ignite` § *the stage card is derived*; keep the two
31
- > in step if either moves.
27
+ > conversation — it DERIVES one from these files: the folder name is the topic, the brief's H1 is the
28
+ > title, its `## The sequence` is the seat list (a `step` row is shown, never a seat), and the numbered
29
+ > specs are the build seats. Author them knowing they will be read mechanically, and the ignition step
30
+ > becomes a verification rather than a transcription. The mapping is the table in `spec-ignite` § *the
31
+ > stage card is derived*; keep the two in step if either moves.
32
32
 
33
33
  ```
34
34
  docs/research/{topic}/
35
- 00-ignition-brief.md the coordinator's standing orders for THIS run (template below)
36
- 01-{topic}.md the umbrella: vision, the row table, settled decisions, hard constraints
37
- 02..NN-{slice}.md one self-contained spec per planned seat, in build order
35
+ 00-ignition-brief.md the coordinator's spec AND the charter every seat reads (template below);
36
+ never a session
37
+ 01..NN-{slice}.md one self-contained spec per build seat, in build order: every numbered
38
+ file is one seat's spec
38
39
  project-status.md the living tracker — the coordinator's journal (template below)
39
- live-checks.md the human's verification rows, accumulated as the run proceeds
40
+ live-checks.md created with NO rows: it holds only the rows the owner dictates
40
41
  sessions/ the CONVERSATION — see below. NOT authored here: the FIRST seat
41
42
  brings it into existence when it files, so a fresh folder has none
42
43
  ```
43
44
 
45
+ **Every numbered file is one seat's spec, and the brief is the coordinator's.** The brief carries what
46
+ binds the whole run — why it exists, the sequence, the owner's rulings, the law, the reference facts, what
47
+ it does not do, the baselines, the platform state — so a seat reads its own spec and the brief, and nothing
48
+ else is a charter. The sequence is written once, in the brief.
49
+
44
50
  ### `sessions/` — the conversation, and its durable record
45
51
 
46
52
  **Nobody creates this folder as an act.** The FIRST seat brings it into existence by committing its two
@@ -58,11 +64,13 @@ sessions/ WHO PUTS IT THERE
58
64
  {spec-slug}/tldr.md each build seat, same commit — the two-voice CHAT: its TLDRs and
59
65
  questions with the coordinator's rulings appended beneath them. Read
60
66
  top-to-bottom it IS the session's whole conversation, in message order
67
+ docs-process/plan.md + tldr.md the docs-process row's board, same shape; it lives here from the start,
68
+ never in a gitignored folder, so it moves with the effort when P files it
69
+ {step-slug}/receipt.md a human `step` row, in its own commit — see "A HUMAN STEP OWES A RECEIPT"
61
70
  code-review.md the review seat, in its own commit, if the run has a review row
62
71
  coordinator-retrospective.md the coordinator, at the close
63
- witness-ledger-*.md a human commit — the witness is zero-writes by contract (its ticket
64
- cannot even carry the write scope), so its testimony reaches the repo
65
- by someone else's hand
72
+ witness-ledger-*.md a human commit — the witness writes nothing into the run, so its
73
+ testimony reaches the repo by someone else's hand, on the human's word
66
74
  ```
67
75
 
68
76
  - **Per-seat artifacts go in a `{spec-slug}/` subfolder; effort-wide artifacts sit at the `sessions/`
@@ -102,7 +110,7 @@ sessions/ WHO PUTS IT THERE
102
110
  slice: recon + plan + build + suite + FINAL TLDR fits in one session with room for two rulings.
103
111
 
104
112
  2b. **Decide the pipeline's SHAPE — ask the human both questions, with your recommendation.** The bookends
105
- are rows in the row table like any other seat, which is why the decision belongs here: nothing
113
+ are rows in the brief's sequence like any other seat, which is why the decision belongs here: nothing
106
114
  downstream needs a flag, and the coordinator learns the shape by reading its own sequence.
107
115
 
108
116
  **"Do you want a REVIEW row?"** Recommend YES when the run ships a lot of code, touches security or
@@ -123,10 +131,21 @@ sessions/ WHO PUTS IT THERE
123
131
  verbs its credential admits, and a kind nobody has heard of composes NOTHING rather than something
124
132
  plausible. Name rows in those words.
125
133
 
126
- Then write the rows into the row table and the brief's sequence, in this order:
134
+ **What is not a seat is a `step` row** — a human act in its place in the order (a publish, a merge, a
135
+ sitting). Its `Kind` cell says `step`, and nothing is staged or seeded for it. `step` is the one
136
+ non-seat word on purpose: no misspelled seat kind can equal it, so a row whose kind is misspelled is
137
+ still refused by name rather than read as a step. A PR the coordinator opens at its close is its own
138
+ close-out, not a row.
139
+
140
+ **A seat row may carry a role** — `backend` · `frontend` · `mixed` — in a `Role` column, when the
141
+ reading list of a build seat should not be left to the default. Leave the column out when no row needs
142
+ it.
143
+
144
+ Then write the rows into the brief's sequence, in this order:
127
145
 
128
146
  ```
129
- 02..NN the build seats
147
+ 0 the coordinator, with the brief as its spec
148
+ 01..NN the build seats, with any `step` rows in their places
130
149
  {R} REVIEW — spec-review, if chosen. Runs on `git diff {base}...<branch>` (the rails' base branch); no PR yet
131
150
  {F} FIXIT — MAY materialise, one maximum, only if the review classifies an (a)+(b)
132
151
  finding AND the coordinator rules it in. Not authored up front; the
@@ -137,17 +156,18 @@ sessions/ WHO PUTS IT THERE
137
156
 
138
157
  **The REVIEW row's seed carries NO coordinator beliefs** — no provenance list, no prior-shapes
139
158
  bullets, no framing about what is already settled. Every other seat's prompt deliberately carries those;
140
- this one must not, because the seat's whole value is the absence of the run's context. **Write that
141
- instruction into the brief**, or it will be seeded helpfully and destroy what it is buying.
159
+ this one must not, because the seat's whole value is the absence of the run's context. It reads the
160
+ brief's sections down to § Platform state and every numbered spec **as claims**, and never the
161
+ coordinator's sections after it. **Write that instruction into the brief**, or it will be seeded
162
+ helpfully and destroy what it is buying.
142
163
 
143
- **The sequence you just decided lands in THREE documents, and they must agree**: the brief's
144
- `## The sequence`, the umbrella's row table, and the tracker's `## Session status`. Write all three
145
- in one pass, listing the same rows in the same order. **The coordinator re-checks this at ignition** —
146
- an effort whose three documents disagree has one seat acting on a shape the others have stopped
147
- describing.
164
+ **The sequence is written ONCE, in the brief.** The tracker's `## Session status` carries one status
165
+ line per row, by the brief's ids, and copies nothing else: no second table, no settled-decisions list.
166
+ **The coordinator compares the two at ignition and before its retro** — a status line with no row, or a
167
+ row with no status line, is a finding.
148
168
 
149
169
  3. **Write the specs**, using the spec-doc template in `docs/_meta/docs-workflow.md`. Each per-seat
150
- spec opens with the spec-doc blockquote (`Builds on [prior]` + `Source: [umbrella / research]`) and the
170
+ spec opens with the spec-doc blockquote (`Builds on [prior]` + `Source: [brief / research]`) and the
151
171
  machine header `docs/_meta/docs-workflow.md` § Doc metadata (repository-owned) prescribes, at the word for
152
172
  `draft`, so the set stays navigable.
153
173
 
@@ -201,20 +221,20 @@ sessions/ WHO PUTS IT THERE
201
221
  exists has a blind spot. **A count pinned in a doc needs a named owning session**, or it rots: say
202
222
  which spec moves it, and have the others leave it alone.
203
223
 
204
- 4. **Name the RESEARCH the effort came from, in the umbrella, by path.** The idea that fed this work
205
- archives *with* it — that is how its archive home ends up holding the whole arc from "thing we'd like to
206
- do" to "done." When the research doc already lives at `research/{topic}/`, it travels for free. **When
207
- it does not** — a standalone `research/{something}.md`, or several — the umbrella's `Source:` / Lineage
208
- is the only record that it belongs to this effort.
224
+ 4. **Name the RESEARCH the effort came from, in the brief, by path** — its `## Where it came from`. The
225
+ idea that fed this work archives *with* it — that is how its archive home ends up holding the whole arc
226
+ from "thing we'd like to do" to "done." When the research doc already lives at `research/{topic}/`, it
227
+ travels for free. **When it does not** — a standalone `research/{something}.md`, or several — the
228
+ brief's `## Where it came from` and its Lineage are the only record that it belongs to this effort.
209
229
 
210
230
  **Say it plainly, because a later seat has to act on it:** whoever archives this gets handed that
211
231
  list, and a research doc nobody named is one that stays behind in the running tab after its effort has
212
- shipped. Two lines in the umbrella now saves a hunt through a shared folder later.
232
+ shipped. Two lines in the brief now saves a hunt through a shared folder later.
213
233
 
214
234
  5. **Name the archive destination when only you can.** Read `docs/_meta/docs-workflow.md` § The archive
215
235
  convention (repository-owned). If where a pipeline files depends on something only this session knows
216
- (which living feature the effort belongs to, say), resolve it now and write the path into the
217
- umbrella's blockquote as an `Archive:` line; `spec-coordinator` hands it to the docs-process row and
236
+ (which living feature the effort belongs to, say), resolve it now and write the path into the brief's
237
+ `## Where it came from` as an `Archive:` line; `spec-coordinator` hands it to the docs-process row and
218
238
  `docs-process` files there. A convention that needs nothing from you needs no line.
219
239
 
220
240
  6. **Stop.** The specs stay in `research/{topic}/`. Do NOT implement, do NOT touch living docs, do NOT
@@ -222,8 +242,10 @@ sessions/ WHO PUTS IT THERE
222
242
 
223
243
  ## The `00-ignition-brief.md` template
224
244
 
225
- The coordinator's standing orders for this run, and **you write all of it here — every section, nothing
226
- left blank.**
245
+ The coordinator seat's spec and the charter every seat reads, and **you write all of it here — every
246
+ section, nothing left blank.** The sections down to § Platform state bind every seat; the three after it
247
+ are the coordinator's orders, and a seat whose charter excludes them (the review row) stops at § Platform
248
+ state.
227
249
 
228
250
  **Why here and not at ignition:** this is the hot session. You just placed the specs, counted the
229
251
  populations, and read the code they cite, so you are the only seat that can state the baselines and the
@@ -236,53 +258,74 @@ That includes the **kick text**: write the coordinator's task string here, ready
236
258
  requires no authoring at all.
237
259
 
238
260
  ```markdown
239
- # {Topic} — Ignition Brief (the coordinator's standing orders)
261
+ # {The pipeline's title}
240
262
 
241
- > You are the COORDINATOR of the {topic} pipeline. Read this, then the umbrella (01-*.md), then the
242
- > tracker (project-status.md — yours), then EVERY numbered spec before arming the first seat.
263
+ > **Every seat reads this file.** It is the coordinator seat's spec and the charter this pipeline stands on,
264
+ > and it is never a session. The sections down to § Platform state bind every seat; the sections after it
265
+ > are the coordinator's orders. The numbered files `01`–`{NN}` are the build seats' specs.
243
266
  {the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for `draft`}
244
267
 
245
268
  **Last verified against:** {date}, `{sha}`. Ignition re-verifies this brief against live HEAD and
246
269
  corrects drift; it does not re-author it.
247
270
 
271
+ ## Why
272
+ What is wrong today and what the effort makes true — the vision a seat builds toward.
273
+
248
274
  ## Birth
249
- Topic · spec path · receipt prefix · attended/unattended · branch `{the effort's branch}`.
275
+ Topic · spec path · receipt prefix · mode (hosted, or by hand) · shape · the effort's branch · the rows
276
+ chosen at authoring (review? docs-process?) and why · **the GATE**: only that the predecessor merged, then
277
+ re-verify this brief's § Reference and re-measure § Baselines.
250
278
 
251
279
  ## The sequence
252
280
  | Seat | Spec | Kind | Why it sits here |
253
281
 
254
282
  **THE `Kind` COLUMN IS THE VOCABULARY WORD, VERBATIM** — `build` · `fixit` · `review` ·
255
- `docs-process` · `coordinator` · `retro` · `witness` — **not a prose role.** This table is READ, not
256
- just read by people: ignition derives the create payload from it (`spec-ignite` § the stage card is
257
- derived), and the create door validates the kind against a closed set and refuses an unknown by name.
258
- A cell saying "the one that reviews" composes nothing.
283
+ `docs-process` · `coordinator` · `retro` · `witness`, or `step` for a row that is not a seat — **not a
284
+ prose role.** This table is READ, not just read by people: ignition derives the create payload from it
285
+ (`spec-ignite` § the stage card is derived), the create door validates the kind against a closed set and
286
+ refuses an unknown by name, and the doctor fails a row whose kind is none of these. A cell saying "the one
287
+ that reviews" composes nothing. An optional `Role` column carries `backend` · `frontend` · `mixed` for a
288
+ seat whose reading list should not be left to the default.
289
+
290
+ **This is the only copy of the sequence.** The tracker's status lines name these rows by id and copy
291
+ nothing else.
259
292
 
260
293
  **AND THE COORDINATOR IS A ROW.** It is a seat on the create payload like any other, it is not one
261
294
  of the numbered specs, and a pipeline without exactly one is refused at start
262
- (`pipeline-has-no-coordinator` / `-has-many-coordinators`). List it first, at stage 0, with the brief
295
+ (`pipeline-has-no-coordinator` / `-has-many-coordinators`). List it first, at stage 0, with this brief
263
296
  as its spec.
264
297
 
265
298
  Include the REVIEW and DOCS-PROCESS rows if the pipeline has them, and say which it does NOT have —
266
299
  the coordinator needs to know whether a review precedes its retro. If there is a review row, add:
267
- **its seed carries no coordinator beliefs, no provenance, no already-settled framing** · a FIXIT row
268
- may follow it (one maximum, coordinator-ruled from the review's named candidates) · **the retro comes
269
- after the review and after any fixit**, never before. If docs-process is a row, note that its
270
- living-doc patches are contingent on the merge.
300
+ **its seed carries no coordinator beliefs, no provenance, no already-settled framing, and it reads this
301
+ brief down to § Platform state as claims** · a FIXIT row may follow it (one maximum, coordinator-ruled
302
+ from the review's named candidates) · **the retro comes after the review and after any fixit**, never
303
+ before. If docs-process is a row, note that its living-doc patches are contingent on the merge.
271
304
 
272
- ## The coordinator's beliefs, with provenance
273
- Each load-bearing claim and which pipeline, row, or commit established it. A seat that finds a mismatch
274
- has produced something worth more than a build hour. **Never head this section with a claim that
275
- questioning it counts against the session** — that framing gets pointed at exactly the claims that
276
- turn out to be wrong.
305
+ ## The owner's rulings — settled, don't relitigate
306
+ Each decision the owner made while the plan came through, and its consequence for the run. A seat that
307
+ needs one overturned asks; it never rebuilds an argument the owner already ruled on.
277
308
 
278
- ## Pipeline-specific law (beyond the prompt and the skills)
279
- Only what OVERRIDES a default: the suite/coverage lane, spend fences, ordering constraints that are not
280
- obvious from the specs, per-spec riders already ruled.
309
+ ## Law — what binds every seat beyond the skills
310
+ Only what OVERRIDES a default, in one section: the relay or the hosted ceremony this run uses, the suite
311
+ and coverage lanes, spend fences, ordering constraints that are not obvious from the specs, the stack
312
+ rules, what is frozen. Never a restatement of a skill.
313
+
314
+ ## Reference — the facts the specs stand on
315
+ The symbols, files and states every spec cites, each read against the tree on a stated date. The specs
316
+ point here instead of each re-deriving them.
317
+
318
+ ## Where it came from
319
+ The research that fed this effort, by path — it archives with the effort — and an `Archive:` line when
320
+ only this session can name the archive home (step 5).
321
+
322
+ ## What this effort does NOT do
323
+ The out-of-scope list, each item with where it lives instead. A seat never touches what is named here.
281
324
 
282
325
  ## Baselines
283
- MEASURE these — run the suites and quote the real numbers. Ignition re-verifies; it cannot invent them.
284
- Per lane: the result, **the exact invocation**, and **the environment it was measured in**. Three things
285
- that each cost a live run:
326
+ MEASURE these — run the suites and quote the real numbers. The GATE re-measures them; every seat cites
327
+ them and measures only a lane this section does not name. Per lane: the result, **the exact invocation**,
328
+ **the environment it was measured in**, and **its duration**. Three things that each cost a live run:
286
329
  - **A number without its invocation is not a receipt** — it invites the next reader to widen its scope.
287
330
  Say which projects ran, not just a total.
288
331
  - **State the environment.** A baseline measured with the stack down is a different number from one
@@ -307,17 +350,22 @@ If this pipeline CHANGES the machinery it runs on — the ledger, the wake diges
307
350
  sentinel, the gate — say so here, and tell the coordinator to expect to meet that defect while fixing it.
308
351
  Meeting it is a first-hand receipt worth more than the spec's analysis: journal it and cite it in the fix.
309
352
 
353
+ ## The coordinator's beliefs, with provenance
354
+ Each load-bearing claim and which pipeline, row, or commit established it. A seat that finds a mismatch
355
+ has produced something worth more than a build hour. **Never head this section with a claim that
356
+ questioning it counts against the session** — that framing gets pointed at exactly the claims that
357
+ turn out to be wrong.
358
+
310
359
  ## Close-out
311
- Per-seat artifact filing · live-checks aggregation · what the PR must say · the receipt this pipeline
312
- owes about itself.
360
+ Per-seat artifact filing · what the PR must say · the owner's quick pass (short and ordered, offered in
361
+ the chat) · the receipt this pipeline owes about itself.
313
362
 
314
- **A HUMAN ROW OWES A RECEIPT, NOT A NARRATION.** If the pipeline has a human row, carry this rule
315
- into the brief verbatim: the row is exempt from `plan.md` (there is no build to plan) and is **NOT**
316
- exempt from an independent record. It files `sessions/{slug}/receipt.md` in the row's own commit —
317
- each check id, what was run, the literal result, and who observed it. Every other row has TWO
318
- voices, the seat's tldr and the coordinator's tracker, and the retro's ceremony audit is built on
319
- cross-reading them; a human row recorded only by the coordinator has ONE, and the one voice is the
320
- one whose errors nobody else catches.
363
+ **A HUMAN STEP OWES A RECEIPT, NOT A NARRATION.** If the sequence has a human `step` row, carry this rule
364
+ into the brief verbatim: the step is exempt from `plan.md` (there is no build to plan) and is **NOT**
365
+ exempt from an independent record. It files `sessions/{step-slug}/receipt.md` in its own commit — each
366
+ check id, what was run, the literal result, and who observed it. Every seat has TWO voices, the seat's
367
+ tldr and the coordinator's tracker, and the retro's ceremony audit is built on cross-reading them; a step
368
+ recorded only by the coordinator has ONE, and the one voice is the one whose errors nobody else catches.
321
369
 
322
370
  ## The kick — paste this verbatim as the coordinator's task
323
371
  > You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-coordinator` skill, then read
@@ -354,10 +402,11 @@ viewer because they are instructions to the coordinator, not content for the hum
354
402
  {one paragraph}
355
403
 
356
404
  ## Session status
357
- <!-- ready -> building -> SHIPPED {sha} / PARKED {sha}. One line each, no prose. -->
405
+ <!-- ready -> building -> SHIPPED {sha} / PARKED {sha}. One line per row, by the brief's ids; the sequence
406
+ itself lives in the brief and is never copied here. -->
358
407
 
359
- ## Settled decisions
360
- <!-- The don't-relitigate list, carried from the umbrella; append rulings that become standing. -->
408
+ ## Rulings made during the run
409
+ <!-- Append-only. What was settled at authoring is the brief's; this section holds only what the run rules. -->
361
410
 
362
411
  ## What's verified (trust basis)
363
412
  <!-- What a build session may take on faith, and what it must re-check itself. -->
@@ -415,10 +464,10 @@ viewer because they are instructions to the coordinator, not content for the hum
415
464
 
416
465
  ## `live-checks.md`
417
466
 
418
- One file at the effort's root, created with the specs. Every parked demo and human-verification row lands
419
- here — a seat's FINAL TLDR section (e) rows get transcribed into it **at close-out, in the same commit as
420
- the work**. Rows scattered across five sessions' TLDRs and never aggregated is the most common thing to
421
- fall through: name the file at authoring time so nobody invents a new one.
467
+ One file at the effort's root, **created with no rows**. **Live checks are the owner's**: the file holds
468
+ only the rows the owner dictates, the coordinator writes a row only when the owner dictates it, and nothing
469
+ is aggregated into it — a seat's FINAL TLDR section (e) is what the owner could try, said in the chat, and
470
+ never a row. Create the file at authoring time so nobody invents a second one.
422
471
 
423
472
  **The status vocabulary carries a PARTIAL, not just pass/fail:**
424
473
  `owed` · `passed` · `failed` (a failure is a finding, not a retry) · `not exercised` (with the reason — an
@@ -430,10 +479,9 @@ single passed/failed cell over a check whose seed half was clean and whose platf
430
479
  to invent a status to record the truth. **If you can name two owners while writing the row, write two
431
480
  rows.**
432
481
 
433
- **TWO WRITERS ON THIS FILE IS A DIVERGENCE WAITING TO HAPPEN — and it is the file the review grades
434
- from.** The coordinator dictates rows into a seat's close-out call and the SEAT stages them; a seat never
435
- writes it unprompted. Author the file knowing that, and do not write instructions telling the coordinator
436
- to edit it directly.
482
+ **ONE WRITER, ON ONE PERSON'S WORD.** A seat never authors or edits a row. A seat whose change makes a
483
+ dictated row false says so in its FINAL TLDR, quoting the row, and the coordinator corrects it. Author no
484
+ instruction that sends a seat's checks into this file.
437
485
 
438
486
  ## Notes
439
487
 
@@ -444,7 +492,7 @@ to edit it directly.
444
492
  folder), the chat transcript, and any subagent reports vanish. Inline their load-bearing content; never
445
493
  point at ephemeral state as the source of truth. Cross-links to *other durable docs* are fine.
446
494
  - **Lifecycle.** Specs live in `research/{topic}/` through the build. When the effort ships, `docs-process`
447
- archives the umbrella + every spec + the working docs together into the home `docs-workflow.md` § The
495
+ archives the brief + every spec + the working docs together into the home `docs-workflow.md` § The
448
496
  archive convention (repository-owned) names, in its shape — the spec set *is* the design history.
449
497
  - **Anti-fabrication.** A spec's header verified date is the date it was *authored against the code it
450
498
  cites*, not a promise the code stays unchanged. Only write facts you actually checked this run.
@@ -319,8 +319,10 @@ effort). The pipeline exists to widen the seat's autonomy — **so every wall it
319
319
  ### 9. WHAT FELL THROUGH THE CRACKS
320
320
 
321
321
  Named explicitly, because the alternative is that it stays fallen. Include the open questions the run
322
- could not settle, and say plainly that they are open. **Check the effort's `live-checks.md`** — unaggregated
323
- verification rows are the most common thing to fall through.
322
+ could not settle, and say plainly that they are open. **Check that the owner was offered a quick pass** —
323
+ the seats' "what the owner could try" lines that never reached the owner are the most common thing to fall
324
+ through. `live-checks.md` holds only the rows the owner dictated; an unrun dictated row is the owner's open
325
+ item, said so here.
324
326
 
325
327
  ### 10. THE FINDINGS DISPOSITION PASS — *the drain, and it is the section that decides whether the effort's findings survive it*
326
328
 
@@ -341,7 +343,7 @@ not on this list, the honest answer is CLOSED with a reason:
341
343
  | Destination | Why a later effort reaches it |
342
344
  |---|---|
343
345
  | A working doc's **Living-Docs checklist** | `docs-process` patches a living doc; living docs get read |
344
- | A **`live-checks.md` row** | The owed-checks authority is read at every sitting |
346
+ | A **`live-checks.md` row the owner dictates** | The owner's own checks, read at every sitting — offered to the owner, never written without their word |
345
347
  | A named input in the **NEXT pipeline's brief** | The only legal forward-carry — no standing ledgers |
346
348
  | An **in-code revisit note at the symbol** | Grep-findable by whoever next opens that file |
347
349
  | A **chartered fixit**, with its discharge record | Someone is building it, and the record closes |
@@ -372,7 +374,10 @@ is the look of a record with none of a record's properties.
372
374
  ## Ceremony
373
375
 
374
376
  1. **Read** your own ledger — `docs/research/{topic}/project-status.md`, the one ledger of §4 — every
375
- session's `tldr.md`, and the working docs.
377
+ session's `tldr.md`, the working docs, and **a witness ledger when one exists**
378
+ (`sessions/witness-ledger-*.md`, or the copy the human hands you). The witness watched from outside the
379
+ plane with instruments you do not have: carry every observation of it your retro does not already hold,
380
+ in a section of its own, attributed to the witness — never folded silently into your own findings.
376
381
  2. **Query** the substrate for §§2-5. Verify each query FIRES on a known-positive row before trusting a
377
382
  clean result.
378
383
  3. **Write** `docs/research/{topic}/sessions/coordinator-retrospective.md` — NATIVELY, in the tree you were born
@@ -38,6 +38,8 @@ Your seed carries **no beliefs about the pipeline, and that is deliberate** —
38
38
  - the **topic**, the **branch**, and the **diff range** (`{base}...<branch>` — `{base}` is the base branch
39
39
  `docs/_meta/engineering-loop.md` § This repository's rails (repository-owned) names, or the remote's
40
40
  default when it names none);
41
+ - **the brief** (`00-ignition-brief.md`) — its sections down to § Platform state, read as claims like the
42
+ specs, and **never the coordinator's sections after it** (its beliefs, its close-out, its kick);
41
43
  - **every numbered spec path** — you read them as claims, not facts;
42
44
  - the **`sessions/`** folder, holding each build seat's `plan.md` + `tldr.md`;
43
45
  - the **working docs for this effort, named explicitly** — `docs/working/` is a shared queue and you must
@@ -45,14 +47,21 @@ Your seed carries **no beliefs about the pipeline, and that is deliberate** —
45
47
  - the **tracker** (`project-status.md`), which is the process record lens 3 grades from.
46
48
 
47
49
  **If any of that is missing, ask for it** — a numbered question in your `tldr.md`, same lane as any seat.
48
- Do not hunt, and do not guess a scope. **What you must NOT be given, and must not accept as fact if it
49
- arrives anyway:** prior-shapes bullets, a provenance list, or any framing about what is already settled.
50
- That is testimony; record it and treat it as a claim.
50
+ Do not hunt, and do not guess a scope. **This inventory wins over a narrower instruction:** a brief or a seed
51
+ that tells you to read less (only the diff and your skill, say) does not shrink it — ask for what is missing,
52
+ and say in your report that the instruction was narrower. **What you must NOT be given, and must not accept
53
+ as fact if it arrives anyway:** prior-shapes bullets, a provenance list, or any framing about what is
54
+ already settled. That is testimony; record it and treat it as a claim.
55
+
56
+ **Say whether this review is COLD or WARM, in your report's first paragraph.** Cold: you were seeded with
57
+ the inventory and nothing else. Warm: you were handed the run's context — a tracker reading before your own
58
+ passes, a coordinator's framing, the owner's briefing. A warm review can be worth having; it is a different
59
+ instrument, and a reader who takes it for a cold one over-trusts its independence.
51
60
 
52
61
  ## Reading order (it matters)
53
62
 
54
- 1. **The specs** — what the pipeline said it would do, per slice, including each escape hatch and the
55
- declared out-of-scope.
63
+ 1. **The brief, down to § Platform state, and the specs** — what the pipeline said it would do, as a
64
+ whole and per slice, including each escape hatch, the owner's rulings and the declared out-of-scope.
56
65
  2. **The session docs** — every seat's `tldr.md` in `sessions/`. What each seat claims it shipped,
57
66
  its honest gaps, its deferred findings, its receipts.
58
67
  3. **The working docs** in `docs/working/` — the narrative: what was tried, what failed, what changed.
@@ -203,6 +212,7 @@ a pipeline artifact, not a chat transcript, and it archives with the effort.
203
212
 
204
213
  > The outside look, written before the retro and before the PR. Two independent passes, consolidated.
205
214
  > Reviewed `{base}..{sha}` across N sessions. **This seat did not read the coordinator's retrospective.**
215
+ > **{COLD | WARM}:** {what this seat was seeded with — the inventory alone, or the run's context, and which}.
206
216
  {the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for `shipped`}
207
217
 
208
218
  ## The verdict, first
@@ -232,8 +242,9 @@ the smallest fix that makes the claim true. If none: say NONE, plainly.}
232
242
  ## Deferred findings — with their DESTINATIONS
233
243
  | R-n | Finding | Found by | Destination |
234
244
  {Report-local ids — the coordinator allocates the effort id at the ruling. A DESTINATION is a place that
235
- exists and that someone reads: a working doc's Living-Docs checklist · a `live-checks.md` row · a
236
- named input in the NEXT pipeline's brief · an in-code revisit note at the symbol · a chartered fixit ·
245
+ exists and that someone reads: a working doc's Living-Docs checklist · an item for the owner's quick pass
246
+ (offered in the chat; a `live-checks.md` row only when the owner dictates one) · a named input in the NEXT
247
+ pipeline's brief · an in-code revisit note at the symbol · a chartered fixit ·
237
248
  or CLOSED with its reason. **"deferred log" is not a destination** — it is the holding pen the
238
249
  finding sits in until the retro's disposition pass drains it. A row whose destination is a document
239
250
  that does not exist yet (an unauthored row, an unwritten charter) is NOT homed: say so here.}
@@ -244,7 +255,7 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
244
255
  {Stated, not omitted.}
245
256
 
246
257
  ## Lineage _(where § Doc metadata (repository-owned) keeps the footer)_
247
- - **Pipeline** — the tracker · the umbrella · sessions 02..NN
258
+ - **Pipeline** — the tracker · the brief · sessions 01..NN
248
259
  - **Counterpart** — `coordinator-retrospective.md` (the inside look; written after this)
249
260
  ```
250
261
 
@@ -252,8 +263,9 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
252
263
 
253
264
  **Your contract is `spec-seat`** — invoke it first if you have not. It carries recon, the plain-text PLAN
254
265
  TLDR with beliefs and numbered questions, the question lane, the parked-call discriminator, the verdict
255
- vocabulary, the six-section FINAL TLDR, and the close-out order. You commit `sessions/code-review.md` on
256
- your coordinator's call like any seat.
266
+ vocabulary, the six-section FINAL TLDR, and the close-out order. You commit `sessions/code-review.md` as
267
+ any seat commits its work: hand-cranked on your plan's approval (the relay), hosted on your coordinator's
268
+ call.
257
269
 
258
270
  **The close-out receipt's heading token is the literal `seat·` for you too** — it is a protocol anchor,
259
271
  not a description of your seat, and writing `[review·…]` stales your own acceptance. `spec-seat` carries