@pilotspace/add 1.1.0 → 1.2.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/GETTING-STARTED.md +165 -139
  3. package/README.md +13 -7
  4. package/bin/cli.js +13 -4
  5. package/docs/01-principles.md +3 -3
  6. package/docs/02-the-flow.md +15 -11
  7. package/docs/03-step-1-specify.md +13 -13
  8. package/docs/04-step-2-scenarios.md +2 -2
  9. package/docs/05-step-3-contract.md +3 -3
  10. package/docs/06-step-4-tests.md +2 -2
  11. package/docs/07-step-5-build.md +1 -1
  12. package/docs/08-step-6-verify.md +14 -5
  13. package/docs/09-the-loop.md +12 -6
  14. package/docs/10-setup-and-stages.md +27 -13
  15. package/docs/11-governance.md +2 -2
  16. package/docs/12-roles.md +3 -3
  17. package/docs/13-adoption.md +1 -1
  18. package/docs/14-foundation.md +15 -15
  19. package/docs/15-foundations-and-lineage.md +106 -0
  20. package/docs/README.md +4 -0
  21. package/docs/appendix-a-templates.md +3 -3
  22. package/docs/appendix-b-prompts.md +40 -5
  23. package/docs/appendix-c-glossary.md +42 -12
  24. package/docs/appendix-d-worked-example.md +2 -2
  25. package/docs/appendix-e-checklists.md +2 -2
  26. package/docs/appendix-f-requirements-matrix.md +8 -8
  27. package/docs/appendix-g-references.md +106 -0
  28. package/package.json +1 -1
  29. package/skill/add/SKILL.md +39 -37
  30. package/skill/add/adopt.md +13 -11
  31. package/skill/add/deltas.md +8 -6
  32. package/skill/add/fold.md +19 -17
  33. package/skill/add/graduate.md +74 -0
  34. package/skill/add/intake.md +22 -7
  35. package/skill/add/loop.md +59 -0
  36. package/skill/add/phases/0-setup.md +29 -24
  37. package/skill/add/phases/1-specify.md +23 -13
  38. package/skill/add/phases/2-scenarios.md +14 -4
  39. package/skill/add/phases/3-contract.md +24 -11
  40. package/skill/add/phases/4-tests.md +15 -5
  41. package/skill/add/phases/5-build.md +11 -4
  42. package/skill/add/phases/6-verify.md +24 -2
  43. package/skill/add/phases/7-observe.md +13 -5
  44. package/skill/add/report-template.md +65 -7
  45. package/skill/add/run.md +45 -34
  46. package/skill/add/scope.md +10 -6
  47. package/skill/add/setup-review.md +13 -10
  48. package/skill/add/streams.md +69 -19
  49. package/tooling/add.py +476 -34
  50. package/tooling/templates/CONVENTIONS.md.tmpl +1 -1
  51. package/tooling/templates/GLOSSARY.md.tmpl +23 -0
  52. package/tooling/templates/MILESTONE.md.tmpl +1 -0
  53. package/tooling/templates/PROJECT.md.tmpl +4 -3
  54. package/tooling/templates/TASK.md.tmpl +33 -12
package/CHANGELOG.md CHANGED
@@ -4,6 +4,46 @@ All notable changes to the ADD method (`@pilotspace/add` on npm,
4
4
  `pilotspace-add` on PyPI) are documented here. The format follows
