@pilotspace/add 1.17.0 → 2.0.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 +144 -0
- package/GETTING-STARTED.md +20 -64
- package/README.md +128 -56
- package/agents/add.md +68 -0
- package/bin/cli.js +86 -21
- package/package.json +2 -3
- package/personas-teacher/VENDOR.md +6 -0
- package/skill/add/SKILL.md +100 -134
- package/skill/add/adopt.md +28 -0
- package/skill/add/beyond.md +36 -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/phases/build.md +78 -0
- package/skill/add/phases/direction.md +280 -0
- package/skill/add/phases/verify.md +160 -0
- package/skill/add/run.md +11 -18
- package/skill/add/terms.md +18 -0
- package/tooling/add.py +2383 -3261
- package/tooling/add_engine/autonomy.py +2 -37
- package/tooling/add_engine/components.py +4 -87
- package/tooling/add_engine/constants.py +145 -91
- package/tooling/add_engine/guidelines.py +9 -11
- package/tooling/add_engine/io_state.py +69 -2
- 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 +128 -0
- package/tooling/templates/PROJECT.md.tmpl +6 -1
- package/tooling/templates/PROMPT.persona.md.tmpl +17 -21
- package/tooling/templates/personas/_template.md.tmpl +33 -29
- 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-advisor.md +0 -31
- 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
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# Appendix A · Templates
|
|
2
|
-
|
|
3
|
-
[← 15 Foundations & Lineage](./15-foundations-and-lineage.md) · [Contents](./README.md) · Next: [Appendix B Prompts →](./appendix-b-prompts.md)
|
|
4
|
-
|
|
5
|
-
Copy-paste blanks. Project-level templates are filled once at setup; feature-level templates are filled once per feature.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Project-level (set up once)
|
|
10
|
-
|
|
11
|
-
### `CONVENTIONS.md`
|
|
12
|
-
```
|
|
13
|
-
Language/framework: <e.g. Python 3.12 / FastAPI>
|
|
14
|
-
Folders: src/ tests/ contracts/ features/ playbook/
|
|
15
|
-
Naming: <file case>, <type case>, verbs for functions
|
|
16
|
-
Lint/format: <tools>, enforced in the pipeline
|
|
17
|
-
Errors: machine-readable error codes (string enums), never free text
|
|
18
|
-
Architecture: <layering and dependency rules>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### `MODEL_REGISTRY.md`
|
|
22
|
-
```
|
|
23
|
-
Model: <name>
|
|
24
|
-
Version: <version/date>
|
|
25
|
-
Adopted: <date>
|
|
26
|
-
Notes: re-run the prompt golden-cases before changing this.
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### `dependencies.allowlist`
|
|
30
|
-
```
|
|
31
|
-
# one package per line; the pipeline rejects anything not listed
|
|
32
|
-
<package>==<version-or-range>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Feature-level (once per feature)
|
|
38
|
-
|
|
39
|
-
### `SPEC.md`
|
|
40
|
-
```
|
|
41
|
-
Feature: <name>
|
|
42
|
-
Framings weighed: <chosen> (chosen) · <alternative> · <alternative>
|
|
43
|
-
Must:
|
|
44
|
-
- <required behavior>
|
|
45
|
-
Reject:
|
|
46
|
-
- <bad input / situation> -> "<error_code>"
|
|
47
|
-
After:
|
|
48
|
-
- <state true once it succeeds>
|
|
49
|
-
Assumptions — lowest-confidence first:
|
|
50
|
-
⚠ <most-likely-wrong assumption> — lowest confidence because <why>; if wrong: <cost>
|
|
51
|
-
- [x] <confirmed / low-stakes assumption> — <one line>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### `features/<name>.feature`
|
|
55
|
-
```
|
|
56
|
-
Scenario: <short name>
|
|
57
|
-
Given <starting situation>
|
|
58
|
-
When <action>
|
|
59
|
-
Then <expected result>
|
|
60
|
-
And <what must remain unchanged> # when relevant
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### `contracts/<name>.md`
|
|
64
|
-
```
|
|
65
|
-
<METHOD> <path> body: { <fields> }
|
|
66
|
-
200 -> { <success fields> }
|
|
67
|
-
4xx -> { error: "<code>" | "<code>" }
|
|
68
|
-
Schema: <tables/fields touched, and access pattern>
|
|
69
|
-
Status: FROZEN @ v<n>
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### `tests/<name>_test.<ext>` (stub)
|
|
73
|
-
```
|
|
74
|
-
test_<scenario_name>:
|
|
75
|
-
arrange: <set up the Given>
|
|
76
|
-
act: <do the When>
|
|
77
|
-
assert: <check the Then>
|
|
78
|
-
assert: <check what must stay unchanged> # when relevant
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### Gate outcome record
|
|
82
|
-
```
|
|
83
|
-
Feature: <name> Step: <Specify|...|Verify> Date: <date>
|
|
84
|
-
Reports: Test=<pass/fail> Quality=<pass/fail> Risk=<summary>
|
|
85
|
-
Outcome: <PASS | RISK-ACCEPTED | HARD-STOP>
|
|
86
|
-
If RISK-ACCEPTED -> owner: <name> ticket: <link> expires: <date>
|
|
87
|
-
Reviewed by: <name>
|
|
88
|
-
```
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# Appendix B · Prompt library
|
|
2
|
-
|
|
3
|
-
[← Appendix A Templates](./appendix-a-templates.md) · [Contents](./README.md) · Next: [Appendix C Glossary →](./appendix-c-glossary.md)
|
|
4
|
-
|
|
5
|
-
The contents of the `playbook/` folder. Each prompt is plain text that names the files to read, states a single task, and lists the rules. The inline `# why:` notes are annotations — keep them; they encode the judgment behind each instruction. These prompts are themselves versioned, tested artifacts (see [11 Governance](./11-governance.md)).
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
### `playbook/1_specify.md`
|
|
10
|
-
|
|
11
|
-
<prompt>
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
Role: a domain analyst who brainstorms, then asks rather than assumes.
|
|
15
|
-
Read first: ./PRD/* , ./GLOSSARY.md , ./inputs/ (tickets, interviews, contracts)
|
|
16
|
-
Task: co-specify SPEC.md WITH me. No solutions, no code.
|
|
17
|
-
Steps:
|
|
18
|
-
0. Diverge first: surface 2–3 genuine framings of the feature + the open questions, and let
|
|
19
|
-
me react before you draft. Record the result as `Framings weighed: X (chosen) · Y · Z`.
|
|
20
|
-
# why: a spec dictated by one side is a guess; brainstormed, it is a decision.
|
|
21
|
-
1. List every required behavior (Must) and every situation to refuse (Reject),
|
|
22
|
-
giving each refusal a named error code.
|
|
23
|
-
# why: named errors become scenarios and contract responses; "handle bad input" does not.
|
|
24
|
-
2. State the success state-change (After).
|
|
25
|
-
3. List the assumptions you had to make, RANKED lowest-confidence first; flag the 1–2 where
|
|
26
|
-
your confidence is lowest as `⚠ <assumption> — lowest confidence because <why>; if wrong: <cost>`.
|
|
27
|
-
# why: a flat all-equal list gets approved without reading; a ranked one aims my attention at the risk.
|
|
28
|
-
Exit: a domain owner disputes none of it; assumptions ranked lowest-confidence first, the 1–2 ⚠ flags
|
|
29
|
-
carrying why + cost — or an honest "none material" that still names the single biggest risk.
|
|
30
|
-
Never: resolve an ambiguity by guessing — ask. Never a blank "none" or a flat list of equal ticks.
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
</prompt>
|
|
34
|
-
|
|
35
|
-
### `playbook/2_scenarios.md`
|
|
36
|
-
|
|
37
|
-
<prompt>
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
Role: a specification tester.
|
|
41
|
-
Read first: ./SPEC.md , ./GLOSSARY.md
|
|
42
|
-
Task: produce features/<name>.feature.
|
|
43
|
-
Steps:
|
|
44
|
-
1. For each Must and each Reject rule, write a Given/When/Then scenario.
|
|
45
|
-
# why: a rule with no scenario will never be verified.
|
|
46
|
-
2. For every rejection, add an And-clause asserting what must NOT change.
|
|
47
|
-
# why: catches corrupting partial failures that a result-only check misses.
|
|
48
|
-
Exit: every rule has at least one scenario with an observable result.
|
|
49
|
-
Never: write a vague result ("then it works").
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
</prompt>
|
|
53
|
-
|
|
54
|
-
### `playbook/3_contract.md`
|
|
55
|
-
|
|
56
|
-
<prompt>
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Role: an interface/contract architect; contracts are immutable once frozen.
|
|
60
|
-
Read first: ./SPEC.md , ./features/*.feature , ./GLOSSARY.md
|
|
61
|
-
Task: produce contracts/<name>.md, a mock server, and contract tests. No business logic.
|
|
62
|
-
Steps:
|
|
63
|
-
1. Define interfaces, request/response shapes, and the schema, named from the glossary.
|
|
64
|
-
# why: consistent names prevent the subtle mismatches that cause silent bugs.
|
|
65
|
-
2. Define a response for every Reject error code in the spec.
|
|
66
|
-
3. Generate a mock returning the contracted shapes, and contract tests pinning them.
|
|
67
|
-
# why: the mock unblocks dependent work; the tests become a regression baseline.
|
|
68
|
-
4. Mark the contract FROZEN at a version.
|
|
69
|
-
Exit: contract tests pass against the mock; every spec rejection has a response.
|
|
70
|
-
Never: change a frozen contract — a change is a request that reopens Specify.
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
</prompt>
|
|
74
|
-
|
|
75
|
-
### `playbook/4_tests.md`
|
|
76
|
-
|
|
77
|
-
<prompt>
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
Role: a test author who writes tests before code.
|
|
81
|
-
Read first: ./features/*.feature , ./contracts/*
|
|
82
|
-
Task: produce a failing (red) test suite. Do NOT implement the feature.
|
|
83
|
-
Steps:
|
|
84
|
-
1. Turn each scenario into an executable test.
|
|
85
|
-
# why: closes spec -> scenario -> test with no human translation loss.
|
|
86
|
-
2. Add contract-conformance and edge-case tests.
|
|
87
|
-
3. Run the suite; confirm it fails for the right reason (missing implementation).
|
|
88
|
-
# why: a test that passes before code exists is testing nothing.
|
|
89
|
-
4. Record a coverage target.
|
|
90
|
-
Exit: one test per scenario; suite red for the right reason; target recorded.
|
|
91
|
-
Never: assert on internals; write the implementation here.
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
</prompt>
|
|
95
|
-
|
|
96
|
-
### `playbook/5_build.md`
|
|
97
|
-
|
|
98
|
-
<prompt>
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
Role: an execution agent. The human commands; you implement and report.
|
|
102
|
-
Read first: ./SPEC.md , ./contracts/* , ./tests/* , ./CONVENTIONS.md
|
|
103
|
-
Task: make EVERY failing test pass, one small task at a time.
|
|
104
|
-
Steps:
|
|
105
|
-
1. Pick ONE task; restate the tests it must satisfy before coding.
|
|
106
|
-
# why: small batches keep human review able to keep up.
|
|
107
|
-
2. Implement; run tests; iterate to green WITHOUT weakening any test.
|
|
108
|
-
# why: editing a test to pass makes the code judge itself — the cardinal sin.
|
|
109
|
-
3. Honor the feature-specific safety rule (e.g. atomic balance update).
|
|
110
|
-
4. Run security and allow-list checks; attach the evidence bundle; open the change.
|
|
111
|
-
Exit: all green; coverage held; no test/contract changed; no out-of-allow-list package.
|
|
112
|
-
Never: change a test or the contract; add an unlisted dependency; exceed the task budget
|
|
113
|
-
without escalating; guess when unclear — ask.
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
</prompt>
|
|
117
|
-
|
|
118
|
-
### `playbook/6_observe.md`
|
|
119
|
-
|
|
120
|
-
<prompt>
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
Role: a reliability analyst feeding the next cycle.
|
|
124
|
-
Read first: telemetry exports , service-objective definitions , incident tickets
|
|
125
|
-
Task: turn production reality into the next SPEC delta.
|
|
126
|
-
Steps:
|
|
127
|
-
1. Report objective status and error-budget burn vs target.
|
|
128
|
-
2. Cluster errors and usage; surface the top real-world failures.
|
|
129
|
-
3. Draft a SPEC delta — what the next loop should add or fix — with evidence links.
|
|
130
|
-
# why: closes the loop; production learning becomes the next specification.
|
|
131
|
-
Exit: a reviewed SPEC delta linked into the backlog.
|
|
132
|
-
Never: auto-roll back — recommend; a human owns the production decision.
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
</prompt>
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
### Master prompt skeleton
|
|
140
|
-
|
|
141
|
-
<prompt>
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
Role: <one line — who the agent is for this step>
|
|
145
|
-
Read first: <explicit repository paths — never chat memory>
|
|
146
|
-
Task: <the single outcome; state what is OUT of scope>
|
|
147
|
-
Steps:
|
|
148
|
-
1. <action> # why: <the judgment this encodes>
|
|
149
|
-
Exit: <conditions a person or the pipeline can check>
|
|
150
|
-
Never: <what the agent must not do>
|
|
151
|
-
Evidence: <artifacts to attach for review>
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
</prompt>
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# Appendix C · Glossary
|
|
2
|
-
|
|
3
|
-
[← Appendix B Prompts](./appendix-b-prompts.md) · [Contents](./README.md) · Next: [Appendix D Worked example →](./appendix-d-worked-example.md)
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Terms
|
|
8
|
-
|
|
9
|
-
**AIDD (AI-Driven Development)** — a method of building software in which an AI agent writes most of the code and people direct and verify the work.
|
|
10
|
-
|
|
11
|
-
**Artifact** — a durable work product: the spec, the scenarios, the contract, the tests. The artifacts survive; the code is disposable.
|
|
12
|
-
|
|
13
|
-
**Lesson learned** (formerly "competency delta") — a single learning a loop produces, tagged by which of the five competencies (`DDD · SDD · UDD · TDD · ADD`) it improves, written in a task's OBSERVE phase as `- [<COMPETENCY> · <status>] <learning> (evidence: …)`. Emitted `open` by the AI; the human folds it into a versioned `PROJECT.md` (`folded`) or declines it (`rejected`). The mechanism by which the foundation self-improves instead of drifting. See the `add` skill's `deltas.md`.
|
|
14
|
-
|
|
15
|
-
**Contract** — the fixed external shape of a feature: interfaces, data structures, names, and error cases. Frozen before the build, it is the surface the AI builds against.
|
|
16
|
-
|
|
17
|
-
**Co-specification** — how a spec is made in ADD: the AI and the human **brainstorm the shape together** (diverge), the AI **drafts** it, and the human **validates with the AI's advice** (validate). The AI's decisive advice is the *lowest-confidence flag*. It replaces dictation-by-one-side — the human owns the decision, the AI owns surfacing what it does not yet know. See [03 Specify](./03-step-1-specify.md).
|
|
18
|
-
|
|
19
|
-
**Component** — a declared part of a multi-part codebase that owns a source `root` and its own `green-bar` (suite + checks), named in `.add/components.toml` under `[component.<name>]`. A task binds to one with a `component:` header line, which adds that root to its §5 Scope and holds it to that component's green bar at verify. At the gate the engine also **surfaces** the component's `verify` command (the literal suite to run, e.g. `pytest -q`) and records it — NO-EXEC, the operator runs it; the fast lane carries the same `component:` affordance. Declared, never inferred; a project with no components is byte-identical to a single-codebase project. See [17 Components](./17-components.md).
|
|
20
|
-
|
|
21
|
-
**persona** — a project-fit requirements lens the agent adopts, distilled from a *teacher* — the vendored local library at `.add/personas-teacher/` — to three machine-readable parts: an **Identity** (the stance), **Critical Rules** (the non-negotiable constraints), and measurable **Success Metrics** (the done-bar). Stored as a versioned `.add/personas/<slug>.md`; read off-build (the teacher is never a runtime dependency); advisory only — it never lowers a gate (a security finding still `HARD-STOP`s) and the engine stays NO-EXEC. See [18 Personas](./18-personas.md).
|
|
22
|
-
|
|
23
|
-
**persona loop** — how personas come to exist and improve: **seed** (proposed at setup from the foundation) → **grow** (observe emits a persona delta; the human consolidates confirmed deltas into the file) → **apply** (UDD framing, advisor/streams subagent selection, and the build overlay atop `SOUL.md`). Opt-in and additive; a project with no personas behaves exactly as before. See [18 Personas](./18-personas.md).
|
|
24
|
-
|
|
25
|
-
**Cross-component contract** — the frozen, machine-checkable interface between a producer component and its consumers, declared under `[contract.<id>]` (producer + consumers). A task names its role with a `produces: <id>` or `consumes: <id>` header. On the producer's freeze the engine writes an immutable snapshot at `.add/contracts/<id>.json`; a consumer pins its hash and is flagged `contract_consumer_stale` if the producer later re-freezes a changed shape. Inside one milestone a `consumes:` task is HELD from writing its §3 until the producer's snapshot exists — the intra-milestone BE→FE ordering. Freeze-recency: the consumer is also held `producer_contract_stale` if a *live* producer task has re-opened or drifted its §3 (the snapshot no longer matches a frozen producer); `add.py check` surfaces the softer `contract_producer_stale` and `contract_snapshot_hashless` (a snapshot with no hash to verify) as never-red warnings. See [17 Components](./17-components.md).
|
|
26
|
-
|
|
27
|
-
**Federation (multi-repo)** — the transport that carries a frozen cross-component contract between separate repositories. A consumer repo declares `[federation.<id>]` with a `source` (and optional `pin`); `add.py federate pull <id>` validates the producer repo's published snapshot and lands a byte-for-byte copy locally, where it behaves exactly as in a monorepo. Fail-loud: an unknown id, unreadable source, a `source` that escapes the repo's allowlist (`federation_source_escapes` — the path is confined to a sibling of the repo root), invalid snapshot, or version mismatch HARD-STOPS and lands nothing. Each repo keeps its own git-native `state.json`; only the immutable snapshot crosses. See [17 Components](./17-components.md).
|
|
28
|
-
|
|
29
|
-
**Disposable code** — the view that code is one regenerable implementation of the artifacts, not a durable asset to be preserved.
|
|
30
|
-
|
|
31
|
-
**Evidence bundle** — the proof attached to a change (passing tests, clean security scan, no coverage loss) that justifies trusting it and may unlock more AI autonomy.
|
|
32
|
-
|
|
33
|
-
**Foundation version** — a monotonic integer marker in `PROJECT.md` that advances by one each time confirmed lessons learned are consolidated into the foundation. It makes the living documentation's evolution auditable: a rising version with fewer new deltas per milestone is the signal that a competency is converging rather than drifting. Bumped only by the retrospective consolidation (see the `add` skill's `fold.md`).
|
|
34
|
-
|
|
35
|
-
**Fast lane** — the collapsed, opt-in task path for small, low-risk work. `add.py new-task <slug> --fast` scaffolds a minimal `TASK.fast.md` (sections {0,1,3,4,5,6}; scenarios and observe dropped) and the specification bundle is approved in one freeze. It runs the SAME flow with fewer sections — it never drops the trust floor: a `--fast` task is held to a frozen contract, a red test before build, and a recorded verify gate under any milestone. Collapse, never skip; the human opts in (the engine never auto-classifies a task as small). See the `add` skill's `phases/fast-lane.md`.
|
|
36
|
-
|
|
37
|
-
**Gate** — a checkpoint with an explicit pass/fail exit. Its outcome is `PASS`, `RISK-ACCEPTED`, or `HARD-STOP`.
|
|
38
|
-
|
|
39
|
-
**Ground (phase-0 preamble)** — the per-task phase *before* Specify in which the AI gathers the real current codebase the task touches — files, symbols, signatures, patterns, conventions — into a lean **grounding map**, surfacing the **anchors** the frozen contract will cite. It is AI-owned and adds no approval (the one approval stays at the contract freeze); it precedes the seven steps as step 0 so the contract, tests, and build are grounded in the code as it actually is, not in assumption. Lives in the `add` skill's `phases/0-ground.md`.
|
|
40
|
-
|
|
41
|
-
**Grounding map / anchors** — the §0 GROUND artifact: the real files, symbols, and conventions a task touches, plus the **anchors** — the symbols the frozen contract names. Task-specific delta only: it defers to `PROJECT.md` / `CONVENTIONS.md` for architecture and never re-runs the setup brownfield scan. `add.py status` / `check` surface whether the active task's contract is grounded (measure, never block — the contract-freeze checklist asks the human to confirm it).
|
|
42
|
-
|
|
43
|
-
**`HARD-STOP`** — a gate outcome meaning work cannot proceed; triggered by any failing test or security finding.
|
|
44
|
-
|
|
45
|
-
**Intake** — the step *before* a task: sizing a raw request into versioned scope by classifying it into one **request bucket**. The AI proposes `{bucket, rationale, command}`; the human confirms. Lives in the `add` skill's `intake.md` (the intake level, above the per-task flow).
|
|
46
|
-
|
|
47
|
-
**Lowest-confidence flag** (formerly "least-sure flag") — the AI's ranked declaration of the **1–2 things most likely to be wrong** in what it is asking a human to approve, each carrying *why* it is uncertain and *what it costs if wrong* (`⚠ [spec|scenario|contract|test] … — because …; if wrong: …`). It reshapes the old flat assumptions list into a ranked one, so a single approval aims the reviewer's attention at the real risk instead of a flat list of equal-looking ticks. Bundle-wide at the contract-freeze decision point; the §1 assumptions are its first input. If nothing is materially uncertain it still names the single biggest risk — never a blank "none". It makes a genuine review cheap and a lazy one visibly negligent, but cannot *force* the read. The "AI advises" half of **co-specification**.
|
|
48
|
-
|
|
49
|
-
**Living document** — an artifact expected to change as the loop learns; never frozen forever (the one exception being a versioned contract, which changes only via a change request).
|
|
50
|
-
|
|
51
|
-
**Onboarding** (formerly "on-ramp") — the path a new user walks from install to their first milestone: install → `/add` → describe the goal → the agent runs intake (sizing the request into a milestone the human confirms) → the specification bundle → the self-driving run. The AI-first entry to the method; the human talks to the agent rather than hand-typing `add.py`.
|
|
52
|
-
|
|
53
|
-
**Decisions (ADR)** — the engine-harvested record in a task's §7 OBSERVE: one actor-tagged line per key decision, gathered at the gate from the stamps already in the task — §1 framing `[AI]` (the choice + the rejected alternatives), §3 freeze `[human]`, §5 strategy-actually-used `[AI]`, §6 gate `[human|AI]`. *Harvested, never authored* — the engine invents no decision content, only mirrors what the task recorded — and scoped to the §7 OBSERVE placeholder alone. The durable who-decided-what trail that separates human direction from AI building; `add.py audit` flags a done task whose block never harvested (`adr_record_missing`).
|
|
54
|
-
|
|
55
|
-
**Decision point** (formerly "seam") — a place where the flow stops for human judgment: the contract-freeze approval (the one approval), an escalated verify gate, intake confirmation, milestone close. The machine layer keeps the legacy name: the `--json` owner enum `seam`, the decide-digest key `seam`, and the `seam-audit` CI job.
|
|
56
|
-
|
|
57
|
-
**The decision arc** — the three engine-sourced lines a gate report opens with at every **decision point**: `goal:` the milestone goal the work serves · `done:` the achievement, the proven progress toward it (the gate reports render this line as `done`) · `plan:` what comes next. What `done` reports adapts per gate (verify: tests + evidence · milestone close: exit-criteria met · intake: the request sized) while the three-part shape stays constant. Rendered first, above the report's summary, so the human confirms with sight of the whole trajectory, not a local snapshot. Engine-sourced like all evidence — goal · done · plan are pulled from `add.py` output, never re-typed. Presentation only: it never adds a gate or changes a `PASS` / `RISK-ACCEPTED` / `HARD-STOP` / freeze outcome. The report it opens is the chat report a person reads at a decision point — distinct from the three Test/Quality/Risk reports a verify gate produces ([11 Governance](./11-governance.md)). See the `add` skill's `report-template.md`.
|
|
58
|
-
|
|
59
|
-
**Guided decision** — a **decision point** presented not as a bare next-step line but as one highlighted **recommended pick** plus its real, described alternatives (each with its one-line consequence), so the human chooses with the recommendation and what each option costs already in view. It refines the report's APPROVE block — composing with **the decision arc**, never adding a gate — and fires at human gates only (never at an autonomous `[you drive]` step). The sibling of the decision arc: both are what the human sees when it is their turn. See the `add` skill's `report-template.md` for the convention itself.
|
|
60
|
-
|
|
61
|
-
**Recommended pick** — the one option a **guided decision** highlights with the `▶ … (recommended)` marker: exactly one, never zero and never two. The AI's confidence self-score informs the pick; the human overrides it freely. See **Guided decision**.
|
|
62
|
-
|
|
63
|
-
**Specification bundle** (formerly "the one-approval front") — §1–§4 of a task (spec · scenarios · contract · failing tests) drafted by the AI as one piece and approved by a person **once**, at the contract freeze. Rejecting any part returns the whole bundle to draft. The single approval it carries is the bundle approval.
|
|
64
|
-
|
|
65
|
-
**Retrospective consolidation** (formerly "the fold / fold ritual") — the milestone-close (or on-demand) step where a person gathers `open` lessons learned, confirms each, and the AI writes them append-only into the versioned foundation, bumping `foundation-version:`. The AI never self-approves a consolidation. The machine names keep their names: `fold.md`, the `folded` delta status, and `add.py deltas`.
|
|
66
|
-
|
|
67
|
-
**Owner (of a phase)** — who drives a phase, exposed by `add.py … --json` as `human`, `seam`, or `ai` (machine enum values that keep their names; in prose the `seam` value's concept is now the decision point, formerly "seam"). It tells an autonomous harness where it may run (`ai`) and where it must checkpoint to a person (`human`/`seam`), following the who-does-what table (Verify is always `human`).
|
|
68
|
-
|
|
69
|
-
**Profile** — the intensity at which the method is run: Express, Standard, or Regulated.
|
|
70
|
-
|
|
71
|
-
**Request bucket** — one of the four intake classifications — `new-major`, `sub-milestone`, `task`, or `change-request` — chosen by the tie-break order (the frozen-scope test runs before the size test). A request too vague to size is rejected `ask_human`; one that touches frozen scope, `frozen_scope`; one spanning buckets, `split_required`.
|
|
72
|
-
|
|
73
|
-
**`RISK-ACCEPTED`** — a gate outcome meaning work proceeds with a signed waiver (owner, ticket, expiry); allowed for non-security gaps only.
|
|
74
|
-
|
|
75
|
-
**Scenario** — a single rule expressed as Given/When/Then; readable by people and checkable by machines; the bridge between spec and tests.
|
|
76
|
-
|
|
77
|
-
**Scope drafting (scope-loop)** — the second half of **intake**: once a request is classified `new-major`/`sub-milestone`, turning it into a confirmed, well-formed `MILESTONE.md` (goal · scope · exit criteria · breadth-first tasks) through discussion. Every exit criterion maps to a declared task slug; the AI proposes the draft, the human confirms before anything is created. Lives in the `add` skill's `scope.md`.
|
|
78
|
-
|
|
79
|
-
**Spec (`SPEC.md`)** — the plain-language statement of what a feature must do, must reject, and assumes.
|
|
80
|
-
|
|
81
|
-
**Cross-cutting concern** (formerly "spine / continuous concern") — a concern that runs through every step rather than being one step: security, testing, observability, cost.
|
|
82
|
-
|
|
83
|
-
**Stage** — one pass through the flow at a chosen depth: Prototype, Proof of Concept, MVP, or Production-Ready.
|
|
84
|
-
|
|
85
|
-
**Stage graduation** — the orchestration loop that proposes the move to the next **stage** as a human-confirmed roadmap, never a bare flip; the 4th scope level after setup · intake · milestone-loop. The cue is every milestone `done` with the **stage-goal-criteria** all `[x]`; the flow is gather **graduation analytics** → interview *what production means here* → draft ≥1 production milestone → human confirms → `add.py stage production` as the final step. The →production flip is guarded: it refuses with `stage_no_roadmap` (a tally, not a readiness judgment) until ≥1 production milestone exists; `--force` overrides. Lives in the `add` skill's `graduate.md`.
|
|
86
|
-
|
|
87
|
-
**Graduation analytics** — the five record-sets `add.py graduation-report` clusters from the whole MVP loop for the graduation interview: open deltas by competency · open RISK-ACCEPTED waivers by expiry · RETRO records · verify residue · observe-loop coverage gaps. It gathers, never judges — there is no readiness verdict, only the records the human reasons from (gather-not-judge).
|
|
88
|
-
|
|
89
|
-
**Stage-goal-criteria** — the human-authored `[x]` checklist in `PROJECT.md` that defines "MVP covered" for this project; when every milestone is `done` and these are all checked, `add.py status` prints the graduation cue. Authored by the human (judgment), never inferred by the engine.
|
|
90
|
-
|
|
91
|
-
**Baseline approval** (formerly "the lock-down") — the single human gate ending autonomous setup: an explicit yes that freezes the foundation, first scope, and first contract together; runs as `add.py lock --by <name>`.
|
|
92
|
-
|
|
93
|
-
**Queued milestone** — a milestone created non-active: its status is `queued` (the milestone status enum is **active · queued · done**). It is recorded with its `MILESTONE.md` on disk but does not hold the active focus; `add.py new-milestone --queued <slug>` creates it, and `add.py activate <slug>` promotes it queued→active one at a time. A queued milestone is not `done`, so it does not satisfy the graduation gate.
|
|
94
|
-
|
|
95
|
-
**Roadmap** — the multi-milestone intake artifact: when a request decomposes into N>1 milestones of the same line, the AI proposes the ordered roadmap and, on human confirm, creates all N — the first active, the rest **queued** — then promotes each with `activate` as it is started. Distinct from `split_required` (which spans different buckets). Lives in the `add` skill's `intake.md`.
|
|
96
|
-
|
|
97
|
-
**Scope level** (formerly "altitude") — the granularity a decision lives at, as one ordered ladder of five: **setup/foundation** · **intake** (request → versioned scope) · **the milestone loop** (the task is its inner unit) · **stage graduation** (changes rigor, not version; see **Stage graduation**) · **release** (≥1 closed milestone → a versioned, watched cut; see **Release scope level**). One ⚠-assumption notation is shared across every scope level.
|
|
98
|
-
|
|
99
|
-
**Autonomy level** (formerly "autonomy dial") — the explicit per-task setting (`autonomy: manual | conservative | auto`, an ordered ladder manual < conservative < auto) choosing who resolves Verify: `auto` auto-PASSes on complete evidence, `conservative` keeps a human at the gate, `manual` is the strict floor (the human owns the gate; nothing auto-resolves). A high-risk scope refuses an unguarded `auto` — it must be lowered to `manual` or `conservative`. New tasks seed a visible, overridable `autonomy: auto`; a live task with no level warns (`implicit_autonomy`), a token outside the set is rejected (`unknown_autonomy_level`).
|
|
100
|
-
|
|
101
|
-
**Release** — a versioned, user-facing cut that bundles one or more closed milestones into something real users can run; its notes are evidence-backed, its risk is disclosed, and its behaviour is then watched. Recorded with `add.py release <version>`, which writes the changelog block and the ledger row but never tags, publishes, or deploys — the outward act stays human-owned. See [16 · Releasing](./16-releasing.md).
|
|
102
|
-
|
|
103
|
-
**Release scope level** — the fifth scope level: releasing as its own granularity, orthogonal to the stage. A release bundles ≥1 closed milestone (never forced one-per-milestone) and may be cut at any stage — prototype preview, mvp beta, production GA. Distinct from milestone-close (feature-complete + consolidated) and from stage graduation (which changes rigor, not version). See **Scope level** and [16 · Releasing](./16-releasing.md).
|
|
104
|
-
|
|
105
|
-
**Ship review** — the whole-milestone, cross-task evidence the AI fills at milestone close in the `## Close — ship review` section: ship-by-domain (what changed per bounded context), cross-task evidence (one row per task: gate · tests · residue), and a goal-met map (each exit criterion tied to its evidence). A person reads it *before* checking the exit-criteria boxes — evidence, not a new gate. The ritual lives in the `add` skill's `loop.md`. See [09 · The Loop](./09-the-loop.md).
|
|
106
|
-
|
|
107
|
-
**Release steps** — the AI-defined, per-milestone ordered hints to ship a closed milestone, of which `merge` is one small step (a pull request, an exported hand-off document, a tag or a publish are others). Defined at close and **fed** into the release scope (see **Release**), never a second flow.
|
|
108
|
-
|
|
109
|
-
**Readiness floor** — the engine-enforced pre-cut gate `add.py release` applies before it records anything: a green suite, zero open security `HARD-STOP`, a closed-and-unreleased milestone to bundle, and every riding `RISK-ACCEPTED` waiver disclosed in the notes. Its four rejects are `release_security_open` (un-forceable) · `release_build_in_flight` · `release_no_closed_milestone` · `release_undisclosed_waiver`; `--force` may override every reject except the security stop.
|
|
110
|
-
|
|
111
|
-
**RELEASES.md ledger** — the append-only, newest-first trail of release rows at the project root (date · version · milestones · waivers shipped · evidence). Like the §Key Decisions log it is never rewritten; a superseded or yanked version is recorded as a new row. The ledger is the attribution source — a milestone is "released" because a row says so — which is why the `→ releasable` cue never has to read a milestone file.
|
|
112
|
-
|
|
113
|
-
**Hotfix release** — a narrowed PATCH cut that re-enters at Specify as a change request when a regression is found in a released version. It runs the same seven-step release flow scoped to the fix; releasing has no separate emergency mode, only the ordinary flow at a tighter scope.
|
|
114
|
-
|
|
115
|
-
**Auto-ready goal** — a milestone goal whose every exit criterion **cites a verifier** (`(verify: <test|command|metric>)`), so the engine can self-verify the result against the goal without human judgment. It is the prerequisite by which **autonomy is earned by goal-clarity**: the **autonomy level** governs *who* resolves Verify, but a clarified, machine-checkable goal is what makes a self-verifying run meaningful. `add.py check` raises a `goal_not_auto_ready` **WARN** (never red) for the active milestone until it has an auto-ready goal (≥1 exit criterion and every one cited), and `status` surfaces it (`goal-ready: auto-ready ✓` / cited-of-total); a zero-criteria goal reads not-auto-ready and is milestone-shaping's nudge, not this warning's. The lint forces a citation *slot* per criterion — it raises the floor but **cannot prove the citation is real** (a human can write `(verify: it works)`): citation-theater is the accepted irreducible floor, and the freeze gate and autonomy behavior are unchanged by it.
|
|
116
|
-
|
|
117
|
-
**Automated quality gate** (formerly "evidence auto-gate") — the Verify resolver under `autonomy: auto`: a run may auto-PASS on complete evidence, recorded as *auto-resolved*; a security finding always escalates (`HARD-STOP`).
|
|
118
|
-
|
|
119
|
-
**Change scope** (formerly "touch-boundary") — the hard boundary of a locked run: what it may edit (code, tests-to-green, evidence) and must not (the frozen contract, locked scope, any test weakening). The `<touch_boundary>` XML prompt tag keeps its name.
|
|
120
|
-
|
|
121
|
-
**Non-functional review** (formerly "blind-spot checks") — the deliberate verify-time check of the risks tests rarely catch: concurrency, security, architecture. Security findings always escalate.
|
|
122
|
-
|
|
123
|
-
**Failing-first suite** (formerly "red safety net") — the per-feature test suite written before any code and confirmed red for the right reason (a missing implementation, not a broken test); the TDD red phase at ADD step 4.
|
|
124
|
-
|
|
125
|
-
**Method rationale** (formerly "trust layer") — the *why* behind every rule: the AIDD book in `.add/docs/`, read on demand via each phase guide's chapter pointer, never auto-loaded.
|
|
126
|
-
|
|
127
|
-
**Working state** (formerly "state surface" — one of the two record surfaces) — everything an agent loads every session: the `add` skill (router `SKILL.md` + the active phase) and the lean operational docs — `PROJECT.md`, the active `MILESTONE.md` and `TASK.md`, and `state.json`. Kept small to avoid context rot. Contrast **audit trail**.
|
|
128
|
-
|
|
129
|
-
**Stop signal** — the boolean an autonomous harness reads from `add.py … --json` (`stop = owner != "ai"`): true means pause for a person before proceeding. The irreducible stops are the contract freeze and the Verify gate. See **Owner (of a phase)**.
|
|
130
|
-
|
|
131
|
-
**Audit trail** (formerly "story surface") — the book (`docs/*`): the whole method, read once by a person to trust ADD, then referenced by a pointer and **never auto-loaded** into agent context. Contrast **working state**.
|
|
132
|
-
|
|
133
|
-
**Living documentation** (formerly "survivor layer") — the set of durable artifacts (conventions, glossary, frozen contracts) that outlives any particular code.
|
|
134
|
-
|
|
135
|
-
**Trust ladder / autonomy ladder** — the graduated levels of AI autonomy, earned with evidence and verification capacity.
|
|
136
|
-
|
|
137
|
-
**Verification capacity / review throughput** — the rate at which a team can confirm AI output is correct; the real ceiling on safe speed.
|
|
138
|
-
|
|
139
|
-
**Foundation compaction** — the retrospective shrink: collapse a foundation spec's stable, shipped, zero-residue tail into one rolled-up settled line; the AI proposes and the human confirms; summarize and point, never delete; a SEPARATE step from the retrospective consolidation; distinct from the engine `add.py compact` (which archives finished-milestone files). See **Rolled-up settled line**, **Per-spec shape**.
|
|
140
|
-
|
|
141
|
-
**Rolled-up settled line** — the single line a compaction leaves in place of a collapsed run of records: lossy on prose, lossless on traceability (it carries a `see git` pointer).
|
|
142
|
-
|
|
143
|
-
**Per-spec shape** — each foundation spec's own tailored rolled-line format (PROJECT §Spec bullets · §Key-Decisions rows · CONVENTIONS learnings · GLOSSARY definition · MODEL_REGISTRY rows), all sharing one eligibility rule: shipped + zero open residues.
|
|
144
|
-
|
|
145
|
-
**Newest-first append-only** — every append-only foundation sequence prepends the newest record at the top; the rolled-up settled line anchors at the bottom (the oldest end), so compaction collapses upward.
|
|
146
|
-
|
|
147
|
-
**Design intake** — beat 0 of the UDD **design-definition loop**: the agent interviews the human on four design **axes** *before* reading the domain, so the look is directed not guessed. **Fidelity** (lo-fi wireframe · hi-fi mockup · production — how far the design renders), **Concept** (idea · mood · direction), **Layout** (structure · grid · hierarchy), and **Visual design** (color · type · spacing · imagery — surfaced for the human, never auto-picked). Recorded as project defaults in `DESIGN.md`'s `## Design intake` and per-screen overrides in the prototype note. Fidelity is recorded intent, not an engine gate.
|
|
148
|
-
|
|
149
|
-
**Wireframe** — the Stage-A low-fidelity, *structural* map of one screen: its regions and the component **slots** inside them, derived from `prototypes/<name>.json` *before* any color, type, or spacing — it answers "what goes where", not "what it looks like". Beat 3 of the UDD **design-definition loop**; the low-fi half of the two-stage fidelity that ends in a confirmed capture. See the `udd-wireframe.md` template (`tooling/templates/`, Stage A).
|
|
150
|
-
|
|
151
|
-
**Design mock** — the Stage-B high-fidelity, **self-contained** HTML render of a screen: the `catalog.json` components as a reusable token-bound kit, bound to `tokens.json` and populated with mock data, openable offline and screenshot-able. The human-facing *visible* evidence the human confirms (the frozen `prototypes/<name>.json` tree is its machine-checkable twin). Beat 4's hi-fi artifact; the recipe lives in the `udd-wireframe.md` template (`tooling/templates/`, Stage B).
|
|
152
|
-
|
|
153
|
-
**Capture** — the real rendered image (PNG/SVG) of a design mock: the **design-confirm evidence** artifact. Captures live at `.add/design/captures/<name>.<ext>` (one per prototype) and are attached or mentioned in the feature's `TASK.md`; `@json-render/image` (Satori → PNG/SVG, no browser) is the named default capture engine, otherwise the self-contained mock is screenshot headless. The engine never renders — it only MEASURES presence: `add.py check` raises a never-red `missing_capture` WARN for a prototype with no capture.
|
|
154
|
-
|
|
155
|
-
**Design-confirm** — the human touchpoint closing the UDD **design-definition loop** (`design-intake → review-domain → research-components → wireframe → render-capture-confirm`, the final beat of the `add` skill's `design.md`): approving the captured screen image **before build**, show-before-ask, so the implementation matches the layout the human has already seen instead of discovering it.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Optional mapping to formal phase names
|
|
160
|
-
|
|
161
|
-
This book uses plain step names. Teams connecting it to a larger formal standard may use these equivalents. The mapping is optional; the plain flow is complete on its own.
|
|
162
|
-
|
|
163
|
-
| Plain step (this book) | Formal phase name |
|
|
164
|
-
|------------------------|-------------------|
|
|
165
|
-
| Project setup | Foundation |
|
|
166
|
-
| Ground (preamble) | Codebase Discovery (the §0 grounding map) |
|
|
167
|
-
| Specify | Domain Discovery + Spec Definition |
|
|
168
|
-
| (design portion) | UX-Driven Design |
|
|
169
|
-
| Scenarios | Behavior specification (Given/When/Then) |
|
|
170
|
-
| Contract | Contract Freeze |
|
|
171
|
-
| Tests | Test-Driven Verification |
|
|
172
|
-
| Build | AI-Driven Development (the engine) |
|
|
173
|
-
| Verify | the review gate within the build |
|
|
174
|
-
| Observe (loop) | Operate and Learn |
|
|
175
|
-
|
|
176
|
-
The formal standard also names the *foundation* and *design* work as full phases in their own right; this book merges them into project setup and the Specify step (and the Prototype stage) to keep the flow to six memorable steps.
|