@pilotspace/add 1.16.1 → 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 +227 -0
- package/GETTING-STARTED.md +20 -64
- package/README.md +128 -56
- package/agents/add.md +68 -0
- package/bin/cli.js +229 -29
- 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 -37
- package/skill/add/intake.md +65 -29
- package/skill/add/loop.md +35 -23
- 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 +13 -30
- package/skill/add/terms.md +18 -0
- package/tooling/add.py +2520 -2933
- package/tooling/add_engine/autonomy.py +2 -37
- package/tooling/add_engine/components.py +4 -87
- package/tooling/add_engine/constants.py +153 -87
- package/tooling/add_engine/guidelines.py +9 -11
- package/tooling/add_engine/io_state.py +82 -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 +35 -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 -31
- package/agents/add-verify.md +0 -34
- 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 -80
- 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 -59
- 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 -47
- package/skill/add/phases/fast-lane.md +0 -31
- package/skill/add/release.md +0 -61
- package/skill/add/scope.md +0 -72
- 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 -268
- package/tooling/add_engine/release.py +0 -86
- package/tooling/templates/TASK.fast.md.tmpl +0 -77
- package/tooling/templates/TASK.md.tmpl +0 -216
package/skill/add/SKILL.md
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: add
|
|
3
3
|
description: >-
|
|
4
|
-
ADD (AI-Driven Development) — a minimal, state-tracked workflow
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
new feature and you want spec/tests-first discipline instead of vague-prompt
|
|
12
|
-
coding. Also use it to resume work across sessions (it reads `.add/state.json`
|
|
13
|
-
so you never re-read the whole repo).
|
|
4
|
+
ADD (AI-Driven Development) — a minimal, state-tracked workflow: the AI writes
|
|
5
|
+
the code, the human owns direction and verification. Drives every feature through
|
|
6
|
+
one lean PLAN.md: Specify → Scenarios → Plan → Tests → Build → Verify → Observe,
|
|
7
|
+
red/green TDD built in. Use whenever a repo has `.add/`, or the user says "add",
|
|
8
|
+
"start a task", "next phase", "specify this feature", "ADD method", "AI-driven
|
|
9
|
+
development", or wants spec/tests-first discipline over vague-prompt coding. Also
|
|
10
|
+
resumes work across sessions via `.add/state.json` (never re-read the whole repo).
|
|
14
11
|
user-invocable: true
|
|
15
12
|
category: workflows
|
|
16
13
|
keywords: [add, aidd, ai-driven-development, spec-first, tdd, contract, scenarios, verify, milestone, task-orchestration]
|
|
@@ -18,138 +15,111 @@ argument-hint: "status | init | continue | --todo <text> | [describe new short g
|
|
|
18
15
|
license: MIT
|
|
19
16
|
metadata:
|
|
20
17
|
author: add
|
|
21
|
-
version: "
|
|
18
|
+
version: "2.0.0"
|
|
22
19
|
---
|
|
23
20
|
|
|
24
|
-
# ADD — the
|
|
21
|
+
# ADD — memory · judgment · conscience (the agent is the hands)
|
|
25
22
|
|
|
26
|
-
You
|
|
23
|
+
You turn intent into the right task, then drive it. ADD keeps the AI fast *and* safe by fixing direction
|
|
27
24
|
(spec, scenarios, contract, failing tests) **before** the build, and trusting the
|
|
28
|
-
result through passing evidence
|
|
25
|
+
result through passing evidence, not a plausible diff.
|
|
29
26
|
|
|
30
|
-
**One
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
**One task = one atomic node.** Each feature is one `.add/tasks/<slug>/PLAN.md`; its frozen §3
|
|
28
|
+
(contract · scope · Target) is the interface neighbor nodes depend on — edges compile from the
|
|
29
|
+
milestone, `graph` renders the DAG, `locate` walks a failure to its node. Shard context beside it.
|
|
33
30
|
|
|
34
|
-
**The `--todo` fast-path.**
|
|
35
|
-
|
|
36
|
-
`--todo --done <id>` closes (engine errors surfaced verbatim) — then STOP.
|
|
31
|
+
**The `--todo` fast-path.** ARGUMENTS begin with `--todo`? Skip orienting: run `add.py todo`, print
|
|
32
|
+
it — `--todo <text>` captures · `--todo` lists · `--todo --done <id>` closes — then STOP.
|
|
37
33
|
|
|
38
34
|
## Always start here (orient — do not skip)
|
|
39
35
|
|
|
40
|
-
Engine: `.add/tooling/add.py
|
|
36
|
+
Engine: `.add/tooling/add.py`. Ensure it is in the project:
|
|
41
37
|
|
|
42
|
-
- It exists → go
|
|
43
|
-
- It does NOT (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
npm/pip install; the skill stays in the plugin, nothing duplicated.
|
|
38
|
+
- It exists → go to `status` below.
|
|
39
|
+
- It does NOT (a plugin install) → materialize once:
|
|
40
|
+
`node "${CLAUDE_PLUGIN_ROOT}/bin/cli.js" init --no-skill` — drops `.add/tooling/` (engine)
|
|
41
|
+
+ the agent-agnostic `CLAUDE.md` block; the skill stays in the plugin.
|
|
47
42
|
|
|
48
|
-
|
|
43
|
+
Resume from the tool, never re-read the repo — mid-flow, trust each verb's
|
|
44
|
+
`next:` footer:
|
|
49
45
|
|
|
50
46
|
```bash
|
|
51
|
-
python3 .add/tooling/add.py status
|
|
47
|
+
python3 .add/tooling/add.py status --brief
|
|
52
48
|
```
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
baseline approval.
|
|
63
|
-
- **A task is active** → open its `.add/tasks/<active>/TASK.md`, read the `phase:` marker, load the
|
|
64
|
-
matching `phases/<n>-<phase>.md`. Work *only* that phase.
|
|
50
|
+
Then read the foundation map `add.py status --foundation` (`--all` full) + `.add/SOUL.md` (**voice**). Then branch on state:
|
|
51
|
+
|
|
52
|
+
- **No `.add/state.json` yet** (`status` says `no .add/ project found`) → **autonomous setup**: read
|
|
53
|
+
`.add/.intent` if present (the installer's first-build intent — a NOTE, never an init trigger), then
|
|
54
|
+
YOU run `add.py init --name "<inferred>" --stage <picked> --await-lock` and drive setup via
|
|
55
|
+
`phases/direction.md` (brownfield repo → map it silently, `adopt.md`) — to the human baseline `lock`.
|
|
56
|
+
- **A task is active** → open its `.add/tasks/<active>/PLAN.md`, read the `phase:` marker, work that
|
|
57
|
+
beat per the loop below.
|
|
65
58
|
- **No active task** → first SIZE the request (Intake below), then `add.py new-task <slug> --title "..."`.
|
|
66
59
|
|
|
67
|
-
**Quick ref** — `status` resume · `
|
|
68
|
-
**Flag mode** —
|
|
69
|
-
- **
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
`add.py autonomy set conservative|manual` for a human gate · `new-milestone --await-confirm`
|
|
74
|
-
confirm-gates a milestone's tasks.
|
|
60
|
+
**Quick ref** — `status --brief` resume · `advance --fill <draft>` writes · `status --section <n>` one §body · `gate PASS` at verify.
|
|
61
|
+
**Flag mode** — ONE atomic template serves every task (no lanes); flags are header declarations.
|
|
62
|
+
- **gate_mode** — headless/agent-crossed freeze: declare `gate_mode: ai-plan-verify` in the PLAN.md
|
|
63
|
+
header + fill the §3 AI-verify record; security|data|architecture stay human-frozen (unstrikeable).
|
|
64
|
+
- **auto** — `autonomy: auto` (default) auto-gates verify on evidence; `add.py autonomy set
|
|
65
|
+
conservative|manual` restores a human gate · `new-milestone --await-confirm` confirm-gates its tasks.
|
|
75
66
|
|
|
76
67
|
## Intake — size a request before creating scope
|
|
77
68
|
|
|
78
|
-
Classify a raw request BEFORE any
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
`
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
69
|
+
Classify a raw request BEFORE any scope: read `intake.md`. Too small for scope → the
|
|
70
|
+
**inline lane** (diff + `delta-append` receipt; security·data·architecture escalates). Else
|
|
71
|
+
one bucket — `new-major` ·
|
|
72
|
+
`sub-milestone` · `task` · `change-request` — propose `{ bucket, rationale, command }`; the human
|
|
73
|
+
confirms. Unsharp intent? **Interview before you size** (`intake.md`). For a milestone bucket draft
|
|
74
|
+
`MILESTONE.md` (goal · scope · exit criteria · breadth-first tasks — `phases/direction.md`), then
|
|
75
|
+
`new-milestone --await-confirm` + `milestone-confirm <slug>` (gates `new-task`; confirm compiles Tasks to the DAG → new-task inherits each node's depends-on). For
|
|
76
|
+
`task`/`change-request`: `add.py new-task`, then beat 1 above.
|
|
77
|
+
|
|
78
|
+
## The 3-beat loop (inline — this file IS the loop; references load on demand)
|
|
79
|
+
|
|
80
|
+
Every task is three beats (seven steps, folded), three engine calls, ONE human decision:
|
|
81
|
+
|
|
82
|
+
1. **DIRECTION** — load the domain-fit persona (seed via add persona-mode if none), then draft
|
|
83
|
+
the whole bundle top-to-bottom in PLAN.md: §1 rules + ranked ⚠ flag (co-specify) ·
|
|
84
|
+
§2 scenarios · §3 PLAN (grounding → frozen contract shape → build-strategy + Scope + Target) · §4 red suite
|
|
85
|
+
(run it — red for the RIGHT reason; fill each bullet's `covers:` clause key). Then the ONE approval, presented
|
|
86
|
+
lowest-confidence-first: `add.py freeze --by "<name>" --cross` (a setup session's baseline `lock`
|
|
87
|
+
IS this approval).
|
|
88
|
+
2. **BUILD** — code in `src/` until every red is green; change no test, no frozen contract; stay
|
|
89
|
+
inside the §3 Scope. A test OUTSIDE your suite failing? `add.py locate path::test` names the
|
|
90
|
+
owning node, the failure class, the frozen §3 clause it proves, and who re-verifies if a
|
|
91
|
+
settled contract must move.
|
|
92
|
+
3. **VERIFY** — confirm evidence · 3 lenses (**security always HARD-STOP**) · earned-green
|
|
93
|
+
refute-read · then `add.py gate PASS --target-hit yes|partial|no` (from build it compound-crosses; under `autonomy: auto` a
|
|
94
|
+
run auto-PASSes on complete no-residue evidence — *auto-resolved*, an explicit PASS, never a
|
|
95
|
+
skip; residue or lowered autonomy → human — `run.md`).
|
|
96
|
+
|
|
97
|
+
Stuck or deep? References, on demand — optional: `phases/direction.md` ·
|
|
98
|
+
`phases/build.md` · `phases/verify.md` · opaque term? `terms.md`. Delegating? Spawn
|
|
99
|
+
the roster agent; it loads its own references (you read ONLY this file).
|
|
100
|
+
|
|
101
|
+
At each decision point (intake · bundle · gate · close) the fitting persona OWNS the gate report (banner then the ARC) —
|
|
102
|
+
`gate-udd.md` holds the principles: CONVEY decision + ARC (engine-sourced) · shape · flags (lowest-first) ·
|
|
103
|
+
evidence · a guided APPROVE; the persona owns the form, never the four floors (security stays HARD-STOP) — the question is a summary, never the artifact.
|
|
104
|
+
Read once per session.
|
|
105
|
+
|
|
106
|
+
Emit **lessons learned** tagged by which of the five (`DDD · SDD · UDD · TDD · ADD`)
|
|
107
|
+
they improve — **in-flight**: `add.py delta-append <dd> "<lesson>"` → its living spec in
|
|
108
|
+
`.add/specs/` (grammar: `deltas.md`).
|
|
109
|
+
The living specs ARE the foundation; the close counts what §7 still holds open. Observe also
|
|
110
|
+
tunes your voice: a confirmable delta the human confirms rewrites `SOUL.md` (the human is the only
|
|
111
|
+
writer) — `deltas.md`.
|
|
118
112
|
|
|
119
113
|
## Beyond the bundle — load on demand
|
|
120
114
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
red test · verify gate; freeze-gated under any milestone). Collapse, never skip; opt-in.
|
|
130
|
-
- **UI feature** at specify → the **design-definition loop** (UDD): intake the design axes → review the
|
|
131
|
-
domain → research and reuse components → wireframe → a captured screen the human confirms **before** build — `design.md`.
|
|
132
|
-
Tool-agnostic; the engine never renders.
|
|
133
|
-
- Tasks all done but the milestone **goal** unmet → `milestone-done` holds it open; the loop turns open
|
|
134
|
-
deltas + extras into the next tasks until the goal is met — `loop.md`.
|
|
135
|
-
- `status` prints **`MVP covered → propose graduation`** (every milestone done AND stage criteria all
|
|
136
|
-
`[x]`) → `graduate.md`: `graduation-report` → co-specify interview → draft ≥1 production milestone →
|
|
137
|
-
human confirm → then `stage production`. Guarded (`stage_no_roadmap`); the FINAL step, never a bare flip.
|
|
138
|
-
- `status` prints **`→ releasable: N milestone(s) closed since last release`** → `release.md` (the 5th
|
|
139
|
-
scope level): `release-report` → draft notes from the consolidated deltas → meet the readiness floor
|
|
140
|
-
(security HARD-STOP is un-forceable) → human confirms → `add.py release <version>` records the cut
|
|
141
|
-
(CHANGELOG + `RELEASES.md` ledger + milestone attribution). The engine records; the human runs the
|
|
142
|
-
tag/publish/deploy. A release bundles ≥1 milestone, orthogonal to stage.
|
|
143
|
-
- **Monorepo / multi-repo** — a milestone spans more than one green bar (a BE + its FE) → the
|
|
144
|
-
**component pillar**: declare components in `.add/components.toml`, gate each task on its component's
|
|
145
|
-
green-bar, freeze cross-component contracts (`produces:`/`consumes:`), hold the FE until the BE
|
|
146
|
-
freezes, `federate pull` across repos — `components.md`. Opt-in; no components = today.
|
|
147
|
-
- **Project-fit personas** — the **persona loop** seeds `.add/personas/<slug>.md`, grows them via
|
|
148
|
-
observe→delta→consolidate, applies them in design/streams/advisor/build (advisory; never lowers a gate) — `docs/18-personas.md`.
|
|
149
|
-
- **Risk-class of a task** — declare `sensitivity:` in the TASK header (base `security|data|architecture|
|
|
150
|
-
mechanical`, always valid). EXTEND it with your project's domain classes in `GLOSSARY.md`'s `## Sensitivity
|
|
151
|
-
classes` section; freeze/status/check read base ∪ project. The AI keeps the domain vocabulary current —
|
|
152
|
-
`sensitivity.md`. Security is a human floor in every tier; only `mechanical` is advisor-gatable — see `advisor-gate-relax` in `run.md`.
|
|
115
|
+
One trigger = one guide — full prose: `beyond.md`; load only when a trigger fires:
|
|
116
|
+
|
|
117
|
+
- §3 FROZEN → auto-gated run `run.md` · subagent roster + pipelines (agent-call-preferred,
|
|
118
|
+
the default execution mode) → `phases/verify.md` · self-score → `phases/direction.md`
|
|
119
|
+
- UI/experience surface → UDD loop `design.md`
|
|
120
|
+
- milestone goal unmet at `milestone-done` → `loop.md`
|
|
121
|
+
- graduation · release · monorepo green-bars → persona-owned playbooks, `beyond.md` ·
|
|
122
|
+
the persona loop (`.add/personas/`) → `docs/18-personas.md` · `sensitivity:` + `advisor-gate-relax` → `phases/verify.md`
|
|
153
123
|
|
|
154
124
|
## Non-negotiable rules (from the method)
|
|
155
125
|
|
|
@@ -162,31 +132,27 @@ once the human confirms, rewrites `SOUL.md` (the human is the only writer) — `
|
|
|
162
132
|
A real change is a *change request* back to Specify.
|
|
163
133
|
4. **No silent skips.** Every Verify ends in exactly one recorded outcome: `PASS`, `RISK-ACCEPTED`
|
|
164
134
|
(signed, non-security only), or `HARD-STOP`. A security finding is always `HARD-STOP`.
|
|
165
|
-
5. **Ask, don't guess.** If a requirement is unclear, stop and ask the user.
|
|
166
135
|
</constraints>
|
|
167
136
|
|
|
168
|
-
## Advancing
|
|
169
|
-
|
|
170
|
-
After a phase's exit gate is met, advance the state (this also syncs the TASK.md marker):
|
|
137
|
+
## Advancing — the 3-call walk
|
|
171
138
|
|
|
172
139
|
```bash
|
|
173
|
-
python3 .add/tooling/add.py
|
|
174
|
-
python3 .add/tooling/add.py
|
|
175
|
-
python3 .add/tooling/add.py
|
|
140
|
+
python3 .add/tooling/add.py new-task <slug> --title "..." # born at direction
|
|
141
|
+
python3 .add/tooling/add.py freeze --by "<name>" --cross # the ONE approval -> build
|
|
142
|
+
python3 .add/tooling/add.py gate PASS # verify recorded, task done
|
|
143
|
+
# add.py advance = step-wise alternative · add.py use <slug> = switch tasks
|
|
176
144
|
```
|
|
177
145
|
|
|
178
146
|
## Depth by stage
|
|
179
147
|
|
|
180
|
-
The steps never change; their depth does (
|
|
148
|
+
The steps never change; their depth does (stage from `add.py status`):
|
|
181
149
|
|
|
182
|
-
- **prototype** —
|
|
183
|
-
- **poc** —
|
|
150
|
+
- **prototype** — light; throwaway code; design/experience is the point.
|
|
151
|
+
- **poc** — contract/tests/build deep on the single riskiest slice only.
|
|
184
152
|
- **mvp** — full flow, narrow scope, light observation.
|
|
185
|
-
- **production** —
|
|
186
|
-
|
|
153
|
+
- **production** — full rigor + the observe loop; reached via the graduation playbook
|
|
154
|
+
(`beyond.md`), never a bare `stage production` flip.
|
|
187
155
|
|
|
188
156
|
## The method rationale
|
|
189
157
|
|
|
190
|
-
The
|
|
191
|
-
genuinely unclear, read the linked chapter — each phase guide points to its chapter. Do not duplicate
|
|
192
|
-
the book here; load it on demand.
|
|
158
|
+
The *why* lives in the AIDD book — https://pilotspace.github.io/ADD/ (the `docs/…` chapters the guides cite). Read it when a decision is genuinely unclear; never duplicate it here.
|
package/skill/add/adopt.md
CHANGED
|
@@ -35,6 +35,34 @@ Fill each living-doc file in `.add/` from what the code shows — **ask nothing*
|
|
|
35
35
|
2. **Tag every drafted decision `evidence-grounded` vs `guessed`.** A line you read from the code is *evidence-grounded* (cite the file). A line you inferred because the code was silent is *guessed*. The human's single baseline approval is only honest if they can see which is which — the guesses are what they actually need to check. (The tags feed `SETUP-REVIEW.md`.)
|
|
36
36
|
</constraints>
|
|
37
37
|
|
|
38
|
+
## Setup review — the one page the human signs
|
|
39
|
+
|
|
40
|
+
Both setup paths (this brownfield map AND the greenfield draft, `phases/direction.md`) end at
|
|
41
|
+
the same single human gate, and `SETUP-REVIEW.md` is that page: every decision you made while
|
|
42
|
+
drafting the foundation, first-scope, and first contract, ordered **lowest-confidence-first** so
|
|
43
|
+
the riskiest guesses meet the human's eye first. The engine never reads it — `add.py lock` is
|
|
44
|
+
judgment-free; the human *reading* this page is the review. Write ONE artifact at
|
|
45
|
+
`.add/SETUP-REVIEW.md`, beside `PROJECT.md` (never clobber a human-edited one — append/update):
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
# SETUP REVIEW — <project>
|
|
49
|
+
|
|
50
|
+
<stage> · <brownfield | greenfield> · drafted by <model> @ <date>
|
|
51
|
+
|
|
52
|
+
| # | Decision | Lands in | Tag | Why / Evidence |
|
|
53
|
+
|---|----------|----------|-----|----------------|
|
|
54
|
+
| 1 | <the drafted decision> | PROJECT.md \| scope \| first-contract | `guessed` | <the inference + why you had to guess> |
|
|
55
|
+
| 2 | <…> | <…> | `evidence-grounded` | <cite the source file/line you read it from> |
|
|
56
|
+
|
|
57
|
+
Sign: confirm in chat → the agent runs `add.py lock --by "<name>"` (typing it yourself works too)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The two rules that make it honest: rows sort by confidence **ascending** — a `guessed` row
|
|
61
|
+
always floats above an `evidence-grounded` one (the top of the table is what the human must
|
|
62
|
+
actually challenge); and EVERY row is tagged with the shared vocabulary above (`guessed` = the
|
|
63
|
+
repo was silent, state the inference; `evidence-grounded` = cite the file). Rows are numbered
|
|
64
|
+
for reference at the gate. Present it lowest-confidence-first, not field-by-field.
|
|
65
|
+
|
|
38
66
|
## Where it ends — the baseline approval
|
|
39
67
|
|
|
40
68
|
Brownfield onboarding draws no per-step approvals: map the foundation, draft the first milestone's scope and first task's candidate specification bundle, then present it all at **one** human gate. The human reviews decisions (`guessed` first) and confirms; you run the lock:
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Beyond the bundle — the full routing prose
|
|
2
|
+
|
|
3
|
+
SKILL.md's compact index names each trigger; this guide carries the full routing
|
|
4
|
+
prose. Load it (or the one guide you need) only when a trigger fires.
|
|
5
|
+
|
|
6
|
+
- **§3 CONTRACT FROZEN** → build→verify is a dynamic, auto-gated run (`autonomy: auto` default; lower to
|
|
7
|
+
`conservative`/`manual` for a human gate) — `run.md`. Pipeline ready tasks behind frozen
|
|
8
|
+
contracts — the stream-orchestrator persona owns the playbook. Delegate one piece of your plan to a subagent — the named roster
|
|
9
|
+
(the ONE `add` agent — mode: direction/build/verify/persona/advise) is agent-call-preferred, the
|
|
10
|
+
default execution mode over an ad-hoc spawn; when to spawn, the prompt template, the tier —
|
|
11
|
+
the advisor spawn (`phases/verify.md`). Self-score a draft (0–1 across six dimensions, refine if
|
|
12
|
+
any < 0.9) — the confidence self-score (`phases/direction.md`). Both advisory; the engine never spawns.
|
|
13
|
+
- **Small, low-risk task**, less ceremony → the ONE atomic template already IS the lean render:
|
|
14
|
+
`new-task` scaffolds only the interface (contract · red suite · scope · verdict), bundle approved
|
|
15
|
+
in one freeze. Floor held (frozen contract · red test · verify gate; freeze-gated under any
|
|
16
|
+
milestone). Collapse, never skip — there is no separate lane to opt into.
|
|
17
|
+
- **UI feature** at specify → the **design-definition loop** (UDD): intake the design axes → review the
|
|
18
|
+
domain → research and reuse components → wireframe → a captured screen the human confirms **before** build — `design.md`.
|
|
19
|
+
Tool-agnostic; the engine never renders.
|
|
20
|
+
- Tasks all done but the milestone **goal** unmet → `milestone-done` holds it open; the loop turns open
|
|
21
|
+
deltas + extras into the next tasks until the goal is met — `loop.md`.
|
|
22
|
+
- **Graduating mvp → production** — co-specify interview → draft ≥1 production milestone →
|
|
23
|
+
human confirm → then `stage production`. Guarded (`stage_no_roadmap`); the FINAL step, never a
|
|
24
|
+
bare flip. The quality-auditor persona carries the readiness playbook.
|
|
25
|
+
- **Cutting a release** — draft notes from the closed milestones' deltas → meet the readiness
|
|
26
|
+
floor (security HARD-STOP is un-forceable) → the human confirms and runs the tag/publish/deploy.
|
|
27
|
+
The release-manager persona carries the cut playbook; the engine records nothing.
|
|
28
|
+
- **Monorepo / multi-repo** — a milestone spans more than one green bar (a BE + its FE) → the
|
|
29
|
+
platform-engineer seed persona carries the components playbook (declare the parts, gate each
|
|
30
|
+
task on its part's green bar, hold a consumer until its producer's contract freezes). Opt-in.
|
|
31
|
+
- **Project-fit personas** — the **persona loop** seeds `.add/personas/<slug>.md`, grows them via
|
|
32
|
+
observe→delta→consolidate, applies them in design/orchestration/advisor/build (advisory; never lowers a gate) — `docs/18-personas.md`.
|
|
33
|
+
- **Risk-class of a task** — declare `sensitivity:` in the TASK header (base `security|data|architecture|
|
|
34
|
+
mechanical`, always valid). EXTEND it with your project's domain classes in `GLOSSARY.md`'s `## Sensitivity
|
|
35
|
+
classes` section; freeze/status/check read base ∪ project. The AI keeps the domain vocabulary current —
|
|
36
|
+
the Sensitivity section (`phases/verify.md`). Security is a human floor in every tier; only `mechanical` is advisor-gatable — see `advisor-gate-relax` in `run.md`.
|
package/skill/add/deltas.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# Lessons learned — how each loop sharpens the foundation
|
|
2
2
|
|
|
3
|
-
A **lesson learned** is a single learning a task produces, tagged by which of ADD's five competencies it improves. Write deltas in **OBSERVE
|
|
3
|
+
A **lesson learned** is a single learning a task produces, tagged by which of ADD's five competencies it improves. Write deltas in **OBSERVE** and file each into its living spec (`add.py delta-append`) — how `DDD · SDD · UDD · TDD · ADD` stop being write-once and converge.
|
|
4
4
|
|
|
5
5
|
You **emit** deltas as `open`; only the **human** moves one to `folded` or `rejected`. You never self-approve a consolidation.
|
|
6
6
|
|
|
7
|
+
**Emit in-flight, not batched**: the moment a lesson is learned — any phase, any task — file it with `add.py delta-append <dd> "<lesson>"` (`ddd|sdd|udd|tdd|add`). The verb prepends one `[open · <date>]` line (newest first, active task stamped) into the lesson's **living spec** under `.add/specs/` — `domain.md · system.md · experience.md · quality.md · method.md`, seeded at init and on demand for pre-2.0 projects. The task's §7 Competency-deltas block stays the per-task record; the living spec is where the lessons accumulate across tasks.
|
|
8
|
+
|
|
7
9
|
## The grammar (frozen)
|
|
8
10
|
|
|
9
11
|
Each delta begins on its own **tag line**; the learning may wrap:
|
|
@@ -16,7 +18,7 @@ Each delta begins on its own **tag line**; the learning may wrap:
|
|
|
16
18
|
- `<status>` — `open` | `folded` | `rejected`. A **newly emitted delta is `open`**.
|
|
17
19
|
- `<learning>` — the insight; the tag line comes **first**, `(evidence: …)` **closes** the delta.
|
|
18
20
|
- `(evidence: …)` — **required**, non-empty: a failing scenario, a production signal, a review note. No evidence → it is an opinion, not a delta.
|
|
19
|
-
- **persona target (optional)** — a competency lesson MAY add `· persona:<slug> · <critical-rule|success-metric>` in brackets, e.g. `- [UDD · open · persona:ui-designer · success-metric] 4.5:1 contrast (evidence: audit)`.
|
|
21
|
+
- **persona target (optional)** — a competency lesson MAY add `· persona:<slug> · <critical-rule|success-metric|anti-pattern|ability>` in brackets, e.g. `- [UDD · open · persona:ui-designer · success-metric] 4.5:1 contrast (evidence: audit)`. The persona loop lands it in `.add/personas/<slug>.md` under that section (newest-first, never clobbering) instead of the shared specs.
|
|
20
22
|
|
|
21
23
|
A long learning may wrap — `add.py check` joins continuation lines into **one** delta:
|
|
22
24
|
|
|
@@ -62,3 +64,24 @@ emit (OBSERVE) human review
|
|
|
62
64
|
```
|
|
63
65
|
|
|
64
66
|
At the next update the human consolidated DDD+TDD (→ `folded`) and rejected ADD. Sharper foundation; nothing lost.
|
|
67
|
+
|
|
68
|
+
## Voice deltas — SOUL.md converges to the human
|
|
69
|
+
|
|
70
|
+
`SOUL.md` (Tone · Communication style · Trust) is the AI's voice — a proposed starter,
|
|
71
|
+
**human-owned**. Emit voice deltas beside the lessons learned in observe, grounded ONLY in the
|
|
72
|
+
working session — their wordings, their corrections, their flow — never their private files:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
- [VOICE · <status>] <observation about the voice> (evidence: <in-session pointer>)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`<status>` = `open` | `confirmed` | `declined`; evidence is required (a correction, a re-ask, a
|
|
79
|
+
visible preference) — none → drop it. The loop: **emit** `open` (show-before-ask) → the human
|
|
80
|
+
**confirms or declines** each → on a confirm, rewrite the routed SOUL.md section surgically
|
|
81
|
+
(how I *sound* → `## Tone` · how I *structure* → `## Communication style` · what keeps *trust* →
|
|
82
|
+
`## Trust`) and record the line `confirmed` at the top of `## Voice deltas` (newest-first,
|
|
83
|
+
append-only; declined stays in place). **The human's confirm is the only writer.** Rejects:
|
|
84
|
+
`unconfirmed_voice_rewrite` (a SOUL.md write without a recorded confirm — stop, get the confirm) ·
|
|
85
|
+
`no_open_voice_deltas` (nothing open — a no-op, touch nothing) · `unroutable_voice_delta` (maps
|
|
86
|
+
to no section — fix the delta or widen the routing before writing). No `add.py` command writes
|
|
87
|
+
the voice.
|
package/skill/add/design.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# Design — the design-definition loop (UDD)
|
|
2
2
|
|
|
3
|
-
When a **UI feature**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
(`udd-catalog.md`) — for a feature and earns the human's sign-off before build.
|
|
3
|
+
When a **UI feature** — or any human-facing **experience surface** (screen · interactive flow ·
|
|
4
|
+
**human gate**) — reaches specify, design it first. UDD is experience-driven, not UI-only: it takes
|
|
5
|
+
the surface from the **domain** to a real captured image the human has **seen and confirmed** —
|
|
6
|
+
*before* build. Loaded on demand; the engine never runs it. It fills the existing token + component
|
|
7
|
+
foundation — `tokens.json` (schema: `templates/udd-tokens.md`), `catalog.json` +
|
|
8
|
+
`prototypes/<name>.json` (schema: `templates/udd-catalog.md`).
|
|
10
9
|
|
|
11
10
|
## The loop — five beats
|
|
12
11
|
|
|
@@ -16,91 +15,74 @@ design-intake → review-domain → research-components → wireframe →
|
|
|
16
15
|
|
|
17
16
|
Run the beats in order; the last ends at a human design-confirm.
|
|
18
17
|
|
|
18
|
+
## Personas carry the design — the loop carries the discipline
|
|
19
|
+
|
|
20
|
+
Load the design-fit persona FIRST: it brings the **frontend-designer** performance, the loop keeps
|
|
21
|
+
the rigor (personas carry the expertise, the loop the discipline). Two `flow: design` dimensions
|
|
22
|
+
(`.add/personas/*` frontmatter, else description-match) — **UI-Designer** (visual systems · component
|
|
23
|
+
libraries · pixel-craft · WCAG-AA **accessibility**) and **UX-Researcher** (evidence-validated,
|
|
24
|
+
never assumed). None fits? Seed from `.add/personas-teacher/design/` (ui-designer · ux-researcher ·
|
|
25
|
+
ux-architect) + `engineering-frontend-developer` via the add agent in persona mode, then load — seed
|
|
26
|
+
per DOMAIN, reuse across screens. The persona's **Critical Rules** shape every beat; its **Success
|
|
27
|
+
Metrics** become the beat-4 confirm checklist. Advisory: it sharpens the design, never lowers a gate.
|
|
28
|
+
|
|
19
29
|
### 0 · design-intake
|
|
20
|
-
Before reading the domain, interview the human on **
|
|
21
|
-
|
|
30
|
+
Before reading the domain, interview the human on **five design axes** — ask each, show options,
|
|
31
|
+
record the pick:
|
|
22
32
|
|
|
23
|
-
- **FIDELITY** —
|
|
24
|
-
|
|
25
|
-
- **
|
|
26
|
-
- **LAYOUT** — the *structure / grid / hierarchy* the screens lean on.
|
|
33
|
+
- **FIDELITY** — *lo-fi wireframe* · *hi-fi mockup* · *production*. Recorded intent, not a gate.
|
|
34
|
+
- **CONCEPT** — the *idea / mood / direction* in a line.
|
|
35
|
+
- **LAYOUT** — the *structure / grid / hierarchy*.
|
|
27
36
|
- **VISUAL DESIGN** — *color · type · spacing · imagery*. **Surface** identity values for the human
|
|
28
|
-
to choose — never auto-pick
|
|
37
|
+
to choose — never auto-pick (identity stays **human-owned**, `templates/udd-tokens.md`).
|
|
38
|
+
- **INTERACTION** — *cadence · when/how to seek the human · turn-rhythm*; static screen → *none*.
|
|
29
39
|
|
|
30
|
-
Record
|
|
31
|
-
|
|
32
|
-
companion). Show-before-ask — confirm the picks.
|
|
40
|
+
Record **before** review-domain: project **defaults** in DESIGN.md's `## Design intake`; per-screen
|
|
41
|
+
**overrides** in the per-feature note (`prototypes/<name>.json` companion). Show-before-ask.
|
|
33
42
|
|
|
34
43
|
### 1 · review-domain
|
|
35
44
|
Start from the **domain**, not a blank canvas. Read the domain model — entities, flows, the
|
|
36
|
-
ubiquitous language in `PROJECT.md` / `GLOSSARY.md` — and derive **which screens** the feature
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
ubiquitous language in `PROJECT.md` / `GLOSSARY.md` — and derive **which screens** the feature needs
|
|
46
|
+
+ each screen's **regions**. Map each entity to a *presentational* component (owns no domain
|
|
47
|
+
decision). Output: the screen list + regions.
|
|
39
48
|
|
|
40
49
|
### 2 · research-components (reuse before you invent)
|
|
41
|
-
Check `catalog.json` **first** and **reuse**
|
|
42
|
-
|
|
43
|
-
**cited** reference. Reuse before invention — a new component is the exception.
|
|
50
|
+
Check `catalog.json` **first** and **reuse** it. Research a reference UI only for a **genuine gap**;
|
|
51
|
+
propose a **new** catalog component with a **cited** reference — the exception, not the reflex.
|
|
44
52
|
|
|
45
53
|
### 3 · wireframe
|
|
46
54
|
Draw a **low-fi**, **structural** layout per screen — regions and component slots, no styling, no
|
|
47
|
-
color.
|
|
48
|
-
before a pixel is styled. Confirm, then move on.
|
|
55
|
+
color. Confirm structure before a pixel is styled, then move on.
|
|
49
56
|
|
|
50
57
|
### 4 · render-capture-confirm
|
|
51
|
-
Render the screen as a **self-contained HTML mock**
|
|
52
|
-
`tokens.json
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
**
|
|
65
|
-
|
|
66
|
-
(ADD principle 2). **No UI personas**? A **generic design-confirm**, never blocked; UI-less skips it.
|
|
58
|
+
Render the screen as a **self-contained HTML mock** (component library via CDN, bound to
|
|
59
|
+
`tokens.json`, composed from the per-component kit, realistic **mock** data). **Capture** a real
|
|
60
|
+
image (headless screenshot), present it for **design-confirm** — show-before-ask, **before build**.
|
|
61
|
+
On confirm: record layout to `prototypes/<name>.json` + `catalog.json`, save image to
|
|
62
|
+
`.add/design/captures/<name>.<ext>`, mention it in the feature's `PLAN.md`.
|
|
63
|
+
|
|
64
|
+
**Persona evidence checklist.** Render the loaded personas' `## Success Metrics` as a confirmable
|
|
65
|
+
**checklist** beside the image — both dimensions: **UI-Designer** (visual/**accessibility**) and
|
|
66
|
+
**UX-Researcher** (evidence, not assumed). Each item traces to a metric the human confirms —
|
|
67
|
+
**evidence, never an auto-pass**; a persona **never lowers a gate**. **No UI personas** → a
|
|
68
|
+
generic design-confirm; UI-less skips it.
|
|
69
|
+
|
|
70
|
+
### Text-mode gate variant
|
|
71
|
+
A **human gate** runs the loop in **text mode** — intake the **INTERACTION** axis → design the
|
|
72
|
+
report per `gate-udd.md` → **confirm**; no capture beat.
|
|
67
73
|
|
|
68
74
|
## Tool-agnostic capture
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
renderer-free.
|
|
76
|
-
|
|
77
|
-
Captures live at **`.add/design/captures/<name>.<ext>`**, mentioned in the feature's `TASK.md`.
|
|
78
|
-
`add.py check` raises a never-red `missing_capture` WARN for any prototype lacking one — a nudge
|
|
79
|
-
to render + confirm.
|
|
76
|
+
Render/capture however you like (headless browser, `html2image`, a screenshot service); the default
|
|
77
|
+
is the self-contained HTML mock above, captured headless. For a json-render project, the default is
|
|
78
|
+
**`@json-render/image`** (Satori → PNG/SVG, no browser). The engine never renders — the loop stays
|
|
79
|
+
tool-agnostic. Captures live at **`.add/design/captures/<name>.<ext>`**, mentioned in `PLAN.md`;
|
|
80
|
+
`add.py check` raises a never-red `missing_capture` WARN for any prototype lacking one.
|
|
80
81
|
|
|
81
82
|
The loop **binds** the UDD contracts **read-only** — `tokens.json` / `catalog.json` /
|
|
82
83
|
`prototypes/<name>.json` are read, never reshaped (a reshape is a change request). **Identity**
|
|
83
|
-
values stay **human-owned** (`udd-tokens.md`).
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
<constraints>
|
|
88
|
-
- **Intake before domain.** The four axes (FIDELITY · CONCEPT · LAYOUT · VISUAL DESIGN) are
|
|
89
|
-
interviewed and recorded — DESIGN.md defaults + per-screen overrides — before beat 1.
|
|
90
|
-
- **Domain first.** A screen is derived from the domain (beat 1), never sketched blind.
|
|
91
|
-
- **Reuse before invent.** Beat 2 checks the catalog first; a new component is a justified,
|
|
92
|
-
cited exception — never the reflex.
|
|
93
|
-
- **Confirm before build.** The captured image is approved by the human *before* implementation;
|
|
94
|
-
a design-confirm placed at or after build defeats the loop.
|
|
95
|
-
- **The engine never renders.** Capture is a recommended, tool-agnostic recipe run by the
|
|
96
|
-
agent's own tools; the image is evidence, not an engine artifact.
|
|
97
|
-
- **Bind, don't break.** The loop reads `tokens.json` / `catalog.json` / `prototypes/<name>.json`
|
|
98
|
-
read-only; the data contract is unchanged, and identity values stay human-owned.
|
|
99
|
-
- **Confirm against the personas.** With UI personas seeded, the checklist carries the UI-Designer
|
|
100
|
-
(visual/accessibility) + UX-Researcher (evidence-not-assumption) success-metrics — evidence,
|
|
101
|
-
never an auto-pass.
|
|
102
|
-
</constraints>
|
|
103
|
-
|
|
104
|
-
> Used at specify for a UI feature: `phases/0-setup.md` scaffolds `DESIGN.md`, and
|
|
105
|
-
> `phases/1-specify.md` points here when the feature has a screen — run the four beats, then
|
|
84
|
+
values stay **human-owned** (`templates/udd-tokens.md`).
|
|
85
|
+
|
|
86
|
+
> Used at specify for a UI feature: `phases/direction.md`'s setup span scaffolds `DESIGN.md`, and
|
|
87
|
+
> its Rules span points here when the feature has a screen — run the four beats, then
|
|
106
88
|
> carry the confirmed layout into the contract.
|