@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +199 -0
- package/README.md +12 -7
- package/bin/verify-staged.mjs +136 -23
- package/bin/witness-acts.mjs +64 -0
- package/bin/witness-bodycheck.mjs +78 -0
- package/bin/witness-edits.mjs +60 -0
- package/bin/witness-extract-cmd.mjs +57 -0
- package/bin/witness-extract-seed.mjs +65 -0
- package/bin/witness-file-ledger.mjs +57 -0
- package/bin/witness-gaps.mjs +57 -0
- package/bin/witness-latency.mjs +55 -0
- package/bin/witness-lib.mjs +124 -0
- package/bin/witness-plane-window.mjs +57 -0
- package/bin/witness-procs.mjs +71 -0
- package/bin/witness-spawn-task.mjs +61 -0
- package/bin/witness-tx.mjs +60 -0
- package/bin/witness-watch.mjs +405 -0
- package/bin/witness-writes.mjs +64 -0
- package/package.json +1 -1
- package/references/docs-workflow.md +44 -24
- package/references/engineering-loop.md +42 -24
- package/skills/docs-audit-full/SKILL.md +2 -1
- package/skills/docs-process/SKILL.md +13 -7
- package/skills/docs-write/SKILL.md +1 -1
- package/skills/init/scripts/doctor.mjs +43 -5
- package/skills/init/scripts/owned.mjs +10 -0
- package/skills/spec-build/SKILL.md +12 -4
- package/skills/spec-coordinator/SKILL.md +149 -80
- package/skills/spec-ignite/SKILL.md +25 -21
- package/skills/spec-pipeline/SKILL.md +151 -82
- package/skills/spec-retro/SKILL.md +14 -9
- package/skills/spec-review/SKILL.md +32 -14
- package/skills/spec-seat/SKILL.md +107 -48
- package/skills/spec-witness/SKILL.md +267 -212
- 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}/ —
|
|
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
|
-
|
|
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
|
|
28
|
-
> title, `## The sequence` is the seat list
|
|
29
|
-
> they will be read mechanically, and the ignition step
|
|
30
|
-
> transcription. The mapping is the table in `spec-ignite` § *the
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
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
|
|
64
|
-
|
|
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
|
|
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,31 +131,55 @@ 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
|
-
|
|
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
|
+
**A seat row may name the repositories it ALSO writes in** — in a `Repository` column, when the seat
|
|
145
|
+
builds something that lives in another repository: a package this repository consumes, say. The cell
|
|
146
|
+
holds one or more names, as the runner that carries the seat serves them, separated by ` · ` or `,`;
|
|
147
|
+
an empty cell, `-` or `—` means none. **The column never moves a seat:** its home is always the
|
|
148
|
+
pipeline's own repository, where the specs, the boards and the tracker are. The pipeline still closes
|
|
149
|
+
on ONE pull request, its own repository's; a release of the other repository is a `step` row. Leave
|
|
150
|
+
the column out when no row needs it — most pipelines write one repository, and nothing about them
|
|
151
|
+
changes.
|
|
152
|
+
|
|
153
|
+
Then write the rows into the brief's sequence, in this order:
|
|
127
154
|
|
|
128
155
|
```
|
|
129
|
-
|
|
130
|
-
|
|
156
|
+
0 the coordinator, with the brief as its spec
|
|
157
|
+
01..NN the build seats, with any `step` rows in their places
|
|
158
|
+
{R} REVIEW — spec-review, if chosen. Runs on `git diff origin/{base}...<branch>` (the rails' base branch); no PR yet
|
|
131
159
|
{F} FIXIT — MAY materialise, one maximum, only if the review classifies an (a)+(b)
|
|
132
160
|
finding AND the coordinator rules it in. Not authored up front; the
|
|
133
|
-
coordinator charters it from the review's named list
|
|
161
|
+
coordinator charters it from the review's named list. Listed as a row
|
|
162
|
+
only when it must write a further repository: then directly after the
|
|
163
|
+
review row, with its `Repository` cell — anywhere else a launcher reads
|
|
164
|
+
a second fixit beside the one the review implies
|
|
134
165
|
— the coordinator's retro + PR (its own close-out, not a row)
|
|
135
166
|
{P} DOCS-PROCESS — if chosen
|
|
136
167
|
```
|
|
137
168
|
|
|
138
169
|
**The REVIEW row's seed carries NO coordinator beliefs** — no provenance list, no prior-shapes
|
|
139
170
|
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.
|
|
141
|
-
|
|
171
|
+
this one must not, because the seat's whole value is the absence of the run's context. It reads the
|
|
172
|
+
brief's sections down to § Platform state and every numbered spec **as claims**, and never the
|
|
173
|
+
coordinator's sections after it. **Write that instruction into the brief**, or it will be seeded
|
|
174
|
+
helpfully and destroy what it is buying.
|
|
142
175
|
|
|
143
|
-
**The sequence
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
describing.
|
|
176
|
+
**The sequence is written ONCE, in the brief.** The tracker's `## Session status` carries one status
|
|
177
|
+
line per row, by the brief's ids, and copies nothing else: no second table, no settled-decisions list.
|
|
178
|
+
**The coordinator compares the two at ignition and before its retro** — a status line with no row, or a
|
|
179
|
+
row with no status line, is a finding.
|
|
148
180
|
|
|
149
181
|
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: [
|
|
182
|
+
spec opens with the spec-doc blockquote (`Builds on [prior]` + `Source: [brief / research]`) and the
|
|
151
183
|
machine header `docs/_meta/docs-workflow.md` § Doc metadata (repository-owned) prescribes, at the word for
|
|
152
184
|
`draft`, so the set stays navigable.
|
|
153
185
|
|
|
@@ -201,20 +233,20 @@ sessions/ WHO PUTS IT THERE
|
|
|
201
233
|
exists has a blind spot. **A count pinned in a doc needs a named owning session**, or it rots: say
|
|
202
234
|
which spec moves it, and have the others leave it alone.
|
|
203
235
|
|
|
204
|
-
4. **Name the RESEARCH the effort came from, in the
|
|
205
|
-
archives *with* it — that is how its archive home ends up holding the whole arc
|
|
206
|
-
do" to "done." When the research doc already lives at `research/{topic}/`, it
|
|
207
|
-
it does not** — a standalone `research/{something}.md`, or several — the
|
|
208
|
-
|
|
236
|
+
4. **Name the RESEARCH the effort came from, in the brief, by path** — its `## Where it came from`. The
|
|
237
|
+
idea that fed this work archives *with* it — that is how its archive home ends up holding the whole arc
|
|
238
|
+
from "thing we'd like to do" to "done." When the research doc already lives at `research/{topic}/`, it
|
|
239
|
+
travels for free. **When it does not** — a standalone `research/{something}.md`, or several — the
|
|
240
|
+
brief's `## Where it came from` and its Lineage are the only record that it belongs to this effort.
|
|
209
241
|
|
|
210
242
|
**Say it plainly, because a later seat has to act on it:** whoever archives this gets handed that
|
|
211
243
|
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
|
|
244
|
+
shipped. Two lines in the brief now saves a hunt through a shared folder later.
|
|
213
245
|
|
|
214
246
|
5. **Name the archive destination when only you can.** Read `docs/_meta/docs-workflow.md` § The archive
|
|
215
247
|
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
|
-
|
|
248
|
+
(which living feature the effort belongs to, say), resolve it now and write the path into the brief's
|
|
249
|
+
`## Where it came from` as an `Archive:` line; `spec-coordinator` hands it to the docs-process row and
|
|
218
250
|
`docs-process` files there. A convention that needs nothing from you needs no line.
|
|
219
251
|
|
|
220
252
|
6. **Stop.** The specs stay in `research/{topic}/`. Do NOT implement, do NOT touch living docs, do NOT
|
|
@@ -222,8 +254,10 @@ sessions/ WHO PUTS IT THERE
|
|
|
222
254
|
|
|
223
255
|
## The `00-ignition-brief.md` template
|
|
224
256
|
|
|
225
|
-
The coordinator's
|
|
226
|
-
left blank.**
|
|
257
|
+
The coordinator seat's spec and the charter every seat reads, and **you write all of it here — every
|
|
258
|
+
section, nothing left blank.** The sections down to § Platform state bind every seat; the three after it
|
|
259
|
+
are the coordinator's orders, and a seat whose charter excludes them (the review row) stops at § Platform
|
|
260
|
+
state.
|
|
227
261
|
|
|
228
262
|
**Why here and not at ignition:** this is the hot session. You just placed the specs, counted the
|
|
229
263
|
populations, and read the code they cite, so you are the only seat that can state the baselines and the
|
|
@@ -236,53 +270,83 @@ That includes the **kick text**: write the coordinator's task string here, ready
|
|
|
236
270
|
requires no authoring at all.
|
|
237
271
|
|
|
238
272
|
```markdown
|
|
239
|
-
# {
|
|
273
|
+
# {The pipeline's title}
|
|
240
274
|
|
|
241
|
-
>
|
|
242
|
-
>
|
|
275
|
+
> **Every seat reads this file.** It is the coordinator seat's spec and the charter this pipeline stands on,
|
|
276
|
+
> and it is never a session. The sections down to § Platform state bind every seat; the sections after it
|
|
277
|
+
> are the coordinator's orders. The numbered files `01`–`{NN}` are the build seats' specs.
|
|
243
278
|
{the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for `draft`}
|
|
244
279
|
|
|
245
280
|
**Last verified against:** {date}, `{sha}`. Ignition re-verifies this brief against live HEAD and
|
|
246
281
|
corrects drift; it does not re-author it.
|
|
247
282
|
|
|
283
|
+
## Why
|
|
284
|
+
What is wrong today and what the effort makes true — the vision a seat builds toward.
|
|
285
|
+
|
|
248
286
|
## Birth
|
|
249
|
-
Topic · spec path · receipt prefix ·
|
|
287
|
+
Topic · spec path · receipt prefix · mode (hosted, or by hand) · shape · the effort's branch · **the model
|
|
288
|
+
and the effort every seat starts on** · the rows chosen at authoring (review? docs-process?) and why ·
|
|
289
|
+
**the GATE**: only that the predecessor merged, then re-verify this brief's § Reference and re-measure
|
|
290
|
+
§ Baselines.
|
|
291
|
+
|
|
292
|
+
**Name the model and the effort, each in backticks** — the word model then the id, the word effort then the
|
|
293
|
+
level (*every seat starts on model `{id}` at effort `{level}`*) — because the launcher reads both from this
|
|
294
|
+
section. Write the id as the runner's catalog offers it. A brief that names neither leaves both to the
|
|
295
|
+
launcher's default; hand-cranked, the same line tells the human which model to open each seat's session on.
|
|
250
296
|
|
|
251
297
|
## The sequence
|
|
252
298
|
| Seat | Spec | Kind | Why it sits here |
|
|
253
299
|
|
|
254
300
|
**THE `Kind` COLUMN IS THE VOCABULARY WORD, VERBATIM** — `build` · `fixit` · `review` ·
|
|
255
|
-
`docs-process` · `coordinator` · `retro` · `witness`
|
|
256
|
-
just read by people: ignition derives the create payload from it
|
|
257
|
-
derived),
|
|
258
|
-
A cell saying "the one
|
|
301
|
+
`docs-process` · `coordinator` · `retro` · `witness`, or `step` for a row that is not a seat — **not a
|
|
302
|
+
prose role.** This table is READ, not just read by people: ignition derives the create payload from it
|
|
303
|
+
(`spec-ignite` § the stage card is derived), the create door validates the kind against a closed set and
|
|
304
|
+
refuses an unknown by name, and the doctor fails a row whose kind is none of these. A cell saying "the one
|
|
305
|
+
that reviews" composes nothing. An optional `Role` column carries `backend` · `frontend` · `mixed` for a
|
|
306
|
+
seat whose reading list should not be left to the default. An optional `Repository` column names the
|
|
307
|
+
repositories a seat also writes in, by the runner's names; a seat's home is always this repository. Neither
|
|
308
|
+
column's cell may hold a kind word or `step`: the table is read by kind value, and a kind word anywhere in
|
|
309
|
+
a row is read as that row's kind.
|
|
310
|
+
|
|
311
|
+
**This is the only copy of the sequence.** The tracker's status lines name these rows by id and copy
|
|
312
|
+
nothing else.
|
|
259
313
|
|
|
260
314
|
**AND THE COORDINATOR IS A ROW.** It is a seat on the create payload like any other, it is not one
|
|
261
315
|
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
|
|
316
|
+
(`pipeline-has-no-coordinator` / `-has-many-coordinators`). List it first, at stage 0, with this brief
|
|
263
317
|
as its spec.
|
|
264
318
|
|
|
265
319
|
Include the REVIEW and DOCS-PROCESS rows if the pipeline has them, and say which it does NOT have —
|
|
266
320
|
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
|
|
268
|
-
may follow it (one maximum, coordinator-ruled
|
|
269
|
-
|
|
270
|
-
living-doc patches are contingent on the merge.
|
|
321
|
+
**its seed carries no coordinator beliefs, no provenance, no already-settled framing, and it reads this
|
|
322
|
+
brief down to § Platform state as claims** · a FIXIT row may follow it (one maximum, coordinator-ruled
|
|
323
|
+
from the review's named candidates) · **the retro comes after the review and after any fixit**, never
|
|
324
|
+
before. If docs-process is a row, note that its living-doc patches are contingent on the merge.
|
|
271
325
|
|
|
272
|
-
## The
|
|
273
|
-
Each
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
326
|
+
## The owner's rulings — settled, don't relitigate
|
|
327
|
+
Each decision the owner made while the plan came through, and its consequence for the run. A seat that
|
|
328
|
+
needs one overturned asks; it never rebuilds an argument the owner already ruled on.
|
|
329
|
+
|
|
330
|
+
## Law — what binds every seat beyond the skills
|
|
331
|
+
Only what OVERRIDES a default, in one section: the relay or the hosted ceremony this run uses, the suite
|
|
332
|
+
and coverage lanes, spend fences, ordering constraints that are not obvious from the specs, the stack
|
|
333
|
+
rules, what is frozen. Never a restatement of a skill.
|
|
334
|
+
|
|
335
|
+
## Reference — the facts the specs stand on
|
|
336
|
+
The symbols, files and states every spec cites, each read against the tree on a stated date. The specs
|
|
337
|
+
point here instead of each re-deriving them.
|
|
277
338
|
|
|
278
|
-
##
|
|
279
|
-
|
|
280
|
-
|
|
339
|
+
## Where it came from
|
|
340
|
+
The research that fed this effort, by path — it archives with the effort — and an `Archive:` line when
|
|
341
|
+
only this session can name the archive home (step 5).
|
|
342
|
+
|
|
343
|
+
## What this effort does NOT do
|
|
344
|
+
The out-of-scope list, each item with where it lives instead. A seat never touches what is named here.
|
|
281
345
|
|
|
282
346
|
## Baselines
|
|
283
|
-
MEASURE these — run the suites and quote the real numbers.
|
|
284
|
-
Per lane: the result, **the exact invocation**,
|
|
285
|
-
that each cost a live run:
|
|
347
|
+
MEASURE these — run the suites and quote the real numbers. The GATE re-measures them; every seat cites
|
|
348
|
+
them and measures only a lane this section does not name. Per lane: the result, **the exact invocation**,
|
|
349
|
+
**the environment it was measured in**, and **its duration**. Three things that each cost a live run:
|
|
286
350
|
- **A number without its invocation is not a receipt** — it invites the next reader to widen its scope.
|
|
287
351
|
Say which projects ran, not just a total.
|
|
288
352
|
- **State the environment.** A baseline measured with the stack down is a different number from one
|
|
@@ -307,17 +371,22 @@ If this pipeline CHANGES the machinery it runs on — the ledger, the wake diges
|
|
|
307
371
|
sentinel, the gate — say so here, and tell the coordinator to expect to meet that defect while fixing it.
|
|
308
372
|
Meeting it is a first-hand receipt worth more than the spec's analysis: journal it and cite it in the fix.
|
|
309
373
|
|
|
374
|
+
## The coordinator's beliefs, with provenance
|
|
375
|
+
Each load-bearing claim and which pipeline, row, or commit established it. A seat that finds a mismatch
|
|
376
|
+
has produced something worth more than a build hour. **Never head this section with a claim that
|
|
377
|
+
questioning it counts against the session** — that framing gets pointed at exactly the claims that
|
|
378
|
+
turn out to be wrong.
|
|
379
|
+
|
|
310
380
|
## Close-out
|
|
311
|
-
Per-seat artifact filing ·
|
|
312
|
-
owes about itself.
|
|
381
|
+
Per-seat artifact filing · what the PR must say · the owner's quick pass (short and ordered, offered in
|
|
382
|
+
the chat) · the receipt this pipeline owes about itself.
|
|
313
383
|
|
|
314
|
-
**A HUMAN
|
|
315
|
-
into the brief verbatim: the
|
|
316
|
-
exempt from an independent record. It files `sessions/{slug}/receipt.md` in
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
one whose errors nobody else catches.
|
|
384
|
+
**A HUMAN STEP OWES A RECEIPT, NOT A NARRATION.** If the sequence has a human `step` row, carry this rule
|
|
385
|
+
into the brief verbatim: the step is exempt from `plan.md` (there is no build to plan) and is **NOT**
|
|
386
|
+
exempt from an independent record. It files `sessions/{step-slug}/receipt.md` in its own commit — each
|
|
387
|
+
check id, what was run, the literal result, and who observed it. Every seat has TWO voices, the seat's
|
|
388
|
+
tldr and the coordinator's tracker, and the retro's ceremony audit is built on cross-reading them; a step
|
|
389
|
+
recorded only by the coordinator has ONE, and the one voice is the one whose errors nobody else catches.
|
|
321
390
|
|
|
322
391
|
## The kick — paste this verbatim as the coordinator's task
|
|
323
392
|
> You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-coordinator` skill, then read
|
|
@@ -354,10 +423,11 @@ viewer because they are instructions to the coordinator, not content for the hum
|
|
|
354
423
|
{one paragraph}
|
|
355
424
|
|
|
356
425
|
## Session status
|
|
357
|
-
<!-- ready -> building -> SHIPPED {sha} / PARKED {sha}. One line
|
|
426
|
+
<!-- ready -> building -> SHIPPED {sha} / PARKED {sha}. One line per row, by the brief's ids; the sequence
|
|
427
|
+
itself lives in the brief and is never copied here. -->
|
|
358
428
|
|
|
359
|
-
##
|
|
360
|
-
<!--
|
|
429
|
+
## Rulings made during the run
|
|
430
|
+
<!-- Append-only. What was settled at authoring is the brief's; this section holds only what the run rules. -->
|
|
361
431
|
|
|
362
432
|
## What's verified (trust basis)
|
|
363
433
|
<!-- What a build session may take on faith, and what it must re-check itself. -->
|
|
@@ -415,10 +485,10 @@ viewer because they are instructions to the coordinator, not content for the hum
|
|
|
415
485
|
|
|
416
486
|
## `live-checks.md`
|
|
417
487
|
|
|
418
|
-
One file at the effort's root, created with
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
488
|
+
One file at the effort's root, **created with no rows**. **Live checks are the owner's**: the file holds
|
|
489
|
+
only the rows the owner dictates, the coordinator writes a row only when the owner dictates it, and nothing
|
|
490
|
+
is aggregated into it — a seat's FINAL TLDR section (e) is what the owner could try, said in the chat, and
|
|
491
|
+
never a row. Create the file at authoring time so nobody invents a second one.
|
|
422
492
|
|
|
423
493
|
**The status vocabulary carries a PARTIAL, not just pass/fail:**
|
|
424
494
|
`owed` · `passed` · `failed` (a failure is a finding, not a retry) · `not exercised` (with the reason — an
|
|
@@ -430,10 +500,9 @@ single passed/failed cell over a check whose seed half was clean and whose platf
|
|
|
430
500
|
to invent a status to record the truth. **If you can name two owners while writing the row, write two
|
|
431
501
|
rows.**
|
|
432
502
|
|
|
433
|
-
**
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
to edit it directly.
|
|
503
|
+
**ONE WRITER, ON ONE PERSON'S WORD.** A seat never authors or edits a row. A seat whose change makes a
|
|
504
|
+
dictated row false says so in its FINAL TLDR, quoting the row, and the coordinator corrects it. Author no
|
|
505
|
+
instruction that sends a seat's checks into this file.
|
|
437
506
|
|
|
438
507
|
## Notes
|
|
439
508
|
|
|
@@ -444,7 +513,7 @@ to edit it directly.
|
|
|
444
513
|
folder), the chat transcript, and any subagent reports vanish. Inline their load-bearing content; never
|
|
445
514
|
point at ephemeral state as the source of truth. Cross-links to *other durable docs* are fine.
|
|
446
515
|
- **Lifecycle.** Specs live in `research/{topic}/` through the build. When the effort ships, `docs-process`
|
|
447
|
-
archives the
|
|
516
|
+
archives the brief + every spec + the working docs together into the home `docs-workflow.md` § The
|
|
448
517
|
archive convention (repository-owned) names, in its shape — the spec set *is* the design history.
|
|
449
518
|
- **Anti-fabrication.** A spec's header verified date is the date it was *authored against the code it
|
|
450
519
|
cites*, not a promise the code stays unchanged. Only write facts you actually checked this run.
|
|
@@ -73,9 +73,10 @@ population or only its failures.
|
|
|
73
73
|
silently-empty result is usually a broken query, not an empty table.
|
|
74
74
|
- **A search that times out is not a search that found nothing.** If a sweep backs an ABSENCE claim,
|
|
75
75
|
re-run it on the tool that completes before you report the absence.
|
|
76
|
-
- **
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
- **The gate reads the command the shell would run, not its words.** A quoted search pattern naming a
|
|
77
|
+
boundary operation is data; the same words handed to an interpreter, or carrying a substitution, are read
|
|
78
|
+
as something that could run, and park. **Reshape the command — never re-request it.** (The boundary half
|
|
79
|
+
of `spec-seat`'s discriminator.)
|
|
79
80
|
|
|
80
81
|
**READS ONLY. Never write to the platform's store.**
|
|
81
82
|
|
|
@@ -319,8 +320,10 @@ effort). The pipeline exists to widen the seat's autonomy — **so every wall it
|
|
|
319
320
|
### 9. WHAT FELL THROUGH THE CRACKS
|
|
320
321
|
|
|
321
322
|
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
|
|
323
|
-
|
|
323
|
+
could not settle, and say plainly that they are open. **Check that the owner was offered a quick pass** —
|
|
324
|
+
the seats' "what the owner could try" lines that never reached the owner are the most common thing to fall
|
|
325
|
+
through. `live-checks.md` holds only the rows the owner dictated; an unrun dictated row is the owner's open
|
|
326
|
+
item, said so here.
|
|
324
327
|
|
|
325
328
|
### 10. THE FINDINGS DISPOSITION PASS — *the drain, and it is the section that decides whether the effort's findings survive it*
|
|
326
329
|
|
|
@@ -341,7 +344,7 @@ not on this list, the honest answer is CLOSED with a reason:
|
|
|
341
344
|
| Destination | Why a later effort reaches it |
|
|
342
345
|
|---|---|
|
|
343
346
|
| A working doc's **Living-Docs checklist** | `docs-process` patches a living doc; living docs get read |
|
|
344
|
-
| A **`live-checks.md` row** | The
|
|
347
|
+
| 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
348
|
| A named input in the **NEXT pipeline's brief** | The only legal forward-carry — no standing ledgers |
|
|
346
349
|
| An **in-code revisit note at the symbol** | Grep-findable by whoever next opens that file |
|
|
347
350
|
| A **chartered fixit**, with its discharge record | Someone is building it, and the record closes |
|
|
@@ -372,7 +375,10 @@ is the look of a record with none of a record's properties.
|
|
|
372
375
|
## Ceremony
|
|
373
376
|
|
|
374
377
|
1. **Read** your own ledger — `docs/research/{topic}/project-status.md`, the one ledger of §4 — every
|
|
375
|
-
session's `tldr.md`,
|
|
378
|
+
session's `tldr.md`, the working docs, and **a witness ledger when one exists**
|
|
379
|
+
(`sessions/witness-ledger-*.md`, or the copy the human hands you). The witness watched from outside the
|
|
380
|
+
plane with instruments you do not have: carry every observation of it your retro does not already hold,
|
|
381
|
+
in a section of its own, attributed to the witness — never folded silently into your own findings.
|
|
376
382
|
2. **Query** the substrate for §§2-5. Verify each query FIRES on a known-positive row before trusting a
|
|
377
383
|
clean result.
|
|
378
384
|
3. **Write** `docs/research/{topic}/sessions/coordinator-retrospective.md` — NATIVELY, in the tree you were born
|
|
@@ -388,8 +394,7 @@ is the look of a record with none of a record's properties.
|
|
|
388
394
|
§ This repository's rails (repository-owned) says (when it names no route, ask the human once and suggest
|
|
389
395
|
recording the answer there); one branch, one PR from any seat. **If one is already open, the push is enough.** These three git commands are your own close-out
|
|
390
396
|
lane and they are gated and receipted like any other publish. **The push command must be the ENTIRE
|
|
391
|
-
command** — a leading `cd` disqualifies it
|
|
392
|
-
around it; the deny layer matches TEXT, not parsed verbs.
|
|
397
|
+
command** — a leading `cd` disqualifies it.
|
|
393
398
|
6. **Sweep for stale beliefs BY MEANING, NEVER BY PHRASE — and sweep the SIBLINGS that restate a rule, not
|
|
394
399
|
just the rule's own home.** A sweep keyed on wording only finds the wording it thought of. Ask what each
|
|
395
400
|
instruction *depends on being true* — which file it names, which lane it assumes exists, who it thinks
|
|
@@ -35,9 +35,14 @@ else's job.
|
|
|
35
35
|
Your seed carries **no beliefs about the pipeline, and that is deliberate** — but it should carry an
|
|
36
36
|
**inventory**, because you cannot review what you cannot find:
|
|
37
37
|
|
|
38
|
-
- the **topic**, the **branch**, and the **diff range** (`{base}...<branch>` — `{base}` is the base
|
|
39
|
-
`docs/_meta/engineering-loop.md` § This repository's rails (repository-owned) names, or the
|
|
40
|
-
default when it names none
|
|
38
|
+
- the **topic**, the **branch**, and the **diff range** (`origin/{base}...<branch>` — `{base}` is the base
|
|
39
|
+
branch `docs/_meta/engineering-loop.md` § This repository's rails (repository-owned) names, or the
|
|
40
|
+
remote's default when it names none; it is read from the remote's copy, because a local base branch can
|
|
41
|
+
sit behind it and pull another effort's commits into the range);
|
|
42
|
+
- **one more range per further repository the run wrote**, with that repository's path — by its release
|
|
43
|
+
tags when the run released it mid-run, since its branch is merged by then;
|
|
44
|
+
- **the brief** (`00-ignition-brief.md`) — its sections down to § Platform state, read as claims like the
|
|
45
|
+
specs, and **never the coordinator's sections after it** (its beliefs, its close-out, its kick);
|
|
41
46
|
- **every numbered spec path** — you read them as claims, not facts;
|
|
42
47
|
- the **`sessions/`** folder, holding each build seat's `plan.md` + `tldr.md`;
|
|
43
48
|
- the **working docs for this effort, named explicitly** — `docs/working/` is a shared queue and you must
|
|
@@ -45,20 +50,30 @@ Your seed carries **no beliefs about the pipeline, and that is deliberate** —
|
|
|
45
50
|
- the **tracker** (`project-status.md`), which is the process record lens 3 grades from.
|
|
46
51
|
|
|
47
52
|
**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. **
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
Do not hunt, and do not guess a scope. **This inventory wins over a narrower instruction:** a brief or a seed
|
|
54
|
+
that tells you to read less (only the diff and your skill, say) does not shrink it — ask for what is missing,
|
|
55
|
+
and say in your report that the instruction was narrower. **What you must NOT be given, and must not accept
|
|
56
|
+
as fact if it arrives anyway:** prior-shapes bullets, a provenance list, or any framing about what is
|
|
57
|
+
already settled. That is testimony; record it and treat it as a claim.
|
|
58
|
+
|
|
59
|
+
**Say whether this review is COLD or WARM, in your report's first paragraph.** Cold: you were seeded with
|
|
60
|
+
the inventory and nothing else. Warm: you were handed the run's context — a tracker reading before your own
|
|
61
|
+
passes, a coordinator's framing, the owner's briefing. A warm review can be worth having; it is a different
|
|
62
|
+
instrument, and a reader who takes it for a cold one over-trusts its independence.
|
|
51
63
|
|
|
52
64
|
## Reading order (it matters)
|
|
53
65
|
|
|
54
|
-
1. **The specs** — what the pipeline said it would do,
|
|
55
|
-
declared out-of-scope.
|
|
66
|
+
1. **The brief, down to § Platform state, and the specs** — what the pipeline said it would do, as a
|
|
67
|
+
whole and per slice, including each escape hatch, the owner's rulings and the declared out-of-scope.
|
|
56
68
|
2. **The session docs** — every seat's `tldr.md` in `sessions/`. What each seat claims it shipped,
|
|
57
69
|
its honest gaps, its deferred findings, its receipts.
|
|
58
70
|
3. **The working docs** in `docs/working/` — the narrative: what was tried, what failed, what changed.
|
|
59
71
|
4. **The tracker** — `project-status.md`, the coordinator's journal: rulings and their reasoning, recon
|
|
60
72
|
corrections, incidents.
|
|
61
|
-
5. **THEN the diff** — `git diff {base}...<pipeline-branch>`, plus `git log --oneline
|
|
73
|
+
5. **THEN the diff** — `git diff origin/{base}...<pipeline-branch>`, plus `git log --oneline
|
|
74
|
+
origin/{base}..<pipeline-branch>`; and the same pair for each further range your seed names, run inside
|
|
75
|
+
that repository. Read the two sides of a seam together: what one repository ships and what the other
|
|
76
|
+
consumes are one claim.
|
|
62
77
|
|
|
63
78
|
**Read the artifacts before the code, and the code before you conclude.** Reading the diff first makes
|
|
64
79
|
you review a patch; reading the claims first makes you review whether the pipeline did what it said.
|
|
@@ -203,6 +218,7 @@ a pipeline artifact, not a chat transcript, and it archives with the effort.
|
|
|
203
218
|
|
|
204
219
|
> The outside look, written before the retro and before the PR. Two independent passes, consolidated.
|
|
205
220
|
> Reviewed `{base}..{sha}` across N sessions. **This seat did not read the coordinator's retrospective.**
|
|
221
|
+
> **{COLD | WARM}:** {what this seat was seeded with — the inventory alone, or the run's context, and which}.
|
|
206
222
|
{the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for `shipped`}
|
|
207
223
|
|
|
208
224
|
## The verdict, first
|
|
@@ -232,8 +248,9 @@ the smallest fix that makes the claim true. If none: say NONE, plainly.}
|
|
|
232
248
|
## Deferred findings — with their DESTINATIONS
|
|
233
249
|
| R-n | Finding | Found by | Destination |
|
|
234
250
|
{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 ·
|
|
236
|
-
|
|
251
|
+
exists and that someone reads: a working doc's Living-Docs checklist · an item for the owner's quick pass
|
|
252
|
+
(offered in the chat; a `live-checks.md` row only when the owner dictates one) · a named input in the NEXT
|
|
253
|
+
pipeline's brief · an in-code revisit note at the symbol · a chartered fixit ·
|
|
237
254
|
or CLOSED with its reason. **"deferred log" is not a destination** — it is the holding pen the
|
|
238
255
|
finding sits in until the retro's disposition pass drains it. A row whose destination is a document
|
|
239
256
|
that does not exist yet (an unauthored row, an unwritten charter) is NOT homed: say so here.}
|
|
@@ -244,7 +261,7 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
|
|
|
244
261
|
{Stated, not omitted.}
|
|
245
262
|
|
|
246
263
|
## Lineage _(where § Doc metadata (repository-owned) keeps the footer)_
|
|
247
|
-
- **Pipeline** — the tracker · the
|
|
264
|
+
- **Pipeline** — the tracker · the brief · sessions 01..NN
|
|
248
265
|
- **Counterpart** — `coordinator-retrospective.md` (the inside look; written after this)
|
|
249
266
|
```
|
|
250
267
|
|
|
@@ -252,8 +269,9 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
|
|
|
252
269
|
|
|
253
270
|
**Your contract is `spec-seat`** — invoke it first if you have not. It carries recon, the plain-text PLAN
|
|
254
271
|
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`
|
|
256
|
-
your
|
|
272
|
+
vocabulary, the six-section FINAL TLDR, and the close-out order. You commit `sessions/code-review.md` as
|
|
273
|
+
any seat commits its work: hand-cranked on your plan's approval (the relay), hosted on your coordinator's
|
|
274
|
+
call.
|
|
257
275
|
|
|
258
276
|
**The close-out receipt's heading token is the literal `seat·` for you too** — it is a protocol anchor,
|
|
259
277
|
not a description of your seat, and writing `[review·…]` stales your own acceptance. `spec-seat` carries
|