ADR 0080: the development cycle is checked, not trusted
The flow the process overview draws — idea/symptom -> decision -> to-be design -> code -> as-is — was enforced by nothing. cycle.py now refuses a to-be design naming no decision, an in-progress/implemented design naming no owning code, a located/fixed issue with no owner, a fixed/resolved issue with no fix, and a graduated research overview that does not say what it became. AGENTS.md carries the cycle and a where-to-look table so a fresh session (or a cleared context) finds the chain in frontmatter instead of assuming it. Grounding the check surfaced two real gaps, fixed here: the work-ahead design named no owning code, and research 003 listed one became target twice. https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx
This commit is contained in:
@@ -12,6 +12,33 @@ through them. Thin skills in `.claude/skills/` wrap these playbooks for invocati
|
||||
`hq-handoff`, `hq-sync-constitution`, `hq-status`); each defers to its playbook as
|
||||
authoritative and adds only the mechanical scaffolding.
|
||||
|
||||
## The development cycle
|
||||
|
||||
Work enters as an **idea** (playbook [01 — research](00-META/process/01-research.md)) or a
|
||||
**symptom** (playbook [03 — issues](00-META/process/03-issues.md)), becomes a **decision**
|
||||
([02-DECISIONS](02-DECISIONS/), via playbook [02](00-META/process/02-graduation.md)), lands in a
|
||||
**to-be design** naming that decision, is handed to a code repository (playbook
|
||||
[04](00-META/process/04-build-handoff.md), on a feature branch per playbook
|
||||
[07](00-META/process/07-feature-branches.md)) — and on shipping the as-is is updated and the
|
||||
design flips to `implemented`. **No design without a decision; no development without a design
|
||||
that names its owner.** Enforced by [`00-META/checks/cycle.py`](00-META/checks/cycle.py)
|
||||
alongside `records.py` and `index.py` — run all three before any merge here.
|
||||
|
||||
## Where to look (before assuming anything)
|
||||
|
||||
| Question | Read |
|
||||
|---|---|
|
||||
| What does this word mean? | [`00-META/glossary.md`](00-META/glossary.md) |
|
||||
| How do I do X in this repo? | [`00-META/process/`](00-META/process/) — the playbook index is in `00-overview.md` |
|
||||
| What was decided, and why? | [`02-DECISIONS/README.md`](02-DECISIONS/README.md) (reading order), then the record |
|
||||
| What is being built / already runs? | [`03-DESIGN/01-to-be/`](03-DESIGN/01-to-be/) / [`03-DESIGN/00-as-is/`](03-DESIGN/00-as-is/) — each doc's frontmatter says its status, decisions and owning code |
|
||||
| What is broken or was? | [`04-ISSUES/`](04-ISSUES/) — frontmatter carries status/owner/fix |
|
||||
| Which repo owns what code? | [`00-META/repos.md`](00-META/repos.md) |
|
||||
| Cross-cutting status view? | the `hq-status` skill (generated, never stored) |
|
||||
|
||||
Statuses live **only** in frontmatter; follow the pointers there (`decisions:`, `code:`,
|
||||
`became:`, `fixed-by:`) instead of reconstructing history from memory.
|
||||
|
||||
## Words
|
||||
|
||||
One name per thing. [`00-META/glossary.md`](00-META/glossary.md) is the authority on
|
||||
|
||||
Reference in New Issue
Block a user