@nurix/etna 0.20.34 → 0.20.36
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/data/catalog/rules/changelog.md +1 -1
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/CLAUDE.md +4 -4
- package/data/harnesses/code/agents/brainstorm.md +2 -2
- package/data/harnesses/code/agents/lld-mode.md +2 -2
- package/data/harnesses/code/agents/maintenance.md +17 -17
- package/data/harnesses/code/codex/agents/brainstorm.toml +6 -2
- package/data/harnesses/code/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/code/codex/agents/maintenance.toml +18 -17
- package/data/harnesses/code/docs/README.md +9 -17
- package/data/harnesses/code/docs/history/CHANGELOG.md +19 -18
- package/data/harnesses/code/docs/structure.md +60 -45
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/hooks/compliance.mjs +8 -2
- package/data/harnesses/code/hooks/lib/sweep.mjs +3 -2
- package/data/harnesses/code/rules/changelog.md +1 -1
- package/data/harnesses/code/skills/brainstorm/SKILL.md +4 -3
- package/data/harnesses/code/skills/brainstorm/references/harvest.md +1 -2
- package/data/harnesses/code/skills/design/SKILL.md +3 -2
- package/data/harnesses/code/skills/design/references/content.md +1 -1
- package/data/harnesses/code/skills/design/references/existing-apps.md +1 -1
- package/data/harnesses/code/skills/design/references/microcopy.md +126 -0
- package/data/harnesses/code/skills/documentation/SKILL.md +91 -142
- package/data/harnesses/code/skills/documentation/references/examples.md +35 -62
- package/data/harnesses/code/skills/documentation/references/frontmatter.md +7 -7
- package/data/harnesses/code/skills/documentation/references/source-comments.md +19 -0
- package/data/harnesses/code/skills/documentation/references/style-guide.md +21 -7
- package/data/harnesses/code/skills/documentation/references/untemplated.md +7 -6
- package/data/harnesses/code/skills/documentation/scripts/doc-lint.mjs +178 -38
- package/data/harnesses/code/skills/documentation/templates/Readme.md +68 -41
- package/data/harnesses/code/skills/documentation/templates/acceptance-criteria.md +10 -18
- package/data/harnesses/code/skills/documentation/templates/api-reference.md +7 -2
- package/data/harnesses/code/skills/documentation/templates/architecture-decision.md +5 -5
- package/data/harnesses/code/skills/documentation/templates/backlog.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/behavioral-checklist.md +9 -16
- package/data/harnesses/code/skills/documentation/templates/bookkeeping.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/changelog-index.md +21 -29
- package/data/harnesses/code/skills/documentation/templates/docs-readme.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/doctrine.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/domain-model.md +9 -4
- package/data/harnesses/code/skills/documentation/templates/environment-registry.md +6 -1
- package/data/harnesses/code/skills/documentation/templates/feature.md +4 -4
- package/data/harnesses/code/skills/documentation/templates/glossary.md +6 -1
- package/data/harnesses/code/skills/documentation/templates/handover.md +16 -16
- package/data/harnesses/code/skills/documentation/templates/implementation-map.md +9 -4
- package/data/harnesses/code/skills/documentation/templates/journal.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/memory-main.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/non-goals.md +7 -2
- package/data/harnesses/code/skills/documentation/templates/operations-procedure.md +6 -1
- package/data/harnesses/code/skills/documentation/templates/package.md +4 -8
- package/data/harnesses/code/skills/documentation/templates/plan.md +5 -11
- package/data/harnesses/code/skills/documentation/templates/protected-files.md +6 -1
- package/data/harnesses/code/skills/documentation/templates/root-readme.md +4 -4
- package/data/harnesses/code/skills/documentation/templates/security-overview.md +8 -3
- package/data/harnesses/code/skills/documentation/templates/setup.md +6 -6
- package/data/harnesses/code/skills/documentation/templates/system-overview.md +11 -6
- package/data/harnesses/code/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/testing-strategy.md +10 -5
- package/data/harnesses/code/skills/documentation/templates/ux-behavior.md +13 -2
- package/data/harnesses/code/skills/testing/SKILL.md +1 -1
- package/data/harnesses/delivery/CLAUDE.md +1 -1
- package/data/harnesses/delivery/agents/brainstorm.md +2 -2
- package/data/harnesses/delivery/agents/lld-mode.md +2 -2
- package/data/harnesses/delivery/agents/maintenance.md +17 -17
- package/data/harnesses/delivery/codex/agents/brainstorm.toml +6 -2
- package/data/harnesses/delivery/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/delivery/codex/agents/maintenance.toml +18 -17
- package/data/harnesses/delivery/harness.json +2 -2
- package/data/harnesses/delivery/rules/changelog.md +1 -1
- package/data/harnesses/delivery/skills/brainstorm/SKILL.md +4 -3
- package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +1 -2
- package/data/harnesses/delivery/skills/documentation/SKILL.md +91 -142
- package/data/harnesses/delivery/skills/documentation/references/examples.md +35 -62
- package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +7 -7
- package/data/harnesses/delivery/skills/documentation/references/source-comments.md +19 -0
- package/data/harnesses/delivery/skills/documentation/references/style-guide.md +21 -7
- package/data/harnesses/delivery/skills/documentation/references/untemplated.md +7 -6
- package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +178 -38
- package/data/harnesses/delivery/skills/documentation/templates/Readme.md +68 -41
- package/data/harnesses/delivery/skills/documentation/templates/acceptance-criteria.md +10 -18
- package/data/harnesses/delivery/skills/documentation/templates/api-reference.md +7 -2
- package/data/harnesses/delivery/skills/documentation/templates/architecture-decision.md +5 -5
- package/data/harnesses/delivery/skills/documentation/templates/backlog.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/behavioral-checklist.md +9 -16
- package/data/harnesses/delivery/skills/documentation/templates/bookkeeping.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/changelog-index.md +21 -29
- package/data/harnesses/delivery/skills/documentation/templates/docs-readme.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/doctrine.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/domain-model.md +9 -4
- package/data/harnesses/delivery/skills/documentation/templates/environment-registry.md +6 -1
- package/data/harnesses/delivery/skills/documentation/templates/feature.md +4 -4
- package/data/harnesses/delivery/skills/documentation/templates/glossary.md +6 -1
- package/data/harnesses/delivery/skills/documentation/templates/handover.md +16 -16
- package/data/harnesses/delivery/skills/documentation/templates/implementation-map.md +9 -4
- package/data/harnesses/delivery/skills/documentation/templates/journal.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/memory-main.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/non-goals.md +7 -2
- package/data/harnesses/delivery/skills/documentation/templates/operations-procedure.md +6 -1
- package/data/harnesses/delivery/skills/documentation/templates/package.md +4 -8
- package/data/harnesses/delivery/skills/documentation/templates/plan.md +5 -11
- package/data/harnesses/delivery/skills/documentation/templates/protected-files.md +6 -1
- package/data/harnesses/delivery/skills/documentation/templates/root-readme.md +4 -4
- package/data/harnesses/delivery/skills/documentation/templates/security-overview.md +8 -3
- package/data/harnesses/delivery/skills/documentation/templates/setup.md +6 -6
- package/data/harnesses/delivery/skills/documentation/templates/system-overview.md +11 -6
- package/data/harnesses/delivery/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/testing-strategy.md +10 -5
- package/data/harnesses/delivery/skills/documentation/templates/ux-behavior.md +13 -2
- package/data/harnesses/etna/CLAUDE.md +2 -2
- package/data/harnesses/etna/agents/brainstorm.md +2 -2
- package/data/harnesses/etna/agents/lld-mode.md +2 -2
- package/data/harnesses/etna/agents/maintenance.md +17 -17
- package/data/harnesses/etna/codex/agents/brainstorm.toml +6 -2
- package/data/harnesses/etna/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/etna/codex/agents/maintenance.toml +18 -17
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/rules/changelog.md +1 -1
- package/data/harnesses/etna/skills/brainstorm/SKILL.md +4 -3
- package/data/harnesses/etna/skills/brainstorm/references/harvest.md +1 -2
- package/data/harnesses/etna/skills/documentation/SKILL.md +91 -142
- package/data/harnesses/etna/skills/documentation/references/examples.md +35 -62
- package/data/harnesses/etna/skills/documentation/references/frontmatter.md +7 -7
- package/data/harnesses/etna/skills/documentation/references/source-comments.md +19 -0
- package/data/harnesses/etna/skills/documentation/references/style-guide.md +21 -7
- package/data/harnesses/etna/skills/documentation/references/untemplated.md +7 -6
- package/data/harnesses/etna/skills/documentation/scripts/doc-lint.mjs +178 -38
- package/data/harnesses/etna/skills/documentation/templates/Readme.md +68 -41
- package/data/harnesses/etna/skills/documentation/templates/acceptance-criteria.md +10 -18
- package/data/harnesses/etna/skills/documentation/templates/api-reference.md +7 -2
- package/data/harnesses/etna/skills/documentation/templates/architecture-decision.md +5 -5
- package/data/harnesses/etna/skills/documentation/templates/backlog.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/behavioral-checklist.md +9 -16
- package/data/harnesses/etna/skills/documentation/templates/bookkeeping.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/changelog-index.md +21 -29
- package/data/harnesses/etna/skills/documentation/templates/docs-readme.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/doctrine.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/domain-model.md +9 -4
- package/data/harnesses/etna/skills/documentation/templates/environment-registry.md +6 -1
- package/data/harnesses/etna/skills/documentation/templates/feature.md +4 -4
- package/data/harnesses/etna/skills/documentation/templates/glossary.md +6 -1
- package/data/harnesses/etna/skills/documentation/templates/handover.md +16 -16
- package/data/harnesses/etna/skills/documentation/templates/implementation-map.md +9 -4
- package/data/harnesses/etna/skills/documentation/templates/journal.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/memory-main.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/non-goals.md +7 -2
- package/data/harnesses/etna/skills/documentation/templates/operations-procedure.md +6 -1
- package/data/harnesses/etna/skills/documentation/templates/package.md +4 -8
- package/data/harnesses/etna/skills/documentation/templates/plan.md +5 -11
- package/data/harnesses/etna/skills/documentation/templates/protected-files.md +6 -1
- package/data/harnesses/etna/skills/documentation/templates/root-readme.md +4 -4
- package/data/harnesses/etna/skills/documentation/templates/security-overview.md +8 -3
- package/data/harnesses/etna/skills/documentation/templates/setup.md +6 -6
- package/data/harnesses/etna/skills/documentation/templates/system-overview.md +11 -6
- package/data/harnesses/etna/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/testing-strategy.md +10 -5
- package/data/harnesses/etna/skills/documentation/templates/ux-behavior.md +13 -2
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Record. Use for: the account an **unattended or multi-session build** leaves the person who owns it — written by the orchestrating session as its last act, before the owner's first decision, read in one sitting. It is a **decision queue, an undo manual and a resume file**, in that order: is it done · what must I decide today · what escaped the repository and how do I undo it · can I see it working · what was decided for me and how do I overturn it · what is red and whose it is. Everything below the divider is for the next session, not the owner. It is not a pull-request description (which argues for a diff), not a changelog entry (which carries refinement context) and not a plan (which is frozen). It is mutable while `status: open` — a successor that re-proves a state line corrects it in place and appends one Timeline row — and **freezes when the owner has acted on § 1 (`status: accepted`)**; a correction after that is a new dated hand-over linking back. Raw artefacts (plans, hand-offs, notes) live in a same-named folder beside it.
|
|
4
4
|
|
|
5
|
-
Required: **Verdict**, **
|
|
5
|
+
Required: **Verdict**, **Owner decisions due**, **Live-world ledger** (even when empty), **Ten-minute walkthrough**, **Rulings on the owner's behalf**, **Red board**, **What was built**, **Proof**, **State**, **Open loops**, **Artefacts & mandate**. Optional: Left alone, Discoveries, Debt, Cost, Timeline.
|
|
6
6
|
|
|
7
7
|
**Reading order is act → verify → understand.** Owner half, ~20 minutes: Verdict (1) · § 1 (2) · § 2 (2) · § 3 (10, at the product) · § 4 (3) · § 5–6 (2). Successor half, read when the job arrives: § 8–14 (~10).
|
|
8
8
|
|
|
@@ -31,17 +31,17 @@ prs:
|
|
|
31
31
|
| Built | {N} units · {N} plans · ledger rows {N}, discharged {N}, blocked {N} |
|
|
32
32
|
| Proof | {N} tests pass / {N} fail — on `{sha}`, verified {HH:MM} |
|
|
33
33
|
| Decide today | **{N}** — § 1 |
|
|
34
|
-
| Touched the live world | **{N}** acts, **{N}**
|
|
34
|
+
| Touched the live world | **{N}** acts, **{N}** irreversible — § 2 |
|
|
35
35
|
| Red | {N} mine · {N} pre-existing · {N} environment — § 5 |
|
|
36
36
|
| See it work | {N} min — § 3 |
|
|
37
37
|
| Taken alone | {N} decisions, {N} stops filed of {N} — § 4 |
|
|
38
38
|
|
|
39
39
|
**Start here:** `{the one command that brings the reader's machine to the state everything below describes}`
|
|
40
|
-
**
|
|
40
|
+
**Single most urgent act:** {act} — by {YYYY-MM-DD}, or {consequence}.
|
|
41
41
|
|
|
42
|
-
## 1.
|
|
42
|
+
## 1. Owner decisions due
|
|
43
43
|
|
|
44
|
-
| # | Decision or act | Why today |
|
|
44
|
+
| # | Decision or act | Why today | Default on silence | Decide by | Do it (exact) | Evidence |
|
|
45
45
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
46
46
|
| 1 | {one line, no mechanism} | {what a week costs} | {the outcome silence produces} | {date} | `{command}` / {PR link} / {UI path} | `{path:line · sha · PR}` |
|
|
47
47
|
|
|
@@ -55,19 +55,19 @@ Everything that left the repository, hardest to undo first. Verified {HH:MM}.
|
|
|
55
55
|
|
|
56
56
|
**Did not happen, and the proof:** {claim} — `{command}`.
|
|
57
57
|
|
|
58
|
-
## 3.
|
|
58
|
+
## 3. Ten-minute walkthrough
|
|
59
59
|
|
|
60
|
-
**
|
|
60
|
+
**Prerequisite:** `{command}` · **Sign in as:** {who} · **Total:** {N} min
|
|
61
61
|
|
|
62
|
-
| # | Do (URL → click) |
|
|
62
|
+
| # | Do (URL → click) | Expected result | It proves | If not |
|
|
63
63
|
| --- | --- | --- | --- | --- |
|
|
64
64
|
| 1 | {url} → {action} | {an observable a person can be wrong about} | {unit from § 6} | {§ 5 row, or "file it — new"} |
|
|
65
65
|
|
|
66
|
-
## 4.
|
|
66
|
+
## 4. Rulings on the owner's behalf
|
|
67
67
|
|
|
68
68
|
Each was taken because waiting would have stopped the run. Sorted by cost to reverse.
|
|
69
69
|
|
|
70
|
-
| # |
|
|
70
|
+
| # | Ruling | Instead of | Why | Authority | Landed at | Overturn — exact | Default on silence | Hardens when |
|
|
71
71
|
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
72
72
|
| D-1 | {the ruling} | {the alternative, fairly} | {the constraint} | {owner said so HH:MM "…" / auto-ruled as recommended / taken alone — by {agent · model}} | `{file:line}` | `{edit or command}` | {default} | {event} |
|
|
73
73
|
|
|
@@ -85,7 +85,7 @@ Each was taken because waiting would have stopped the run. Sorted by cost to rev
|
|
|
85
85
|
| --- | --- | --- | --- |
|
|
86
86
|
| {name} | {one clause, behaviour before mechanism} | {branch · PR · release} | {suite + counts, or "driven only", or empty} |
|
|
87
87
|
|
|
88
|
-
## 7.
|
|
88
|
+
## 7. Untouched scope
|
|
89
89
|
|
|
90
90
|
| Thing | State | Why untouched |
|
|
91
91
|
| --- | --- | --- |
|
|
@@ -126,13 +126,13 @@ Present tense; every row true of `as_of_commit`, and every row re-provable by it
|
|
|
126
126
|
| --- | --- | --- | --- | --- | --- |
|
|
127
127
|
| L-1 | {present tense} | {session / owner / external} | `{command}` or {the question, with the default in force} | {id / —} | `{path:line}` |
|
|
128
128
|
|
|
129
|
-
## 11. Discoveries
|
|
129
|
+
## 11. Discoveries
|
|
130
130
|
|
|
131
131
|
| # | Trap | The truth | Cost paid | Guard |
|
|
132
132
|
| --- | --- | --- | --- | --- |
|
|
133
133
|
| X-1 | {what it looks like from outside} | {present-tense fact} | {hours / runs} | `{command}` or `none — {what would hold it}` |
|
|
134
134
|
|
|
135
|
-
## 12.
|
|
135
|
+
## 12. Deferrable debt
|
|
136
136
|
|
|
137
137
|
| # | What | Why not now | Re-open when | Parked at |
|
|
138
138
|
| --- | --- | --- | --- | --- |
|
|
@@ -160,10 +160,10 @@ Present tense; every row true of `as_of_commit`, and every row re-provable by it
|
|
|
160
160
|
## Field rules
|
|
161
161
|
|
|
162
162
|
- **Verdict (≤14 lines).** One token from the closed set — `DONE` · `DONE, NEEDS YOUR CALLS` · `PARTIAL` · `STOPPED AT BUDGET` · `FAILED` — first in the body; a paragraph before it is a format violation. The scoreboard is always the same seven rows in that order, and a zero is written `0` — `Touched the live world: 0` is one of the most valuable lines the file can carry. `Start here` is exactly one command.
|
|
163
|
-
- **§ 1
|
|
163
|
+
- **§ 1 Owner decisions due (≤7 rows).** Owner-only acts, sorted by cost of deferral descending. `Do it (exact)` is a command, a link or a literal UI path — `git revert -m 1 {sha}`, never "revert the merge". `Default on silence` is mandatory and honest. **A decision has an alternative and belongs in § 4; an act outside the repository with no alternative is a chore and belongs here.**
|
|
164
164
|
- **§ 2 Live-world ledger.** Required even when empty — `none — nothing left the repository`, with the command that proves it. Sorted hardest-to-undo first, never chronologically. `Reversible` takes three values: `no` states what now exists in the world, `with loss` names what is lost, `yes` carries the command. An act reversible only forward (redeploy, reseed, a superseding publish) is `no`, and the forward path goes in `Undo`. A backup states its expiry; copying a volatile backup somewhere durable is row 1 of § 1.
|
|
165
|
-
- **§ 3
|
|
166
|
-
- **§ 4
|
|
165
|
+
- **§ 3 Ten-minute walkthrough (≤6 steps, ≤10 min).** Every `Expected result` is an observable a person can be wrong about — a number, a named control, a status code — never "the page loads". It is the only check the owner performs with his own eyes rather than on the build's word.
|
|
166
|
+
- **§ 4 Rulings on the owner's behalf (≤10 rows).** Sorted by cost to reverse. `Authority` takes exactly three values — the owner said so (with the words and the time) · auto-ruled as recommended · taken alone — recorded per decision, never per run: it is the distinction an unattended run exists to preserve. `Overturn` is an edit or a command. `Hardens when` names the event after which reversal stops being cheap. A ruling with no reversal path is a constraint, not a decision — it moves to § 12.
|
|
167
167
|
- **§ 5–7.** One home per fact: a red appears in § 5 even when a decision caused it, and the decision cites the row. `Mine?` is proved by the command or stash in `Proof`; `mine` is the default when no proof is offered. § 6 leads with behaviour, not plan slugs. § 7 exists so an owner scanning the repository does not mistake somebody else's branch for the run's debris.
|
|
168
168
|
- **§ 8 Proof.** **An unproven claim is an empty cell, never a sentence** — prose has no empty cell to scan for. `Independent?` reads `no` whenever one agent authored both the code and its pin, or found, fixed and pinned the same defect, and names who. Ledger counts are parsed from the plan, never quoted from an agent's summary, so `blocked` cannot hide inside "discharged". Every `G-n` names the command that would close it.
|
|
169
169
|
- **§ 9 State.** Present tense; a claim that cannot be re-proved by its `Re-prove` command does not belong here — it moves to § 15 as a dated event. Volatile things (`/tmp`, pid files, ports, tokens, browser connections) declare a lifetime and the command that makes them durable.
|
|
@@ -8,9 +8,14 @@ Truth document. Use for: **the cold-start execution contract of a project being
|
|
|
8
8
|
- **A wave's done criterion is observable** — its plans' verification gates passed, the suite green, a named surface driveable. Never "feels complete".
|
|
9
9
|
- **Authority order names this repo's own docs, most specific wins.** A contradiction between documents is repaired in the owning truth doc *before* code — never reinterpreted while planning.
|
|
10
10
|
- **Plans are records, not an execution queue.** The map points at the active wave's dated plan; historical plans are read only when a truth doc cites them as provenance.
|
|
11
|
-
- **Update in place as waves complete** — the map
|
|
11
|
+
- **Update in place as waves complete** — the map names the active wave and links its plan; which waves are finished is read from their plans' `Status:`, the progress record, never restated here.
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
---
|
|
15
|
+
type: implementation-map
|
|
16
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
17
|
+
---
|
|
12
18
|
|
|
13
|
-
```
|
|
14
19
|
# {Project} implementation map
|
|
15
20
|
|
|
16
21
|
## Cold-start contract
|
|
@@ -36,7 +41,7 @@ When documents disagree:
|
|
|
36
41
|
| 1 | {docs/features/x.md, docs/features/y.md} | — | {observable criterion} |
|
|
37
42
|
| 2 | {…} | 1 | {…} |
|
|
38
43
|
|
|
39
|
-
##
|
|
44
|
+
## Active wave
|
|
40
45
|
|
|
41
|
-
{
|
|
46
|
+
{The wave being built, linked to its open plan ([plan](../history/plans/YYYY-MM-DD-slug.md)).}
|
|
42
47
|
```
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Journal (docs/history/journal.md)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Queue: rows are appended, never rewritten, and deleted once resolved. Use for: durable mid-execution knowledge — a fact discovered while building that some owning doc will eventually carry, captured the moment it exists so it survives the session. A row is resolved by landing in its owning doc: the row is deleted and the changelog entry cites it. The file stays short by construction; a journal that only grows is a queue nobody drains.
|
|
4
4
|
|
|
5
5
|
One line per fact. Never narrative, never progress notes (progress lives in the plan), never user preferences (those go to the runtime's memory store).
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
# Journal
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Capture of mid-execution knowledge — one line per fact, written the moment it exists, resolved by landing in its owning doc (delete the row, cite it in the changelog entry). Format: `YYYY-MM-DD · <area> · <one-line fact> → lands-in: <owning doc | backlog | memory>`
|
|
11
11
|
|
|
12
12
|
- YYYY-MM-DD · {area} · {one-line fact} → lands-in: {owning doc | backlog | memory}
|
|
13
13
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scaffold: docs/memory/main.md
|
|
2
2
|
|
|
3
|
-
Baseline scaffold
|
|
3
|
+
Queue. Baseline scaffold, created if missing by the `maintenance` agent's baseline. Target file: `docs/memory/main.md`. Entries are appended, and retired by deletion when a document or the code comes to say the same thing, or a later entry replaces them; an entry is never edited to stay current.
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
---
|
|
@@ -11,7 +11,7 @@ description: Project-wide patterns and conventions confirmed in this codebase. P
|
|
|
11
11
|
|
|
12
12
|
# Main Agent — Project Memory
|
|
13
13
|
|
|
14
|
-
Append entries below,
|
|
14
|
+
Append entries below, newest at the bottom. Format:
|
|
15
15
|
|
|
16
16
|
## YYYY-MM-DD — {topic}
|
|
17
17
|
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Truth document. Use for: what the system deliberately does **not** do. A non-goal is a decision, not an omission — each entry carries the why and what would reopen it. Readers (and agents) use this to stop re-proposing settled exclusions.
|
|
4
4
|
|
|
5
|
-
```
|
|
5
|
+
```markdown
|
|
6
|
+
---
|
|
7
|
+
type: non-goals
|
|
8
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
9
|
+
---
|
|
10
|
+
|
|
6
11
|
# Non-Goals
|
|
7
12
|
|
|
8
13
|
Things this system deliberately does not do. Each is a decision — don't re-propose one without new information of the kind its "revisit if" names.
|
|
9
14
|
|
|
10
|
-
- **{Non-goal}
|
|
15
|
+
- **{Non-goal}:** {why it's excluded}. Revisit if: {the trigger that would reopen it}.
|
|
11
16
|
```
|
|
@@ -8,7 +8,12 @@ Required: **Goal**, **Steps**, **Verification**. Optional: Preconditions, Troubl
|
|
|
8
8
|
|
|
9
9
|
If a procedure is a deterministic command list run frequently, script it and have the doc point at the script — a doc should carry judgment (when, why, what to check), not replace automation.
|
|
10
10
|
|
|
11
|
-
```
|
|
11
|
+
```markdown
|
|
12
|
+
---
|
|
13
|
+
type: operations
|
|
14
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
15
|
+
---
|
|
16
|
+
|
|
12
17
|
# {Procedure Name}
|
|
13
18
|
|
|
14
19
|
**Goal:** What this procedure accomplishes, one line.
|
|
@@ -6,7 +6,7 @@ Truth document. Use for: **one workspace package** — one unit of distribution:
|
|
|
6
6
|
|
|
7
7
|
**A package document's deepest layer is its public contract** (`references/style-guide.md` § Shape — the model first, the detail after): the commands and flags a person types, the exports another package imports, what is installed and where. For a CLI the flags *are* the promise, so they belong in Usage. It stops before internal layout, build steps and which file holds what.
|
|
8
8
|
|
|
9
|
-
**A package document is the residual owner of its own tree.** Every file in the package whose header names no narrower document is its to speak for, so it loses to every system or feature document a header names. Until the ownership scan switches to header pointers, its transitional `owns:` is the whole package glob.
|
|
9
|
+
**A package document is the residual owner of its own tree.** Every file in the package whose header names no narrower document is its to speak for, so it loses to every system or feature document a header names. Until the ownership scan switches to header pointers, its transitional `owns:` is the whole package glob. Which subtrees narrower documents speak for is computed from their headers, never tabled here.
|
|
10
10
|
|
|
11
11
|
**Sharp, bulleted, labelled with noun phrases** (`references/style-guide.md` § Labels). Every section after the goal line is bullets under a noun-phrase heading, each bullet a bold noun-phrase label followed by one or two sentences.
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ Truth document. Use for: **one workspace package** — one unit of distribution:
|
|
|
15
15
|
| Section | When |
|
|
16
16
|
| --- | --- |
|
|
17
17
|
| `Scope` | required. Why the package is its own unit, who consumes it, and what it deliberately does not hold |
|
|
18
|
-
| `Ownership` | required, as one line
|
|
18
|
+
| `Ownership` | required, as one line |
|
|
19
19
|
| `Usage` | required |
|
|
20
20
|
| `Decisions` | once any choice was made that the code cannot explain |
|
|
21
21
|
| `Promises` | required |
|
|
@@ -49,11 +49,7 @@ owns: ["packages/{name}/**"] # transitional — the residual
|
|
|
49
49
|
|
|
50
50
|
## Ownership
|
|
51
51
|
|
|
52
|
-
This document is the residual owner of `packages/{name}
|
|
53
|
-
|
|
54
|
-
| Subtree | Stated and owned by |
|
|
55
|
-
| --- | --- |
|
|
56
|
-
| `src/{machine}/**` | [{system}](../systems/{system}.md) |
|
|
52
|
+
This document is the residual owner of `packages/{name}/**`; a subtree whose files' headers name a system or feature document is that document's.
|
|
57
53
|
|
|
58
54
|
## Usage
|
|
59
55
|
|
|
@@ -77,7 +73,7 @@ This document is the residual owner of `packages/{name}/**`. Claimed at higher s
|
|
|
77
73
|
- **Commands and exports:** {…} — the public contract
|
|
78
74
|
- **Code root:** `packages/{name}/`
|
|
79
75
|
- **Seams:** {…} by name
|
|
80
|
-
- **Checklist:** `tests/{package}.md`
|
|
76
|
+
- **Checklist:** `docs/tests/{package}.md`
|
|
81
77
|
- **See also:** {neighbour}: {why}
|
|
82
78
|
|
|
83
79
|
No file lists or symbol rosters — those are the graph's.
|
|
@@ -8,7 +8,7 @@ The `boundary` skill parses the **Proposed Changes** sections to check boundary
|
|
|
8
8
|
|
|
9
9
|
**Doc Obligations is the one ledger the plan's author writes.** Deriving tests from behavior is judgment, which is why `testing` owns that section and it is marked never-hand-author; resolving Proposed Changes' file paths to the feature docs that own them is a **lookup** against the ownership index already injected at session start. Different work, different rule — fill it yourself, while the touch list is fresh.
|
|
10
10
|
|
|
11
|
-
The **`Gates:`** line carries
|
|
11
|
+
The **`Gates:`** line carries one machine-read segment. The compliance hook greps **`Boundary:`** and blocks implementation edits inside the plan's scope until it reads `passed`: `Boundary: pending` has no verdict yet and `Boundary: blocked` is a verdict against coding, so both wall. The `boundary` skill rewrites it to `Boundary: passed YYYY-MM-DD` or `Boundary: blocked YYYY-MM-DD`; a blocked plan folds the amendments and re-runs the skill. The other two plan gates are enforced by **section presence**: a plan with no `## Test Obligations` or no `## Doc Obligations` section blocks the same edits — the sections are the artifacts, and the gate derives from them, not from a claim about them. A **`Polygraph:`** segment appears only when the user has the `polygraph` agent audit the plan's documents — it appends `Polygraph: passed YYYY-MM-DD (N docs · N claims · N corrected · N registered)`, or `Polygraph: pending` while an owner question is open. It is a trace for readers, never an obligation: a plan carries none by default, no hook or CI check reads it, and it is never hand-written. Never hand-edit the line to skip a gate.
|
|
12
12
|
|
|
13
13
|
```
|
|
14
14
|
# {Feature Name}
|
|
@@ -51,12 +51,11 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
|
|
|
51
51
|
## Doc Obligations
|
|
52
52
|
|
|
53
53
|
<!-- One row per feature doc whose `owns:` globs intersect the Proposed Changes above — resolve
|
|
54
|
-
them against the injected ownership index. Hand-authored: this is a lookup, not research.
|
|
55
|
-
Amendable while the plan is open; discharged at Completion. -->
|
|
54
|
+
them against the injected ownership index. Hand-authored: this is a lookup, not research. Amendable while the plan is open; discharged at Completion. -->
|
|
56
55
|
|
|
57
|
-
| Doc | Claim that changes |
|
|
56
|
+
| Doc | Claim that changes | Still the owning doc? | Outcome |
|
|
58
57
|
| --- | --- | --- | --- |
|
|
59
|
-
| `docs/features/{feature}.md` | what it says today that this plan makes false | yes / no —
|
|
58
|
+
| `docs/features/{feature}.md` | what it says today that this plan makes false | yes / no — the document the changed files' headers should name | written empty; discharged at Completion — **updated** / **owes nothing** (with the reason) / **blocked** (→ backlog) |
|
|
60
59
|
|
|
61
60
|
**"None" is valid** — a plan touching only unowned paths owes no doc update, and says so explicitly. It is not a free pass: `boundary` builds its own touch list from the same Proposed Changes and reports docs this table missed.
|
|
62
61
|
|
|
@@ -69,12 +68,7 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
|
|
|
69
68
|
## Test Obligations
|
|
70
69
|
|
|
71
70
|
<!-- Written by the `testing` skill (plan-gate mode) at the plan gate (after `boundary`). One row per
|
|
72
|
-
promised behavior: layer · target file · oracle · fixtures · an empty Outcome cell the
|
|
73
|
-
verification gate fills (satisfied / owes nothing / blocked → backlog). Amendable while the
|
|
74
|
-
plan is open. Do not hand-author. NEVER put a pipe in a ledger cell, escaped or not — the
|
|
75
|
-
compliance hook splits rows on `|` at a fixed column index with no unescaping, so a
|
|
76
|
-
markdown-legal `\|` shifts every later cell and the wall blocks a row that is in fact
|
|
77
|
-
discharged. Write "`install` or `update`", not "`install \| update`". -->
|
|
71
|
+
promised behavior: layer · target file · oracle · fixtures · an empty Outcome cell the verification gate fills (satisfied / owes nothing / blocked → backlog). Amendable while the plan is open. Do not hand-author. A literal pipe in a cell is written `\|`; an unescaped one adds a column and shifts every later cell. Prefer "`install` or `update`" to escaping. -->
|
|
78
72
|
|
|
79
73
|
## Open Questions
|
|
80
74
|
|
|
@@ -4,7 +4,12 @@ Truth document. Use for: documenting critical files that need approval before mo
|
|
|
4
4
|
|
|
5
5
|
This doc answers *what is protected and why breaking it hurts* — nothing more. Don't duplicate function-level detail here (signatures, inputs/outputs): it drifts from both the code and the owning feature doc. The owning feature doc is the canonical reference for how the code works; link to it.
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
type: protected-files
|
|
10
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
11
|
+
---
|
|
12
|
+
|
|
8
13
|
# Protected Files
|
|
9
14
|
|
|
10
15
|
Critical files requiring approval before modification.
|
|
@@ -13,7 +13,7 @@ Sections come in this order; 1 to 3 are the outward-facing first screen, 4 onwar
|
|
|
13
13
|
5. **State.** Optional: a one-line blockquote, present only while something repo-wide is true that a newcomer must know (frozen, mid-migration, mid-breaking-change on `dev`). It links the plan or runbook that owns the change. Say here which units publish and where, if any do.
|
|
14
14
|
6. **The main path.** Three to six short paragraphs, or numbered stages, along the main request or data path: who arrives, what is built, where state lives, how the result leaves. Name a technology only where it explains a stage. End with a link to the system overview.
|
|
15
15
|
7. **Repository map.** A sentence on how the tree is organised, then one table row per top-level unit (package, app, service), giving its path, what it is in one line, and its owning doc; the top folders that are not packages get a sentence each. This replaces the tree.
|
|
16
|
-
8. **
|
|
16
|
+
8. **Load-bearing rules.** Optional. At most five one-line invariants, public/internal boundaries, never-edit paths (generated, protected) or non-goals, each linked to the doc that argues it.
|
|
17
17
|
9. **Destinations.** An intent-to-destination table. Its last row is the one for agents.
|
|
18
18
|
10. **Everyday commands.** Optional. At most four commands run on every change, ending at the gate a push must pass. First-run commands are never here.
|
|
19
19
|
|
|
@@ -31,11 +31,11 @@ Sections come in this order; 1 to 3 are the outward-facing first screen, 4 onwar
|
|
|
31
31
|
|
|
32
32
|
### Writing rules
|
|
33
33
|
|
|
34
|
-
- **Budget: between 60 and 140 non-blank lines, the outward part under a third of it.** Prose is welcome — The main path and
|
|
34
|
+
- **Budget: between 60 and 140 non-blank lines, the outward part under a third of it.** Prose is welcome — The main path and Load-bearing rules read better as paragraphs than as rows — but past the ceiling a section is hosting content that belongs in a doc. Move it and leave the link.
|
|
35
35
|
- **Every section is either a fact the reader acts on or a link.** If a section needs a paragraph, it needs a doc.
|
|
36
36
|
- **One H1, then H2 sections, in plain Markdown.** Sentence-case headings, no emoji, no HTML layout, and no `#` comment lines inside code blocks (they parse as H1s).
|
|
37
37
|
- **Relative links into the repo only.** Never an absolute repo URL. Never an external site as the home of a canonical doc.
|
|
38
|
-
- **Link folders and mandated scaffolds, never rosters.** The allowed targets are folders, `docs/README.md`, `docs/structure.md`, `docs/operations/setup.md`, `docs/history/CHANGELOG.md`, `docs/history/backlog.md`, `CLAUDE.md` and the owning docs in the Map. A procedure is named only where a Destinations row needs it. Every heading and table header is a noun phrase (`../references/style-guide.md` § Labels). Never list individual feature docs: the ownership index finds them.
|
|
38
|
+
- **Link folders and mandated scaffolds, never rosters.** The allowed targets are folders, `docs/README.md`, `docs/structure.md`, `docs/operations/setup.md`, `docs/history/CHANGELOG.md`, `docs/history/backlog.md`, `CLAUDE.md`, `AGENTS.md` and the owning docs in the Map. A procedure is named only where a Destinations row needs it. Every heading and table header is a noun phrase (`../references/style-guide.md` § Labels). Never list individual feature docs: the ownership index finds them.
|
|
39
39
|
- **No tree.** The Map stops at top-level units and never lists files. Mark paths that look primary but are not, for example "`legacy/`: reference only, never edited".
|
|
40
40
|
- **The Map is a coarse view of the ownership index, not a rival to it.** The Owning doc column names the doc the index resolves for that path. When the two disagree the index wins, and the Map row is fixed in the same change.
|
|
41
41
|
- **No version numbers and no dates.** Name the file that pins a version (`.nvmrc`, `packageManager`, `rust-toolchain.toml`). Write in the present tense, with no "coming soon" and no "as of".
|
|
@@ -90,7 +90,7 @@ The rest of this page is for the team and for coding agents working in this repo
|
|
|
90
90
|
|
|
91
91
|
{One sentence each for the top folders that are not packages — `registry/`, `scripts/`, `docs/` — with their owning doc.} Where every doc lives: [docs/structure.md](docs/structure.md).
|
|
92
92
|
|
|
93
|
-
##
|
|
93
|
+
## Load-bearing rules
|
|
94
94
|
|
|
95
95
|
{One sentence saying these are stated here and argued in the documents they point at.}
|
|
96
96
|
|
|
@@ -4,7 +4,12 @@ Truth document. Use for: the single place the system's security posture is state
|
|
|
4
4
|
|
|
5
5
|
Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
type: security-overview
|
|
10
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
11
|
+
---
|
|
12
|
+
|
|
8
13
|
# Security Overview
|
|
9
14
|
|
|
10
15
|
## Assets
|
|
@@ -13,7 +18,7 @@ Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
|
|
|
13
18
|
|
|
14
19
|
## Trust boundaries
|
|
15
20
|
|
|
16
|
-
- {Boundary}
|
|
21
|
+
- **{Boundary}:** {what crosses it, and what checks the crossing}
|
|
17
22
|
|
|
18
23
|
## Controls
|
|
19
24
|
|
|
@@ -23,5 +28,5 @@ Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
|
|
|
23
28
|
|
|
24
29
|
## Accepted risks
|
|
25
30
|
|
|
26
|
-
- {Risk knowingly carried}
|
|
31
|
+
- **{Risk knowingly carried}:** accepted because {reason}; owner: {who}. Revisit if: {trigger}.
|
|
27
32
|
```
|
|
@@ -4,7 +4,7 @@ Truth document, operations genre (`type: operations`). Use for: **the one-time p
|
|
|
4
4
|
|
|
5
5
|
It is distinct from `local-development.md`, the daily loop: watch modes, resetting state, per-package traps, the inner test cycle. Setup runs once per machine. Local development runs every session. Setup ends by handing off to it, and neither copies the other. Deploying is `deployment.md`.
|
|
6
6
|
|
|
7
|
-
Required: **Goal**, **Stack**, **Prerequisites**, **
|
|
7
|
+
Required: **Goal**, **Stack**, **Prerequisites**, **Installation**, **First run**, **Verification**. Optional, included only with real content: the audience fork, **Before cloning**, **Environment files**, **Local services**, **Reset**, **Common failures**.
|
|
8
8
|
|
|
9
9
|
### Writing rules
|
|
10
10
|
|
|
@@ -32,7 +32,7 @@ description: "{at most 300 characters: what this document settles and where its
|
|
|
32
32
|
|
|
33
33
|
**Goal:** take a fresh machine from clone to a verified first run of {what runs: e.g. "the product Worker on :{port} and the web shell on :{port}, signed in as the dev fixture"}. Done once per machine; the daily loop is [`local-development.md`]({local-development}.md).
|
|
34
34
|
|
|
35
|
-
{Optional audience fork: "Only running {the CLI / one package}? Stop after
|
|
35
|
+
{Optional audience fork: "Only running {the CLI / one package}? Stop after Installation and see [`{procedure}`]({path})."}
|
|
36
36
|
|
|
37
37
|
## Stack
|
|
38
38
|
|
|
@@ -59,7 +59,7 @@ Why these were chosen: [{system overview}](../architecture/{overview}.md).
|
|
|
59
59
|
|
|
60
60
|
- **{Trap}:** {what a fresh clone hits and the one command that clears it, e.g. `git lfs install`, `git submodule update --init`}.
|
|
61
61
|
|
|
62
|
-
##
|
|
62
|
+
## Installation
|
|
63
63
|
|
|
64
64
|
\`\`\`bash
|
|
65
65
|
git clone {url} && cd {repo}
|
|
@@ -103,7 +103,7 @@ The contract is [`{example file or typed Env}`](../../{path}). Read it before co
|
|
|
103
103
|
|
|
104
104
|
4. Open `{http://localhost:port}` and {sign in as `{seeded user}` / reach `{first screen}`}.
|
|
105
105
|
|
|
106
|
-
##
|
|
106
|
+
## Verification
|
|
107
107
|
|
|
108
108
|
- `{curl -fsS http://localhost:{port}/{health}}` returns `200` {and `{body}`}.
|
|
109
109
|
- `{doctor or status command}` reports {expected}. ← keep whichever exists
|
|
@@ -130,9 +130,9 @@ The baseline scaffolds `docs/operations/setup.md` when it is missing and the rep
|
|
|
130
130
|
|
|
131
131
|
- **Stack:** from the workspace manifests, one row per layer.
|
|
132
132
|
- **Prerequisites:** from the pinning files.
|
|
133
|
-
- **
|
|
133
|
+
- **Installation and First run:** from the root README's getting-started block (if one exists) and the root scripts.
|
|
134
134
|
- **Environment files:** from every `*.example` / `.dev.vars.example` in the workspace.
|
|
135
|
-
- **
|
|
135
|
+
- **Verification:** from a health route, a doctor command or the test script.
|
|
136
136
|
|
|
137
137
|
It leaves Common failures empty until a failure is root-caused, and it drops every section it cannot fill concretely.
|
|
138
138
|
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Truth document. Use for: the bird's-eye view — what the system is, its subsystems, and how they connect. The first doc a new reader opens after the README; austere and short (two screens max). Depth lives in feature docs — this doc maps, it doesn't explain.
|
|
4
4
|
|
|
5
|
-
Required: **
|
|
5
|
+
Required: **Purpose**, **Subsystem map**. Optional: Key flows, Sources of truth.
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
type: system-overview
|
|
10
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
11
|
+
---
|
|
6
12
|
|
|
7
|
-
```
|
|
8
13
|
# System Overview
|
|
9
14
|
|
|
10
|
-
##
|
|
15
|
+
## Purpose
|
|
11
16
|
|
|
12
17
|
{Two or three sentences: what the system does, for whom, in what environment it runs.}
|
|
13
18
|
|
|
@@ -18,13 +23,13 @@ Required: **What this is**, **Subsystem map**. Optional: Key flows, Where the tr
|
|
|
18
23
|
└──────────┘ └──────────┘ └──────────┘
|
|
19
24
|
{One box per subsystem; label the arrows with the contract that crosses them.}
|
|
20
25
|
|
|
21
|
-
- **{Subsystem}
|
|
26
|
+
- **{Subsystem}:** what it owns, in one line. → [owning doc](../features/{feature}.md)
|
|
22
27
|
|
|
23
28
|
## Key flows
|
|
24
29
|
|
|
25
|
-
{At most two or three
|
|
30
|
+
{At most two or three mermaid flow diagrams, at role level, for the flows everything else hangs off: request lifecycle, auth, the core domain operation.}
|
|
26
31
|
|
|
27
|
-
##
|
|
32
|
+
## Sources of truth
|
|
28
33
|
|
|
29
34
|
| Area | Canonical doc |
|
|
30
35
|
| ---- | ------------- |
|
|
@@ -69,7 +69,7 @@ owns: # transitional — region globs
|
|
|
69
69
|
- **Objects:** {…}
|
|
70
70
|
- **Code roots:** {…} — directories, one per package the machine spans
|
|
71
71
|
- **Seams:** {…} by name
|
|
72
|
-
- **Checklist:** `tests/{system}.md`
|
|
72
|
+
- **Checklist:** `docs/tests/{system}.md`
|
|
73
73
|
- **See also:** {neighbour}: {why}
|
|
74
74
|
|
|
75
75
|
No tables, routes or symbol rosters — those are the graph's.
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
# Testing Strategy (docs/
|
|
1
|
+
# Testing Strategy (docs/architecture/common/testing.md)
|
|
2
2
|
|
|
3
3
|
Truth document. Use for: the repo's test posture — what is tested at which level, how to run it, and what is deliberately untested. The framework choices come from the harness testing rule; this doc records how *this repo* applies them.
|
|
4
4
|
|
|
5
|
-
Required: **Levels**, **
|
|
5
|
+
Required: **Levels**, **Commands**. Optional: Deliberately untested, New tests.
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
type: testing-strategy
|
|
10
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
11
|
+
---
|
|
6
12
|
|
|
7
|
-
```
|
|
8
13
|
# Testing Strategy
|
|
9
14
|
|
|
10
15
|
## Levels
|
|
@@ -14,7 +19,7 @@ Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a tes
|
|
|
14
19
|
| Unit / integration | {runner} | `tests/` | {what} |
|
|
15
20
|
| E2E | {runner} | `e2e/` | {what} |
|
|
16
21
|
|
|
17
|
-
##
|
|
22
|
+
## Commands
|
|
18
23
|
|
|
19
24
|
- `{pm} test` — the whole unit suite (CI gate)
|
|
20
25
|
- `{pm} run test:e2e` — {when to run}
|
|
@@ -23,7 +28,7 @@ Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a tes
|
|
|
23
28
|
|
|
24
29
|
- {Area} — {why, and what verifies it instead (typecheck, boot check, manual journey)}
|
|
25
30
|
|
|
26
|
-
##
|
|
31
|
+
## New tests
|
|
27
32
|
|
|
28
33
|
1. {Where the file goes, what it's named, where fixtures live}
|
|
29
34
|
```
|
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
**`type: ux`**, plus `status:` and `objects:` — the objects the surface presents (`references/frontmatter.md`). The doctrine it answers to (the state vocabulary, the routing doctrine, the information architecture) is named in its Purpose for people and computed through shared objects for tooling.
|
|
6
6
|
|
|
7
|
+
```yaml
|
|
8
|
+
---
|
|
9
|
+
type: ux
|
|
10
|
+
description: "{at most 300 characters: what this document settles and where its boundary sits}"
|
|
11
|
+
status: active # draft until the surface it decides is built
|
|
12
|
+
objects: [workspace, run] # the objects the surface presents
|
|
13
|
+
owns: # transitional, only when this document speaks for the surface's components (references/frontmatter.md)
|
|
14
|
+
- packages/{pkg}/src/{surface}/**
|
|
15
|
+
---
|
|
16
|
+
```
|
|
17
|
+
|
|
7
18
|
**Why this genre exists.** A feature doc (LLD) states what a feature is, how its data flows, and which contracts it honours — all of which stay plausibly true through a rewrite of the surface. Nothing else in the repo states what a person *observes*. So a change to the wire lands, the interface absorbs it, and the absorption reads as maintenance: no test fails, no lint fires, no document is contradicted. This document is the thing a silent change contradicts.
|
|
8
19
|
|
|
9
20
|
**Not a test plan.** `docs/tests/{feature}.md` records that behavior was driven and holds `Pinned:` traces; this document *decides* the behavior it later verifies. Written after the code, it is a transcript. Write it first.
|
|
@@ -15,9 +26,9 @@
|
|
|
15
26
|
| One surface's — a panel, an editor, a dialog | `docs/features/{surface}-ux.md`; its component files' headers name it |
|
|
16
27
|
| Cross-cutting — routing, information architecture, the state vocabulary every surface obeys, presentation of streams | `docs/architecture/` — owns no code, like every architecture doc |
|
|
17
28
|
|
|
18
|
-
**Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **
|
|
29
|
+
**Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **See also** line under For the agent instead, phrased as *different promises over the same files*, and the object closure links the two through the objects both name. Where no document speaks for the component yet, its header names this one.
|
|
19
30
|
|
|
20
|
-
That matters because a doc nothing implicates is a doc that rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent. The
|
|
31
|
+
That matters because a doc nothing implicates is a doc that rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent. The See also line is the weaker of the two bindings; prefer the header pointer wherever no document speaks for the component yet.
|
|
21
32
|
|
|
22
33
|
---
|
|
23
34
|
|
|
@@ -183,6 +183,6 @@ Runs as the tail of every build pass — the session opens it the moment the uni
|
|
|
183
183
|
5. **Discharge every ledger row into exactly one outcome**: **satisfied** (test green, or driven check passed), **owes nothing** (with the reason — compiler-guarded, covered elsewhere), or **blocked** (missing infrastructure named, row converted to a backlog item). **Open by re-reading the ledger from the plan file on disk, never from conversation memory** — a context-held copy is how rows get missed. **Write each row's outcome into its `Outcome` cell in the plan file** — exactly `satisfied`, `owes nothing — {reason}`, or `blocked → backlog` — because the Stop wall and CI read that cell, and a row left unexamined blocks completion.
|
|
184
184
|
6. **Report results honestly, including failures**; record which test now guards each checklist section (`Pinned:` traces) and each section's `AC:` line where the repo carries a keyed acceptance-criteria source, closing with the coverage count — `AC coverage: {n}/{m}; uncovered: {keys} → backlog`.
|
|
185
185
|
|
|
186
|
-
**Record every section you drove — in the changelog entry, not in the checklist.** One line per section: what was driven, PASS or FAIL, the environment, and the evidence the assertion turned on (the literal observed, the row version, the request body). It goes in the entry because it is a dated event, and the checklist is a truth document that carries no dates (the `documentation` skill §
|
|
186
|
+
**Record every section you drove — in the changelog entry, not in the checklist.** One line per section: what was driven, PASS or FAIL, the environment, and the evidence the assertion turned on (the literal observed, the row version, the request body). It goes in the entry because it is a dated event, and the checklist is a truth document that carries no dates (the `documentation` skill § The three natures). **A `FAIL` is recorded as a `FAIL` and stays** — with the backlog item it raised — because a corpus of driven records that has never recorded a failure is either describing a flawless product or being written by someone who already knew the answer, and a reader cannot tell which. In the checklist itself, the section's `Pinned:` trace is what distinguishes a verified promise from a typed one; a section the drive could not reach says `not reachable — {what blocks it}` there, so an unexamined section and a guarded one never look alike.
|
|
187
187
|
|
|
188
188
|
Completion steps — freezing the plan, the changelog entry — are the root policy file's, not yours.
|
|
@@ -83,7 +83,7 @@ Three peer modes plus a Completion step — enter wherever the user's thinking a
|
|
|
83
83
|
|
|
84
84
|
## Changelog
|
|
85
85
|
|
|
86
|
-
The working session is the last holder of the refinement context that produced a prompt: the variants rejected, the eval deltas, the escalations and why. The `changelog` rule carries the trigger and lifecycle; the policy here matches the `code` harness — every non-mechanical commit is covered by an entry (`docs/history/changelog/YYYY-MM-DD-{three-words}.md
|
|
86
|
+
The working session is the last holder of the refinement context that produced a prompt: the variants rejected, the eval deltas, the escalations and why. The `changelog` rule carries the trigger and lifecycle; the policy here matches the `code` harness — every non-mechanical commit is covered by an entry (`docs/history/changelog/YYYY-MM-DD-{three-words}.md`; `docs/history/CHANGELOG.md` is the guide and takes no row), drafts are mutable and commits freeze, and the `retro` agent distills on demand. Two genres are load-bearing for this harness:
|
|
87
87
|
|
|
88
88
|
- **Escalation entries** (`Class: escalation`, written by the `escalate` skill) — the raw data for routing-table tuning.
|
|
89
89
|
- **Prompt refinement entries** — rejected variants and eval deltas quoted with the same discipline the template's failure fields demand.
|
|
@@ -122,8 +122,8 @@ Stop is facilitator-orchestrated because approval belongs to the user; you execu
|
|
|
122
122
|
ledger and thesis. Gaps → record them in the manifest (`Result: fail`, named gaps), and the fixes
|
|
123
123
|
re-enter as a new manifest `Round` requiring fresh approval. Pass → record it.
|
|
124
124
|
4. **Move.** Run `--gate=move`. When clean: delete `ops/` entirely, `git mv` the folder to
|
|
125
|
-
`docs/history/brainstorms/{topic}/`, set state `Status: harvested
|
|
126
|
-
|
|
125
|
+
`docs/history/brainstorms/{topic}/`, set state `Status: harvested` (no index row to move: the folder is
|
|
126
|
+
the record). End your
|
|
127
127
|
report with the offer the facilitator relays: **delete the moved folder, or commit it** — the
|
|
128
128
|
user decides; the design assumes deletion.
|
|
129
129
|
|
|
@@ -21,7 +21,7 @@ Map the documentation landscape — what exists, what is adjacent, how detailed
|
|
|
21
21
|
2. Locate the repo's feature-doc layer from `structure.md` — the standard shape is `./docs/features/`, but a repo may document components under their own subject folders. Read that layer's index if it has one; otherwise glob for docs carrying `owns:` frontmatter
|
|
22
22
|
3. If `./docs/memory/lld-mode.md` exists (or the legacy `./docs/memory/spec-mode.md`), read it for feature doc inventory, ownership conflict zones, and lessons from previous research
|
|
23
23
|
4. Read 1-2 existing feature LLDs from that layer to calibrate format and depth
|
|
24
|
-
5. Consult the **injected ownership index** (the generated `glob → doc · module · objects · status` map
|
|
24
|
+
5. Consult the **injected ownership index** (the generated `glob → doc · module · objects · status` map, built from the transitional `owns:` region globs; a source file's path header names its document directly) to build the ownership map. It is the source of truth for what code paths are already spoken for; a source file's path header names its document directly. If the index isn't present in context, glob the docs tree (excluding `docs/history/`) and read the `owns:` frontmatter of every doc that declares it.
|
|
25
25
|
|
|
26
26
|
## What You Research
|
|
27
27
|
|
|
@@ -46,7 +46,7 @@ Structure your findings as:
|
|
|
46
46
|
- **Invalidated claims**: One row per existing doc this feature makes wrong — doc path, the claim, why it stops being true. This list seeds the plan's **Doc Obligations** ledger, so it is the research finding most likely to survive into an artifact; "none" is a real answer and says the feature is genuinely additive.
|
|
47
47
|
- **Risks or concerns**: Anything the LLD should address or call out
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
Write each finding as a bold noun-phrase label and one or two third-person sentences (the `documentation` skill's `references/style-guide.md` § Labels, § Voice); mermaid for a flow worth drawing. Paths, symbols and routes belong in these findings because the author needs them, but these fields are research, not the LLD's sections: the feature doc takes its template's sections and names objects and promises, never the functions listed here.
|
|
50
50
|
|
|
51
51
|
## Rules
|
|
52
52
|
|