@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.
Files changed (113) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/GETTING-STARTED.md +20 -64
  3. package/README.md +128 -56
  4. package/agents/add.md +68 -0
  5. package/bin/cli.js +229 -29
  6. package/package.json +2 -3
  7. package/personas-teacher/VENDOR.md +6 -0
  8. package/skill/add/SKILL.md +100 -134
  9. package/skill/add/adopt.md +28 -0
  10. package/skill/add/beyond.md +36 -0
  11. package/skill/add/deltas.md +25 -2
  12. package/skill/add/design.md +56 -74
  13. package/skill/add/{report-template.md → gate-udd.md} +28 -37
  14. package/skill/add/intake.md +65 -29
  15. package/skill/add/loop.md +35 -23
  16. package/skill/add/phases/build.md +78 -0
  17. package/skill/add/phases/direction.md +280 -0
  18. package/skill/add/phases/verify.md +160 -0
  19. package/skill/add/run.md +13 -30
  20. package/skill/add/terms.md +18 -0
  21. package/tooling/add.py +2520 -2933
  22. package/tooling/add_engine/autonomy.py +2 -37
  23. package/tooling/add_engine/components.py +4 -87
  24. package/tooling/add_engine/constants.py +153 -87
  25. package/tooling/add_engine/guidelines.py +9 -11
  26. package/tooling/add_engine/io_state.py +82 -2
  27. package/tooling/add_engine/predicates.py +90 -2
  28. package/tooling/add_engine/search.py +6 -6
  29. package/tooling/add_engine/taskdoc.py +15 -10
  30. package/tooling/templates/CONVENTIONS.md.tmpl +1 -1
  31. package/tooling/templates/GLOSSARY.md.tmpl +10 -4
  32. package/tooling/templates/MILESTONE.md.tmpl +20 -16
  33. package/tooling/templates/PLAN.md.tmpl +128 -0
  34. package/tooling/templates/PROJECT.md.tmpl +6 -1
  35. package/tooling/templates/PROMPT.persona.md.tmpl +17 -21
  36. package/tooling/templates/personas/_template.md.tmpl +35 -29
  37. package/tooling/templates/personas/build-engineer.md.tmpl +45 -0
  38. package/tooling/templates/personas/data-steward.md.tmpl +45 -0
  39. package/tooling/templates/personas/evidence-verifier.md.tmpl +45 -0
  40. package/tooling/templates/personas/platform-engineer.md.tmpl +45 -0
  41. package/tooling/templates/personas/product-lead.md.tmpl +51 -0
  42. package/tooling/templates/personas/quality-auditor.md.tmpl +47 -0
  43. package/tooling/templates/personas/release-manager.md.tmpl +52 -0
  44. package/tooling/templates/personas/security-gatekeeper.md.tmpl +45 -0
  45. package/tooling/templates/personas/software-architect.md.tmpl +45 -0
  46. package/tooling/templates/personas/stream-orchestrator.md.tmpl +44 -0
  47. package/tooling/templates/personas/technical-writer.md.tmpl +49 -0
  48. package/tooling/templates/personas/ux-experience-lead.md.tmpl +48 -0
  49. package/tooling/templates/specs/SPEC.md.tmpl +18 -0
  50. package/tooling/templates/udd-wireframe.md +1 -1
  51. package/agents/add-advisor.md +0 -31
  52. package/agents/add-build.md +0 -29
  53. package/agents/add-design.md +0 -32
  54. package/agents/add-persona.md +0 -31
  55. package/agents/add-verify.md +0 -34
  56. package/docs/00-introduction.md +0 -46
  57. package/docs/01-principles.md +0 -71
  58. package/docs/02-the-flow.md +0 -113
  59. package/docs/03-step-1-specify.md +0 -123
  60. package/docs/04-step-2-scenarios.md +0 -90
  61. package/docs/05-step-3-contract.md +0 -80
  62. package/docs/06-step-4-tests.md +0 -85
  63. package/docs/07-step-5-build.md +0 -82
  64. package/docs/08-step-6-verify.md +0 -105
  65. package/docs/09-the-loop.md +0 -75
  66. package/docs/10-setup-and-stages.md +0 -118
  67. package/docs/11-governance.md +0 -91
  68. package/docs/12-roles.md +0 -99
  69. package/docs/13-adoption.md +0 -67
  70. package/docs/14-foundation.md +0 -142
  71. package/docs/15-foundations-and-lineage.md +0 -106
  72. package/docs/16-releasing.md +0 -182
  73. package/docs/17-components.md +0 -143
  74. package/docs/18-personas.md +0 -80
  75. package/docs/README.md +0 -77
  76. package/docs/add-competencies.png +0 -0
  77. package/docs/add-flow.png +0 -0
  78. package/docs/add-foundation.png +0 -0
  79. package/docs/add-hierarchy.png +0 -0
  80. package/docs/add-milestone-task-lifecycle.png +0 -0
  81. package/docs/add-task-growth-wheel.png +0 -0
  82. package/docs/appendix-a-templates.md +0 -88
  83. package/docs/appendix-b-prompts.md +0 -154
  84. package/docs/appendix-c-glossary.md +0 -176
  85. package/docs/appendix-d-worked-example.md +0 -231
  86. package/docs/appendix-e-checklists.md +0 -92
  87. package/docs/appendix-f-requirements-matrix.md +0 -171
  88. package/docs/appendix-g-references.md +0 -106
  89. package/skill/add/advisor.md +0 -80
  90. package/skill/add/compact-foundation.md +0 -40
  91. package/skill/add/components.md +0 -52
  92. package/skill/add/confidence.md +0 -32
  93. package/skill/add/fold.md +0 -63
  94. package/skill/add/graduate.md +0 -39
  95. package/skill/add/phases/0-ground.md +0 -64
  96. package/skill/add/phases/0-setup.md +0 -103
  97. package/skill/add/phases/1-specify.md +0 -61
  98. package/skill/add/phases/2-scenarios.md +0 -48
  99. package/skill/add/phases/3-contract.md +0 -60
  100. package/skill/add/phases/4-tests.md +0 -59
  101. package/skill/add/phases/5-build.md +0 -62
  102. package/skill/add/phases/6-verify.md +0 -69
  103. package/skill/add/phases/7-observe.md +0 -47
  104. package/skill/add/phases/fast-lane.md +0 -31
  105. package/skill/add/release.md +0 -61
  106. package/skill/add/scope.md +0 -72
  107. package/skill/add/sensitivity.md +0 -51
  108. package/skill/add/setup-review.md +0 -48
  109. package/skill/add/soul.md +0 -58
  110. package/skill/add/streams.md +0 -268
  111. package/tooling/add_engine/release.py +0 -86
  112. package/tooling/templates/TASK.fast.md.tmpl +0 -77
  113. package/tooling/templates/TASK.md.tmpl +0 -216
