@naswerks/engineering-loop 0.5.1 → 0.7.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 +87 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/references/docs-workflow.md +10 -10
- package/references/engineering-loop.md +56 -48
- package/skills/docs-process/SKILL.md +2 -1
- package/skills/init/SKILL.md +1 -1
- package/skills/init/scripts/doctor.mjs +9 -5
- package/skills/init/scripts/owned.mjs +26 -0
- package/skills/{spec-child → spec-build}/SKILL.md +6 -6
- package/skills/{spec-parent → spec-coordinator}/SKILL.md +61 -44
- package/skills/spec-ignite/SKILL.md +5 -5
- package/skills/spec-pipeline/SKILL.md +7 -7
- package/skills/spec-retro/SKILL.md +22 -21
- package/skills/spec-review/SKILL.md +7 -6
- package/skills/spec-seat/SKILL.md +81 -46
- package/skills/spec-witness/SKILL.md +8 -5
- package/templates/docs/_meta/doc-index.md +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: spec-
|
|
3
|
-
description: Assume the COORDINATOR seat for a spec-pipeline effort — quarterback the build seats (one per spec) via prompts, TLDR reviews, verification, and commit calls. Use immediately after spec-pipeline in the same session (the author is already context-loaded), or in a fresh session with the topic name to resume/take a prepped effort. Run spec-
|
|
2
|
+
name: spec-coordinator
|
|
3
|
+
description: Assume the COORDINATOR seat for a spec-pipeline effort — quarterback the build seats (one per spec) via prompts, TLDR reviews, verification, and commit calls. Use immediately after spec-pipeline in the same session (the author is already context-loaded), or in a fresh session with the topic name to resume/take a prepped effort. Run spec-coordinator {topic}.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# spec-
|
|
6
|
+
# spec-coordinator
|
|
7
7
|
|
|
8
8
|
Turn this session into the **coordinator** for a `docs/research/{topic}/` spec pipeline. This is
|
|
9
|
-
phase 3 of the backlog model (`docs-backlog`, `spec-pipeline`, **`spec-
|
|
9
|
+
phase 3 of the backlog model (`docs-backlog`, `spec-pipeline`, **`spec-coordinator`**, seats build,
|
|
10
10
|
`docs-process`).
|
|
11
11
|
|
|
12
12
|
**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.
|
|
@@ -73,8 +73,11 @@ the tracker exists and cut Prompt #1. **Step 0 still applies.**
|
|
|
73
73
|
## Your hands
|
|
74
74
|
|
|
75
75
|
**`read_blackboard` first, always** — argless it is your DAY-ONE SWEEP and your roster: every seat you
|
|
76
|
-
decide for, its state, and its newest tldr rev. With a seat id it returns that seat's
|
|
77
|
-
|
|
76
|
+
decide for, its state, and its newest tldr rev. With a seat id it returns that seat's tldr (or
|
|
77
|
+
`kind: plan`): whole, a window of it (`offset`), or only the sections new since a revision (`sinceRev`) —
|
|
78
|
+
read what changed, not the whole conversation again. In a shared workspace the seat's `tldr.md` is also a
|
|
79
|
+
file you read with your own tools. Hand-cranked, your tools are normal file tools on the blackboard files
|
|
80
|
+
plus the human relay.
|
|
78
81
|
|
|
79
82
|
<!-- control-plane-specific -->
|
|
80
83
|
**The five that reach a seat, and what each one actually is:**
|
|
@@ -82,10 +85,10 @@ Hand-cranked, your tools are normal file tools on the blackboard files plus the
|
|
|
82
85
|
| Verb | What it does | The part that bites |
|
|
83
86
|
|---|---|---|
|
|
84
87
|
| `seat_spawn` | Opens a DECLARED sibling's session | **It can never CREATE a seat** — the topology is the create door's, decided by a human — and you may only drive seats you `supervises`/`reviews` |
|
|
85
|
-
| `accept_plan` | The verdict act: `accept` · `accept-with-riders` · `blocking-precondition`, **and NOTHING ELSE carries a go** — and
|
|
86
|
-
| `accept` | The rev-bound FINAL receipt | It binds to the seat's CURRENT tldr revision, so if the seat posts again your acceptance no longer covers what it publishes. **Re-accept — it is idempotent and cheap.** This receipt is what the push bar reads; prose is not a receipt |
|
|
88
|
+
| `accept_plan` | The verdict act: `accept` · `accept-with-riders` · `blocking-precondition`, **and NOTHING ELSE carries a go** — and it DELIVERS ITSELF: the seat's live session receives a one-line pointer to the ruling, for an accepting verdict and for any verdict that filed a ruling in the seat's file | Write the ruling into the seat's `tldr.md` FIRST (`## COORDINATOR RULING (plan rev N — {verdict})`), then call with a one-line `ruling`: the file is mirrored before your act and the pointer names your section. Pass the workspace HEAD you observed (a backticked sha is fine); an accepting verdict whose seat planned against a different tree is REFUSED, naming both shas. READ THE REPLY'S `delivery:` and `file:` LINES — `NOT DELIVERED` means the seat is idle and only a `callout` reaches it |
|
|
89
|
+
| `accept` | The rev-bound FINAL receipt — and it TELLS the seat, so it carries your commit call | Put the next instruction (commit, push, close-out) in `ruling`, or write it under `## COORDINATOR ACCEPT` in the seat's `tldr.md` first — the receipt then binds to that mirrored revision. It binds to the seat's CURRENT tldr revision, so if the seat posts NEW CONTENT again your acceptance no longer covers what it publishes. **Re-accept — it is idempotent and cheap.** This receipt is what the push bar reads; prose is not a receipt |
|
|
87
90
|
| `complete` | The reap, and it is HONEST | It re-reads the seat and reports ok only after the terminal state is OBSERVED |
|
|
88
|
-
| `callout` | **THE ONLY WAY YOU REACH A CHARGE** (besides the
|
|
91
|
+
| `callout` | **THE ONLY WAY YOU REACH A CHARGE** (besides the pointers `accept_plan` and `accept` send) | A charge that posted and ended its turn cannot resume any other way — without this verb it waits for a human. Your ruling must carry a DETERMINATE NEXT ACTION it can execute without inference. **Write it into the seat's `tldr.md` first and pass a one-line `ruling`:** the file is mirrored before your act and the seat is pointed at your section. Without a file, KEEP IT TO A LINE: over 600 chars the body is stored as a `ruling` artifact on the board and the seat receives a POINTER — the seat reads the body once, never twice |
|
|
89
92
|
|
|
90
93
|
**A QUESTION IS CLOSED BY AN ACT, NOT BY A FILE.** Answer a charge's question with a `callout` carrying
|
|
91
94
|
that post's act id as `answeringActId` — **that act IS the answer**, and it is the only thing that stops
|
|
@@ -93,14 +96,23 @@ the re-raise. A `callout` without one steers and closes nothing, and **nothing y
|
|
|
93
96
|
closes anything**: the latch reads the ledger, so a ruling you never sent is a question still open no
|
|
94
97
|
matter what any blackboard says.
|
|
95
98
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
**THE COORDINATOR'S APPEND, HOSTED.** In a shared workspace a seat that posts its `tldr.md` by `path` shares
|
|
100
|
+
the file with you: append your ruling with your own file tools under a coordinator-voice heading, then call
|
|
101
|
+
the verb. The control plane reads the file, mirrors it as the next revision in YOUR voice before it records
|
|
102
|
+
your act, and points the seat at the section you added; the reply's `file:` line says what was mirrored. A
|
|
103
|
+
seat that posts bytes (a runner older than periscope 1.4.0) or works in its own workspace keeps the old form:
|
|
104
|
+
the verb carries your words. **The act still decides** — a section closes nothing on its own.
|
|
105
|
+
|
|
106
|
+
**`seat_acts` IS YOUR CENSUS.** Your mint carries `acts:read`: take counts, human touches and receipts from
|
|
107
|
+
the ledger, never from a seat's report about itself, and name the lane any count you publish came from.
|
|
101
108
|
|
|
102
109
|
**WAKES:** you are woken when a charge posts its plan or its tldr, and a one-line pointer rides the wake —
|
|
103
|
-
|
|
110
|
+
the revision and the sections it added. Read what is new (`read_blackboard` with `sinceRev`, or the file) and
|
|
111
|
+
answer on first receipt rather than spending a round-trip.
|
|
112
|
+
|
|
113
|
+
**A verb that fails with a transport error** (`ECONNRESET`, a socket closed under the call) is the transport,
|
|
114
|
+
not a refusal: call it once more, and journal it if it fails again. A refusal has a name; a dropped
|
|
115
|
+
connection does not.
|
|
104
116
|
|
|
105
117
|
**THE TRACKER IS YOURS ALONE.** Advance it at every seat boundary; never reconstruct it at the close.
|
|
106
118
|
|
|
@@ -117,7 +129,7 @@ read the board and answer on first receipt rather than spending a round-trip.
|
|
|
117
129
|
corrected.
|
|
118
130
|
|
|
119
131
|
**Pick the docs:** the floor and the loop's standard docs are settled (`spec-seat`'s Step 0 +
|
|
120
|
-
`spec-
|
|
132
|
+
`spec-build`'s role table). **This repository's own docs are yours to seed, by path, every time:** copy
|
|
121
133
|
the seat's role rows from `docs/_meta/doc-index.md` § Role reading lists into the prompt's `EXTRA DOCS`
|
|
122
134
|
line — a seat follows a path in its prompt and does not reliably follow an index. Then add the extras
|
|
123
135
|
the task itself warrants. When in doubt, seed the doc: a seat reading one extra doc is cheaper than a
|
|
@@ -342,10 +354,9 @@ so read them as run-time obligations, not close-out ones:
|
|
|
342
354
|
|
|
343
355
|
- **Your zero-touch / ceremony claims must cite an ARGLESS sweep**, never a verb list you picked
|
|
344
356
|
yourself. **Check on day one that the sweep is runnable at your run's scale — and that it is runnable
|
|
345
|
-
BY SOMEONE.** Hosted,
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
suspected.
|
|
357
|
+
BY SOMEONE.** Hosted, `seat_acts` is that sweep and your ticket carries it; hand-cranked, check that the
|
|
358
|
+
retro seat, a witness or an operator can produce it. If none can, that is a day-one escalation, not a
|
|
359
|
+
close-out discovery — a verb-filtered audit can only confirm what you suspected.
|
|
349
360
|
- **A rev-bound acceptance goes stale on a post-acceptance append of NEW CONTENT — from either actor.**
|
|
350
361
|
The receipt covers the tldr rev + HEAD it was written against; a later content post invalidates it and
|
|
351
362
|
the cheap repair is an **argless re-accept sent WITH the retry order in the same act**. A re-accept with
|
|
@@ -420,10 +431,12 @@ so read them as run-time obligations, not close-out ones:
|
|
|
420
431
|
wait or to reshape the command — not to complete a run or curl past the fence. **And a park that sails
|
|
421
432
|
through anyway is DATA:** record it immediately as an incident, because a fence that failed silently once
|
|
422
433
|
will fail silently again, and your record is the only trace.
|
|
423
|
-
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
434
|
+
- **A shared worktree holds one live seat at a time, and nothing but you enforces it.** `seat_spawn`
|
|
435
|
+
refuses a terminal seat, a seat that already has a live session and a runner it cannot reach — it does
|
|
436
|
+
NOT refuse a second seat while another is still live in the shared tree, so spawning early puts two
|
|
437
|
+
seats in one worktree. Reap the previous seat first, or wait if it has not closed out yet. Parallel
|
|
438
|
+
seats need separate worktrees, which is the pipeline's shape, decided at create — and only for specs
|
|
439
|
+
that share no files.
|
|
427
440
|
|
|
428
441
|
## The steering channel — shape your callouts by SOLICITATION
|
|
429
442
|
|
|
@@ -442,10 +455,10 @@ send context attached to a ruling instead.
|
|
|
442
455
|
|
|
443
456
|
## The seat prompt template
|
|
444
457
|
|
|
445
|
-
The ceremony rides the **`spec-
|
|
458
|
+
The ceremony rides the **`spec-build` skill** — the prompt is an IGNITER, not a ceremony restatement.
|
|
446
459
|
|
|
447
460
|
```
|
|
448
|
-
You are a BUILD SEAT in a coordinator-run effort: invoke the spec-
|
|
461
|
+
You are a BUILD SEAT in a coordinator-run effort: invoke the spec-build skill with
|
|
449
462
|
role={backend | frontend | mixed} before anything else, and ALWAYS after `spec-seat`: the seat header
|
|
450
463
|
names `spec-seat` first, the job skill second.
|
|
451
464
|
|
|
@@ -473,7 +486,7 @@ THE TASK: {compressed spec restatement with the load-bearing specifics inline.}
|
|
|
473
486
|
|
|
474
487
|
For investigation-first work, add **STEP 0 — INVESTIGATE, REPORT, STOP** before the task, or use
|
|
475
488
|
`role={...} fixit` for no-spec defect sessions (the skill carries the fix-it ceremony). Fallback: if the
|
|
476
|
-
seat can't invoke skills, paste the ceremony from the `spec-
|
|
489
|
+
seat can't invoke skills, paste the ceremony from the `spec-build` skill inline.
|
|
477
490
|
|
|
478
491
|
### The bookend rows (R and P) get a MANIFEST instead of prior shapes
|
|
479
492
|
|
|
@@ -514,7 +527,7 @@ P it is the difference between archiving this effort and sweeping somebody else'
|
|
|
514
527
|
## Ruling template (plan review / question answers)
|
|
515
528
|
|
|
516
529
|
```
|
|
517
|
-
|
|
530
|
+
COORDINATOR RESPONSE — PLAN TLDR {ACCEPTED / ACCEPTED WITH RIDERS / BLOCKING-PRECONDITION}.
|
|
518
531
|
{Verdict vocabulary: accept · accept-with-riders (numbered rulings anchored to the SEAT'S OWN item
|
|
519
532
|
numbers — it folds them in and GOES, no re-approval round-trip; the dominant verdict) ·
|
|
520
533
|
blocking-precondition ("accept, but step 0 first") · read-full-plan (not a verdict you send — you
|
|
@@ -539,18 +552,22 @@ still open, however good the prose; the seat is still holding and the re-raise i
|
|
|
539
552
|
**The blackboard append.** Hand-cranked, the seat's `plan.md` and `tldr.md` are live FILES at
|
|
540
553
|
`docs/research/{topic}/sessions/{spec-slug}/` — read the TLDR there with normal file tools instead of
|
|
541
554
|
asking for a paste (`read-full-plan` = read `plan.md`, a pull, never force-fed). Deliver every ruling by
|
|
542
|
-
**APPENDING it verbatim to the seat's `tldr.md`**, right under the questions it answers. Hosted,
|
|
543
|
-
|
|
555
|
+
**APPENDING it verbatim to the seat's `tldr.md`**, right under the questions it answers. Hosted, the same
|
|
556
|
+
append, then the verb: the control plane mirrors the file before your act and points the seat at the
|
|
557
|
+
section (§ Your hands, the coordinator's append).
|
|
544
558
|
|
|
545
559
|
**Anchor grammar (canonical — the witness greps these):** rulings land under
|
|
546
|
-
`##
|
|
547
|
-
rev ladder exists; notes under `##
|
|
548
|
-
of four — `
|
|
549
|
-
invent counts as nothing.
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
560
|
+
`## COORDINATOR RULING (plan — {verdict})` hand-cranked, `## COORDINATOR RULING (plan rev N — {verdict})`
|
|
561
|
+
when the rev ladder exists; notes under `## COORDINATOR NOTE ({context})`. The coordinator-voice
|
|
562
|
+
vocabulary is a CLOSED list of four — `COORDINATOR NOTE` · `COORDINATOR ACCEPT` · `COORDINATOR RULING` ·
|
|
563
|
+
`OPERATOR RULING` — so a fifth anchor you invent counts as nothing. An older board spells the first three
|
|
564
|
+
`PARENT NOTE` · `PARENT ACCEPT` · `PARENT RULING`; every reader of the anchors, each grep in this loop
|
|
565
|
+
included, takes that spelling as the same three, and you write only the new one. **Never vary the prefixes**, and **never
|
|
566
|
+
discuss the anchor grammar inside a steering note**: the detector matches the STRING, not your intent,
|
|
567
|
+
and naming an anchor while explaining it derives a spurious acceptance receipt. Refer to it obliquely
|
|
568
|
+
("the acceptance anchor").
|
|
569
|
+
**Point, don't paste:** steer with *"read your `tldr.md` under `## COORDINATOR RULING`"*, never by
|
|
570
|
+
re-pasting a multi-KB block into a composer.
|
|
554
571
|
|
|
555
572
|
**When to read (hand-cranked):** the human's nudge is your wake signal, and the human is the ONLY bus — so
|
|
556
573
|
before cutting each next prompt, sweep `sessions/*/tldr.md` mtimes for appends you were never nudged
|
|
@@ -564,7 +581,7 @@ plan-approval click is the human's counterpart of the product's accept-gate —
|
|
|
564
581
|
## Docs-write + commit call template
|
|
565
582
|
|
|
566
583
|
```
|
|
567
|
-
|
|
584
|
+
COORDINATOR RESPONSE — FINAL TLDR ACCEPTED {(+ what I verified myself)}.
|
|
568
585
|
1. Run docs-write. Carry: {departures, honest gaps, deferred findings verbatim, gotchas}.
|
|
569
586
|
2. COMMIT CALL — approved. Stage explicitly (never git add -A): YOUR diff + working doc,
|
|
570
587
|
PLUS docs/research/{topic}/project-status.md — my ledger rides your commit,
|
|
@@ -583,7 +600,7 @@ PARENT RESPONSE — FINAL TLDR ACCEPTED {(+ what I verified myself)}.
|
|
|
583
600
|
```
|
|
584
601
|
|
|
585
602
|
**THE ACCEPTANCE IS A RECEIPT VERB, AND PROSE IS NOT A RECEIPT.** Send the acceptance act carrying your
|
|
586
|
-
text; it lands in the seat's `tldr.md` under `##
|
|
603
|
+
text; it lands in the seat's `tldr.md` under `## COORDINATOR ACCEPT (final — {slice})` and the rev-bound
|
|
587
604
|
receipt derives from it. **An acceptance delivered as a steering note records zero rows** — and the push
|
|
588
605
|
bar reads the row, not the paragraph.
|
|
589
606
|
|
|
@@ -591,10 +608,10 @@ bar reads the row, not the paragraph.
|
|
|
591
608
|
(the receipt binds pre-commit), then the seat commits and pushes. **The receipt is rev-bound:** it covers
|
|
592
609
|
the tldr rev + HEAD it was written against — if the seat re-posts its TLDR CONTENT after your acceptance,
|
|
593
610
|
the unattended push parks naming both revs, and one **argless re-accept** is the cheap repair, **sent with
|
|
594
|
-
the retry order in the same act**. A seat's post-push `## [
|
|
611
|
+
the retry order in the same act**. A seat's post-push `## [seat·…] CLOSE-OUT RECEIPT` append does NOT
|
|
595
612
|
stale your acceptance — reap without a re-accept after it.
|
|
596
613
|
|
|
597
|
-
**Hand-cranked:** append the same `##
|
|
614
|
+
**Hand-cranked:** append the same `## COORDINATOR ACCEPT (final — {slice})` heading to the seat's
|
|
598
615
|
`sessions/{slug}/tldr.md` yourself — there is no machinery and no derivation; the anchor + your tracker
|
|
599
616
|
row ARE the receipts.
|
|
600
617
|
|
|
@@ -617,7 +634,7 @@ post-merge.
|
|
|
617
634
|
corrections, what you verified yourself, mid-build directives, and anything you don't want to forget —
|
|
618
635
|
written when it happens, never reconstructed at close. **The tracker's own section notes say what each
|
|
619
636
|
section holds**; follow them rather than inventing structure. Do **not** add a `## Checkpoint ledger` or
|
|
620
|
-
a `##
|
|
637
|
+
a `## Coordinator decisions` section — the session entry *is* the decision record, and a parallel section
|
|
621
638
|
splits one narrative across two places.
|
|
622
639
|
- **If a retro has to supersede your session rows, the ledger was not kept.** A retro confirms the rows
|
|
623
640
|
and adds the audit and economics; it never corrects facts that should already be written.
|
|
@@ -644,7 +661,7 @@ post-merge.
|
|
|
644
661
|
a sequence, and do not treat a stale living doc as something this effort must fix.
|
|
645
662
|
- Periodically remind the human to sweep your doc edits into a small `docs` commit.
|
|
646
663
|
- Counterpart skills: `spec-seat` (the contract of every seat you arm — read it to know what they were
|
|
647
|
-
told) · `spec-
|
|
664
|
+
told) · `spec-build` (the builders' job skill) · `spec-pipeline` (how the specs came to exist) ·
|
|
648
665
|
`spec-review` (the outside look, before your retro) · `spec-retro` (your close-out audit) ·
|
|
649
666
|
`spec-witness` (the read-only verifier) · `spec-ignite` (the ignition copilot that puts an authored
|
|
650
667
|
effort onto the plane).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-ignite
|
|
3
|
-
description: Become the IGNITION COPILOT for a spec pipeline — verify the committed ignition brief against live state, verify every step by receipt, and kick on the human's word. Authoring belongs to spec-pipeline; this seat VERIFIES, so it can run cold. Use right after spec-pipeline when the pipeline will run hosted (the manual alternative is spec-
|
|
3
|
+
description: Become the IGNITION COPILOT for a spec pipeline — verify the committed ignition brief against live state, verify every step by receipt, and kick on the human's word. Authoring belongs to spec-pipeline; this seat VERIFIES, so it can run cold. Use right after spec-pipeline when the pipeline will run hosted (the manual alternative is spec-coordinator), or fresh with a topic whose specs are already authored. Two verbal gates: nothing moves before "stage it"; nothing spawns before "kick it".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# spec-ignite
|
|
@@ -119,10 +119,10 @@ injects** — the human keyboard and the hardened ladders are the only submit pa
|
|
|
119
119
|
|
|
120
120
|
The coordinator's task is the brief's own **`## The kick`** section, copied verbatim. Roughly:
|
|
121
121
|
|
|
122
|
-
> You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-
|
|
122
|
+
> You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-coordinator` skill, then read
|
|
123
123
|
> `docs/research/{topic}/00-ignition-brief.md` and follow it. Your branch is `{the effort's branch}`.
|
|
124
124
|
|
|
125
|
-
**Do not draft a constitution here.** The seat's PROCEDURE is the `spec-
|
|
125
|
+
**Do not draft a constitution here.** The seat's PROCEDURE is the `spec-coordinator` skill; its POLICY rides the
|
|
126
126
|
un-skippable policy suffix the control plane supplies at open (you do not paste it, and you cannot
|
|
127
127
|
override it); its HANDS are the coordinator charter the control plane attaches to a `coordinator` seed
|
|
128
128
|
and to no other kind. This RUN's choreography is the committed brief. A task string cannot be diffed or
|
|
@@ -271,7 +271,7 @@ you found rather than working around it.
|
|
|
271
271
|
anomalies that may change it — surprises are findings, not adjustments.
|
|
272
272
|
|
|
273
273
|
## Related
|
|
274
|
-
- `spec-pipeline` (authors what you ignite, including the brief you verify) · `spec-
|
|
275
|
-
coordinator's procedure, and the HAND-CRANKED alternative) · `spec-seat` + `spec-
|
|
274
|
+
- `spec-pipeline` (authors what you ignite, including the brief you verify) · `spec-coordinator` (the
|
|
275
|
+
coordinator's procedure, and the HAND-CRANKED alternative) · `spec-seat` + `spec-build` (what the
|
|
276
276
|
control plane seeds into every build seat) · `spec-retro` (the close-out audit) · `spec-witness`
|
|
277
277
|
(point one at the run you just ignited)
|
|
@@ -59,14 +59,14 @@ sessions/ WHO PUTS IT THERE
|
|
|
59
59
|
questions with the coordinator's rulings appended beneath them. Read
|
|
60
60
|
top-to-bottom it IS the session's whole conversation, in message order
|
|
61
61
|
code-review.md the review seat, in its own commit, if the run has a review row
|
|
62
|
-
|
|
62
|
+
coordinator-retrospective.md the coordinator, at the close
|
|
63
63
|
witness-ledger-*.md a human commit — the witness is zero-writes by contract (its ticket
|
|
64
64
|
cannot even carry the write scope), so its testimony reaches the repo
|
|
65
65
|
by someone else's hand
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
- **Per-seat artifacts go in a `{spec-slug}/` subfolder; effort-wide artifacts sit at the `sessions/`
|
|
69
|
-
root.** The first seat creates its subfolder and, incidentally,
|
|
69
|
+
root.** The first seat creates its subfolder and, incidentally, `sessions/` itself; everything after
|
|
70
70
|
writes into what exists.
|
|
71
71
|
- **RE-COPY BOTH FILES ONCE, IMMEDIATELY BEFORE THE FINAL PUSH.** A seat's close-out receipt is written
|
|
72
72
|
AFTER the commit that carries its testimony, so a single copy always lands truncated — and a follow-up
|
|
@@ -78,7 +78,7 @@ sessions/ WHO PUTS IT THERE
|
|
|
78
78
|
separate questions file, and there are no status snapshots: the tracker is committed live, so its git
|
|
79
79
|
history already carries the progression a snapshot would fake.
|
|
80
80
|
- **Append-only.** `tldr.md` grows; nobody rewrites it. The rev ladder is the history.
|
|
81
|
-
- **Who READS it:** the coordinator reads each TLDR and appends its rulings under `##
|
|
81
|
+
- **Who READS it:** the coordinator reads each TLDR and appends its rulings under `## COORDINATOR RULING` · the
|
|
82
82
|
review seat reads every session's TLDR as testimony **and reads nothing else** · the retro greps it for
|
|
83
83
|
acceptance anchors and unanswered questions · the witness uses rev counts and mtimes as a zero-cost
|
|
84
84
|
heartbeat.
|
|
@@ -214,7 +214,7 @@ sessions/ WHO PUTS IT THERE
|
|
|
214
214
|
5. **Name the archive destination when only you can.** Read `docs/_meta/docs-workflow.md` § The archive
|
|
215
215
|
convention (repository-owned). If where a pipeline files depends on something only this session knows
|
|
216
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-
|
|
217
|
+
umbrella's blockquote as an `Archive:` line; `spec-coordinator` hands it to the docs-process row and
|
|
218
218
|
`docs-process` files there. A convention that needs nothing from you needs no line.
|
|
219
219
|
|
|
220
220
|
6. **Stop.** The specs stay in `research/{topic}/`. Do NOT implement, do NOT touch living docs, do NOT
|
|
@@ -320,7 +320,7 @@ cross-reading them; a human row recorded only by the coordinator has ONE, and th
|
|
|
320
320
|
one whose errors nobody else catches.
|
|
321
321
|
|
|
322
322
|
## The kick — paste this verbatim as the coordinator's task
|
|
323
|
-
> You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-
|
|
323
|
+
> You are the COORDINATOR of the {topic} pipeline. Invoke the `spec-coordinator` skill, then read
|
|
324
324
|
> `docs/research/{topic}/00-ignition-brief.md` and follow it. Your branch is `{the effort's branch}`.
|
|
325
325
|
|
|
326
326
|
Deltas true of THIS kick only (a concurrent pipeline, a model override, a one-off probe) go here as a
|
|
@@ -328,7 +328,7 @@ short list. Everything else is already in this brief — the task string is a PO
|
|
|
328
328
|
stays short because a task buried in a run row cannot be diffed or reviewed the way this file can.
|
|
329
329
|
```
|
|
330
330
|
|
|
331
|
-
**Do not restate the ceremony here.** The coordinator's procedure lives in `spec-
|
|
331
|
+
**Do not restate the ceremony here.** The coordinator's procedure lives in `spec-coordinator` and its policy
|
|
332
332
|
is the one § This repository's rails (repository-owned) names, which a hosted run also carries in the
|
|
333
333
|
un-skippable policy suffix the control plane supplies; a brief that re-teaches them accretes
|
|
334
334
|
into prompt-law that breaks the coordinator it was meant to steer. The brief carries THIS RUN's
|
|
@@ -410,7 +410,7 @@ viewer because they are instructions to the coordinator, not content for the hum
|
|
|
410
410
|
|---|---|---|---|
|
|
411
411
|
```
|
|
412
412
|
|
|
413
|
-
**Never generate a `## Checkpoint ledger` or a `##
|
|
413
|
+
**Never generate a `## Checkpoint ledger` or a `## Coordinator decisions` section.** The session section
|
|
414
414
|
*is* the decision record; a parallel section splits one narrative across two places.
|
|
415
415
|
|
|
416
416
|
## `live-checks.md`
|
|
@@ -13,8 +13,8 @@ today that perspective evaporates the moment the run closes. This skill turns it
|
|
|
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
|
|
|
15
15
|
Run it as the **last act of the coordinator seat**, after the final session's close-out commit — before or
|
|
16
|
-
after the PR is cut, either works. Output: `docs/research/{topic}/sessions/
|
|
17
|
-
a scoped write on the pipeline's branch, so it rides the PR to the base branch either way.
|
|
16
|
+
after the PR is cut, either works. Output: `docs/research/{topic}/sessions/coordinator-retrospective.md`.
|
|
17
|
+
It is a scoped write on the pipeline's branch, so it rides the PR to the base branch either way.
|
|
18
18
|
|
|
19
19
|
**You are one of the three kinds that do NOT compose `spec-seat`** — this skill is your whole contract,
|
|
20
20
|
and the control plane's seed says so rather than merely omitting it.
|
|
@@ -45,16 +45,14 @@ human and exception rows included. **Start every audit with it: "what happened t
|
|
|
45
45
|
not ask about."** A verb-filtered read can only confirm suspicions, never surface surprises — a run can
|
|
46
46
|
certify itself "zero-touch" while `approved_by_human` rows sit one unqueried verb away.
|
|
47
47
|
|
|
48
|
-
**Who holds the instrument, on the hosted plane:** a `retro` seat's ticket
|
|
49
|
-
`seat_acts` argless IS your sweep
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
effort's witness, or a credentialed operator. **Say which instrument produced every count in this
|
|
53
|
-
document** — a number whose lane you cannot name is testimony, not an audit.
|
|
48
|
+
**Who holds the instrument, on the hosted plane:** a `retro` seat's ticket and a `coordinator` ticket both
|
|
49
|
+
carry `acts:read`, so `seat_acts` argless IS your sweep whichever of the two writes this retro. **Say which
|
|
50
|
+
instrument produced every count in this document** — a number whose lane you cannot name is testimony, not
|
|
51
|
+
an audit.
|
|
54
52
|
|
|
55
53
|
**If the argless sweep is not runnable at your run's scale, that is a day-one escalation, not a
|
|
56
54
|
close-out discovery.** A few thousand rows can exceed the lane's page budget; you cannot retroactively
|
|
57
|
-
obtain the audit your own doctrine mandates. `spec-
|
|
55
|
+
obtain the audit your own doctrine mandates. `spec-coordinator` carries this as a run-time obligation.
|
|
58
56
|
|
|
59
57
|
**Two instruments that share no code are the only way a ceremony audit means anything** — on one
|
|
60
58
|
instrument you are grading your own homework with your own pencil. Where the control plane offers a
|
|
@@ -148,11 +146,13 @@ could not tell. And do not flatten predicates that were measured apart: a conten
|
|
|
148
146
|
stales a PUSH; a close-out-receipt append does not stale a REAP. Report what you observe; never
|
|
149
147
|
generalise one park into a law.
|
|
150
148
|
|
|
151
|
-
**The derived-row path:** the acceptance's durable record is the `##
|
|
152
|
-
anchor in each seat's `tldr.md`, and the receipt DERIVES from it.
|
|
149
|
+
**The derived-row path:** the acceptance's durable record is the `## COORDINATOR ACCEPT (final —
|
|
150
|
+
{slice})` anchor in each seat's `tldr.md`, and the receipt DERIVES from it. A board written before this
|
|
151
|
+
vocabulary spells it `## PARENT ACCEPT`; a reader of the anchors takes both spellings, so the grep does too. Reconcile
|
|
152
|
+
file against substrate:
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
rg -n "## PARENT ACCEPT" docs/research/{topic}/sessions/*/tldr.md
|
|
155
|
+
rg -n "## (COORDINATOR|PARENT) ACCEPT" docs/research/{topic}/sessions/*/tldr.md
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
**AUDIT THE QUESTION LANE THE SAME WAY — it is a heading grep, not a row query.** A seat asks by appending
|
|
@@ -163,8 +163,8 @@ run whose seats asked repeatedly and changed a ruling by it.
|
|
|
163
163
|
**AND ON THE HOSTED PLANE THE FILE IS NOT THE CLOSE PREDICATE — audit BOTH halves, because they answer
|
|
164
164
|
different questions.** *Was one asked?* is a fact about the file (the heading grep below, mirroring the
|
|
165
165
|
control plane's grammar). *Was it answered?* is a fact about the LEDGER — the ruling act carrying the
|
|
166
|
-
asking post's id — and it is deliberately not read from the file, because a seat can type a
|
|
167
|
-
heading into its own blackboard. **A retro that audits only the file can be shown a question that
|
|
166
|
+
asking post's id — and it is deliberately not read from the file, because a seat can type a
|
|
167
|
+
coordinator-voice heading into its own blackboard. **A retro that audits only the file can be shown a question that
|
|
168
168
|
answered itself.** Reconcile the grep's hits against the ruling acts, and report any hit with no act as an
|
|
169
169
|
unanswered question whatever the file says.
|
|
170
170
|
|
|
@@ -177,11 +177,12 @@ prefixed and plural headings, and the lane has TWO headings: `## QUESTIONS` (rec
|
|
|
177
177
|
rg -niE '^##[[:space:]]*(\[[^]]*\][[:space:]]*)?(MID-BUILD[[:space:]]+)?QUESTIONS?\b' docs/research/{topic}/sessions/*/tldr.md | rg -viE 'QUESTIONS?[[:space:]]+ANSWERED'
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
Reconcile each hit against the
|
|
181
|
-
in the same file
|
|
182
|
-
tolerant as the code it
|
|
180
|
+
Reconcile each hit against the coordinator-voice append that answered it (`## COORDINATOR RULING` /
|
|
181
|
+
`## COORDINATOR NOTE` in the same file, or `## PARENT RULING` / `## PARENT NOTE` on an older board) — an
|
|
182
|
+
unanswered question is the finding. **Your audit instrument must be at least as tolerant as the code it
|
|
183
|
+
audits.**
|
|
183
184
|
|
|
184
|
-
- **Hosted:** N `## PARENT ACCEPT`
|
|
185
|
+
- **Hosted:** N acceptance anchors (`## (COORDINATOR|PARENT) ACCEPT`) imply N acceptance acts (rev-bound: the act carries the tldr
|
|
185
186
|
rev, the HEAD and a content hash). An anchor with no act means the derivation failed (LOUD in the
|
|
186
187
|
logs — find it); an act with no anchor is a cockpit accept (legitimate; the act says so).
|
|
187
188
|
Acceptance-shaped PROSE without the anchor writes nothing by design — flag it as a ceremony miss.
|
|
@@ -374,7 +375,7 @@ is the look of a record with none of a record's properties.
|
|
|
374
375
|
session's `tldr.md`, and the working docs.
|
|
375
376
|
2. **Query** the substrate for §§2-5. Verify each query FIRES on a known-positive row before trusting a
|
|
376
377
|
clean result.
|
|
377
|
-
3. **Write** `docs/research/{topic}/sessions/
|
|
378
|
+
3. **Write** `docs/research/{topic}/sessions/coordinator-retrospective.md` — NATIVELY, in the tree you were born
|
|
378
379
|
in: the coordinator lives in the effort's worktree, so the scoped write (the effort home's own `.md`
|
|
379
380
|
files, `sessions/`, the tracker, `live-checks.md` and the specs) lands on the effort's branch and rides
|
|
380
381
|
its PR. Every write earns its loud audit row. **If the write REFUSES, that is a PLATFORM DEFECT:**
|
|
@@ -396,6 +397,6 @@ is the look of a record with none of a record's properties.
|
|
|
396
397
|
leaves an identical belief standing in a sibling that words it differently has to be made twice.
|
|
397
398
|
|
|
398
399
|
## Related
|
|
399
|
-
- `spec-
|
|
400
|
-
builders) · `spec-seat` (their shared contract) · `spec-witness` (the read-only verifier) ·
|
|
400
|
+
- `spec-coordinator` (the seat, and the run-time half of this skill's close-out demands) · `spec-build`
|
|
401
|
+
(the builders) · `spec-seat` (their shared contract) · `spec-witness` (the read-only verifier) ·
|
|
401
402
|
`spec-pipeline` (which authored the specs you are grading)
|
|
@@ -24,7 +24,7 @@ else's job.
|
|
|
24
24
|
Reading it anchors you on that grade and the pipeline pays for two opinions to get one.
|
|
25
25
|
- **You do not fix anything.** Findings get classified and filed. A reviewer that repairs its own findings
|
|
26
26
|
cannot be trusted to count them.
|
|
27
|
-
- **You do not decide whether a fixit runs — you classify.** The
|
|
27
|
+
- **You do not decide whether a fixit runs — you classify.** The coordinator rules on it. A reviewer that can
|
|
28
28
|
trigger work is grading its own necessity.
|
|
29
29
|
- **Every TLDR, spec, and doc claim is TESTIMONY to verify, never a fact to build on.** That includes
|
|
30
30
|
anything your coordinator tells you: if a ruling arrives in your `tldr.md`, record it and treat it as a
|
|
@@ -194,8 +194,9 @@ testimony.
|
|
|
194
194
|
|
|
195
195
|
## The report — `sessions/code-review.md`
|
|
196
196
|
|
|
197
|
-
Files beside
|
|
198
|
-
|
|
197
|
+
Files beside the coordinator's retrospective in the pipeline's `sessions/` folder
|
|
198
|
+
(`coordinator-retrospective.md`, or `parent-retrospective.md` in an effort begun before that name). It is
|
|
199
|
+
a pipeline artifact, not a chat transcript, and it archives with the effort.
|
|
199
200
|
|
|
200
201
|
```markdown
|
|
201
202
|
# Code + session review — {topic}, pipeline {id}
|
|
@@ -244,7 +245,7 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
|
|
|
244
245
|
|
|
245
246
|
## Lineage _(where § Doc metadata (repository-owned) keeps the footer)_
|
|
246
247
|
- **Pipeline** — the tracker · the umbrella · sessions 02..NN
|
|
247
|
-
- **Counterpart** — `
|
|
248
|
+
- **Counterpart** — `coordinator-retrospective.md` (the inside look; written after this)
|
|
248
249
|
```
|
|
249
250
|
|
|
250
251
|
## Ceremony
|
|
@@ -254,7 +255,7 @@ TLDR with beliefs and numbered questions, the question lane, the parked-call dis
|
|
|
254
255
|
vocabulary, the six-section FINAL TLDR, and the close-out order. You commit `sessions/code-review.md` on
|
|
255
256
|
your coordinator's call like any seat.
|
|
256
257
|
|
|
257
|
-
**The close-out receipt's heading token is the literal `
|
|
258
|
+
**The close-out receipt's heading token is the literal `seat·` for you too** — it is a protocol anchor,
|
|
258
259
|
not a description of your seat, and writing `[review·…]` stales your own acceptance. `spec-seat` carries
|
|
259
260
|
the detail.
|
|
260
261
|
|
|
@@ -267,7 +268,7 @@ Your baselines are reads, not builds: you run the suites to confirm the pipeline
|
|
|
267
268
|
number you cannot reproduce is a finding.
|
|
268
269
|
|
|
269
270
|
## Related
|
|
270
|
-
- `spec-
|
|
271
|
+
- `spec-coordinator` (rules on your fixit candidates; writes the retro after you) · `spec-build` (the seats you
|
|
271
272
|
are reviewing) · `spec-retro` (the inside look) · `spec-witness` (the live read-only seat; its ledger, if
|
|
272
273
|
one exists, is evidence like any other artifact) · `docs-process` (consumes this report and gives every
|
|
273
274
|
finding a disposition)
|