@@ -4,12 +4,42 @@ Specs, plans, and change history for `httpware`. The living truth about
44* what the system does now* lives in [ ` architecture/ ` ] ( ../architecture/ ) at
55the repo root; this directory records * how it got there* .
66
7+ ## Quick path (start here)
8+
9+ > The fast lane for making a change. The full reference is in
10+ > [ Conventions] ( #conventions ) below — read it only when this isn't enough.
11+
12+ ** 1. Choose a lane — first matching rule wins:**
13+
14+ 1 . Any of: needs design judgment · new file/module · public-API change ·
15+ cross-cutting or multi-file · non-trivial test design → ** Full**
16+ (` design.md ` + ` plan.md ` )
17+ 2 . Purely mechanical: typo · dep bump · linter/formatter/CI tweak ·
18+ mechanical rename · single-line config → ** Tiny** (no bundle, conventional
19+ commit)
20+ 3 . Small-but-real, none of the above: ≲30 LOC net · ≤2 files · no new file ·
21+ no public-API change · one straightforward test → ** Lightweight**
22+ (` change.md ` )
23+
24+ Ambiguous between two? Take the heavier. A ` change.md ` that outgrows its lane
25+ splits into ` design.md ` + ` plan.md ` .
26+
27+ ** 2. Create the bundle** (Full / Lightweight only):
28+ ` planning/changes/YYYY-MM-DD.NN-<slug>/ ` , where ` .NN ` is a zero-padded
29+ intra-day counter. Copy the matching template from
30+ [ ` _templates/ ` ] ( _templates/ ) .
31+
32+ ** 3. Ship in the implementing PR:** hand-edit the affected
33+ ` architecture/<capability>.md ` , finalize the bundle's ` summary: ` to the
34+ realized result, and run ` just check-planning ` before pushing.
35+
736## Conventions
837
9- > This section is the portable convention — identical across the
10- > modern-python repos. The generated change listing (` just index ` ) and the ` ## Other ` pointers below are repo-local. To adopt elsewhere,
11- > copy this section plus [ ` _templates/ ` ] ( _templates/ ) and point that repo's
12- > ` CLAUDE.md ` Workflow + truth home at it.
38+ > This is the portable convention, sourced from the canonical repo
39+ > [ ` lesnik512/planning-convention ` ] ( https://github.com/lesnik512/planning-convention )
40+ > (applied version in [ ` .convention-version ` ] ( .convention-version ) ). To update
41+ > it, run that repo's ` APPLY.md ` flow. The generated change index (` just index ` )
42+ > and the ` ## Other ` pointers below are repo-local.
1343
1444### Two axes, never mixed
1545
@@ -32,10 +62,11 @@ A change is a folder `changes/YYYY-MM-DD.NN-<slug>/`:
3262 (` .01 ` , ` .02 ` , …) that breaks same-date ties so the timeline sorts stably.
3363- ` <slug> ` — kebab-case description, not a story ID.
3464
35- ` summary ` is written when the change is created (it is the change's
36- one-liner). The implementing PR then sets ` status: shipped ` and fills ` pr `
37- and ` outcome ` ** in the branch** , alongside the code and the ` architecture/ `
38- promotion — no post-merge bookkeeping, no folder move.
65+ ` summary ` is written when the change is created (the intent one-liner) and
66+ ** finalized at ship** to state the realized result — set in the implementing
67+ PR, alongside the code and the ` architecture/ ` promotion. No post-merge
68+ bookkeeping, no folder move. ` date ` and ` slug ` are never written — they are
69+ read from the bundle's directory name.
3970
4071### Three lanes
4172
@@ -53,32 +84,38 @@ into `design.md` + `plan.md`.
5384- ** ` design.md ` ** — the spec: the * thinking* (why, design, trade-offs, scope).
5485- ** ` plan.md ` ** — the plan: the * sequencing* (the executor's task checklist).
5586- ** ` change.md ` ** — both, condensed, for the lightweight lane.
56- - ** ` decisions/<YYYY-MM-DD>-<slug>.md ` ** — one file per design decision taken
57- (especially options * rejected* ), each with a revisit trigger, so reviews don't
58- re-litigate them; listed by ` just index ` .
5987- ** ` releases/<semver>.md ` ** — per-release user-facing notes.
6088- ** ` audits/<date>-<slug>.md ` ** — findings from a code/docs/bug-hunt sweep;
6189 spawns fix changes.
6290- ** ` retros/<date>-<slug>.md ` ** — what we learned after a body of work.
6391- ** ` deferred.md ` ** — real-but-unscheduled items, each with a revisit trigger.
92+ - ** ` decisions/<YYYY-MM-DD>-<slug>.md ` ** — one file per design decision taken
93+ (especially options * rejected* ), each with a revisit trigger; listed by
94+ ` just index ` .
6495
6596Templates live in [ ` _templates/ ` ] ( _templates/ ) .
6697
6798### Frontmatter
6899
69- ` design.md ` / ` change.md ` : ` status ` (draft|approved|shipped|superseded),
70- ` date ` , ` slug ` , ` summary ` (single line), ` supersedes ` , ` superseded_by ` , ` pr ` ,
71- ` outcome ` . ` plan.md ` : ` status ` , ` date ` , ` slug ` , ` spec ` , ` pr ` .
72- ` decisions/*.md ` : ` status ` (accepted|superseded), ` date ` , ` slug ` , ` summary ` ,
73- ` supersedes ` , ` superseded_by ` , ` pr ` .
74- Files in ` architecture/ ` carry ** no** frontmatter — living prose, dated by git.
100+ ` date ` and ` slug ` are ** derived from the directory / file name** — never
101+ repeated in frontmatter. So:
102+
103+ - ` design.md ` / ` change.md ` : ` summary ` (single line) only.
104+ - ` plan.md ` : ** no frontmatter** — its identity is the bundle directory.
105+ - ` decisions/*.md ` : ` status ` (accepted|superseded), ` summary ` , and optional
106+ ` supersedes ` / ` superseded_by ` .
107+ - Files in ` architecture/ ` carry ** no** frontmatter — living prose, dated by git.
108+
109+ ** ` summary ` ** is one line: written at creation as the intent, then ** finalized
110+ at ship** to state the realized result — what shipped and its effect. It is the
111+ only field the index renders.
75112
76113## Index
77114
78115The listing is ** generated** , not maintained — run ` just index ` to print it:
79- changes grouped by ` status ` (In progress / Shipped / Superseded), then
80- decisions newest-first. The frontmatter in each bundle / decision file is the
81- single source of truth; there is no committed copy to drift.
116+ changes as a flat newest-first list, then decisions newest-first. Each bundle's
117+ ` summary ` frontmatter (and the directory name, which supplies ` date ` / ` slug ` ) is
118+ the single source of truth; there is no committed copy to drift.
82119
83120## Other
84121
0 commit comments