@@ -1,16 +1,13 @@
1
1
  ---
2
2
  name: add
3
3
  description: >-
4
- ADD (AI-Driven Development) — a minimal, state-tracked workflow for building
5
- software where the AI writes the code and the human owns direction and
6
- verification. Drives every feature through one lean TASK.md: Specify →
7
- Scenarios Contract Tests Build Verify Observe, with red/green TDD
8
- built in. Use this skill whenever working in a repo that has a `.add/`
9
- directory, when the user says "add", "start a task", "next phase", "specify
10
- this feature", "ADD method", or "AI-driven development", or when scaffolding a
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: "1.8.0"
18
+ version: "2.0.0"
22
19
  ---
23
20
 
24
- # ADD — the orchestration engine
21
+ # ADD — memory · judgment · conscience (the agent is the hands)
25
22
 
26
- You are the orchestrator. ADD keeps the AI fast *and* safe by fixing direction
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 rather than a plausible-looking diff.
25
+ result through passing evidence, not a plausible diff.
29
26
 
30
- **One file = one task.** Each feature is one `.add/tasks/<slug>/TASK.md` a §0 ground
31
- preamble plus seven step sections, filled top to bottom. The Python tool tracks where you
32
- are so context never rots across sessions.
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.** When the skill ARGUMENTS begin with `--todo`, skip orienting: route to
35
- `add.py todo` and print its output — `--todo <text>` captures · `--todo` lists open todos ·
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` · book: `.add/docs/`. Ensure the engine is in the project first:
36
+ Engine: `.add/tooling/add.py`. Ensure it is in the project:
41
37
 
42
- - It exists → go straight to `status` below.
43
- - It does NOT (ADD installed as a Claude Code plugin engine + book ride in the plugin) →
44
- materialize once: `node "${CLAUDE_PLUGIN_ROOT}/bin/cli.js" init --no-skill`. That drops
45
- `.add/tooling/` (engine) + `.add/docs/` (book) + the agent-agnostic `CLAUDE.md` block like an
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
- Find the resume point from the tool, not by re-reading the repo:
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
- `status` names two files to read when orienting: `.add/PROJECT.md` (the foundation) and `.add/SOUL.md`
55
- (your **voice** — tone, style, what keeps the human's trust; read it each session — human-owned and
56
- self-improving via the `soul-self-improve` path). Then branch on state:
57
-
58
- - **No `.add/state.json` yet** (`status` says `no .add/ project found`) **autonomous setup**: if
59
- `.add/.intent` exists, read it the installer's one-line first-build intent (a NOTE, never an init
60
- trigger) to seed your kickoff; then YOU run init `add.py init --name "<inferred>" --stage <picked>
61
- --await-lock` and read `phases/0-setup.md` to draft the foundation + §1–§3 through to the human
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 · `init` bootstrap · `advance` continue · `gate PASS` at verify.
68
- **Flag mode** — two human-owned settings (never auto-picked): **fast** (task) · **auto** (mode).
69
- - **fast** — `new-task --fast`: minimal template, freeze-gated; a milestone-free `--fast` task is a
70
- blessed standalone low-ceremony lane. Jot ideas first with `add.py todo "<text>"` (then `todo` to
71
- list · `todo --done <id>`).
72
- - **auto** `autonomy: auto` (default) auto-gates verify on evidence; lower the autonomy level with
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 milestone or task: read `intake.md`, place it in one bucket
79
- `new-major` · `sub-milestone` · `task` · `change-request` propose `{ bucket, rationale, command }`;
80
- the human confirms. A question or unsharp intent? **Interview before you size** (`intake.md`). Once
81
- `new-major`/`sub-milestone`, draft the `MILESTONE.md` (goal · scope · exit criteria · breadth-first
82
- tasks) read `scope.md`. Create it `new-milestone --await-confirm`, then `milestone-confirm <slug>`
83
- gates `new-task` until the parent is agreed. For `task`/`change-request`: `add.py new-task` then the
84
- first phase guide.
85
-
86
- ## The flow and which file to load
87
-
88
- Load the phase guide **only for the phase you are in** (progressive disclosure):
89
-
90
- | Phase | Guide | Produces (TASK.md section) | Who leads |
91
- |-------|-------|----------------------------|-----------|
92
- | setup | `phases/0-setup.md` | `.add/` + living docs + first §1–§3 + `SETUP-REVIEW.md` | AI drafts → **human locks** (the baseline approval) |
93
- | ground | `phases/0-ground.md` | §0 GROUND map (real files · symbols · the anchors §3 cites) | **AI** (the §0 preamble — no new gate) |
94
- | specify | `phases/1-specify.md` | §1 rules + ranked lowest-confidence flag | AI drafts (co-specify) |
95
- | scenarios | `phases/2-scenarios.md` | §2 Given/When/Then | AI drafts† |
96
- | contract | `phases/3-contract.md` | §3 frozen shape | AI drafts → **human approves once** (the decision point)† |
97
- | tests | `phases/4-tests.md` | §4 + red suite in `tests/` | AI drafts† |
98
- | build | `phases/5-build.md` | code in `src/`, tests green | **AI** |
99
- | verify | `phases/6-verify.md` | §6 checks + gate record | **AI auto-gates on evidence**; human on residue/security‡ |
100
- | observe | `phases/7-observe.md` | §7 spec delta | human + AI |
101
-
102
- **The specification bundle (v7).** §1–§4 are one bundle; the human gives **one approval at the
103
- contract freeze**, lowest-confidence-firstsee `run.md`.
104
- **Verify auto-gate (v6–v7).** Under `autonomy: auto` (default) a run may auto-PASS on complete
105
- evidence (*auto-resolved* — an explicit PASS, not a skip). **Security always escalates** (HARD-STOP);
106
- so do concurrency / architecture residue and a lowered autonomy level (`conservative` / `manual`) — `run.md`.
107
-
108
- At every human decision point (intake · bundle approval · gate · milestone close) follow
109
- `report-template.md`: open with the banner then the ARC (goal · done · plan, engine-sourced), then PLAN/SHAPE → SUMMARY →
110
- FLAGS DECIDED EVIDENCE APPROVE NEXT; show-before-ask; never pre-stamp; the question is a summary, never the artifact.
111
-
112
- In **observe**, emit **lessons learned** tagged by which of the five (`DDD · SDD · UDD · TDD · ADD`)
113
- they improve (write them `open`; the human consolidates into `PROJECT.md`) — grammar + lifecycle in
114
- `deltas.md`. At milestone close (or on demand) the retrospective consolidation gathers confirmed deltas
115
- into a versioned foundation `fold.md`; then (separately, after) compact each foundation spec's stable
116
- tail — `compact-foundation.md`. Observe also tunes your voice: propose a confirmable voice delta that,
117
- once the human confirms, rewrites `SOUL.md` (the human is the only writer) — `soul.md`.
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
- - **§3 CONTRACT FROZEN** build→verify is a dynamic, auto-gated run (`autonomy: auto` default; lower to
122
- `conservative`/`manual` for a human gate) — `run.md`. Pipeline ready tasks behind frozen
123
- contracts `streams.md`. Delegate one piece of your plan to a subagent prefer the named roster
124
- (`add-design`/`add-build`/`add-verify`/`add-persona`/`add-advisor`) over an ad-hoc spawn; when to
125
- spawn, the prompt template, the tier `advisor.md`. Self-score a draft (0–1 across six dimensions, refine if any < 0.9)
126
- `confidence.md`. Both advisory; the engine never spawns.
127
- - **Small, low-risk task**, less ceremonythe **fast lane**: `new-task --fast` scaffolds the minimal
128
- `TASK.fast.md`, bundle approved in one freeze — `phases/fast-lane.md`. Floor held (frozen contract ·
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 advance # next phase of the active task
174
- python3 .add/tooling/add.py gate PASS # at verify: records PASS, marks done
175
- python3 .add/tooling/add.py use <slug> # switch the active task (e.g. across parallel streams)
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 (read the stage from `add.py status`):
148
+ The steps never change; their depth does (stage from `add.py status`):
181
149
 
182
- - **prototype** — run light; code is throwaway; design/experience is the point.
183
- - **poc** — run contract/tests/build deeply on the single riskiest slice only.
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** — every step at full rigor + the observe loop. Reach it via the `graduate.md`
186
- orchestration when status shows `MVP covered → propose graduation`, never a bare `stage production` flip.
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 full method (the *why* behind every rule) is the AIDD book in `.add/docs/`. When a phase decision is
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.
@@ -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`.
@@ -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**; later `fold.md` consolidates confirmed ones into a versioned `PROJECT.md` — how `DDD · SDD · UDD · TDD · ADD` stop being write-once and converge.
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)`. At `add.py fold` it lands in `.add/personas/<slug>.md` under that section (newest-first, never clobbering) instead of `PROJECT.md` (`fold.md`).
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.
@@ -1,12 +1,11 @@
1
1
  # Design — the design-definition loop (UDD)
2
2
 
3
- When a **UI feature** reaches specify, design it before you build it. This loop takes the
4
- feature from the **domain** to a screen the human has **seen and confirmed** a real captured
5
- image *before* any implementation. Loaded on demand; the engine never runs it for you.
6
-
7
- Design before code is the UDD half of the method. It fills the existing token + component
8
- foundation — `tokens.json` (`udd-tokens.md`), `catalog.json` + `prototypes/<name>.json`
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 **four design axes** so the look is *directed*,
21
- not guessed — ask each, show options, record the pick:
30
+ Before reading the domain, interview the human on **five design axes** ask each, show options,
31
+ record the pick:
22
32
 
23
- - **FIDELITY** — how far this goes: *lo-fi wireframe* · *hi-fi mockup* · *production*. Recorded
24
- **intent** informing the later beats, not an engine gate.
25
- - **CONCEPT** — the design *idea / mood / direction* in a line.
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 a brand value (identity stays **human-owned**, `udd-tokens.md`).
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 the answers **before** review-domain: project **defaults** in DESIGN.md's `## Design intake`;
31
- per-screen **overrides** (deltas only) in the per-feature design note (`prototypes/<name>.json`
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
- needs + the **regions** each holds. Map each entity to a *presentational* component (shows state;
38
- owns no domain decision). The screen list + regions are this beat's output.
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** what's there it keeps screens consistent. Research
42
- a reference UI only to fill a **genuine gap**; propose a **new** catalog component for it with a
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. The cheapest artifact that shows the *expected layout*, so the human corrects structure
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** — the component library via CDN, bound to
52
- `tokens.json` (CSS variables), composed from the **reusable per-component kit** (one token-bound
53
- partial per catalog component), with realistic **mock** data.
54
- **Capture** a real image (a headless screenshot) and present it to the human for **design-confirm**
55
- show-before-ask, **before build**. On confirm, record the layout to `prototypes/<name>.json` +
56
- `catalog.json`, save the image to `.add/design/captures/<name>.<ext>`, and **mention it in the
57
- feature's `TASK.md`** so the approved screen is traceable from the task. The HTML mock is the
58
- *visible evidence*; the json-render tree is the *machine-checkable* record.
59
-
60
- **Persona evidence checklist.** Before design-confirm, match the screen to the seeded UI personas
61
- (`.add/personas/*` covering visual design and UX research) and render their `## Success Metrics`
62
- as a confirmable **checklist** beside the captured image — **both dimensions**: **UI-Designer**
63
- (visual + WCAG-AA **accessibility**) and **UX-Researcher** (methodology-first,
64
- **validated by user evidence, not assumed**). Each item traces to a success-metric
65
- the human confirms; it is **evidence, never an auto-pass** a persona **never lowers a gate**
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
- How you render and capture is **your** choice (headless browser, `html2image`, a design tool, a
71
- screenshot service). The default is the self-contained HTML mock above, captured headless no app
72
- build, yet wearing the project's real tokens and components. For a json-render project, the default
73
- is **`@json-render/image`** (Satori PNG/SVG, no browser). The captured image is **design-confirm
74
- evidence** the human approves; the engine never renders the loop stays tool-agnostic, the method
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
- ## The hard rules
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.