@pilotspace/add 1.0.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.
- package/CHANGELOG.md +88 -0
- package/GETTING-STARTED.md +172 -84
- package/README.md +14 -8
- package/bin/cli.js +39 -38
- package/docs/01-principles.md +3 -3
- package/docs/02-the-flow.md +20 -13
- package/docs/03-step-1-specify.md +13 -13
- package/docs/04-step-2-scenarios.md +3 -1
- package/docs/05-step-3-contract.md +4 -2
- package/docs/06-step-4-tests.md +3 -1
- package/docs/07-step-5-build.md +1 -1
- package/docs/08-step-6-verify.md +22 -4
- package/docs/09-the-loop.md +25 -1
- package/docs/10-setup-and-stages.md +52 -9
- package/docs/11-governance.md +2 -2
- package/docs/12-roles.md +3 -3
- package/docs/13-adoption.md +3 -3
- package/docs/14-foundation.md +19 -11
- package/docs/15-foundations-and-lineage.md +106 -0
- package/docs/README.md +4 -0
- package/docs/appendix-a-templates.md +3 -3
- package/docs/appendix-b-prompts.md +40 -5
- package/docs/appendix-c-glossary.md +42 -12
- package/docs/appendix-d-worked-example.md +2 -2
- package/docs/appendix-e-checklists.md +2 -2
- package/docs/appendix-f-requirements-matrix.md +12 -11
- package/docs/appendix-g-references.md +106 -0
- package/package.json +5 -3
- package/skill/add/SKILL.md +50 -21
- package/skill/add/adopt.md +67 -0
- package/skill/add/deltas.md +20 -8
- package/skill/add/fold.md +19 -17
- package/skill/add/graduate.md +74 -0
- package/skill/add/intake.md +22 -7
- package/skill/add/loop.md +59 -0
- package/skill/add/phases/0-setup.md +92 -24
- package/skill/add/phases/1-specify.md +23 -13
- package/skill/add/phases/2-scenarios.md +14 -4
- package/skill/add/phases/3-contract.md +38 -9
- package/skill/add/phases/4-tests.md +29 -5
- package/skill/add/phases/5-build.md +14 -4
- package/skill/add/phases/6-verify.md +38 -4
- package/skill/add/phases/7-observe.md +13 -5
- package/skill/add/report-template.md +106 -0
- package/skill/add/run.md +53 -34
- package/skill/add/scope.md +24 -2
- package/skill/add/setup-review.md +65 -0
- package/skill/add/streams.md +256 -0
- package/tooling/add.py +1388 -62
- package/tooling/templates/CONVENTIONS.md.tmpl +1 -1
- package/tooling/templates/GLOSSARY.md.tmpl +23 -0
- package/tooling/templates/MILESTONE.md.tmpl +1 -0
- package/tooling/templates/PROJECT.md.tmpl +4 -3
- package/tooling/templates/TASK.md.tmpl +39 -11
|
@@ -1,3 +1,26 @@
|
|
|
1
1
|
# GLOSSARY (one name per concept — used everywhere: specs, contracts, code)
|
|
2
2
|
|
|
3
3
|
<term>: <definition>
|
|
4
|
+
|
|
5
|
+
# ADD method vocabulary (domain-standard names; bridges to legacy terms)
|
|
6
|
+
GOAL: the one durable outcome a project (and each milestone) runs toward — the loop's orientation anchor, declared as the lowercase `goal:` line in PROJECT.md / MILESTONE.md and surfaced by status/guide every session; distinct from a task's §1 Must (a single required behavior, not the whole-project outcome).
|
|
7
|
+
deep verify: the deepened Verify evidence (v20) required beyond passing tests — for a task that produced code, that every new symbol is referenced (wiring) and no new dead/unused code exists; for prose/non-code, a recorded no-skim semantic read; which path applies is resolver-judged and the engine never classifies (a rubric, not add.py).
|
|
8
|
+
onboarding: the install -> first-milestone path (formerly "on-ramp").
|
|
9
|
+
primary flow: the solid forward path of the flow diagram — a phase starts only when its input exists (formerly "forward spine").
|
|
10
|
+
cross-cutting concern: a concern running through every step rather than being one step — security, testing, observability, cost (formerly "spine / continuous concern").
|
|
11
|
+
working state: everything an agent loads each session — skill router, active phase, PROJECT/MILESTONE/TASK, state.json (formerly "state surface").
|
|
12
|
+
audit trail: the reference record read by people, never auto-loaded into agent context (formerly "story surface").
|
|
13
|
+
method rationale: the why behind every rule — the AIDD book, loaded on demand, never duplicated (formerly "trust layer").
|
|
14
|
+
failing-first suite: the test suite written before code, confirmed red for the right reason — a missing implementation (formerly "red safety net").
|
|
15
|
+
non-functional review: the deliberate post-evidence check of what tests rarely catch — concurrency, security, architecture (formerly "blind-spot checks").
|
|
16
|
+
change scope: the files a locked run may and may not touch (formerly "touch-boundary"; the <touch_boundary> XML prompt tag keeps its name).
|
|
17
|
+
automated quality gate: the evidence-based Verify resolver under autonomy auto — may auto-PASS on complete evidence; security always escalates (formerly "evidence auto-gate").
|
|
18
|
+
autonomy level: the per-task Verify resolver setting — auto (default) or conservative; declared in the TASK.md header, human-reviewed at the freeze (formerly "autonomy dial").
|
|
19
|
+
living documentation: the durable project artifacts — conventions, glossary, frozen contracts — that outlive any particular code (formerly "survivor layer").
|
|
20
|
+
scope level: the granularity a decision lives at — intake level (request -> versioned scope), milestone level, setup/foundation level, task level (formerly "altitude").
|
|
21
|
+
baseline approval: the one human gate that freezes the AI-drafted foundation, first scope, and first contract together — runs as `add.py lock` (formerly "the lock-down").
|
|
22
|
+
lesson learned: a single learning a loop produces, tagged by the competency it improves — the `- [DDD · open]` grammar and deltas.md/`add.py deltas` machine names stay (formerly "competency delta").
|
|
23
|
+
lowest-confidence flag: the AI's ranked declaration of the 1–2 points most likely to be wrong in what a human is asked to approve — each with why + cost-if-wrong; the ⚠ glyph keeps its name as the machine marker (formerly "least-sure flag").
|
|
24
|
+
decision point: a stop for human judgment — the contract-freeze approval, an escalated verify gate, intake confirmation, milestone close; the machine names seam (--json owner enum, decide key) and seam-audit (CI job) keep their names (formerly "seam").
|
|
25
|
+
retrospective consolidation: gathering confirmed lessons learned at milestone close and writing them append-only into the versioned foundation — human-confirmed, never self-approved; the machine names fold.md, the folded status, and add.py deltas keep their names (formerly "the fold / fold ritual").
|
|
26
|
+
specification bundle: a task's spec, scenarios, contract, and failing tests drafted as one piece and approved by a person once at the contract freeze (formerly "the one-approval front").
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# MILESTONE: {{title}}
|
|
2
2
|
|
|
3
3
|
goal: {{goal}}
|
|
4
|
+
rationale: <why this scope — the confirmed intake classification (bucket + reason)>
|
|
4
5
|
stage: {{stage}} · status: active · created: {{date}}
|
|
5
6
|
|
|
6
7
|
> SDD living doc for this milestone. Keep it THIN: breadth, shared decisions, and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# PROJECT —
|
|
1
|
+
# PROJECT — living documentation (cross-milestone context)
|
|
2
2
|
|
|
3
3
|
> The durable foundation that outlives every milestone and feeds context into each
|
|
4
4
|
> TDD⇄ADD loop. Read this FIRST in any session. Keep it lean — one screen, not a
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
> that is the re-entrant arrow from the engine down to the foundation.
|
|
8
8
|
|
|
9
9
|
slug: {{project}} · stage: {{stage}} · updated: {{date}}
|
|
10
|
+
goal: <the one durable outcome this whole project runs toward — set this at setup; status/guide surface it every session>
|
|
10
11
|
|
|
11
12
|
---
|
|
12
13
|
|
|
@@ -22,8 +23,8 @@ slug: {{project}} · stage: {{stage}} · updated: {{date}}
|
|
|
22
23
|
<!-- The spec is a living document, not a frozen plan. This section POINTS to the
|
|
23
24
|
active milestone + frozen contracts; it does not duplicate them. -->
|
|
24
25
|
- Active milestone → `.add/milestones/<slug>/MILESTONE.md` (see `add.py status`)
|
|
25
|
-
- Frozen contracts (
|
|
26
|
-
- Settled vs still open:
|
|
26
|
+
- Frozen contracts (living docs): the contracts other work builds against.
|
|
27
|
+
- Settled vs still open: <frozen contracts · open questions>
|
|
27
28
|
|
|
28
29
|
## Users (UDD) — UI/UX: design before code
|
|
29
30
|
<!-- UI/UX-Driven Development: users use the interface, not the spec. Capture the
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
slug: {{slug}} · created: {{date}} · stage: {{stage}}
|
|
4
4
|
phase: specify <!-- specify -> scenarios -> contract -> tests -> build -> verify -> observe -> done -->
|
|
5
|
+
<!-- high-risk/method-defining scope? declare `risk: high` on the slug line above and lower
|
|
6
|
+
the autonomy level with `autonomy: conservative` — the engine refuses an unguarded completion
|
|
7
|
+
(`unguarded_high_risk_auto`, run.md guard). A comment is never a declaration. -->
|
|
5
8
|
|
|
6
9
|
> One file = one task. Fill sections top-to-bottom; the `add` skill drives each phase.
|
|
7
10
|
> When a phase is unclear, read its book chapter in `.add/docs/` (linked per section).
|
|
@@ -14,21 +17,31 @@ phase: specify <!-- specify -> scenarios -> contract -> tests -> build -> veri
|
|
|
14
17
|
Feature: <name>
|
|
15
18
|
Framings weighed: <chosen> (chosen) · <alternative> · <alternative>
|
|
16
19
|
Must:
|
|
20
|
+
<must>
|
|
17
21
|
- <required behavior>
|
|
22
|
+
</must>
|
|
18
23
|
Reject:
|
|
24
|
+
<reject>
|
|
19
25
|
- <bad input / situation> -> "<error_code>"
|
|
26
|
+
</reject>
|
|
20
27
|
After:
|
|
28
|
+
<after>
|
|
21
29
|
- <state that is true once it succeeds>
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
</after>
|
|
31
|
+
Assumptions — lowest-confidence first:
|
|
32
|
+
<assumptions>
|
|
33
|
+
⚠ <the one assumption most likely to be wrong> — lowest confidence because <why>; if wrong: <cost>
|
|
24
34
|
- [ ] <next assumption, ranked> — confirm or deny; never carry an open one forward
|
|
35
|
+
</assumptions>
|
|
25
36
|
|
|
26
|
-
<!-- EXIT: every rule stated, every rejection named; assumptions ranked
|
|
37
|
+
<!-- EXIT: every rule stated, every rejection named; assumptions ranked lowest-confidence first, the top one or two ⚠-flagged with why + cost (or, for trivial scope, an honest "none material" that still names the single biggest risk). -->
|
|
27
38
|
|
|
28
39
|
---
|
|
29
40
|
|
|
30
41
|
## 2 · SCENARIOS — pass/fail cases ▸ docs/04-step-2-scenarios.md
|
|
31
42
|
|
|
43
|
+
<scenarios>
|
|
44
|
+
|
|
32
45
|
```gherkin
|
|
33
46
|
Scenario: <short name>
|
|
34
47
|
Given <starting situation>
|
|
@@ -37,6 +50,8 @@ Scenario: <short name>
|
|
|
37
50
|
And <what must remain unchanged> # required for every rejection
|
|
38
51
|
```
|
|
39
52
|
|
|
53
|
+
</scenarios>
|
|
54
|
+
|
|
40
55
|
<!-- EXIT: one scenario per Must AND per Reject; each result is observable. -->
|
|
41
56
|
|
|
42
57
|
---
|
|
@@ -50,22 +65,30 @@ Scenario: <short name>
|
|
|
50
65
|
Schema: <tables/fields touched, and access pattern>
|
|
51
66
|
```
|
|
52
67
|
|
|
53
|
-
Status: DRAFT
|
|
54
|
-
<!-- The freeze IS the one approval
|
|
55
|
-
most likely wrong across the whole bundle, tagged [spec|scenario|contract|test],
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
Status: DRAFT
|
|
69
|
+
<!-- The freeze IS the one approval — lead it with the bundle's lowest-confidence flag: the 1–2
|
|
70
|
+
points most likely wrong across the whole bundle, tagged [spec|scenario|contract|test], each
|
|
71
|
+
with why + cost (the §1 ⚠ assumptions feed it; a flag may point at a scenario or the contract
|
|
72
|
+
too — see run.md). Approved -> Status: FROZEN @ vN — approved by <name>. Changing a frozen
|
|
73
|
+
contract = change request back to SPECIFY.
|
|
74
|
+
EXIT: frozen + every spec rejection has a contracted response + names match GLOSSARY + the
|
|
75
|
+
bundle's lowest-confidence flag was surfaced at the freeze (or an honest "none material"). -->
|
|
59
76
|
|
|
60
77
|
---
|
|
61
78
|
|
|
62
|
-
## 4 · TESTS —
|
|
79
|
+
## 4 · TESTS — failing-first suite (red) ▸ docs/06-step-4-tests.md
|
|
63
80
|
|
|
64
81
|
Coverage target: <e.g. 90%>
|
|
65
82
|
Plan (one test per scenario, asserting behavior not internals):
|
|
83
|
+
<test_plan>
|
|
66
84
|
- test_<scenario>: arrange <Given> / act <When> / assert <Then> + assert <unchanged>
|
|
85
|
+
</test_plan>
|
|
67
86
|
|
|
68
87
|
Tests live in: `./tests/` · MUST run red (missing implementation) before Build.
|
|
88
|
+
<!-- declare paths as backticked tokens on this line: `./…` = this task dir ·
|
|
89
|
+
a token with "/" = project root · a bare name = sibling of the previous
|
|
90
|
+
token's dir · a directory counts its *.py files (non-recursive); reports
|
|
91
|
+
mark declared counts with † · anything resolving outside the project root counts 0 -->
|
|
69
92
|
|
|
70
93
|
<!-- EXIT: one test per scenario; suite red for the RIGHT reason; target recorded. -->
|
|
71
94
|
|
|
@@ -81,7 +104,7 @@ Constraints: do NOT change any test or the contract; allow-list packages only; a
|
|
|
81
104
|
|
|
82
105
|
---
|
|
83
106
|
|
|
84
|
-
## 6 · VERIFY — evidence +
|
|
107
|
+
## 6 · VERIFY — evidence + non-functional review ▸ docs/08-step-6-verify.md
|
|
85
108
|
|
|
86
109
|
- [ ] all tests pass
|
|
87
110
|
- [ ] coverage did not decrease
|
|
@@ -91,6 +114,11 @@ Constraints: do NOT change any test or the contract; allow-list packages only; a
|
|
|
91
114
|
- [ ] layering & dependencies follow CONVENTIONS.md
|
|
92
115
|
- [ ] a person reviewed and approved the change
|
|
93
116
|
|
|
117
|
+
### Deep checks — do not skim (fill the path that applies; the resolver judges which)
|
|
118
|
+
- [ ] WIRING (code) — every new symbol is referenced; record where / how confirmed
|
|
119
|
+
- [ ] DEAD-CODE (code) — no new unused or orphaned symbol introduced
|
|
120
|
+
- [ ] SEMANTIC (prose / non-code) — read in full, not skimmed: <what read · what confirmed>
|
|
121
|
+
|
|
94
122
|
### GATE RECORD
|
|
95
123
|
Outcome: <PASS | RISK-ACCEPTED | HARD-STOP>
|
|
96
124
|
If RISK-ACCEPTED -> owner: <name> · ticket: <link> · expires: <date> (never for a security gap)
|