@naswerks/engineering-loop 0.7.1 → 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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +105 -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 +41 -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 +17 -5
- package/skills/init/scripts/owned.mjs +10 -0
- package/skills/spec-build/SKILL.md +8 -4
- package/skills/spec-coordinator/SKILL.md +103 -58
- package/skills/spec-ignite/SKILL.md +25 -21
- package/skills/spec-pipeline/SKILL.md +128 -80
- package/skills/spec-retro/SKILL.md +9 -4
- package/skills/spec-review/SKILL.md +22 -10
- package/skills/spec-seat/SKILL.md +63 -31
- 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,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
|
-
|
|
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
|
-
|
|
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.
|
|
141
|
-
|
|
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
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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: [
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
# {
|
|
261
|
+
# {The pipeline's title}
|
|
240
262
|
|
|
241
|
-
>
|
|
242
|
-
>
|
|
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 ·
|
|
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`
|
|
256
|
-
just read by people: ignition derives the create payload from it
|
|
257
|
-
derived),
|
|
258
|
-
A cell saying "the one
|
|
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
|
|
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
|
|
268
|
-
may follow it (one maximum, coordinator-ruled
|
|
269
|
-
|
|
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
|
|
273
|
-
Each
|
|
274
|
-
|
|
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
|
-
##
|
|
279
|
-
Only what OVERRIDES a default: the
|
|
280
|
-
obvious from the specs,
|
|
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.
|
|
284
|
-
Per lane: the result, **the exact invocation**,
|
|
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 ·
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
##
|
|
360
|
-
<!--
|
|
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
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
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
|
-
**
|
|
434
|
-
|
|
435
|
-
|
|
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
|
|
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
|
|
323
|
-
|
|
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
|
|
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`,
|
|
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. **
|
|
49
|
-
|
|
50
|
-
|
|
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,
|
|
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 ·
|
|
236
|
-
|
|
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
|
|
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`
|
|
256
|
-
your
|
|
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
|