@pilotspace/add 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +88 -0
- package/GETTING-STARTED.md +172 -84
- package/README.md +14 -8
- package/bin/cli.js +39 -38
- package/docs/01-principles.md +3 -3
- package/docs/02-the-flow.md +20 -13
- package/docs/03-step-1-specify.md +13 -13
- package/docs/04-step-2-scenarios.md +3 -1
- package/docs/05-step-3-contract.md +4 -2
- package/docs/06-step-4-tests.md +3 -1
- package/docs/07-step-5-build.md +1 -1
- package/docs/08-step-6-verify.md +22 -4
- package/docs/09-the-loop.md +25 -1
- package/docs/10-setup-and-stages.md +52 -9
- package/docs/11-governance.md +2 -2
- package/docs/12-roles.md +3 -3
- package/docs/13-adoption.md +3 -3
- package/docs/14-foundation.md +19 -11
- package/docs/15-foundations-and-lineage.md +106 -0
- package/docs/README.md +4 -0
- package/docs/appendix-a-templates.md +3 -3
- package/docs/appendix-b-prompts.md +40 -5
- package/docs/appendix-c-glossary.md +42 -12
- package/docs/appendix-d-worked-example.md +2 -2
- package/docs/appendix-e-checklists.md +2 -2
- package/docs/appendix-f-requirements-matrix.md +12 -11
- package/docs/appendix-g-references.md +106 -0
- package/package.json +5 -3
- package/skill/add/SKILL.md +50 -21
- package/skill/add/adopt.md +67 -0
- package/skill/add/deltas.md +20 -8
- package/skill/add/fold.md +19 -17
- package/skill/add/graduate.md +74 -0
- package/skill/add/intake.md +22 -7
- package/skill/add/loop.md +59 -0
- package/skill/add/phases/0-setup.md +92 -24
- package/skill/add/phases/1-specify.md +23 -13
- package/skill/add/phases/2-scenarios.md +14 -4
- package/skill/add/phases/3-contract.md +38 -9
- package/skill/add/phases/4-tests.md +29 -5
- package/skill/add/phases/5-build.md +14 -4
- package/skill/add/phases/6-verify.md +38 -4
- package/skill/add/phases/7-observe.md +13 -5
- package/skill/add/report-template.md +106 -0
- package/skill/add/run.md +53 -34
- package/skill/add/scope.md +24 -2
- package/skill/add/setup-review.md +65 -0
- package/skill/add/streams.md +256 -0
- package/tooling/add.py +1388 -62
- package/tooling/templates/CONVENTIONS.md.tmpl +1 -1
- package/tooling/templates/GLOSSARY.md.tmpl +23 -0
- package/tooling/templates/MILESTONE.md.tmpl +1 -0
- package/tooling/templates/PROJECT.md.tmpl +4 -3
- package/tooling/templates/TASK.md.tmpl +39 -11
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Appendix G — References & Lineage
|
|
2
|
+
|
|
3
|
+
ADD did not appear from nowhere. It sits at the meeting point of three currents:
|
|
4
|
+
the **recursive self-improvement** thesis (AI that helps build the next AI), the
|
|
5
|
+
**spec-driven development** movement (the specification, not the code, is the
|
|
6
|
+
source of truth), and a decade of **agentic + tests-first** research showing that
|
|
7
|
+
a generate→check→refine loop, constrained by executable tests, turns fluent model
|
|
8
|
+
output into trustworthy software. This appendix is the curated, verified grounding
|
|
9
|
+
for that lineage — every source below is reachable and annotated with a `↔ ADD:`
|
|
10
|
+
line saying exactly how it relates to the method.
|
|
11
|
+
|
|
12
|
+
**The frame — "closing the loop."** Anthropic's recursive-self-improvement picture
|
|
13
|
+
runs from autonomous agents delegating to workers *today* toward a future where
|
|
14
|
+
Claude improves Claude. ADD is a deliberately **human-gated, evidence-trusted**
|
|
15
|
+
instance of that loop: the AI drives spec→build→verify→observe, but a human owns the
|
|
16
|
+
frozen contract and the verify gate, and trust comes from passing tests and
|
|
17
|
+
re-resolved evidence — never from a plausible-looking diff. The sources here are
|
|
18
|
+
the shoulders that posture stands on.
|
|
19
|
+
|
|
20
|
+
The four sections below are the four currents. The comparison table places ADD next
|
|
21
|
+
to its two closest peers — GitHub's **spec-kit** and **GSD (Get Shit Done)** — and
|
|
22
|
+
names where ADD diverges. Read "How to cite" first; the rest of the book cites into
|
|
23
|
+
the keys defined here.
|
|
24
|
+
|
|
25
|
+
## How to cite
|
|
26
|
+
|
|
27
|
+
The book uses one inline citation form — **author-year** — and every entry's lead
|
|
28
|
+
`(Author Year)` *is* its cite-key. Resolve any inline `[…]` to the matching entry below.
|
|
29
|
+
|
|
30
|
+
| Authors | Inline form | Example |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| one author | `[Surname Year]` | `[Schmidhuber 2003]` |
|
|
33
|
+
| two authors | `[Surname & Surname Year]` | `[Mathews & Nagappan 2024]` |
|
|
34
|
+
| three or more | `[Surname et al. Year]` | `[Zelikman et al. 2023]` |
|
|
35
|
+
| an organisation | `[Org Year]` | `[Anthropic 2026a]` · `[GitHub 2025]` |
|
|
36
|
+
| several at once | joined by `; ` | `[Schmidhuber 2003; Zelikman et al. 2023]` |
|
|
37
|
+
| same author, same year | add a `Year`-letter suffix | `[Anthropic 2025a]` / `[Anthropic 2025b]` |
|
|
38
|
+
|
|
39
|
+
The 3+-author rule becomes **et al.**; an organisation stands in as the author
|
|
40
|
+
when no individual is credited; and when two org-authored sources collide on a year
|
|
41
|
+
(several Anthropic 2025/2026 items do, below) a trailing letter disambiguates them.
|
|
42
|
+
There is exactly one entry per cite-key.
|
|
43
|
+
|
|
44
|
+
## spec-kit ↔ ADD (and GSD)
|
|
45
|
+
|
|
46
|
+
ADD shares the spec-first DNA of GitHub's **spec-kit** and the Claude-Code,
|
|
47
|
+
context-rot-fighting niche of **GSD**. The phase models line up closely:
|
|
48
|
+
|
|
49
|
+
| ADD phase | spec-kit command | GSD phase |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| foundation · principles | `/speckit.constitution` → `constitution.md` | (project setup / `CLAUDE.md`-level) |
|
|
52
|
+
| §1 specify (what / why) | `/speckit.specify` → `spec.md` | **discuss** — capture decisions before planning |
|
|
53
|
+
| §3 contract (how, frozen) | `/speckit.plan` → `plan.md`, `contracts/` | **plan** — research, decompose, fit fresh context |
|
|
54
|
+
| milestone tasks / waves | `/speckit.tasks` → `tasks.md` | (phases → parallel waves) |
|
|
55
|
+
| §5 build | `/speckit.implement` | **execute** — parallel waves, fresh 200k-token context each |
|
|
56
|
+
| §6 verify | `/speckit.analyze` + `/speckit.checklist` | **verify** — walk what was built, fix before declaring done |
|
|
57
|
+
|
|
58
|
+
**Where ADD diverges.** spec-kit stops at `implement`; GSD ends at verify (GSD Core
|
|
59
|
+
adds a fifth *ship* phase). ADD closes the loop past both by adding three things
|
|
60
|
+
neither has as a first-class gate: a **failing-tests-first** gate (§4 — no build
|
|
61
|
+
starts until the tests are red for the right reason), an **observe→`fold`**
|
|
62
|
+
self-improvement step (§7 — confirmed learnings consolidate into a versioned foundation),
|
|
63
|
+
and an engine-tracked **dynamic goal-loop** that will hold a milestone open and
|
|
64
|
+
reopen tasks until its exit criteria are met. ADD also deliberately targets **less
|
|
65
|
+
doc-time than GSD** — a lean foundation and one human approval per task, rather than
|
|
66
|
+
a document per phase. The shared lineage is real; the tests-first gate, the `fold`,
|
|
67
|
+
and the goal-loop are ADD's contribution.
|
|
68
|
+
|
|
69
|
+
## 1. Recursive self-improvement
|
|
70
|
+
|
|
71
|
+
- **When AI builds itself** (Favaro & Clark 2026) — https://www.anthropic.com/institute/recursive-self-improvement — essay. The RSI thesis: by 2026 >80% of code merged at Anthropic was Claude-authored and the 50%-task time-horizon keeps doubling; recursive self-improvement would shift humans from builders to validators. ↔ ADD: the seed source — ADD is the human-gated, evidence-trusted way to run a spec→build→verify→observe loop while the human stays the validator.
|
|
72
|
+
- **Automated Alignment Researchers** (Anthropic 2026a) — https://www.anthropic.com/research/automated-alignment-researchers — research. Nine parallel Claude agents recovered ~97% of the human-expert gap on an alignment task in 5 days versus 7 for the human team. ↔ ADD: the strongest evidence the recursive loop is not speculative — parallel agents under review are exactly ADD's wave-plus-verify shape.
|
|
73
|
+
- **Machines of Loving Grace** (Amodei 2024) — https://www.darioamodei.com/essay/machines-of-loving-grace — essay. A "country of geniuses in a datacenter," argued with a measured, bounded position on recursive self-improvement. ↔ ADD: the intent framing behind milestoning — bound the loop with human direction rather than let it run open.
|
|
74
|
+
- **Gödel Machines: Self-Referential Universal Problem Solvers** (Schmidhuber 2003) — https://arxiv.org/abs/cs/0309048 — paper. A provably-optimal self-modifying agent that rewrites itself only when it can prove the rewrite helps. ↔ ADD: the mathematical anchor of the lineage — and a precedent for "only change on proof," which ADD enforces socially via the never-weaken-a-test rule.
|
|
75
|
+
- **STOP: Self-Taught Optimizer** (Zelikman et al. 2023) — https://arxiv.org/abs/2310.02304 — paper. A scaffolding program recursively improves the code that improves code. ↔ ADD: the algorithmic kin of the `fold` step — consolidate confirmed learnings back into the method that produced them.
|
|
76
|
+
- **Self-Refine: Iterative Refinement with Self-Feedback** (Madaan et al. 2023) — https://arxiv.org/abs/2303.17651 — paper. Generate→critique→refine with the same model lifts quality ~20% with no extra training. ↔ ADD: the micro-loop inside build→verify — produce, check against the contract, refine.
|
|
77
|
+
- **Self-Rewarding Language Models** (Yuan et al. 2024) — https://arxiv.org/abs/2401.10020 — paper. A model acts as its own reward judge to improve across iterations. ↔ ADD: the risk ADD answers — a self-judging loop needs an external gate; ADD makes tests and a human the reward signal, not the model's own opinion.
|
|
78
|
+
- **Reflexion: Language Agents with Verbal Reinforcement Learning** (Shinn et al. 2023) — https://arxiv.org/abs/2303.11366 — paper. Agents keep verbal reflections in episodic memory and retry, reaching 91% on HumanEval. ↔ ADD: the principle behind "reopen the task if criteria are unmet" — a failed check becomes feedback for the next attempt, not a dead end.
|
|
79
|
+
- **Voyager: An Open-Ended Embodied Agent with LLMs** (Wang et al. 2023) — https://arxiv.org/abs/2305.16291 — paper. An auto-curriculum agent that grows a reusable skill library over time. ↔ ADD: the growing foundation — each milestone's consolidated deltas are ADD's accumulating skill library.
|
|
80
|
+
- **AlphaEvolve: A Coding Agent for Scientific and Algorithmic Discovery** (Novikov et al. 2025) — https://arxiv.org/abs/2506.13131 — paper. An evolutionary coding agent that beat a long-standing matrix-multiplication record and shipped a production scheduler improvement. ↔ ADD: the end-state evidence — a generate-and-verify loop can exceed human baselines when every candidate is checked.
|
|
81
|
+
|
|
82
|
+
## 2. Autonomous & agentic workflows
|
|
83
|
+
|
|
84
|
+
- **Building Effective Agents** (Schluntz & Zhang 2024) — https://www.anthropic.com/research/building-effective-agents — blog. The canonical taxonomy: prompt-chaining, routing, orchestrator-workers, and the evaluator-optimizer loop. ↔ ADD: the architecture cite — evaluator-optimizer is build→verify→refine; orchestrator-workers is ADD's wave parallelism.
|
|
85
|
+
- **Enabling Claude Code to work more autonomously** (Anthropic 2025a) — https://www.anthropic.com/news/enabling-claude-code-to-work-more-autonomously — news. Checkpoints, subagents, hooks, background tasks, and `/rewind` rollback. ↔ ADD: checkpoint/rewind is the rollback strategy behind phase gates; hooks are where the engine enforces them.
|
|
86
|
+
- **How we built our multi-agent research system** (Anthropic 2025b) — https://www.anthropic.com/engineering/multi-agent-research-system — blog. An Opus lead orchestrating Sonnet subagents, with an LLM acting as judge, lifting task performance ~90%. ↔ ADD: the lead-plus-subagents-plus-judge pattern is exactly ADD's wave execution under a verify gate.
|
|
87
|
+
- **ReAct: Synergizing Reasoning and Acting in Language Models** (Yao et al. 2022) — https://arxiv.org/abs/2210.03629 — paper. Interleaving think→act→observe turns a model into an agent. ↔ ADD: the base loop every ADD phase runs on.
|
|
88
|
+
- **Toolformer: Language Models Can Teach Themselves to Use Tools** (Schick et al. 2023) — https://arxiv.org/abs/2302.04761 — paper. Self-supervised learning of when and how to call external tools. ↔ ADD: the capability that lets an agent run its own tests, linters, and builds — the evidence ADD trusts.
|
|
89
|
+
- **SWE-agent: Agent–Computer Interfaces Enable Automated Software Engineering** (Yang et al. 2024) — https://arxiv.org/abs/2405.15793 — paper. A designed agent–computer interface materially improves autonomous issue resolution. ↔ ADD: the structured agent↔environment contract — ADD's `add.py` engine is that interface for the method.
|
|
90
|
+
- **The AI Scientist: Towards Fully Automated Open-Ended Scientific Discovery** (Lu et al. 2024) — https://arxiv.org/abs/2408.06292 — paper. A full idea→experiment→write→review research loop at ~$15 per paper. ↔ ADD: the research analog of ADD's loop — and a reminder that an automated reviewer is the weak link a human gate protects.
|
|
91
|
+
|
|
92
|
+
## 3. Spec-driven development & spec-kit
|
|
93
|
+
|
|
94
|
+
- **GitHub Spec Kit** (GitHub 2025) — https://github.com/github/spec-kit — repo. The reference SDD toolkit: the phase model is `constitution` → `specify` → `plan` → `tasks` → `implement`, with the spec as the executable source of truth. ↔ ADD: the closest spec-first sibling — ADD's specify and contract phases map onto specify and plan; see the comparison table for the divergence.
|
|
95
|
+
- **Spec-driven development with AI: get started with a new open-source toolkit** (Delimarsky 2025) — https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/ — blog. The spec-kit launch post; frames `tasks` as "TDD for your AI agent." ↔ ADD: independent articulation of why decomposing a spec into checkable units beats one big prompt.
|
|
96
|
+
- **Spec-driven development: using Markdown as a programming language when building with AI** (Vesely 2025) — https://github.blog/ai-and-ml/generative-ai/spec-driven-development-using-markdown-as-a-programming-language-when-building-with-ai/ — blog. Spec-as-source, with context-rot named as the failure SDD exists to solve. ↔ ADD: the rationale for the frozen contract — a stable written spec is what survives when the model's context degrades.
|
|
97
|
+
- **Get Shit Done (GSD)** (GSD 2025) — https://github.com/open-gsd/gsd-core — repo. A meta-prompting, context-engineering, spec-driven system for Claude Code; its `discuss` → `plan` → `execute` → `verify` cycle runs each phase in a fresh subagent context to fight context-rot (originally `gsd-build/get-shit-done`, now continued as GSD Core). ↔ ADD: ADD's closest peer — same Claude-Code, context-rot niche; ADD diverges with the tests-first gate, the observe→`fold` step, and the dynamic goal-loop, and aims for less doc-time than GSD.
|
|
98
|
+
- **Beyond Vibe Coding: Amazon Introduces Kiro, the Spec-Driven Agentic IDE** (InfoQ 2025) — https://www.infoq.com/news/2025/08/aws-kiro-spec-driven-agent/ — blog. Kiro structures work as requirements→design→tasks with execution hooks. ↔ ADD: cross-vendor confirmation that spec-first is converging across the industry, not a single-tool idea.
|
|
99
|
+
- **Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants** (Piskala 2026) — https://arxiv.org/abs/2602.00180 — paper. A taxonomy of SDD rigor — Spec-First, Spec-Anchored, Spec-as-Source — reporting human-refined specs can cut LLM code errors substantially, with BDD as SDD's ancestor. ↔ ADD: places ADD as "Spec-Anchored" and gives the academic vocabulary for the contract-freeze decision.
|
|
100
|
+
|
|
101
|
+
## 4. Tests-first & verification
|
|
102
|
+
|
|
103
|
+
- **Test-Driven Development for Code Generation** (Mathews & Nagappan 2024) — https://arxiv.org/abs/2402.13521 — paper. Supplying tests alongside the prompt measurably lifts pass rates on MBPP and HumanEval. ↔ ADD: the empirical backbone of the failing-tests-first gate — tests as the constraint that makes generation verifiable.
|
|
104
|
+
- **SWE-bench: Can Language Models Resolve Real-World GitHub Issues?** (Jimenez et al. 2023) — https://arxiv.org/abs/2310.06770 — paper. 2,294 real issues judged by whether the project's own tests pass; <2% solved at release. ↔ ADD: the yardstick that proves the point — "done" means the tests pass, which is exactly how ADD gates a feature.
|
|
105
|
+
- **Our framework for developing safe and trustworthy agents** (Anthropic 2025c) — https://www.anthropic.com/news/our-framework-for-developing-safe-and-trustworthy-agents — news. Five principles: human control, transparency, alignment, privacy, and security. ↔ ADD: the frozen-contract gate and never-weaken-a-test rule are human control and transparency made concrete; the security HARD-STOP is the security principle.
|
|
106
|
+
- **Responsible Scaling Policy v3.0** (Anthropic 2026b) — https://www.anthropic.com/news/responsible-scaling-policy-v3 — policy. The AI Safety Level framework; ASL-3 governs autonomous R&D capability. ↔ ADD: the governance ceiling that makes ADD's discipline necessary — as the loop gets more capable, the gates and the human-owned verify matter more, not less.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pilotspace/add",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "ADD (AI-Driven Development) — a minimal, state-tracked Claude Code skill that drives every feature through Specify → Scenarios → Contract → Tests → Build → Verify → Observe. Ships the AIDD book as its trust layer.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"add": "bin/cli.js"
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"access": "public"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"test": "python3 -m unittest discover -s tooling -p 'test_*.py'"
|
|
12
|
+
"test": "python3 -m unittest discover -s tooling -p 'test_*.py'",
|
|
13
|
+
"prepublishOnly": "python3 -m unittest discover -s tooling -p 'test_packaging.py'"
|
|
13
14
|
},
|
|
14
15
|
"files": [
|
|
15
16
|
"bin/",
|
|
@@ -18,7 +19,8 @@
|
|
|
18
19
|
"tooling/templates/",
|
|
19
20
|
"docs/",
|
|
20
21
|
"README.md",
|
|
21
|
-
"GETTING-STARTED.md"
|
|
22
|
+
"GETTING-STARTED.md",
|
|
23
|
+
"CHANGELOG.md"
|
|
22
24
|
],
|
|
23
25
|
"keywords": [
|
|
24
26
|
"ai-driven-development",
|
package/skill/add/SKILL.md
CHANGED
|
@@ -31,7 +31,10 @@ Run the tool to find the resume point instead of re-reading the repo:
|
|
|
31
31
|
python3 .add/tooling/add.py status
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
- **No `.add
|
|
34
|
+
- **No `.add/state.json` yet** (a fresh install drops tooling + docs but does *not* init — so `status` says
|
|
35
|
+
`no .add/ project found`) → enter **autonomous setup**: YOU run init yourself —
|
|
36
|
+
`add.py init --name "<inferred>" --stage <picked> --await-lock` (don't tell the human to) — then read
|
|
37
|
+
`phases/0-setup.md` and draft the foundation + first scope + first contract through to the human baseline approval.
|
|
35
38
|
- **A task is active** → open `.add/tasks/<active>/TASK.md`, look at its `phase:`
|
|
36
39
|
marker, and read the matching `phases/<n>-<phase>.md`. Work *only* that phase.
|
|
37
40
|
- **No active task** → first SIZE the request (see Intake below), then create the
|
|
@@ -42,8 +45,9 @@ python3 .add/tooling/add.py status
|
|
|
42
45
|
When the user brings a raw request, classify it BEFORE making a milestone or task:
|
|
43
46
|
read `intake.md` and place it in exactly one bucket — `new-major` · `sub-milestone`
|
|
44
47
|
· `task` · `change-request` — then propose `{ bucket, rationale, command }` and let
|
|
45
|
-
the human confirm. This is the intake
|
|
46
|
-
`intake.md` for the rubric, the tie-break order, and worked examples.
|
|
48
|
+
the human confirm. This is the intake level (request → versioned scope); see
|
|
49
|
+
`intake.md` for the rubric, the tie-break order, and worked examples. A question or
|
|
50
|
+
unsharp intent? **Interview before you size** — explore and suggest first (`intake.md`).
|
|
47
51
|
|
|
48
52
|
Once a request is classified `new-major`/`sub-milestone`, drafting the actual
|
|
49
53
|
`MILESTONE.md` (goal · scope · exit criteria · breadth-first tasks) is the second
|
|
@@ -56,34 +60,55 @@ Load the phase guide **only for the phase you are in** (progressive disclosure):
|
|
|
56
60
|
|
|
57
61
|
| Phase | Guide | Produces (TASK.md section) | Who leads |
|
|
58
62
|
|-------|-------|----------------------------|-----------|
|
|
59
|
-
| setup | `phases/0-setup.md` | `.add/` +
|
|
60
|
-
| specify | `phases/1-specify.md` | §1 rules + ranked
|
|
61
|
-
| scenarios | `phases/2-scenarios.md` | §2 Given/When/Then |
|
|
62
|
-
| contract | `phases/3-contract.md` | §3 frozen shape | human
|
|
63
|
-
| tests | `phases/4-tests.md` | §4 + red suite in `tests/` |
|
|
63
|
+
| setup | `phases/0-setup.md` | `.add/` + living docs + first §1–§3 + `SETUP-REVIEW.md` | AI drafts → **human locks** (the baseline approval) |
|
|
64
|
+
| specify | `phases/1-specify.md` | §1 rules + ranked lowest-confidence flag | AI drafts (co-specify)† |
|
|
65
|
+
| scenarios | `phases/2-scenarios.md` | §2 Given/When/Then | AI drafts† |
|
|
66
|
+
| contract | `phases/3-contract.md` | §3 frozen shape | AI drafts → **human approves once** (the decision point)† |
|
|
67
|
+
| tests | `phases/4-tests.md` | §4 + red suite in `tests/` | AI drafts† |
|
|
64
68
|
| build | `phases/5-build.md` | code in `src/`, tests green | **AI** |
|
|
65
|
-
| verify | `phases/6-verify.md` | §6 checks + gate record | **human
|
|
69
|
+
| verify | `phases/6-verify.md` | §6 checks + gate record | **AI auto-gates on evidence**; human on residue/security‡ |
|
|
66
70
|
| observe | `phases/7-observe.md` | §7 spec delta | human + AI |
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
† **The specification bundle (v7).** §1–§4 are one bundle; the human gives **one approval at the
|
|
73
|
+
contract freeze** (the decision point), presented lowest-confidence-first. See `run.md`.
|
|
74
|
+
‡ **Verify auto-gate (v6–v7).** Under `autonomy: auto` (the default) a run may auto-PASS on
|
|
75
|
+
complete evidence — recorded as *auto-resolved*, an explicit PASS, not a skip. **Security always
|
|
76
|
+
escalates** (HARD-STOP); so do concurrency / architecture residue and `conservative` autonomy.
|
|
77
|
+
See `run.md`.
|
|
78
|
+
|
|
79
|
+
Whenever you present a decision point to the human in chat (intake · bundle approval · gate ·
|
|
80
|
+
milestone close), follow `report-template.md` — open with the ARC (goal · done · plan,
|
|
81
|
+
engine-sourced), then SUMMARY → DECISION → ⚠ FLAGS → EVIDENCE → NEXT, show-before-ask, never
|
|
82
|
+
pre-stamp a decision point — and the question is a summary, never the artifact.
|
|
83
|
+
|
|
84
|
+
In **observe**, also emit **lessons learned** — learnings tagged by which of the five
|
|
69
85
|
(`DDD · SDD · UDD · TDD · ADD`) they improve — so the foundation self-improves across loops.
|
|
70
|
-
You write them as `open`; the human
|
|
71
|
-
grammar and the status lifecycle. At milestone close (or on demand), run the
|
|
86
|
+
You write them as `open`; the human consolidates them into `PROJECT.md`. Read `deltas.md` for the
|
|
87
|
+
grammar and the status lifecycle. At milestone close (or on demand), run the retrospective consolidation that
|
|
72
88
|
gathers confirmed deltas into a versioned foundation — read `fold.md`.
|
|
73
89
|
|
|
74
|
-
##
|
|
90
|
+
## Beyond the bundle — load on demand
|
|
91
|
+
|
|
92
|
+
Once **§3 CONTRACT is FROZEN**, the build→verify half is a dynamic, auto-gated run
|
|
93
|
+
(`autonomy: auto` default, lowered to `conservative` for a human gate) — read `run.md`. To
|
|
94
|
+
pipeline several ready tasks behind their own frozen contracts, read `streams.md`.
|
|
95
|
+
|
|
96
|
+
When a milestone's tasks are all done but its **goal** (the `MILESTONE.md` exit criteria) is not
|
|
97
|
+
yet met, `milestone-done` holds the milestone open — read `loop.md` for the dynamic loop that turns
|
|
98
|
+
open deltas + extras into the next tasks, proposed by you and confirmed by the human, until the goal is met.
|
|
75
99
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
100
|
+
When `add.py status` prints **`MVP covered → propose graduation`** (every milestone done AND the
|
|
101
|
+
stage-goal-criteria all `[x]`), the project is ready to graduate its stage — read `graduate.md` for the
|
|
102
|
+
orchestration: gather `graduation-report` analytics → co-specify interview → draft ≥1 production
|
|
103
|
+
milestone → human confirm → then (and only then) `stage production`. The flip is guarded
|
|
104
|
+
(`stage_no_roadmap`) and is the FINAL step — never a bare label change.
|
|
81
105
|
|
|
82
106
|
## Non-negotiable rules (from the method)
|
|
83
107
|
|
|
108
|
+
<constraints>
|
|
84
109
|
1. **Direction before speed.** Never start Build until §1–§4 exist and tests are red.
|
|
85
110
|
2. **Trust evidence, not inspection.** A feature is trusted because its tests pass
|
|
86
|
-
and the
|
|
111
|
+
and the non-functional risks (concurrency, security, architecture) were checked — not
|
|
87
112
|
because the code reads plausibly.
|
|
88
113
|
3. **Never weaken a test or edit a frozen contract to make the build pass.** That
|
|
89
114
|
inverts the method. A real change is a *change request* back to Specify.
|
|
@@ -91,6 +116,7 @@ auto-passes a security finding.
|
|
|
91
116
|
`PASS`, `RISK-ACCEPTED` (signed, non-security only), or `HARD-STOP`. A security
|
|
92
117
|
finding is always `HARD-STOP`.
|
|
93
118
|
5. **Ask, don't guess.** If a requirement is unclear, stop and ask the user.
|
|
119
|
+
</constraints>
|
|
94
120
|
|
|
95
121
|
## Advancing
|
|
96
122
|
|
|
@@ -100,6 +126,7 @@ inside TASK.md):
|
|
|
100
126
|
```bash
|
|
101
127
|
python3 .add/tooling/add.py advance # next phase of the active task
|
|
102
128
|
python3 .add/tooling/add.py gate PASS # at verify: records PASS, marks done
|
|
129
|
+
python3 .add/tooling/add.py use <slug> # switch the active task (e.g. across parallel streams)
|
|
103
130
|
```
|
|
104
131
|
|
|
105
132
|
## Depth by stage
|
|
@@ -109,9 +136,11 @@ The steps never change; their depth does. Read the stage from `add.py status`:
|
|
|
109
136
|
- **prototype** — run light; code is throwaway; design/experience is the point.
|
|
110
137
|
- **poc** — run contract/tests/build deeply on the single riskiest slice only.
|
|
111
138
|
- **mvp** — full flow, narrow scope, light observation.
|
|
112
|
-
- **production** — every step at full rigor + the observe loop.
|
|
139
|
+
- **production** — every step at full rigor + the observe loop. Reach it via the graduation
|
|
140
|
+
orchestration (`graduate.md`) when status shows `MVP covered → propose graduation`, never a bare
|
|
141
|
+
`stage production` flip — the transition is guarded behind a human-confirmed roadmap.
|
|
113
142
|
|
|
114
|
-
## The
|
|
143
|
+
## The method rationale
|
|
115
144
|
|
|
116
145
|
The full method (the *why* behind every rule) is the AIDD book in `.add/docs/`.
|
|
117
146
|
When a phase decision is genuinely unclear, read the linked chapter — each phase
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Adopt — map an existing repo into the foundation (silent)
|
|
2
|
+
|
|
3
|
+
When ADD is pointed at a repo that already has code, onboarding is **silent**: the code
|
|
4
|
+
answers the questions a greenfield interview would ask, so you read it rather than ask.
|
|
5
|
+
This is the **brownfield path** of setup (the greenfield path keeps the 4-lens interview —
|
|
6
|
+
see `phases/0-setup.md`). You fill the living-documentation files from evidence, then stop at the one
|
|
7
|
+
human gate: the **baseline approval** (`add.py lock`).
|
|
8
|
+
|
|
9
|
+
## The signal — and arming the gate
|
|
10
|
+
|
|
11
|
+
Enter a brownfield repo with `--await-lock`:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python3 .add/tooling/add.py init --await-lock
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`--await-lock` does two things. It seeds an **unlocked** setup, which *arms the baseline-approval gate*
|
|
18
|
+
— the engine then refuses a second task, crossing into build, and recording a gate until you
|
|
19
|
+
`lock`. And init, being brownfield-aware, prints a line that begins:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
brownfield: existing code detected — the `add` skill maps it into your foundation …
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
That line is your cue to run this guide. **Always use `--await-lock` for brownfield onboarding**:
|
|
26
|
+
a plain `init` writes no setup and is grandfathered-locked, so its gate never arms *and* the
|
|
27
|
+
closing `lock` below would refuse with `already_locked`. The engine only *detects* the existing
|
|
28
|
+
code (a mechanical fact); it never reads or fills it — interpreting it is your job.
|
|
29
|
+
|
|
30
|
+
## The silent mapping
|
|
31
|
+
|
|
32
|
+
Fill each living-doc file in `.add/` from what the code actually shows — **ask nothing**:
|
|
33
|
+
|
|
34
|
+
| Living doc | Read it from |
|
|
35
|
+
|----------|--------------|
|
|
36
|
+
| `PROJECT.md` (foundation) | the domain nouns, entry points, the README, the first milestone the code implies |
|
|
37
|
+
| `CONVENTIONS.md` | the languages, folder layout, naming, lint config, error style already in the tree |
|
|
38
|
+
| `GLOSSARY.md` | the recurring names in modules, models, and public APIs (one name per concept) |
|
|
39
|
+
| `MODEL_REGISTRY.md` | leave the active model record; note any AI-authored code you can detect |
|
|
40
|
+
| `dependencies.allowlist` | the manifests already in the repo (package.json, pyproject, go.mod, …) |
|
|
41
|
+
|
|
42
|
+
Two rules that never bend:
|
|
43
|
+
|
|
44
|
+
<constraints>
|
|
45
|
+
1. **Never clobber a living doc.** `init` already skips any living-doc file that exists; if a human
|
|
46
|
+
already wrote `PROJECT.md`, you READ it, you do not overwrite it. Add, never replace.
|
|
47
|
+
2. **Tag every drafted decision `evidence-grounded` vs `guessed`.** A line you read from the
|
|
48
|
+
code is *evidence-grounded* (cite the file). A line you inferred because the code was silent
|
|
49
|
+
is *guessed*. The human's single baseline approval is only honest if they can see which is which —
|
|
50
|
+
the guesses are what they actually need to check. (The tags feed `SETUP-REVIEW.md`.)
|
|
51
|
+
</constraints>
|
|
52
|
+
|
|
53
|
+
## Where it ends — the baseline approval
|
|
54
|
+
|
|
55
|
+
Brownfield onboarding draws no per-step approvals. You map the foundation, then draft the
|
|
56
|
+
first milestone's scope and the first task's candidate specification bundle exactly as greenfield does, and
|
|
57
|
+
present it all at **one** human gate. The human reviews the decisions (lowest-confidence / `guessed`
|
|
58
|
+
first) and confirms in conversation; you run the lock with their name:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
python3 .add/tooling/add.py lock --by "<name>"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`lock` freezes the foundation + scope + first contract in one atomic write and opens the build.
|
|
65
|
+
Until it is run, the engine refuses a second task, crossing into build, and recording a gate —
|
|
66
|
+
so nothing is built on an unreviewed map. That gate is the only thing brownfield onboarding asks
|
|
67
|
+
of a human; everything before it, you did from the code.
|
package/skill/add/deltas.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Lessons learned — how each loop sharpens the foundation
|
|
2
2
|
|
|
3
|
-
A **
|
|
3
|
+
A **lesson learned** is a single learning a task produces, tagged by which of ADD's five
|
|
4
4
|
competencies it improves. You write deltas in a task's **OBSERVE** phase; later, the
|
|
5
|
-
`foundation-update-loop` gathers the confirmed ones and
|
|
5
|
+
`foundation-update-loop` gathers the confirmed ones and consolidates them into a versioned `PROJECT.md`.
|
|
6
6
|
This is how `DDD · SDD · UDD · TDD · ADD` stop being write-once and start converging.
|
|
7
7
|
|
|
8
8
|
You (the AI) **emit** deltas as `open`. Only the **human** moves a delta to `folded` or `rejected`
|
|
9
|
-
(
|
|
9
|
+
(consolidating into the foundation is judgment — see the verify/observe decision point). You never self-approve a consolidation.
|
|
10
10
|
|
|
11
11
|
## The grammar (frozen)
|
|
12
12
|
|
|
13
|
-
Each delta
|
|
13
|
+
Each delta begins on its own **tag line**; the learning may wrap onto continuation lines:
|
|
14
14
|
|
|
15
15
|
```
|
|
16
16
|
- [<COMPETENCY> · <status>] <learning> (evidence: <pointer>)
|
|
@@ -18,10 +18,20 @@ Each delta is ONE line, exactly:
|
|
|
18
18
|
|
|
19
19
|
- `<COMPETENCY>` — exactly one of the five (below).
|
|
20
20
|
- `<status>` — `open` | `folded` | `rejected`. A **newly emitted delta is `open`**.
|
|
21
|
-
- `<learning>` — the insight
|
|
21
|
+
- `<learning>` — the insight ("the domain model missed multi-tenancy"). It may run past one line;
|
|
22
|
+
the `- [COMPETENCY · status]` tag line must come **first**, and the `(evidence: …)` clause must
|
|
23
|
+
**close** the delta (on its last line).
|
|
22
24
|
- `(evidence: …)` — **required**, non-empty: a failing scenario, a production signal, a review
|
|
23
25
|
note. No evidence → it is an opinion, not a delta.
|
|
24
26
|
|
|
27
|
+
A long learning may wrap — the lint (`add.py check`) joins continuation lines, so this is **one**
|
|
28
|
+
delta, not two:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
- [SDD · open] the export endpoint must reject a tenant-scoped token used cross-tenant,
|
|
32
|
+
returning `forbidden` (not `not_found`) (evidence: scenario_cross_tenant_export failed)
|
|
33
|
+
```
|
|
34
|
+
|
|
25
35
|
## The five competencies (pick exactly one per delta)
|
|
26
36
|
|
|
27
37
|
| tag | competency | a delta here means you learned something about… |
|
|
@@ -40,7 +50,7 @@ That is its home. Split genuinely separate learnings into separate deltas; never
|
|
|
40
50
|
```
|
|
41
51
|
emit (OBSERVE) human review (foundation-update-loop)
|
|
42
52
|
open ───────────▶ folded (the learning is merged into PROJECT.md; version bumps)
|
|
43
|
-
└──────────▶ rejected (considered and deliberately NOT
|
|
53
|
+
└──────────▶ rejected (considered and deliberately NOT consolidated — the trail is kept)
|
|
44
54
|
```
|
|
45
55
|
|
|
46
56
|
An `open` delta is a pending signal. `folded` and `rejected` are both human decisions; a `rejected`
|
|
@@ -50,9 +60,11 @@ delta is left in place (not deleted) so "we saw this and chose not to act" stays
|
|
|
50
60
|
|
|
51
61
|
There is no engine validator yet, so before you record a delta, self-check it:
|
|
52
62
|
|
|
63
|
+
<reject_codes>
|
|
53
64
|
- `unknown_competency` — the tag is missing or not one of `DDD · SDD · UDD · TDD · ADD`. Fix the tag.
|
|
54
65
|
- `no_evidence` — the `(evidence: …)` pointer is missing or empty. Add the proof, or drop the line.
|
|
55
66
|
- `unknown_status` — the status is not `open | folded | rejected`. A fresh delta is `open`.
|
|
67
|
+
</reject_codes>
|
|
56
68
|
|
|
57
69
|
## Worked example
|
|
58
70
|
|
|
@@ -65,5 +77,5 @@ A task that built a tenancy feature finished its OBSERVE phase with:
|
|
|
65
77
|
```
|
|
66
78
|
|
|
67
79
|
Three learnings, three competencies, each with a pointer. At the next foundation update the human
|
|
68
|
-
|
|
80
|
+
consolidated the DDD and TDD deltas into `PROJECT.md` (→ `folded`) and rejected the ADD one as a one-off
|
|
69
81
|
(→ `rejected`). The foundation got sharper; nothing was silently lost.
|
package/skill/add/fold.md
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Consolidating deltas — how the foundation self-improves
|
|
2
2
|
|
|
3
|
-
This **closes the loop**. `deltas.md` lets a task EMIT learnings (`open`
|
|
4
|
-
OBSERVE phase);
|
|
3
|
+
This **closes the loop**. `deltas.md` lets a task EMIT learnings (`open` lessons learned in its
|
|
4
|
+
OBSERVE phase); the retrospective consolidation gathers the confirmed ones and writes them into a **versioned foundation**,
|
|
5
5
|
so `DDD · SDD · UDD · TDD · ADD` sharpen across milestones instead of drifting.
|
|
6
6
|
|
|
7
|
-
You (the AI) **gather and propose**; the **human confirms**; you then write the **append-only**
|
|
8
|
-
You never self-
|
|
7
|
+
You (the AI) **gather and propose**; the **human confirms**; you then write the **append-only** consolidation.
|
|
8
|
+
You never self-approve a consolidation — consolidating is judgment (see the verify/observe decision point).
|
|
9
9
|
|
|
10
|
-
## When to
|
|
10
|
+
## When to consolidate
|
|
11
11
|
|
|
12
12
|
At **milestone close** (the natural "version bump to the foundation"), or **on demand** when open
|
|
13
|
-
deltas have piled up. This is a convention, not a command — there is no `add.py fold`; the
|
|
13
|
+
deltas have piled up. This is a convention, not a command — there is no `add.py fold`; the consolidation
|
|
14
14
|
lives here so the engine stays judgment-free.
|
|
15
15
|
|
|
16
16
|
## The ritual
|
|
17
17
|
|
|
18
|
-
1. **Gather** — scan every task's OBSERVE
|
|
18
|
+
1. **Gather** — scan every task's §7 OBSERVE block for lesson-learned lines still `open` (`add.py deltas` reads them by the machine heading).
|
|
19
19
|
2. **Group** — bucket them by competency (`DDD · SDD · UDD · TDD · ADD`).
|
|
20
20
|
3. **Propose** — for each, draft the exact foundation edit (see routing) and show the human.
|
|
21
21
|
4. **Confirm** — the human accepts or declines each delta. No write happens without this.
|
|
22
22
|
5. **Write** — append the accepted edits, flip each delta's status, and bump the version.
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Consolidation routing (every competency has a home)
|
|
25
25
|
|
|
26
|
-
| competency |
|
|
26
|
+
| competency | consolidates into | how |
|
|
27
27
|
|------------|-----------|-----|
|
|
28
28
|
| `DDD` | `PROJECT.md` §Domain (DDD) | refine/append a model bullet |
|
|
29
29
|
| `SDD` | `PROJECT.md` §Spec / Living Document (SDD) | refine/append a settled-vs-open line |
|
|
@@ -31,7 +31,7 @@ lives here so the engine stays judgment-free.
|
|
|
31
31
|
| `TDD` | `CONVENTIONS.md` | append a testing convention (no PROJECT.md section — it is the engine) |
|
|
32
32
|
| `ADD` | `CONVENTIONS.md` | append a build/harness convention (likewise the engine) |
|
|
33
33
|
|
|
34
|
-
**Every**
|
|
34
|
+
**Every** consolidation — whatever the competency — ALSO appends one row to `PROJECT.md` **§Key Decisions**
|
|
35
35
|
(date · decision · why · outcome): the universal, auditable trail of what the foundation learned.
|
|
36
36
|
|
|
37
37
|
## Status transitions & version
|
|
@@ -39,16 +39,18 @@ lives here so the engine stays judgment-free.
|
|
|
39
39
|
- on **confirm**: the delta moves `open` → `folded` (and its edit is appended to the routed target).
|
|
40
40
|
- on **decline**: the delta moves `open` → `rejected` and is **left in place** — never deleted —
|
|
41
41
|
so "we considered this and chose not to act" stays auditable.
|
|
42
|
-
- a
|
|
43
|
-
- each
|
|
42
|
+
- a consolidation is **append-only**: it adds bullets/rows; it never silently rewrites existing foundation text.
|
|
43
|
+
- each consolidation session **bumps** the `foundation-version:` marker in `PROJECT.md` by one (monotonic int).
|
|
44
44
|
|
|
45
45
|
## Reject codes (the AI is first check, the human the backstop)
|
|
46
46
|
|
|
47
|
+
<reject_codes>
|
|
47
48
|
- `no_open_deltas` — nothing is `open` anywhere. The ritual is a no-op; do **not** bump the version.
|
|
48
49
|
- `unconfirmed_fold` — a write was attempted without recorded human confirmation. The AI proposes;
|
|
49
|
-
it never self-
|
|
50
|
-
- `unroutable_delta` — a delta's competency is not one of the five, so it has no
|
|
51
|
-
delta (it is malformed per `deltas.md`) before
|
|
50
|
+
it never self-approves one. Stop and get confirmation.
|
|
51
|
+
- `unroutable_delta` — a delta's competency is not one of the five, so it has no consolidation target. Fix the
|
|
52
|
+
delta (it is malformed per `deltas.md`) before consolidating.
|
|
53
|
+
</reject_codes>
|
|
52
54
|
|
|
53
55
|
## Worked example (from this repo's own history)
|
|
54
56
|
|
|
@@ -60,7 +62,7 @@ which have no PROJECT.md section:
|
|
|
60
62
|
- [TDD · open] structural tests guard canonical artifacts but not their dogfood twins (evidence: scope-loop note + this build)
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
At the next
|
|
65
|
+
At the next consolidation the human confirms both. Routing sends each to `CONVENTIONS.md` (a "sync the dogfood
|
|
64
66
|
tree + assert md5 parity" convention), appends a §Key Decisions row for each, flips them to `folded`,
|
|
65
67
|
and bumps `foundation-version` 1 → 2. The two competencies the foundation never tracked before now
|
|
66
68
|
have a home — which is exactly why v5 routes TDD/ADD to `CONVENTIONS.md`.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Stage graduation — propose the move to production as a roadmap, never a flip
|
|
2
|
+
|
|
3
|
+
A project does not become "production" because someone typed a new label. It graduates when
|
|
4
|
+
the MVP is genuinely covered AND a human-confirmed roadmap of production work exists. This guide
|
|
5
|
+
is the **4th scope level** — after setup (`phases/0-setup.md`), intake (`intake.md` / `scope.md`),
|
|
6
|
+
and the milestone loop (`loop.md`). It turns the bare `add.py stage` flip into the **final step** of
|
|
7
|
+
an analytics-driven, interview-led orchestration.
|
|
8
|
+
|
|
9
|
+
You (the AI) **gather and propose**; the **human confirms and judges**; the engine only counts
|
|
10
|
+
tallies and enforces the floor. The engine never decides that the project is "ready" — that is
|
|
11
|
+
judgment, and it belongs to the interview.
|
|
12
|
+
|
|
13
|
+
## The cue (what starts this)
|
|
14
|
+
|
|
15
|
+
When every milestone is `done` AND the human's stage-goal-criteria in `PROJECT.md` are all `[x]`,
|
|
16
|
+
`add.py status` prints:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
→ MVP covered → propose graduation
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
That line is the trigger. Before both tallies complete, status is silent and nothing here applies
|
|
23
|
+
(a project with no stage-goal-criteria block behaves exactly as today — grandfathered, zero change).
|
|
24
|
+
|
|
25
|
+
## The flow
|
|
26
|
+
|
|
27
|
+
1. **Gather the analytics** — run `add.py graduation-report` (add `--json` to branch on it). It
|
|
28
|
+
clusters the whole MVP loop's evidence into five labeled record-sets: open deltas by competency ·
|
|
29
|
+
open RISK-ACCEPTED waivers by expiry · RETRO records · verify residue · observe-loop coverage gaps.
|
|
30
|
+
It **gathers, never judges** — there is no readiness verdict to read; the records are what you
|
|
31
|
+
reason from.
|
|
32
|
+
2. **Co-specify interview** — synthesize *"what production means HERE"* WITH the human, using the
|
|
33
|
+
gathered records as the agenda (the residue to harden, the coverage gaps to monitor, the open
|
|
34
|
+
deltas to consolidate). This synthesis is the judgment the engine refuses to make. Interview to real confidence —
|
|
35
|
+
do not guess what "production-ready" means for this project.
|
|
36
|
+
3. **Draft the roadmap** — for each production outcome the interview surfaces, draft a production
|
|
37
|
+
milestone with the EXISTING command and goal-gate criteria:
|
|
38
|
+
`add.py new-milestone <slug> --stage production --goal "…"`, then write its exit criteria. The
|
|
39
|
+
roadmap is **≥1** milestone — the hardening work itself (SLOs, rollback tests, incident runbooks)
|
|
40
|
+
is what these milestones *contain*; this guide proposes them, it does not do them.
|
|
41
|
+
4. **Human confirms** — present the roadmap via `report-template.md`, opening with the ARC
|
|
42
|
+
(goal · done · plan): the stage-graduation goal, the MVP coverage that earns the move, and the
|
|
43
|
+
plan the production milestones lay out. The human accepts, edits, or declines each drafted
|
|
44
|
+
milestone. No milestone is created without this; nothing advances on a draft the human has not confirmed.
|
|
45
|
+
5. **Flip — the final step** — only now run `add.py stage production`. Because ≥1 production milestone
|
|
46
|
+
now exists, the guard passes and the transition is recorded. This is the orchestration's last act.
|
|
47
|
+
|
|
48
|
+
## The floor (what the engine enforces)
|
|
49
|
+
|
|
50
|
+
`add.py stage production` is **guarded**: it refuses with `stage_no_roadmap` (non-zero exit, state
|
|
51
|
+
byte-unchanged) when zero milestones have `stage: production`. The check is a **tally** — "does a
|
|
52
|
+
production-roadmap record exist?" — never a readiness judgment (gather-not-judge at stage level;
|
|
53
|
+
it mirrors the milestone goal-gate's `milestone_goal_unmet`). `--force` overrides it, preserving human
|
|
54
|
+
authority for grandfathered/edge cases; use it deliberately, not as the normal path.
|
|
55
|
+
|
|
56
|
+
Scope: the guard is on the `→production` **transition** only. Flips to prototype/poc/mvp are the
|
|
57
|
+
existing bare flip, unchanged. `add.py init --stage production` is an explicit at-creation declaration
|
|
58
|
+
(the same authority as `--force`), not a transition — it is out of scope of the guard by design.
|
|
59
|
+
|
|
60
|
+
## Invariants (never break these)
|
|
61
|
+
|
|
62
|
+
- **The flip is the final step**, never called outside this confirmed-roadmap path. A bare flip with
|
|
63
|
+
no roadmap is the symptom this scope level removes.
|
|
64
|
+
- **The engine never auto-flips.** Every step here is human-confirmed; the engine gathers, counts, and
|
|
65
|
+
enforces the floor — it does not advance the stage on its own.
|
|
66
|
+
- **The flow is continuous, not cue-reentrant.** The moment you draft the first production milestone,
|
|
67
|
+
`status` stops printing the cue (the "every milestone done" tally breaks). That is expected — do NOT
|
|
68
|
+
re-await the cue after drafting; carry the flow straight through to confirm and flip.
|
|
69
|
+
|
|
70
|
+
## Depth and reuse
|
|
71
|
+
|
|
72
|
+
The same orchestration serves prototype→poc and poc→mvp; **mvp→production** is the rigorous proof
|
|
73
|
+
case (every step at full depth + the observe loop). At lower stages, run it light — the shape is the
|
|
74
|
+
same, the depth is less.
|
package/skill/add/intake.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# Intake — size a request into versioned scope
|
|
2
2
|
|
|
3
3
|
Before a task exists, ADD turns a raw request into correctly-sized, versioned scope.
|
|
4
|
-
This is the **intake
|
|
4
|
+
This is the **intake level**: the per-task flow is phases 0–7; intake is the step
|
|
5
5
|
*before* a task — request → milestone or task. You (the AI) **propose**; the human
|
|
6
6
|
**confirms**. Never create scope without a confirmed proposal.
|
|
7
7
|
|
|
8
|
+
## Interview before you size
|
|
9
|
+
|
|
10
|
+
When the request arrives as a question, or its intent is not yet sharp enough to
|
|
11
|
+
place in one bucket: explore it WITH the user before classifying. Reflect the
|
|
12
|
+
intent you heard, name what seems in and out of scope, and offer 2–3 sized options
|
|
13
|
+
with your own recommendation. Only then emit `{ bucket, rationale, command }`.
|
|
14
|
+
`ask_human` stays the floor: when interviewing cannot sharpen the request,
|
|
15
|
+
reject — never guess a bucket.
|
|
16
|
+
|
|
8
17
|
## The four buckets
|
|
9
18
|
|
|
10
19
|
Classify every request into exactly ONE bucket:
|
|
@@ -24,17 +33,23 @@ First ask "does this change already-frozen scope?" → if yes, it is a `change-r
|
|
|
24
33
|
|
|
25
34
|
## What you emit (the proposal)
|
|
26
35
|
|
|
36
|
+
Present the proposal to the human via `report-template.md` — open with the ARC (goal · done ·
|
|
37
|
+
plan): the goal this request serves, what is already covered, and the plan the chosen bucket sets up.
|
|
38
|
+
|
|
27
39
|
For every request, emit ONE of:
|
|
28
40
|
|
|
29
41
|
- **a classification** — `{ bucket, rationale, command }` — where `rationale` names WHY
|
|
30
42
|
(the theme, the slice, the fit, or the frozen scope touched) and `command` is the exact
|
|
31
43
|
`add.py …` from the table. The human confirms or overrides before you run it.
|
|
32
|
-
- **a rejection** — `{ reject, rationale }` — and you create nothing:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
44
|
+
- **a rejection** — `{ reject, rationale }` — and you create nothing, emitting one of the closed set:
|
|
45
|
+
|
|
46
|
+
<reject_codes>
|
|
47
|
+
- `ask_human` — too ambiguous/underspecified to size. Ask the human; never guess a bucket.
|
|
48
|
+
- `frozen_scope` — it changes frozen scope; route it as a `change-request` back to
|
|
49
|
+
SPECIFY/CONTRACT of the affected task — never spawn a parallel milestone that forks the truth.
|
|
50
|
+
- `split_required` — it spans more than one bucket; propose the SMALLEST set of correctly-sized
|
|
51
|
+
items, each with its own rationale; never force it into one milestone.
|
|
52
|
+
</reject_codes>
|
|
38
53
|
|
|
39
54
|
When confirmed, record the `rationale` in the artifact you create or affect — the new
|
|
40
55
|
MILESTONE.md goal/body, the new TASK.md, or a note in the affected TASK.md — never in state.json.
|