5
5
  [Keep a Changelog](https://keepachangelog.com/); versions follow semver.
6
6
 
7
+ ## [1.2.0] — 2026-06-10
8
+
9
+ The decision-arc release: the method now narrates the build as one continuous
10
+ arc of decisions, and the loop reaches past a single milestone — graduating a
11
+ prototype to production, gating milestones on their own goal, and running tasks
12
+ in parallel waves. All additive; no breaking changes (SemVer MINOR).
13
+
14
+ ### Added
15
+ - **The decision arc** — every human-gate report opens by naming where you are
16
+ on the arc (intent → cases → contract → tests → build → verify → observe), and
17
+ the book + GLOSSARY describe it as the spine of the method. The one human
18
+ approval is always placed on the arc, never floating.
19
+ - **Graduation to production** — `add.py graduate` plus a graduate-guide and a
20
+ `→production` stage guard turn the mvp→production transition into an
21
+ analytics-driven, criteria-gated step instead of a label flip: a
22
+ graduation-report surfaces the evidence and a stage-goal-criteria cue tells you
23
+ when the prototype has earned the next stage.
24
+ - **Goal-gated milestones & the dynamic task loop** — an explicit project GOAL
25
+ now rides on `status`/`guide`, a milestone completes only when every success
26
+ criterion is met, and a recorded `done → phase` reopen-transition lets a closed
27
+ task legitimately re-open without losing its history.
28
+ - **verify-deepen** — the verify phase gained a deep-check rubric
29
+ (wiring · dead-code · semantic) so verification probes intent, not just a green
30
+ suite.
31
+ - **Parallel waves** — `WAVE.md`, the wave ledger that is the resume point for
32
+ parallel task execution; `status` surfaces a live wave so a multi-task wave can
33
+ pause and resume cleanly.
34
+ - **The flag-first freeze guard** — declaring a contract freeze is now
35
+ fail-closed: an `unflagged_freeze` is refused at `advance` time and flagged by
36
+ `add.py audit`, so a freeze can never be recorded without its explicit marker.
37
+ - **Foundations & Lineage chapter** — the book gained an annotated Foundations
38
+ chapter with author-year citations and a references appendix, tracing the
39
+ method's lineage.
40
+
41
+ ### Changed
42
+ - Engine prose now speaks one ubiquitous language — `add.py` output uses
43
+ consistent domain terms (scope level, decision point, retrospective, …).
44
+ - `add.py compact` keeps the active state lean by compacting heavy archive
45
+ history, with the bundled engine frozen in lockstep.
46
+
7
47
  ## [1.1.0] — 2026-06-05
8
48
 
9
49
  Production-ready enforcement: the gates are now verified by machinery distinct
@@ -8,35 +8,12 @@ You'll learn the whole loop by doing it once:
8
8
 
9
9
  > **Specify → Scenarios → Contract → Tests → Build → Verify → Observe**
10
10
 
11
- ADD is **AI-first**: you talk to the agent and it drives the method you don't
12
- hand-type the commands. The commands below are the agent's hands (and your escape
13
- hatch); the rest of this guide shows both so you can see what the agent does.
14
-
15
- ---
16
-
17
- ## The fast path — talk to the agent
18
-
19
- After installing (step 1 below), the whole on-ramp is one move:
20
-
21
- ```
22
- in Claude Code: /add
23
- you: "I want to let users transfer money between their own accounts."
24
- ```
25
-
26
- From there the agent runs the **on-ramp** for you:
27
-
28
- 1. **Orient** — it reads `add.py status` (the resume point), never re-reading your repo.
29
- 2. **Intake** — it sizes your request into versioned scope and proposes a **milestone**
30
- (goal · scope · breadth-first tasks · exit criteria). *You confirm the shape.*
31
- 3. **One-approval front** — for each task it drafts Spec + Scenarios + Contract + Tests
32
- as one bundle. *You give one approval at the frozen contract.*
33
- 4. **Self-driving run** — build→verify runs to green; a security finding always stops
34
- back to you.
35
-
36
- So a milestone-sized feature is: **describe it → confirm the milestone → approve each
37
- contract → review the result.** Everything between is the agent.
38
-
39
- > New term: **On-ramp** — the install→first-milestone path. See `docs/appendix-c-glossary.md`.
11
+ ADD is **AI-first**: you talk to the agent and it drives the method. Reading this
12
+ guide top to bottom, you will type exactly **one shell command the install**.
13
+ After that, everything happens in conversation (`/add` is how you start it, not
14
+ a terminal command): the agent's hands are the CLI, and the same CLI is your
15
+ escape hatch whenever you want to take the wheel (it's all in the appendix at
16
+ the end).
40
17
 
41
18
  ---
42
19
 
@@ -49,90 +26,210 @@ contract → review the result.** Everything between is the agent.
49
26
 
50
27
  > **Windows:** use `py` wherever this guide writes `python3` (the Python launcher on
51
28
  > Windows) — e.g. `py .add\tooling\add.py status`. Both installers handle the install
52
- > step for you; only the by-hand `add.py` commands below differ.
29
+ > step for you; only the by-hand `add.py` commands in the appendix differ.
53
30
 
54
31
  ---
55
32
 
56
- ## 1 · Install
33
+ ## 1 · Install — the one command you type
57
34
 
