Research efforts move from status.md to 00-overview.md with active / graduated / abandoned, matching papa-hq so the two repositories read the same way. Playbooks, skills, README and the ledger follow. Reverses yesterday's withdrawal of the symlink note in GENESIS. The note was right and the withdrawal was wrong: the intent is that the mesh creates no symlinks at all, so a founding document listing "symlinks, not copies" as a design principle does point the opposite way from where this is going, and that is a contradiction rather than a stale detail. ADR 0018 records the position, proposed. ADR 0011 stays as it is — it is the historical decision and the incident behind it is why anyone believes either record — and is superseded in intent, not edited. Its one editorial line, which called the wider reading false, is corrected to state what is actually true: centralising who may link narrowed the incident class without closing it, because a link the installer makes resolves exactly like one made by hand. The argument that kept linking was staleness. ADR 0004 removed it: every managed file is already derived and reconciled, so a copy is the natural form and a pointer into source is the shape the mesh's own model forbids everywhere else. What is not settled, and is marked open, is how staleness gets detected — which is the decision that makes or breaks it.
61 lines
2.7 KiB
Markdown
61 lines
2.7 KiB
Markdown
# Playbook 02 — Graduation and design change
|
|
|
|
**Trigger.** A research effort concludes, or an existing design must change.
|
|
|
|
**Who runs it.** Anyone, with the decision recorded before the design moves.
|
|
|
|
## Graduating research
|
|
|
|
1. **Check it against GENESIS.** An effort graduates only if its conclusion is traceable to
|
|
[`mission.md`](../mission.md), [`context.md`](../context.md) and
|
|
[`effect.md`](../effect.md). If it conflicts, either the effort is wrong or GENESIS is —
|
|
say which, in writing, before proceeding.
|
|
2. **Record the decision.** Write a record in [`adr/`](../../adr/) taking the next free
|
|
number. Format and rules are in [`adr/README.md`](../../adr/README.md). State evidence,
|
|
not assertion, and record the options that were rejected — that is the half worth keeping.
|
|
3. **Write the design.** Create the document under `02-DESIGN/01-to-be/` with frontmatter:
|
|
|
|
```yaml
|
|
---
|
|
layer: to-be
|
|
status: designed
|
|
code: [] # owning code repo(s); set at build handoff, empty before
|
|
updated: YYYY-MM-DD
|
|
decisions: [adr/NNNN-....md]
|
|
---
|
|
```
|
|
|
|
4. **Close the effort.** Set the effort's `00-overview.md` frontmatter to `status: graduated` and
|
|
`became:` pointing at the design document and the decision record.
|
|
5. **Add a ledger line.** Append the decision to [`DECISIONS.md`](../../DECISIONS.md) under
|
|
today's heading, pointing at the record.
|
|
|
|
## Amending an existing design
|
|
|
|
A design changes only through a decision.
|
|
|
|
1. Write the decision record. If it reverses an earlier one, the earlier record's `status:`
|
|
becomes `superseded-by: adr/NNNN-....md` — **its text is never edited**.
|
|
2. Edit the to-be design document and set `updated:` to today.
|
|
3. If the amendment came from an issue, set that issue's `amended-design:` to the document
|
|
path.
|
|
4. Add the ledger line.
|
|
|
|
## When something ships
|
|
|
|
Implementation state is a third axis, independent of both design and decision.
|
|
|
|
1. Write or update the matching document under `02-DESIGN/00-as-is/` so it describes what now
|
|
runs — including anything that shipped differently from the intent. A design that shipped
|
|
bent is an as-is fact, not a design amendment.
|
|
2. Set the to-be document's `status: implemented` and its `code:` to the owning repositories
|
|
from [`repos.md`](../repos.md).
|
|
3. `status: implemented` must be defensible from the owning repository's main branch, not from
|
|
intent. If it cannot be checked, it is `in-progress`.
|
|
|
|
## Do not
|
|
|
|
- Do not move a to-be document into `00-as-is/`. Write the as-is document; both stand.
|
|
- Do not edit an as-is document to describe an intention. That is what the to-be layer is for.
|
|
- Do not change a decision record's meaning. Supersede it.
|