@naswerks/engineering-loop 0.2.1 → 0.5.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 +2 -6
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +94 -0
- package/README.md +49 -11
- package/package.json +1 -1
- package/references/docs-workflow.md +119 -10
- package/references/engineering-loop.md +27 -2
- package/skills/docs-audit-feature/SKILL.md +24 -20
- package/skills/docs-audit-full/SKILL.md +17 -9
- package/skills/docs-backlog/SKILL.md +6 -3
- package/skills/docs-process/SKILL.md +67 -66
- package/skills/docs-status/SKILL.md +25 -15
- package/skills/docs-write/SKILL.md +9 -6
- package/skills/init/SKILL.md +88 -22
- package/skills/init/scripts/doctor.mjs +131 -18
- package/skills/init/scripts/owned.mjs +96 -0
- package/skills/init/scripts/refresh.mjs +129 -0
- package/skills/spec-child/SKILL.md +1 -1
- package/skills/spec-parent/SKILL.md +20 -9
- package/skills/spec-pipeline/SKILL.md +23 -13
- package/skills/spec-retro/SKILL.md +5 -2
- package/skills/spec-review/SKILL.md +10 -6
- package/skills/spec-seat/SKILL.md +11 -6
- package/templates/docs/_meta/doc-index.md +7 -1
- package/templates/docs/infrastructure/background-work.md +1 -1
- package/templates/docs/infrastructure/realtime-events.md +1 -1
- package/templates/docs/patterns/backend-patterns.md +1 -1
- package/templates/docs/patterns/code-organization.md +1 -1
- package/templates/docs/patterns/codegen.md +1 -1
- package/templates/docs/patterns/design-tokens.md +1 -1
- package/templates/docs/patterns/frontend-patterns.md +1 -1
- package/templates/docs/patterns/long-running-workflows.md +1 -1
- package/templates/docs/patterns/state-management.md +1 -1
- package/templates/docs/patterns/testing.md +1 -1
- package/templates/docs/patterns/ui-style-guide.md +1 -1
|
@@ -10,6 +10,8 @@ today that perspective evaporates the moment the run closes. This skill turns it
|
|
|
10
10
|
|
|
11
11
|
**It is not a summary. It is an audit — of the pipeline, and of the seat that ran it.**
|
|
12
12
|
|
|
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
|
+
|
|
13
15
|
Run it as the **last act of the coordinator seat**, after the final session's close-out commit — before or
|
|
14
16
|
after the PR is cut, either works. Output: `docs/research/{topic}/sessions/parent-retrospective.md`. It is
|
|
15
17
|
a scoped write on the pipeline's branch, so it rides the PR to the base branch either way.
|
|
@@ -381,8 +383,9 @@ is the look of a record with none of a record's properties.
|
|
|
381
383
|
4. **Do not fix anything.** Findings become proposed fixits. The retro is a read.
|
|
382
384
|
5. **Then** commit the retro (explicit path) and push it (`git push origin <the effort's branch>`), and
|
|
383
385
|
write `BUILD COMPLETE` into `docs/research/{topic}/project-status.md` (the tracker's close marker). **If no
|
|
384
|
-
PR exists yet, create it yourself** —
|
|
385
|
-
|
|
386
|
+
PR exists yet, create it yourself** — on the effort's branch, where and how `docs/_meta/engineering-loop.md`
|
|
387
|
+
§ This repository's rails (repository-owned) says (when it names no route, ask the human once and suggest
|
|
388
|
+
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
|
|
386
389
|
lane and they are gated and receipted like any other publish. **The push command must be the ENTIRE
|
|
387
390
|
command** — a leading `cd` disqualifies it — and keep git-verb words out of any echo label you write
|
|
388
391
|
around it; the deny layer matches TEXT, not parsed verbs.
|
|
@@ -12,6 +12,8 @@ run **before the coordinator's retro and before the PR exists.**
|
|
|
12
12
|
each; the coordinator judged them all and formed beliefs doing it. You arrive with none of that, which is
|
|
13
13
|
why you can see the seams between sessions that no session's own verification structurally covers.
|
|
14
14
|
|
|
15
|
+
**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.
|
|
16
|
+
|
|
15
17
|
Two documents come out of a pipeline's close and they are deliberately different: **the retro looks
|
|
16
18
|
inward, and you look in from outside.** They are independent grades, and reconciling them is somebody
|
|
17
19
|
else's job.
|
|
@@ -33,7 +35,9 @@ else's job.
|
|
|
33
35
|
Your seed carries **no beliefs about the pipeline, and that is deliberate** — but it should carry an
|
|
34
36
|
**inventory**, because you cannot review what you cannot find:
|
|
35
37
|
|
|
36
|
-
- the **topic**, the **branch**, and the **diff range** (`
|
|
38
|
+
- the **topic**, the **branch**, and the **diff range** (`{base}...<branch>` — `{base}` is the base branch
|
|
39
|
+
`docs/_meta/engineering-loop.md` § This repository's rails (repository-owned) names, or the remote's
|
|
40
|
+
default when it names none);
|
|
37
41
|
- **every numbered spec path** — you read them as claims, not facts;
|
|
38
42
|
- the **`sessions/`** folder, holding each build seat's `plan.md` + `tldr.md`;
|
|
39
43
|
- the **working docs for this effort, named explicitly** — `docs/working/` is a shared queue and you must
|
|
@@ -54,7 +58,7 @@ That is testimony; record it and treat it as a claim.
|
|
|
54
58
|
3. **The working docs** in `docs/working/` — the narrative: what was tried, what failed, what changed.
|
|
55
59
|
4. **The tracker** — `project-status.md`, the coordinator's journal: rulings and their reasoning, recon
|
|
56
60
|
corrections, incidents.
|
|
57
|
-
5. **THEN the diff** — `git diff
|
|
61
|
+
5. **THEN the diff** — `git diff {base}...<pipeline-branch>`, plus `git log --oneline {base}..<pipeline-branch>`.
|
|
58
62
|
|
|
59
63
|
**Read the artifacts before the code, and the code before you conclude.** Reading the diff first makes
|
|
60
64
|
you review a patch; reading the claims first makes you review whether the pipeline did what it said.
|
|
@@ -144,7 +148,7 @@ finding seen twice.
|
|
|
144
148
|
- **A receipt is false** — a TLDR, spec, or doc asserts something proven that the code does not do. This
|
|
145
149
|
matters as much as a bug, because the next pipeline builds on it.
|
|
146
150
|
|
|
147
|
-
**(b) Leaving it costs more than a session costs** — it reaches
|
|
151
|
+
**(b) Leaving it costs more than a session costs** — it reaches the base branch, propagates to the next pipeline, or a
|
|
148
152
|
human discovers it live.
|
|
149
153
|
|
|
150
154
|
Everything else is a finding with a home, and you name the home:
|
|
@@ -197,8 +201,8 @@ not a chat transcript, and it archives with the effort.
|
|
|
197
201
|
# Code + session review — {topic}, pipeline {id}
|
|
198
202
|
|
|
199
203
|
> The outside look, written before the retro and before the PR. Two independent passes, consolidated.
|
|
200
|
-
> Reviewed `
|
|
201
|
-
|
|
204
|
+
> Reviewed `{base}..{sha}` across N sessions. **This seat did not read the coordinator's retrospective.**
|
|
205
|
+
{the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for `shipped`}
|
|
202
206
|
|
|
203
207
|
## The verdict, first
|
|
204
208
|
{The one thing a reader must not miss. If the pipeline ships something untrue, say it here in bold.}
|
|
@@ -238,7 +242,7 @@ that does not exist yet (an unauthored row, an unwritten charter) is NOT homed:
|
|
|
238
242
|
## What I could not verify
|
|
239
243
|
{Stated, not omitted.}
|
|
240
244
|
|
|
241
|
-
## Lineage
|
|
245
|
+
## Lineage _(where § Doc metadata (repository-owned) keeps the footer)_
|
|
242
246
|
- **Pipeline** — the tracker · the umbrella · sessions 02..NN
|
|
243
247
|
- **Counterpart** — `parent-retrospective.md` (the inside look; written after this)
|
|
244
248
|
```
|
|
@@ -33,6 +33,8 @@ the review row into the umbrella its own charter excluded and offered the docs-p
|
|
|
33
33
|
it must never run. One base class, three wrong instructions. The contract and the job are therefore two
|
|
34
34
|
files.
|
|
35
35
|
|
|
36
|
+
**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.
|
|
37
|
+
|
|
36
38
|
## What you hold (and what you never touch)
|
|
37
39
|
|
|
38
40
|
- **Yours:** your one assignment; the recon; the plan; the work; your artifacts; your own explicit-path
|
|
@@ -51,9 +53,9 @@ Do this immediately, whatever your assignment turns out to be. It needs no role
|
|
|
51
53
|
|
|
52
54
|
| Doc | What it gives you |
|
|
53
55
|
|---|---|
|
|
54
|
-
| `docs/_meta/doc-index.md` | the menu — which living doc answers which question |
|
|
55
|
-
| `docs/_meta/docs-workflow.md` | the folders, the templates, the two loops |
|
|
56
|
-
| `docs/_meta/engineering-loop.md` | the seats, the ceremony,
|
|
56
|
+
| `docs/_meta/doc-index.md` | the menu — which living doc answers which question: every living doc, or on a curated menu the ones meant for seats (its shape line says which) |
|
|
57
|
+
| `docs/_meta/docs-workflow.md` | the folders, the templates, the two loops — and, in its sections marked (repository-owned), this repository's doc header and where an effort is filed |
|
|
58
|
+
| `docs/_meta/engineering-loop.md` | the seats, the ceremony, **the comms protocol you follow** — and this repository's rails (repository-owned) |
|
|
57
59
|
|
|
58
60
|
Then recon the tree: `git rev-parse HEAD`, `git status --porcelain`, `git branch --show-current`.
|
|
59
61
|
|
|
@@ -79,9 +81,9 @@ prompt's `EXTRA DOCS` line names this repository's own.** Read every one that ex
|
|
|
79
81
|
is absent was not detected by `init` — `docs/_meta/doc-index.md` § Role reading lists carries a row
|
|
80
82
|
saying so — and is not a missing-file finding.
|
|
81
83
|
|
|
82
|
-
A doc
|
|
83
|
-
read it as the starting point it is, and treat a rule it states without
|
|
84
|
-
your PLAN TLDR, not a law.
|
|
84
|
+
A doc whose header carries the word for `draft` (§ Doc metadata (repository-owned)) was scanned by `init`,
|
|
85
|
+
not decided by the repo's owners — read it as the starting point it is, and treat a rule it states without
|
|
86
|
+
a cited source as a question for your PLAN TLDR, not a law.
|
|
85
87
|
|
|
86
88
|
Then report your orientation and beliefs, and ask ONE question: **your assignment.** Stop.
|
|
87
89
|
|
|
@@ -347,6 +349,9 @@ doorbell with no follow-through**; if you receive one bare, retry anyway and say
|
|
|
347
349
|
|
|
348
350
|
## Git shapes
|
|
349
351
|
|
|
352
|
+
- **This repository's rails add to these shapes.** `docs/_meta/engineering-loop.md` § This repository's
|
|
353
|
+
rails (repository-owned) names the gates a commit passes, the suite before a PR, the PR route and any
|
|
354
|
+
stricter staging — follow them beside these, never instead of them.
|
|
350
355
|
- **Explicit staging only, never `git add -A`.** Additive-only; never amend pushed commits.
|
|
351
356
|
- **VERIFY EVERY STAGE BEFORE THE COMMIT — `git add` skips gitignored paths under a directory with
|
|
352
357
|
exit 0 and NO output, and `git status` cannot show the loss** (an ignored file is neither staged nor
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
> The menu. Read this at session start, pick the 2-3 docs that match your task, read those for context.
|
|
4
4
|
> This is the curated short list — the compiled layer you read *before* diving into source.
|
|
5
|
+
<!-- naswerks-loop: menu=all -->
|
|
6
|
+
<!-- init: the shape line above stays in the output. It says menu=all unless the scan found an index the
|
|
7
|
+
repository already keeps of every doc (a docs/INDEX.md or docs/index.md that lists them, a
|
|
8
|
+
docs/SUMMARY.md, a mkdocs.yml nav, a docusaurus or vitepress sidebar); then it says
|
|
9
|
+
menu=curated; index={that path}, and the tables below list only the docs init drafted plus the Meta
|
|
10
|
+
rows. The owner adds each further doc that meets the loop's standard. -->
|
|
5
11
|
|
|
6
12
|
---
|
|
7
13
|
|
|
@@ -43,7 +49,7 @@
|
|
|
43
49
|
|
|
44
50
|
| Doc | When to read |
|
|
45
51
|
|-----|-------------|
|
|
46
|
-
| [docs-workflow](docs-workflow.md) | The loop, folder rules, templates (the
|
|
52
|
+
| [docs-workflow](docs-workflow.md) | The loop, folder rules, templates (the doc header + `## Lineage` footer convention, the sections marked repository-owned, and the spec-doc template), the `docs-*` knowledge-loop + `spec-*` execution-loop skills — read before running `docs-write` / `docs-process` / `spec-pipeline` |
|
|
47
53
|
| [engineering-loop](engineering-loop.md) | The quick intro to how work gets built: the two loops (`docs-*` knowledge / `spec-*` execution, both hand-crankable), the seats, the ceremony, the blackboard + the question lane, and where a rule lives (policy / procedure / task) |
|
|
48
54
|
|
|
49
55
|
## Role reading lists
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> What runs outside a request in this repository — workers, queues, schedulers — and how long-running,
|
|
4
4
|
> multi-stage work is orchestrated. Last verified {today}.
|
|
5
|
-
<!-- meta: type=infrastructure; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=infrastructure; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> How server-side events reach the client in this repository, and the poke/refetch pattern that keeps
|
|
4
4
|
> the two consistent. Last verified {today}.
|
|
5
|
-
<!-- meta: type=infrastructure; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=infrastructure; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Backend Patterns
|
|
2
2
|
|
|
3
3
|
> Rules and conventions for the server side of this repository. Last verified {today}.
|
|
4
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
4
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
5
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
6
6
|
|
|
7
7
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Where the code lives and where a new piece goes — the folder shape this repository actually uses, per
|
|
4
4
|
> stack, and the checklist for adding a feature to it. Last verified {today}.
|
|
5
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> What is generated in this repository, from what, by which command — and the one rule: never hand-write
|
|
4
4
|
> a generated file. Last verified {today}.
|
|
5
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> The token authority: which colour, spacing and typography tokens exist, what each means, and how
|
|
4
4
|
> component CSS consumes them. Component usage (which class for which job) lives in
|
|
5
5
|
> [ui-style-guide](ui-style-guide.md). Last verified {today}.
|
|
6
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
7
7
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Frontend Patterns
|
|
2
2
|
|
|
3
3
|
> Rules and conventions for the client side of this repository. Last verified {today}.
|
|
4
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
4
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
5
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
6
6
|
|
|
7
7
|
---
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> How multi-stage work is orchestrated in this repository: the stages, per-item progress, exactly-once
|
|
4
4
|
> transitions, and how progress reaches the client. The transport it runs on is
|
|
5
5
|
> [background-work](../infrastructure/background-work.md). Last verified {today}.
|
|
6
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
7
7
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> The store convention for the client side of this repository: the files per store, how a store is
|
|
4
4
|
> registered, how a component consumes it. Last verified {today}.
|
|
5
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Testing Patterns
|
|
2
2
|
|
|
3
3
|
> How to write and run tests in this repository — every lane. Last verified {today}.
|
|
4
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
4
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
5
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
6
6
|
|
|
7
7
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Which class or component to reach for, for which job, and the composition rules that keep screens
|
|
4
4
|
> consistent. The tokens themselves are the authority of [design-tokens](design-tokens.md). Last verified {today}.
|
|
5
|
-
<!-- meta: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
5
|
+
<!-- init: write here the machine header docs/_meta/docs-workflow.md § Doc metadata (repository-owned) prescribes, at the word for draft; where that section keeps no date in the blockquote, drop the `Last verified {today}.` above. The loop's own header is the one-line meta comment: type=pattern; status=draft; verified={today}; lineage=0 -->
|
|
6
6
|
<!-- naswerks-loop: draft; scanned={files} -->
|
|
7
7
|
|
|
8
8
|
---
|