58
35
  From your project root, pick **one** path — both produce the same install:
59
36
 
60
37
  **Option A — npm (Node.js ≥ 18):**
61
38
 
62
39
  ```bash
63
- npx @pilotspace/add init --name "My App" --stage prototype
40
+ npx @pilotspace/add init
64
41
  ```
65
42
 
66
43
  **Option B — pip (Python 3.10+):**
67
44
 
68
45
  ```bash
69
46
  pip install pilotspace-add
70
- pilotspace-add init --name "My App" --stage prototype
47
+ pilotspace-add init
71
48
  ```
72
49
 
50
+ No flags needed — the agent infers your project's name from the folder and starts
51
+ at the `prototype` stage. (Prefer to choose up front? Both installers take
52
+ `--name "My App" --stage prototype|poc|mvp|production`; the stage can also be
53
+ changed later — see the appendix.)
54
+
73
55
  Either one creates `.add/` (your runtime), drops the `add` skill into
74
- `.claude/skills/add/`, and bundles the book into `.add/docs/`. Pick the stage that
75
- matches your intent `prototype`, `poc`, `mvp`, or `production`. You can change it
76
- later with `python3 .add/tooling/add.py stage mvp`.
56
+ `.claude/skills/add/`, and bundles the book into `.add/docs/`. It deliberately
57
+ does **not** initialise the project that's the agent's first move, so nothing
58
+ gets decided without you in the loop.
59
+
60
+ **When the install finishes: open Claude Code and type `/add`.** That's the
61
+ handoff — from here on it's conversation, not terminal commands.
77
62
 
78
63
  > Why stages exist: the steps never change, only how *deeply* you run them.
79
64
  > See `.add/docs/10-setup-and-stages.md`.
80
65
 
81
66
  ---
82
67
 
