@pilotspace/add 1.17.0 → 2.1.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/CHANGELOG.md +193 -0
- package/GETTING-STARTED.md +20 -64
- package/README.md +138 -158
- package/agents/add-advisor.md +66 -21
- package/agents/add-worker.md +102 -0
- package/bin/cli.js +88 -21
- package/package.json +2 -3
- package/personas-teacher/VENDOR.md +6 -0
- package/skill/add/SKILL.md +100 -144
- package/skill/add/adopt.md +28 -0
- package/skill/add/beyond.md +37 -0
- package/skill/add/deltas.md +25 -2
- package/skill/add/design.md +56 -74
- package/skill/add/{report-template.md → gate-udd.md} +28 -38
- package/skill/add/intake.md +56 -25
- package/skill/add/loop.md +32 -19
- package/skill/add/persona-author/SKILL.md +116 -0
- package/skill/add/persona-author/assets/example-design-persona.md +55 -0
- package/skill/add/persona-author/assets/example-persona.md +57 -0
- package/skill/add/persona-author/references/contract.md +69 -0
- package/skill/add/persona-author/references/patterns.md +122 -0
- package/skill/add/persona-author/references/seeding.md +79 -0
- package/skill/add/phases/build.md +79 -0
- package/skill/add/phases/direction.md +287 -0
- package/skill/add/phases/verify.md +161 -0
- package/skill/add/run.md +16 -18
- package/skill/add/terms.md +18 -0
- package/tooling/add.py +2421 -3258
- package/tooling/add_engine/autonomy.py +2 -37
- package/tooling/add_engine/components.py +4 -87
- package/tooling/add_engine/constants.py +148 -93
- package/tooling/add_engine/guidelines.py +10 -11
- package/tooling/add_engine/io_state.py +72 -5
- package/tooling/add_engine/predicates.py +90 -2
- package/tooling/add_engine/search.py +6 -6
- package/tooling/add_engine/taskdoc.py +15 -10
- package/tooling/templates/CONVENTIONS.md.tmpl +1 -1
- package/tooling/templates/GLOSSARY.md.tmpl +10 -4
- package/tooling/templates/MILESTONE.md.tmpl +20 -16
- package/tooling/templates/PLAN.md.tmpl +129 -0
- package/tooling/templates/PROJECT.md.tmpl +6 -1
- package/tooling/templates/PROMPT.persona.md.tmpl +17 -21
- package/tooling/templates/personas/build-engineer.md.tmpl +45 -0
- package/tooling/templates/personas/data-steward.md.tmpl +45 -0
- package/tooling/templates/personas/evidence-verifier.md.tmpl +45 -0
- package/tooling/templates/personas/platform-engineer.md.tmpl +45 -0
- package/tooling/templates/personas/product-lead.md.tmpl +51 -0
- package/tooling/templates/personas/quality-auditor.md.tmpl +47 -0
- package/tooling/templates/personas/release-manager.md.tmpl +52 -0
- package/tooling/templates/personas/security-gatekeeper.md.tmpl +45 -0
- package/tooling/templates/personas/software-architect.md.tmpl +45 -0
- package/tooling/templates/personas/stream-orchestrator.md.tmpl +44 -0
- package/tooling/templates/personas/technical-writer.md.tmpl +49 -0
- package/tooling/templates/personas/ux-experience-lead.md.tmpl +48 -0
- package/tooling/templates/specs/SPEC.md.tmpl +18 -0
- package/tooling/templates/udd-wireframe.md +1 -1
- package/agents/add-build.md +0 -29
- package/agents/add-design.md +0 -32
- package/agents/add-persona.md +0 -33
- package/agents/add-verify.md +0 -36
- package/docs/00-introduction.md +0 -46
- package/docs/01-principles.md +0 -71
- package/docs/02-the-flow.md +0 -113
- package/docs/03-step-1-specify.md +0 -123
- package/docs/04-step-2-scenarios.md +0 -90
- package/docs/05-step-3-contract.md +0 -80
- package/docs/06-step-4-tests.md +0 -85
- package/docs/07-step-5-build.md +0 -82
- package/docs/08-step-6-verify.md +0 -105
- package/docs/09-the-loop.md +0 -75
- package/docs/10-setup-and-stages.md +0 -118
- package/docs/11-governance.md +0 -91
- package/docs/12-roles.md +0 -99
- package/docs/13-adoption.md +0 -67
- package/docs/14-foundation.md +0 -142
- package/docs/15-foundations-and-lineage.md +0 -106
- package/docs/16-releasing.md +0 -182
- package/docs/17-components.md +0 -143
- package/docs/18-personas.md +0 -80
- package/docs/README.md +0 -77
- package/docs/add-competencies.png +0 -0
- package/docs/add-flow.png +0 -0
- package/docs/add-foundation.png +0 -0
- package/docs/add-hierarchy.png +0 -0
- package/docs/add-milestone-task-lifecycle.png +0 -0
- package/docs/add-task-growth-wheel.png +0 -0
- package/docs/appendix-a-templates.md +0 -88
- package/docs/appendix-b-prompts.md +0 -154
- package/docs/appendix-c-glossary.md +0 -176
- package/docs/appendix-d-worked-example.md +0 -231
- package/docs/appendix-e-checklists.md +0 -92
- package/docs/appendix-f-requirements-matrix.md +0 -171
- package/docs/appendix-g-references.md +0 -106
- package/skill/add/advisor.md +0 -81
- package/skill/add/compact-foundation.md +0 -40
- package/skill/add/components.md +0 -52
- package/skill/add/confidence.md +0 -32
- package/skill/add/fold.md +0 -63
- package/skill/add/graduate.md +0 -39
- package/skill/add/phases/0-ground.md +0 -64
- package/skill/add/phases/0-setup.md +0 -103
- package/skill/add/phases/1-specify.md +0 -61
- package/skill/add/phases/2-scenarios.md +0 -48
- package/skill/add/phases/3-contract.md +0 -60
- package/skill/add/phases/4-tests.md +0 -61
- package/skill/add/phases/5-build.md +0 -62
- package/skill/add/phases/6-verify.md +0 -69
- package/skill/add/phases/7-observe.md +0 -45
- package/skill/add/phases/fast-lane.md +0 -34
- package/skill/add/release.md +0 -61
- package/skill/add/scope.md +0 -72
- package/skill/add/self-improve.md +0 -20
- package/skill/add/sensitivity.md +0 -51
- package/skill/add/setup-review.md +0 -48
- package/skill/add/soul.md +0 -58
- package/skill/add/streams.md +0 -269
- package/tooling/add_engine/release.py +0 -86
- package/tooling/templates/TASK.fast.md.tmpl +0 -78
- package/tooling/templates/TASK.md.tmpl +0 -181
- package/tooling/templates/personas/_template.md.tmpl +0 -82
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,199 @@ 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
|
+
## [2.1.0] — 2026-07-22
|
|
8
|
+
|
|
9
|
+
Minor: the two-agent roster matures and the persona author learns from real
|
|
10
|
+
corpora; TDD flexes for non-coding tasks; every honest verify→build round
|
|
11
|
+
becomes engine-visible; the dogfood foundation completes its 2.0 migration.
|
|
12
|
+
|
|
13
|
+
- **two-agent roster** — `add` retires; **add-worker** runs every EXECUTION
|
|
14
|
+
beat (direction · build · verify · persona) and **add-advisor** is the
|
|
15
|
+
second mind serving EVERY beat (propose-plan · advise-midflight · refute)
|
|
16
|
+
with a per-beat calibration map. The worker gains a mid-flight **support
|
|
17
|
+
fan-out** for medium/large builds: non-overlapping §3-Scope slices,
|
|
18
|
+
worktree isolation per support worker, the lead serializes git and re-runs
|
|
19
|
+
the FULL suite on every return; the quality floor multiplies, never dilutes.
|
|
20
|
+
- **persona-author skill** — the static `.add/personas/_template.md` retires
|
|
21
|
+
for a `persona-author` skill (contract · patterns · seeding references +
|
|
22
|
+
two worked examples). Patterns grow 9 → 11 from a deep diagnosis of 13
|
|
23
|
+
sample subagents and the 256-file teacher corpus: NEW *numbers-you'd-defend*
|
|
24
|
+
(a named budget beats an adjective; fake precision is worse than none) and
|
|
25
|
+
*per-flow stance* (what a lens LEADS with at build vs REFUSES at verify —
|
|
26
|
+
the verify stance carries a default NEEDS-WORK verdict); seeding gains
|
|
27
|
+
mine-the-gold / refuse-the-rot source guidance. All 6 live roster personas
|
|
28
|
+
folded to patterns-v11.
|
|
29
|
+
- **flexible TDD** — §4 supports failing-first **acceptance checks** for
|
|
30
|
+
non-coding kinds (docs · release · infra): verifiable pass/fail evidence,
|
|
31
|
+
red before the artifact exists, green after — the red→green discipline
|
|
32
|
+
holds; only the must-be-executable-code requirement is lifted. Guide,
|
|
33
|
+
template, and book reframe; NO engine change (the kernel was already
|
|
34
|
+
tolerant); 21 non-coding prose-guard tests retired dogfooding the policy.
|
|
35
|
+
- **round-visible runs** — every verify→build return trip is a recorded
|
|
36
|
+
**round**: `add.py phase build [--note "finding"]` and every non-exhausted
|
|
37
|
+
heal return increment an uncapped, observational `tasks[slug].rounds`
|
|
38
|
+
(count + timestamped history, notes verbatim); `status` names `round N`;
|
|
39
|
+
the route trace carries `"rounds"` beside `"heals"`. Heal stays the
|
|
40
|
+
cheat-classed, capped subset; rounds are the honest whole. `--note` off
|
|
41
|
+
the build target refuses (`phase_note_build_only`).
|
|
42
|
+
- **foundation-split** — the dogfood board completes the 1.x→2.0 foundation
|
|
43
|
+
migration this package's own `migrate` verb leaves to judgment: PROJECT.md
|
|
44
|
+
322 → 63 lines (engine-read lines byte-identical), the pre-2.0 standing
|
|
45
|
+
picture folded into the five `.add/specs/` living specs with a per-bullet
|
|
46
|
+
fold ledger — the worked example external 2.0 upgraders can follow.
|
|
47
|
+
- **SKILL.md command cookbook** — the skill router carries the common
|
|
48
|
+
call recipes so agents skip the `-h` round-trip; README copy tightened
|
|
49
|
+
(benefit-led highlights, honest tradeoffs, no dollar figures).
|
|
50
|
+
|
|
51
|
+
Retired (no CLI/install surface change): the `add` roster agent (superseded
|
|
52
|
+
by add-worker + add-advisor) and the static persona template (superseded by
|
|
53
|
+
the persona-author skill; `init` now creates an empty personas dir and the
|
|
54
|
+
hints point at the skill).
|
|
55
|
+
|
|
56
|
+
## [2.0.0] — 2026-07-18
|
|
57
|
+
|
|
58
|
+
Major: ADD 2.0 — a skill-led method on a thin state kernel. The skill drives
|
|
59
|
+
the loop; `add.py` records state and guards the seams; **personas carry the
|
|
60
|
+
playbooks** the platform pillars used to hard-code.
|
|
61
|
+
|
|
62
|
+
- **engine-kernel-trim** — the verb surface collapses 54 → 31: the platform
|
|
63
|
+
pillars die as engine code (streams/waves/DAG orchestration · components/
|
|
64
|
+
federation · release/graduation engines · gate-audit machinery · fold/compact
|
|
65
|
+
consolidation · team verbs · the SPEC-delta trio · doctor/worktree-prep) and
|
|
66
|
+
their workflows live on as seed-persona playbooks. `add.py` shrinks
|
|
67
|
+
9,558 → 6,596 lines; the phase guides fold 17 → 12.
|
|
68
|
+
- **PLAN.md** — the task doc is `PLAN.md` everywhere (was TASK.md; the
|
|
69
|
+
template is `PLAN.md.tmpl`), and the new one-shot **`add.py migrate`**
|
|
70
|
+
converts a 1.x board: renames live + archived task docs, seeds any missing
|
|
71
|
+
living spec, idempotent, refuses `migrate_conflict` before touching anything.
|
|
72
|
+
- **5-DD living specs** — `.add/specs/` (domain · system · experience ·
|
|
73
|
+
quality · method) with **`add.py delta-append`** as the in-flight lesson
|
|
74
|
+
channel; the fold ceremony is gone.
|
|
75
|
+
- **book-stops-shipping** — the AIDD book publishes at
|
|
76
|
+
https://pilotspace.github.io/ADD/ and never installs; engine chapter
|
|
77
|
+
pointers deep-link the site (`BOOK_URL`), installers drop the docs tree,
|
|
78
|
+
and a legacy `.add/docs/` from 1.x is user-space (never swept).
|
|
79
|
+
- **phase-collapse-3** — the lifecycle is direction · build · verify: ONE
|
|
80
|
+
freeze approval crosses the whole Direction bundle; the 3-call walk
|
|
81
|
+
(`new-task` · `freeze --by --cross` · `gate PASS`) is the whole ceremony.
|
|
82
|
+
- **persona routes + route scoreboard (GEPA)** — the persona proposes the
|
|
83
|
+
lane (`route:` header, ratified at freeze); every recorded gate appends a
|
|
84
|
+
route-outcome trace, and `add.py deltas` rolls the traces up per lane —
|
|
85
|
+
the evidence the PM persona reflects on GEPA-style, proposing route-rule
|
|
86
|
+
deltas the human folds into the persona file.
|
|
87
|
+
|
|
88
|
+
Breaking (the 2.0 line): removed verbs refuse as unknown commands; task docs
|
|
89
|
+
must be `PLAN.md` (`add.py migrate` is the paved path); the book no longer
|
|
90
|
+
lands in `.add/docs/`; `TASK.fast.md.tmpl` is gone (one template, every lane).
|
|
91
|
+
|
|
92
|
+
## [1.18.0] — 2026-07-14
|
|
93
|
+
|
|
94
|
+
Minor: eleven milestones, expanded from the original July-7 two-milestone cut
|
|
95
|
+
(unpublished — the 1.17.0-amend precedent) to attribute everything merged
|
|
96
|
+
since. Headline: **six-phase-loop** — the lifecycle merges 8 phases into 6
|
|
97
|
+
(specify absorbs scenarios; verify absorbs observe), phase guides disclose
|
|
98
|
+
into the roster's bundle subagents, and the tick into build re-renders the
|
|
99
|
+
frozen spec. Also: **expectations-first** (plan phase; ONE freeze),
|
|
100
|
+
**plan-legibility**, **quality-floors**, **risk-proportional-ceremony**,
|
|
101
|
+
**three-phase-flow**, **add-bench** + **add-bench-v2** (the trust benchmark
|
|
102
|
+
that measured it all), **add-lean-loop**, plus the original
|
|
103
|
+
**build-strategy-facets** and **delta-drain**. The ceremony-to-effort and
|
|
104
|
+
call-floor features (compound ticks · scope echo · kickoff truth · skill
|
|
105
|
+
orient split) ship here too; their milestones remain open on measurement
|
|
106
|
+
criteria. Folded in after the July-14 cut: the **engine-minimalism /
|
|
107
|
+
context-cost thread** — a progressive foundation read, a lean default `status`,
|
|
108
|
+
and one fewer ceremony turn per crossing — measured by **token-anatomy** and
|
|
109
|
+
**honest-fidelity-meter**. No gate weakened; a security finding still HARD-STOPs.
|
|
110
|
+
|
|
111
|
+
### Changed (the headline)
|
|
112
|
+
- **The loop is six phases**: `specify → plan → tests → build → verify → done`.
|
|
113
|
+
Scenarios live inside SPECIFY (§2 unchanged as a section); the observe duties
|
|
114
|
+
live inside VERIFY (§7 unchanged). Legacy phase tokens (`ground`, `contract`,
|
|
115
|
+
`scenarios`, `observe`) normalize on read — in-flight boards migrate loud and
|
|
116
|
+
safe; the skip grammar is retired (nothing is skippable; vestigial `skips:`
|
|
117
|
+
headers are noted at gate, never fatal) (six-phase-loop).
|
|
118
|
+
- **Guides re-cut to 6 files**; delegating spawns a bundle agent that loads its
|
|
119
|
+
own phase guides — the orchestrator reads only SKILL.md; the inline lane stays
|
|
120
|
+
first-class (six-phase-loop).
|
|
121
|
+
- The specification bundle approves at ONE freeze on the plan phase
|
|
122
|
+
(expectations-first); the freeze report renders the BUILD PLAN block and the
|
|
123
|
+
resolved scope echo (plan-legibility, ceremony-to-effort).
|
|
124
|
+
|
|
125
|
+
### Added
|
|
126
|
+
- **Build-entry spec echo** — the tests→build tick prints the §1 Must/Reject
|
|
127
|
+
rules + the frozen §3 contract head, so the builder starts from the spec on
|
|
128
|
+
the screen, not from memory; fail-open, both entry paths (six-phase-loop).
|
|
129
|
+
- **Per-phase persona presets** — teacher-grade expert stances per owned phase
|
|
130
|
+
in the roster agents; project-persona routing stays first; a preset never
|
|
131
|
+
lowers a gate (six-phase-loop).
|
|
132
|
+
- **Compound ticks** — `freeze --cross` lands in tests; `gate` records from
|
|
133
|
+
build (one call fewer per crossing); init prints the resume pointer
|
|
134
|
+
(call-floor).
|
|
135
|
+
- **Quality floors** — spec-dialect warn at build entry · fast-lane
|
|
136
|
+
`Boundary:` freeze-refusal · §6 DIALECT check line (quality-floors).
|
|
137
|
+
- **The trust benchmark** — arms × workload-milestones harness with
|
|
138
|
+
deterministic oracles, tamper/regression meters, and the
|
|
139
|
+
cost-per-trusted-feature verdict (add-bench, add-bench-v2).
|
|
140
|
+
- **AI-plan-verify gate + phase bundles** (three-phase-flow) · message-layer
|
|
141
|
+
error ergonomics, −24% turns at equal rigor (risk-proportional-ceremony).
|
|
142
|
+
|
|
143
|
+
### Added (from the original July-7 cut)
|
|
144
|
+
- **Faceted §5 build strategy** — four domain-generic facet lines drafted at
|
|
145
|
+
the tests→build cross: `Approach` (domain strategy) · `Data strategy` ·
|
|
146
|
+
`Pattern` · `Optimization stance`; the fast lane collapses them to one line
|
|
147
|
+
(build-strategy-facets).
|
|
148
|
+
- **per-facet ADR harvest** — each §5 facet lands in §7 Decisions (ADR) as its
|
|
149
|
+
own actor-tagged line at done (build-strategy-facets).
|
|
150
|
+
- **compact-foundation `--propose`** — a read-only preview of the compaction a
|
|
151
|
+
run would take; inspect before any byte moves (delta-drain).
|
|
152
|
+
- **`verify` flow value for personas** — personas route to the verify surface
|
|
153
|
+
directly; the streams.md worker-contract `<persona>` block names the flow
|
|
154
|
+
preference (delta-drain).
|
|
155
|
+
- **persona roster line** — `status`/`check` render an engine-built roster with
|
|
156
|
+
flows, never hand-maintained (delta-drain).
|
|
157
|
+
|
|
158
|
+
### Changed
|
|
159
|
+
- §5 build strategy guidance, phase guides, and the TASK.md/TASK.fast.md
|
|
160
|
+
templates teach and carry the facet block (build-strategy-facets).
|
|
161
|
+
|
|
162
|
+
### Fixed
|
|
163
|
+
- **Installer data loss** — `.claude/agents` is a shared namespace: init/update
|
|
164
|
+
now land only ADD's own roster files per-file (atomic), removal is
|
|
165
|
+
explicit-tombstone-only — the user's own subagents survive every install and
|
|
166
|
+
update (loose task installer-shared-namespace-guard, PR #151).
|
|
167
|
+
|
|
168
|
+
### Added (engine-minimalism — the context-cost thread)
|
|
169
|
+
- **Progressive foundation read** — `status --foundation` prints a MAP (the preamble +
|
|
170
|
+
`invariants:` + Domain + Spec in full; every other section collapsed to its heading +
|
|
171
|
+
an on-demand `add.py status --foundation "<section>"` pull), so the cross-milestone
|
|
172
|
+
foundation that is re-read every turn is a slice, not the whole file; a named section
|
|
173
|
+
fleshes out on demand and `--all` restores the whole foundation (foundation-slice, −59%
|
|
174
|
+
on a 55KB foundation). Invariants never collapse — the contracts that bind every task
|
|
175
|
+
always survive the map.
|
|
176
|
+
- **Lean default `status`** — bare `status` prints the resume essentials; five heavy
|
|
177
|
+
blocks gate behind `--all`; `status --brief` is the mid-task resume; `status --section
|
|
178
|
+
<n>` reads one TASK.md §body instead of the whole growing file (engine-minimalism).
|
|
179
|
+
- **`--help` diet** — the top-level help drops from 121 lines to 19 (engine-minimalism).
|
|
180
|
+
|
|
181
|
+
### Changed (engine-minimalism)
|
|
182
|
+
- **One fewer ceremony turn per crossing** — a green build steers straight to `gate PASS`;
|
|
183
|
+
the redundant pre-gate `advance` is folded away (ceremony-turn-cut / advance-fold).
|
|
184
|
+
- **Leaner per-turn engine output** — bare `status` stops restating the 'now' card in its
|
|
185
|
+
resume block; `new-task` teaches the full annotated recipe once per project, compact
|
|
186
|
+
thereafter; the skill re-orients from each verb's `next:` footer instead of re-running
|
|
187
|
+
`status` (engine-output-trim, status-brief-adoption, trust-the-footer).
|
|
188
|
+
|
|
189
|
+
### Added (measurement — not shipped in the package)
|
|
190
|
+
- **Token anatomy** attributes a benchmark run's cache-read cost by category; a
|
|
191
|
+
deterministic **`requirement_coverage`** meter replaces the artifact-blind spec-fidelity
|
|
192
|
+
judge (now a source-aware, non-gating annotation); scoring is hermetic per boot
|
|
193
|
+
(token-anatomy, honest-fidelity-meter). Dev harness under `benchmark/` — not in the
|
|
194
|
+
npm/PyPI tarball.
|
|
195
|
+
|
|
196
|
+
### Disclosed waivers (non-security, signed)
|
|
197
|
+
- `reclaim-ticket-race` — lock-reclaim TOCTOU flake; owner Tin Dang, expires 2026-08-04.
|
|
198
|
+
- `js-reclaim-lock-heartbeat` — JS lock-heartbeat race; owner Tin Dang, expires 2026-08-04.
|
|
199
|
+
|
|
7
200
|
## [1.17.0] — 2026-07-06
|
|
8
201
|
|
|
9
202
|
Minor: four milestones — **method-ergonomics** (every recurring gate rule becomes
|
package/GETTING-STARTED.md
CHANGED
|
@@ -53,7 +53,8 @@ at the `prototype` stage. (Prefer to choose up front? Both installers take
|
|
|
53
53
|
changed later — see the appendix.)
|
|
54
54
|
|
|
55
55
|
Either one creates `.add/` (your runtime), drops the `add` skill into
|
|
56
|
-
`.claude/skills/add
|
|
56
|
+
`.claude/skills/add/`. The book itself is published at
|
|
57
|
+
https://pilotspace.github.io/ADD/ and never installs into the project. It deliberately
|
|
57
58
|
does **not** initialise the project — that's the agent's first move, so nothing
|
|
58
59
|
gets decided without you in the loop.
|
|
59
60
|
|
|
@@ -61,7 +62,7 @@ gets decided without you in the loop.
|
|
|
61
62
|
handoff — from here on it's conversation, not terminal commands.
|
|
62
63
|
|
|
63
64
|
> Why stages exist: the steps never change, only how *deeply* you run them.
|
|
64
|
-
> See
|
|
65
|
+
> See https://pilotspace.github.io/ADD/10-setup-and-stages/.
|
|
65
66
|
|
|
66
67
|
### Updating to a newer ADD — no re-install
|
|
67
68
|
|
|
@@ -79,7 +80,7 @@ pipx run pilotspace-add update
|
|
|
79
80
|
pip install -U pilotspace-add && pilotspace-add update
|
|
80
81
|
```
|
|
81
82
|
|
|
82
|
-
`update` clean-replaces the managed layer (`skill` · `.add/tooling`
|
|
83
|
+
`update` clean-replaces the managed layer (`skill` · `.add/tooling`)
|
|
83
84
|
and **never touches your work** — `state.json`, `PROJECT.md`, milestones, tasks and
|
|
84
85
|
archive are left exactly as they were (it backs `state.json` up first regardless). It
|
|
85
86
|
is idempotent (same version twice is a no-op) and writes a `.add/.add-version` stamp.
|
|
@@ -115,7 +116,7 @@ contract → review the result.** Everything between is the agent. For the
|
|
|
115
116
|
transfer-money feature above, that's four short conversations — and zero typed
|
|
116
117
|
commands.
|
|
117
118
|
|
|
118
|
-
> New term: **Onboarding** — the install→first-milestone path. See
|
|
119
|
+
> New term: **Onboarding** — the install→first-milestone path. See https://pilotspace.github.io/ADD/appendix-c-glossary/.
|
|
119
120
|
|
|
120
121
|
---
|
|
121
122
|
|
|
@@ -169,56 +170,11 @@ Confirm your project is internally consistent at any time:
|
|
|
169
170
|
python3 .add/tooling/add.py check
|
|
170
171
|
```
|
|
171
172
|
|
|
172
|
-
It verifies state is valid, every task has its
|
|
173
|
+
It verifies state is valid, every task has its PLAN.md, and markers match. Exit
|
|
173
174
|
code 0 means healthy — handy as a CI gate.
|
|
174
175
|
|
|
175
176
|
---
|
|
176
177
|
|
|
177
|
-
## Enforce the decision points in CI
|
|
178
|
-
|
|
179
|
-
`add.py audit` re-verifies every recorded human gate on your board — a named
|
|
180
|
-
human at each contract freeze, exactly one gate outcome per done task, a human
|
|
181
|
-
reviewer wherever the security line carries a note. It exits non-zero naming
|
|
182
|
-
the task and the finding, which makes it a CI gate: enforcement runs on a
|
|
183
|
-
machine the agent does not control, so the agent can never stamp its own work
|
|
184
|
-
green (*never self-gate*).
|
|
185
|
-
|
|
186
|
-
Drop this workflow into `.github/workflows/seam-audit.yml`:
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
name: seam-audit
|
|
190
|
-
|
|
191
|
-
on:
|
|
192
|
-
push:
|
|
193
|
-
branches: [main]
|
|
194
|
-
pull_request:
|
|
195
|
-
|
|
196
|
-
permissions:
|
|
197
|
-
contents: read
|
|
198
|
-
|
|
199
|
-
jobs:
|
|
200
|
-
seam-audit:
|
|
201
|
-
name: Decision-point audit (recorded human gates)
|
|
202
|
-
runs-on: ubuntu-latest
|
|
203
|
-
steps:
|
|
204
|
-
- uses: actions/checkout@v4
|
|
205
|
-
|
|
206
|
-
- uses: actions/setup-python@v5
|
|
207
|
-
with:
|
|
208
|
-
python-version: '3.12'
|
|
209
|
-
|
|
210
|
-
- name: Audit recorded decision points
|
|
211
|
-
run: python3 .add/tooling/add.py audit
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
The command is the same one you can run locally — the installer already placed
|
|
215
|
-
`add.py` at `.add/tooling/add.py`, and the audit is read-only (it never edits
|
|
216
|
-
your board). A red `seam-audit` job means a decision record is malformed or a
|
|
217
|
-
security note was left to the auto-gate; fix the record (or escalate the gate
|
|
218
|
-
to a human), never the auditor.
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
178
|
## Under the hood — the seven phases by hand (escape hatch)
|
|
223
179
|
|
|
224
180
|
Everything above is what the agent drives for you through the one-approval flow. This
|
|
@@ -227,7 +183,7 @@ each one produces and step in manually whenever you want to. You never *have* to
|
|
|
227
183
|
these — they are the agent's hands, and yours when you take the wheel.
|
|
228
184
|
|
|
229
185
|
The rhythm is always: **fill the section → run `python3 .add/tooling/add.py advance`.**
|
|
230
|
-
The tool keeps the `phase:` marker at the top of
|
|
186
|
+
The tool keeps the `phase:` marker at the top of PLAN.md in sync.
|
|
231
187
|
|
|
232
188
|
### Before the phases — initialise and scaffold
|
|
233
189
|
|
|
@@ -244,7 +200,7 @@ python3 .add/tooling/add.py new-task transfer --title "Transfer money between my
|
|
|
244
200
|
> any build. Plain `init` skips that gate, which is fine here: by hand, the
|
|
245
201
|
> human IS the one driving every step.
|
|
246
202
|
|
|
247
|
-
This scaffolds `.add/tasks/transfer/
|
|
203
|
+
This scaffolds `.add/tasks/transfer/PLAN.md` — **one file holding all seven phase
|
|
248
204
|
sections** — plus empty `tests/` and `src/` folders, and makes it the active task
|
|
249
205
|
at phase `specify`. Open it in your editor; you'll fill it top to bottom.
|
|
250
206
|
|
|
@@ -254,7 +210,7 @@ You can also change the project's depth at any time:
|
|
|
254
210
|
python3 .add/tooling/add.py stage mvp
|
|
255
211
|
```
|
|
256
212
|
|
|
257
|
-
### Phase 1 — Specify (
|
|
213
|
+
### Phase 1 — Specify (https://pilotspace.github.io/ADD/03-step-1-specify/)
|
|
258
214
|
|
|
259
215
|
Write the rules in **§1**. State what it *must* do, what it must *reject* (each
|
|
260
216
|
with a named error code), and what's true after success:
|
|
@@ -278,7 +234,7 @@ Confirm every assumption (no FX, no daily limit in v1). Then:
|
|
|
278
234
|
python3 .add/tooling/add.py advance
|
|
279
235
|
```
|
|
280
236
|
|
|
281
|
-
### Phase 2 — Scenarios (
|
|
237
|
+
### Phase 2 — Scenarios (https://pilotspace.github.io/ADD/04-step-2-scenarios/)
|
|
282
238
|
|
|
283
239
|
In **§2**, turn each rule into a Given/When/Then. For every rejection, assert what
|
|
284
240
|
must stay **unchanged**:
|
|
@@ -293,7 +249,7 @@ Scenario: insufficient funds
|
|
|
293
249
|
|
|
294
250
|
Then `python3 .add/tooling/add.py advance`.
|
|
295
251
|
|
|
296
|
-
### Phase 3 — Contract (
|
|
252
|
+
### Phase 3 — Contract (https://pilotspace.github.io/ADD/05-step-3-plan/)
|
|
297
253
|
|
|
298
254
|
In **§3**, fix the external shape and **freeze** it (`Status: FROZEN @ v1`):
|
|
299
255
|
|
|
@@ -306,19 +262,19 @@ POST /transfers body: { fromAccountId, toAccountId, amount }
|
|
|
306
262
|
|
|
307
263
|
A frozen contract is the decision point that makes the AI build safe. Then advance.
|
|
308
264
|
|
|
309
|
-
### Phase 4 — Tests, red first (
|
|
265
|
+
### Phase 4 — Tests, red first (https://pilotspace.github.io/ADD/06-step-4-tests/)
|
|
310
266
|
|
|
311
267
|
Write one test per scenario into `.add/tasks/transfer/tests/`, then **run them and
|
|
312
268
|
confirm they FAIL** — there's no code yet. A test that passes now is testing
|
|
313
269
|
nothing. This is red/green TDD: red before green. Then advance.
|
|
314
270
|
|
|
315
|
-
### Phase 5 — Build (
|
|
271
|
+
### Phase 5 — Build (https://pilotspace.github.io/ADD/07-step-5-build/)
|
|
316
272
|
|
|
317
273
|
Now let the AI write code into `.add/tasks/transfer/src/` until **every test
|
|
318
274
|
passes** — without changing any test or the frozen contract. Honor the safety rule
|
|
319
275
|
(here: debit + credit in one atomic transaction). Then advance.
|
|
320
276
|
|
|
321
|
-
### Phase 6 — Verify (
|
|
277
|
+
### Phase 6 — Verify (https://pilotspace.github.io/ADD/08-step-6-verify/)
|
|
322
278
|
|
|
323
279
|
In **§6**, confirm the evidence (all green, nothing weakened) and check what tests
|
|
324
280
|
miss: concurrency, security, architecture. Record the gate — and close the task:
|
|
@@ -330,7 +286,7 @@ python3 .add/tooling/add.py gate PASS
|
|
|
330
286
|
`gate PASS` marks the task `done`. (Use `gate HARD-STOP` to send it back to Build,
|
|
331
287
|
or `gate RISK-ACCEPTED` for a signed, non-security waiver.)
|
|
332
288
|
|
|
333
|
-
### Phase 7 — Observe (
|
|
289
|
+
### Phase 7 — Observe (https://pilotspace.github.io/ADD/09-the-loop/)
|
|
334
290
|
|
|
335
291
|
In **§7**, note what to watch in production and the next spec delta. Every learning
|
|
336
292
|
becomes the next `new-task`. The flow is a loop, not a finish line.
|
|
@@ -341,11 +297,11 @@ becomes the next `new-task`. The flow is a loop, not a finish line.
|
|
|
341
297
|
|
|
342
298
|
You just ran the method; now read *why* it's shaped this way:
|
|
343
299
|
|
|
344
|
-
- The shift & principles —
|
|
345
|
-
- The flow end to end —
|
|
346
|
-
- Each step in depth —
|
|
347
|
-
- Operating it on a team —
|
|
348
|
-
- A fully worked example —
|
|
300
|
+
- The shift & principles — https://pilotspace.github.io/ADD/00-introduction/, https://pilotspace.github.io/ADD/01-principles/
|
|
301
|
+
- The flow end to end — https://pilotspace.github.io/ADD/02-the-flow/
|
|
302
|
+
- Each step in depth — https://pilotspace.github.io/ADD/03-step-1-specify/ through https://pilotspace.github.io/ADD/09-the-loop/
|
|
303
|
+
- Operating it on a team — https://pilotspace.github.io/ADD/11-governance/, https://pilotspace.github.io/ADD/12-roles/
|
|
304
|
+
- A fully worked example — https://pilotspace.github.io/ADD/appendix-d-worked-example/
|
|
349
305
|
- Building UI? The render-ready UDD foundation — `.add/DESIGN.md` is the prose
|
|
350
306
|
front-door to a lintable design system (`.add/design/` tokens · catalog ·
|
|
351
307
|
prototypes) the AI drafts from; `add.py check` lints it (delete `DESIGN.md` if
|