83
- ## 2 · Orientthe command you'll use most
68
+ ## 2 · Your first feature talk to the agent
69
+
70
+ In Claude Code, the whole onboarding is one move:
71
+
72
+ ```
73
+ in Claude Code: /add
74
+ you: "I want to let users transfer money between their own accounts."
75
+ ```
76
+
77
+ From there the agent runs the **onboarding** for you:
78
+
79
+ 1. **Orient** — it reads the project state (the resume point), never re-reading
80
+ your repo. On a fresh install it initialises the project itself and drafts
81
+ the foundation for your sign-off (the **baseline approval** — the one signature the
82
+ installer's closing message points at).
83
+ 2. **Intake** — it sizes your request into versioned scope and proposes a **milestone**
84
+ (goal · scope · breadth-first tasks · exit criteria). *You confirm the shape.*
85
+ 3. **Specification bundle** — for each task it drafts Spec + Scenarios + Contract + Tests
86
+ as one bundle, led by its lowest-confidence points. *You give one approval at the
87
+ frozen contract.*
88
+ 4. **Self-driving run** — build→verify runs to green; a security finding always stops
89
+ back to you.
90
+
91
+ So a milestone-sized feature is: **describe it → confirm the milestone → approve each
92
+ contract → review the result.** Everything between is the agent. For the
93
+ transfer-money feature above, that's four short conversations — and zero typed
94
+ commands.
95
+
96
+ > New term: **Onboarding** — the install→first-milestone path. See `.add/docs/appendix-c-glossary.md`.
97
+
98
+ ---
99
+
100
+ ## 3 · What just happened (and your override)
101
+
102
+ Behind the conversation, the agent drove the CLI: it read the resume point, sized
103
+ the milestone, froze the contract you approved, ran the tests red, built to green,
104
+ and recorded the gate. The state lives on disk, not in the chat window.
105
+
106
+ If you ever want to see that state yourself — or take over entirely — the same
107
+ CLI is yours:
84
108
 
85
109
  ```bash
86
110
  python3 .add/tooling/add.py status
87
111
  ```
88
112
 
89
- `add.py status` is your home base. It reads `.add/state.json` and tells you the
90
- project stage, the active task, and which phase you're in. **Start every session
91
- with it** that's how ADD resumes work without re-reading your whole repo.
113
+ `add.py status` is the resume point: project stage, active task, current phase.
114
+ And `add.py guide` tells you what the current phase needs its `guide :` line
115
+ names the exact phase-guide file to read (`.claude/skills/add/phases/…` plain
116
+ markdown), which is how **any** agent — Claude, Cursor, Copilot, Codex — follows
117
+ ADD through the CLI alone.
92
118
 
93
119
  > Tip: shorten typing with an alias — `alias add="python3 .add/tooling/add.py"` —
94
- > then you can run `add status`, `add advance`, etc. The rest of this guide writes
95
- > the full `python3 .add/tooling/add.py ...` form so copy-paste always works.
120
+ > then you can run `add status`, `add guide`, etc. These are override and resume
121
+ > surfaces, not steps you owe the method: the appendix walks the full by-hand path
122
+ > whenever you want the wheel.
123
+
124
+ ---
125
+
126
+ ## Resume next session
96
127
 
97
- And when you're mid-task and unsure what the current phase needs, ask:
128
+ Close your laptop, come back tomorrow, type `/add` again the agent reorients
129
+ itself from disk and continues exactly where you left off. No context rot.
130
+
131
+ The same resume point is yours directly:
98
132
 
99
133
  ```bash
100
- python3 .add/tooling/add.py guide
134
+ python3 .add/tooling/add.py status
101
135
  ```
102
136
 
103
- `status` tells you *where* you are; `guide` tells you *what to do next* — the active
104
- task's phase, the one concrete next action, the chapter to read, and the exact command
105
- to run once that phase is done. Its `guide :` line names the phase-guide file to
106
- read for the current phase (`.claude/skills/add/phases/…` — plain markdown), which is
107
- how **any** agent — Claude, Cursor, Copilot, Codex — follows ADD through the CLI alone.
108
-
109
137
  ---
110
138
 
111
- ## 3 · Start your first feature
139
+ ## Self-check
140
+
141
+ Confirm your project is internally consistent at any time:
112
142
 
113
143
  ```bash
114
- python3 .add/tooling/add.py new-task transfer --title "Transfer money between my accounts"
144
+ python3 .add/tooling/add.py check
115
145
  ```
116
146
 
117
- This scaffolds `.add/tasks/transfer/TASK.md` **one file holding all seven phase
118
- sections** plus empty `tests/` and `src/` folders, and makes it the active task
119
- at phase `specify`.
147
+ It verifies state is valid, every task has its TASK.md, and markers match. Exit
148
+ code 0 means healthy handy as a CI gate.
149
+
150
+ ---
151
+
152
+ ## Enforce the decision points in CI
153
+
154
+ `add.py audit` re-verifies every recorded human gate on your board — a named
155
+ human at each contract freeze, exactly one gate outcome per done task, a human
156
+ reviewer wherever the security line carries a note. It exits non-zero naming
157
+ the task and the finding, which makes it a CI gate: enforcement runs on a
158
+ machine the agent does not control, so the agent can never stamp its own work
159
+ green (*never self-gate*).
160
+
161
+ Drop this workflow into `.github/workflows/seam-audit.yml`:
162
+
163
+ ```yaml
164
+ name: seam-audit
165
+
166
+ on:
167
+ push:
168
+ branches: [main]
169
+ pull_request:
170
+
171
+ permissions:
172
+ contents: read
173
+
174
+ jobs:
175
+ seam-audit:
176
+ name: Decision-point audit (recorded human gates)
177
+ runs-on: ubuntu-latest
178
+ steps:
179
+ - uses: actions/checkout@v4
180
+
181
+ - uses: actions/setup-python@v5
182
+ with:
183
+ python-version: '3.12'
120
184
 
121
- Open `.add/tasks/transfer/TASK.md` in your editor. You'll fill it top to bottom.
185
+ - name: Audit recorded decision points
186
+ run: python3 .add/tooling/add.py audit
187
+ ```
188
+
189
+ The command is the same one you can run locally — the installer already placed
190
+ `add.py` at `.add/tooling/add.py`, and the audit is read-only (it never edits
191
+ your board). A red `seam-audit` job means a decision record is malformed or a
192
+ security note was left to the auto-gate; fix the record (or escalate the gate
193
+ to a human), never the auditor.
122
194
 
123
195
  ---
124
196
 
125
197
  ## Under the hood — the seven phases by hand (escape hatch)
126
198
 
127
- Everything above is what the agent drives for you through the one-approval front. This
128
- section is the **escape hatch**: the same seven phases run by hand, so you can see what
199
+ Everything above is what the agent drives for you through the one-approval flow. This
200
+ appendix is the **escape hatch**: the same seven phases run by hand, so you can see what
129
201
  each one produces and step in manually whenever you want to. You never *have* to type
130
202
  these — they are the agent's hands, and yours when you take the wheel.
131
203
 
132
204
  The rhythm is always: **fill the section → run `python3 .add/tooling/add.py advance`.**
133
205
  The tool keeps the `phase:` marker at the top of TASK.md in sync.
134
206
 
135
- ### Phase 1Specify (`docs/03-step-1-specify.md`)
207
+ ### Before the phases initialise and scaffold
208
+
209
+ Starting cold? Install first as in §1 (`npx @pilotspace/add init`). Then
210
+ initialise once and scaffold the task yourself (the agent normally does both):
211
+
212
+ ```bash
213
+ python3 .add/tooling/add.py init
214
+ python3 .add/tooling/add.py new-task transfer --title "Transfer money between my accounts"
215
+ ```
216
+
217
+ > **Note:** the installer's closing hint shows `init --await-lock` — that form
218
+ > arms the baseline-approval gate so a *human* signs the AI-drafted foundation before
219
+ > any build. Plain `init` skips that gate, which is fine here: by hand, the
220
+ > human IS the one driving every step.
221
+
222
+ This scaffolds `.add/tasks/transfer/TASK.md` — **one file holding all seven phase
223
+ sections** — plus empty `tests/` and `src/` folders, and makes it the active task
224
+ at phase `specify`. Open it in your editor; you'll fill it top to bottom.
225
+
226
+ You can also change the project's depth at any time:
227
+
228
+ ```bash
229
+ python3 .add/tooling/add.py stage mvp
230
+ ```
231
+
232
+ ### Phase 1 — Specify (`.add/docs/03-step-1-specify.md`)
136
233
 
137
234
  Write the rules in **§1**. State what it *must* do, what it must *reject* (each
138
235
  with a named error code), and what's true after success:
@@ -156,7 +253,7 @@ Confirm every assumption (no FX, no daily limit in v1). Then:
156
253
  python3 .add/tooling/add.py advance
157
254
  ```
158
255
 
159
- ### Phase 2 — Scenarios (`docs/04-step-2-scenarios.md`)
256
+ ### Phase 2 — Scenarios (`.add/docs/04-step-2-scenarios.md`)
160
257
 
161
258
  In **§2**, turn each rule into a Given/When/Then. For every rejection, assert what
162
259
  must stay **unchanged**:
@@ -171,7 +268,7 @@ Scenario: insufficient funds
171
268
 
172
269
  Then `python3 .add/tooling/add.py advance`.
173
270
 
174
- ### Phase 3 — Contract (`docs/05-step-3-contract.md`)
271
+ ### Phase 3 — Contract (`.add/docs/05-step-3-contract.md`)
175
272
 
176
273
  In **§3**, fix the external shape and **freeze** it (`Status: FROZEN @ v1`):
177
274
 
@@ -182,21 +279,21 @@ POST /transfers body: { fromAccountId, toAccountId, amount }
182
279
  403 -> { error: "forbidden" }
183
280
  ```
184
281
 
185
- A frozen contract is the seam that makes the AI build safe. Then advance.
282
+ A frozen contract is the decision point that makes the AI build safe. Then advance.
186
283
 
187
- ### Phase 4 — Tests, red first (`docs/06-step-4-tests.md`)
284
+ ### Phase 4 — Tests, red first (`.add/docs/06-step-4-tests.md`)
188
285
 
189
286
  Write one test per scenario into `.add/tasks/transfer/tests/`, then **run them and
190
287
  confirm they FAIL** — there's no code yet. A test that passes now is testing
191
288
  nothing. This is red/green TDD: red before green. Then advance.
192
289
 
193
- ### Phase 5 — Build (`docs/07-step-5-build.md`)
290
+ ### Phase 5 — Build (`.add/docs/07-step-5-build.md`)
194
291
 
195
292
  Now let the AI write code into `.add/tasks/transfer/src/` until **every test
196
293
  passes** — without changing any test or the frozen contract. Honor the safety rule
197
294
  (here: debit + credit in one atomic transaction). Then advance.
198
295
 
199
- ### Phase 6 — Verify (`docs/08-step-6-verify.md`)
296
+ ### Phase 6 — Verify (`.add/docs/08-step-6-verify.md`)
200
297
 
201
298
  In **§6**, confirm the evidence (all green, nothing weakened) and check what tests
202
299
  miss: concurrency, security, architecture. Record the gate — and close the task:
@@ -208,91 +305,20 @@ python3 .add/tooling/add.py gate PASS
208
305
  `gate PASS` marks the task `done`. (Use `gate HARD-STOP` to send it back to Build,
209
306
  or `gate RISK-ACCEPTED` for a signed, non-security waiver.)
210
307
 
211
- ### Phase 7 — Observe (`docs/09-the-loop.md`)
308
+ ### Phase 7 — Observe (`.add/docs/09-the-loop.md`)
212
309
 
213
310
  In **§7**, note what to watch in production and the next spec delta. Every learning
214
311
  becomes the next `new-task`. The flow is a loop, not a finish line.
215
312
 
216
313
  ---
217
314
 
218
- ## 5 · Self-check
219
-
220
- Confirm your project is internally consistent at any time:
221
-
222
- ```bash
223
- python3 .add/tooling/add.py check
224
- ```
225
-
226
- It verifies state is valid, every task has its TASK.md, and markers match. Exit
227
- code 0 means healthy — handy as a CI gate.
228
-
229
- ---
230
-
231
- ## Enforce the seams in CI
232
-
233
- `add.py audit` re-verifies every recorded human gate on your board — a named
234
- human at each contract freeze, exactly one gate outcome per done task, a human
235
- reviewer wherever the security line carries a note. It exits non-zero naming
236
- the task and the finding, which makes it a CI gate: enforcement runs on a
237
- machine the agent does not control, so the agent can never stamp its own work
238
- green (*never self-gate*).
239
-
240
- Drop this workflow into `.github/workflows/seam-audit.yml`:
241
-
242
- ```yaml
243
- name: seam-audit
244
-
245
- on:
246
- push:
247
- branches: [main]
248
- pull_request:
249
-
250
- permissions:
251
- contents: read
252
-
253
- jobs:
254
- seam-audit:
255
- name: Seam audit (recorded human gates)
256
- runs-on: ubuntu-latest
257
- steps:
258
- - uses: actions/checkout@v4
259
-
260
- - uses: actions/setup-python@v5
261
- with:
262
- python-version: '3.12'
263
-
264
- - name: Audit recorded human seams
265
- run: python3 .add/tooling/add.py audit
266
- ```
267
-
268
- The command is the same one you can run locally — the installer already placed
269
- `add.py` at `.add/tooling/add.py`, and the audit is read-only (it never edits
270
- your board). A red `seam-audit` job means a seam record is malformed or a
271
- security note was left to the auto-gate; fix the record (or escalate the gate
272
- to a human), never the auditor.
273
-
274
- ---
275
-
276
- ## 6 · Resume next session
277
-
278
- Close your laptop, come back tomorrow, run:
279
-
280
- ```bash
281
- python3 .add/tooling/add.py status
282
- ```
283
-
284
- It tells you exactly where you left off and what to do next. No context rot — the
285
- state lives on disk, not in a chat window.
286
-
287
- ---
288
-
289
- ## 7 · Where to read more
315
+ ## Where to read more
290
316
 
291
317
  You just ran the method; now read *why* it's shaped this way:
292
318
 
293
319
  - The shift & principles — `.add/docs/00-introduction.md`, `.add/docs/01-principles.md`
294
320
  - The flow end to end — `.add/docs/02-the-flow.md`
295
- - Each step in depth — `.add/docs/03..09`
321
+ - Each step in depth — `.add/docs/03-step-1-specify.md` through `.add/docs/09-the-loop.md`
296
322
  - Operating it on a team — `.add/docs/11-governance.md`, `.add/docs/12-roles.md`
297
323
  - A fully worked example — `.add/docs/appendix-d-worked-example.md`
298
324
 
package/README.md CHANGED
@@ -34,15 +34,18 @@ Pick your ecosystem — both install the same skill, tooling, and book:
34
34
 
35
35
  ```bash
36
36
  # Node / npm
37
- npx @pilotspace/add init --name "My App" --stage prototype
37
+ npx @pilotspace/add init
38
38
  ```
39
39
 
40
40
  ```bash
41
41
  # Python / pip
42
42
  pip install pilotspace-add
43
- pilotspace-add init --name "My App" --stage prototype
43
+ pilotspace-add init
44
44
  ```
45
45
 
46
+ No flags needed — the project name is inferred from your folder and the stage
47
+ defaults to `prototype` (pass `--name "My App" --stage mvp` to choose up front).
48
+
46
49
  **New here?** Follow the [10-minute Quickstart](./GETTING-STARTED.md) — it walks
47
50
  your first feature end to end.
48
51
 
@@ -52,9 +55,12 @@ This installs:
52
55
  |------|------|
53
56
  | `.claude/skills/add/` | the `add` skill Claude loads (thin router + per-phase guides) |
54
57
  | `.add/tooling/add.py` | scaffolder + state tracker (Python, stdlib only) |
55
- | `.add/docs/` | the AIDD book — the trust layer |
56
- | `.add/state.json` | where the project is |
57
- | `.add/CONVENTIONS.md`, `GLOSSARY.md`, `MODEL_REGISTRY.md`, `dependencies.allowlist` | survivor-layer files |
58
+ | `.add/docs/` | the AIDD book — the method rationale |
59
+
60
+ Project state (`.add/state.json`) and the living-documentation files (`CONVENTIONS.md`,
61
+ `GLOSSARY.md`, `MODEL_REGISTRY.md`, `dependencies.allowlist`) are *not* created
62
+ here — the installer drops files only; initialisation is the agent's first move
63
+ when you run `/add`.
58
64
 
59
65
  ## Use it
60
66
 
@@ -64,7 +70,7 @@ ADD is AI-first: you talk to the agent; it drives the method. In Claude Code, ru
64
70
  > `/add` — *"I want to let users transfer money between their own accounts."*
65
71
 
66
72
  The agent orients from `state.json`, **sizes your request into a milestone** (you
67
- confirm the shape), then drafts each feature's **one-approval front** — Spec +
73
+ confirm the shape), then drafts each feature's **specification bundle** — Spec +
68
74
  Scenarios + Contract + Tests as one bundle — and you give **one approval at the
69
75
  frozen contract**. A self-driving build→verify run takes it to green; security
70
76
  findings always stop back to you.
@@ -80,7 +86,7 @@ python3 .add/tooling/add.py status # where am I? (resume point)
80
86
  1. **Direction before speed** — no Build until spec, scenarios, contract, and *red*
81
87
  tests exist.
82
88
  2. **Trust evidence, not inspection** — a feature is trusted because its tests pass
83
- and the blind spots (concurrency, security, architecture) were checked.
89
+ and the non-functional risks (concurrency, security, architecture) were checked.
84
90
  3. **Never weaken a test or edit a frozen contract** to make the build pass.
85
91
  4. **No silent skips** — every Verify records `PASS`, `RISK-ACCEPTED`, or
86
92
  `HARD-STOP`. Security findings are always `HARD-STOP`.
package/bin/cli.js CHANGED
@@ -29,12 +29,20 @@ function warn(msg) { process.stderr.write("warn: " + msg + "\n"); }
29
29
  function fail(msg) { process.stderr.write("error: " + msg + "\n"); process.exit(1); }
30
30
 
31
31
  function parseArgs(argv) {
32
- const args = { _: [], force: false, stage: "prototype", name: null };
32
+ // stage/name stay null unless EXPLICITLY passed the engine's own `init`
33
+ // defaults the stage and infers the name from the folder, so the manual-init
34
+ // hint only echoes flags the user actually chose (shortest true command).
35
+ const args = { _: [], force: false, stage: null, name: null };
33
36
  for (let i = 0; i < argv.length; i++) {
34
37
  const a = argv[i];
35
38
  if (a === "--force") args.force = true;
36
- else if (a === "--stage") args.stage = argv[++i];
37
- else if (a === "--name") args.name = argv[++i];
39
+ else if (a === "--stage" || a === "--name") {
40
+ const v = argv[++i];
41
+ // fail loudly on a trailing/abutting flag — never silently drop a value
42
+ // the user tried to pass (parity with the pip twin's argparse error)
43
+ if (v == null || v.startsWith("--")) fail(a + " requires a value");
44
+ if (a === "--stage") args.stage = v; else args.name = v;
45
+ }
38
46
  else if (a.startsWith("--")) warn("ignoring unknown flag " + a);
39
47
  else args._.push(a);
40
48
  }
@@ -99,7 +107,8 @@ function cmdInit(args) {
99
107
  log("");
100
108
  log("Prefer the CLI / not using Claude Code? Initialise it yourself (this arms the lock-down):");
101
109
  const launcher = process.platform === "win32" ? "py" : "python3";
102
- log(` ${launcher} .add/tooling/add.py init --await-lock --stage ${args.stage}` +
110
+ log(` ${launcher} .add/tooling/add.py init --await-lock` +
111
+ (args.stage ? ` --stage ${args.stage}` : "") +
103
112
  (args.name ? ` --name "${args.name}"` : ""));
104
113
  }
105
114
 
@@ -34,7 +34,7 @@ The flow has an order, but it is not a one-way march. Any step may reveal a gap
34
34
 
35
35
  How much you let the AI do is not a single switch. It is a setting that lives *per scope*, and it can differ from one part of the system to another. A well-tested, low-risk area may run at full autonomy while a new, high-risk one is held back.
36
36
 
37
- The *default starting point* is a deliberate choice. A team that has built up evidence and tooling may **start a scope at auto** — the AI drafts the front, a human approves the frozen contract once, and the build runs and auto-gates on evidence — and *lower to conservative* wherever risk is high. (An earlier formulation started every scope conservative and made autonomy the earned exception; it is the same dial either way — what differs is which end you default to.) Two things never move with the default, whichever way it points: the contract-freeze seam stays human (the AI never freezes the interface it then builds against), and a high-risk scope is always lowered, never auto-run.
37
+ The *default starting point* is a deliberate choice. A team that has built up evidence and tooling may **start a scope at auto** — the AI drafts the specification bundle, a human approves the frozen contract once, and the build runs and auto-gates on evidence — and *lower to conservative* wherever risk is high. (An earlier formulation started every scope conservative and made autonomy the earned exception; it is the same control either way — what differs is which end you default to.) Two things never move with the default, whichever way it points: the contract-freeze decision point stays human (the AI never freezes the interface it then builds against), and a high-risk scope is always lowered, never auto-run.
38
38
 
39
39
  **Consequence:** autonomy is a per-scope setting you choose deliberately and can lower at any time; high-risk scope is held to a human gate regardless of the default (see [11 Governance](./11-governance.md)).
40
40
 
@@ -60,9 +60,9 @@ The instructions you give the AI are plain text that reference files in the repo
60
60
 
61
61
  **Consequence:** the same project works whether the team uses one AI coding tool or another, and switching tools changes nothing structural.
62
62
 
63
- ## 9. Two surfaces: the State you load, the Story you reference
63
+ ## 9. Two layers: the working state you load, the audit trail you reference
64
64
 
65
- A method that fills the context window with its own documentation defeats itself — the agent rots before it reaches the work. So ADD keeps two doc surfaces and never loads both. The **State surface** is everything an agent loads to do the work each session: the `add` skill itself (its router `SKILL.md` and the one phase currently in play) together with the lean, current operational docs — `PROJECT.md` (the foundation), the active `MILESTONE.md`, the active `TASK.md`, and `state.json`. The **Story surface** is this book: the whole method, read once by a person to understand and trust ADD, and thereafter **never auto-loaded** into agent context — only referenced by a pointer. Depth lives on the Story surface; leanness is enforced on the State surface; they never compete for the same tokens.
65
+ A method that fills the context window with its own documentation defeats itself — the agent rots before it reaches the work. So ADD keeps two documentation layers and never loads both. The **working state** is everything an agent loads to do the work each session: the `add` skill itself (its router `SKILL.md` and the one phase currently in play) together with the lean, current operational docs — `PROJECT.md` (the foundation), the active `MILESTONE.md`, the active `TASK.md`, and `state.json`. The **audit trail** is this book plus the records behind it: the whole method, read once by a person to understand and trust ADD, and thereafter **never auto-loaded** into agent context — only referenced by a pointer. Depth lives in the audit trail; leanness is enforced on the working state; they never compete for the same tokens.
66
66
 
67
67
  **Consequence:** the book can be as rich as trust requires without costing a single runtime token, while the loaded surface stays small enough never to rot. It is why the guideline block in `CLAUDE.md`/`AGENTS.md` *points* to `add.py status` and `PROJECT.md` rather than copying them.
68
68