Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ conventions and the change Index, and [`planning/_templates/`](planning/_templat
for copy-and-fill starters.

Per feature: brainstorming → spec in
`planning/changes/active/YYYY-MM-DD.NN-<slug>/design.md` → writing-plans → plan
`planning/changes/YYYY-MM-DD.NN-<slug>/design.md` → writing-plans → plan
in the same bundle's `plan.md` → executing-plans / subagent-driven-development →
requesting-code-review → finishing-a-development-branch. `<slug>` is a
kebab-case description, not a story ID; `.NN` is a zero-padded intra-day counter
that breaks same-date ties. On merge the bundle moves to
`planning/changes/archive/` with `status: shipped`, `pr:`, and `outcome:`
filled, **and the change promotes its conclusions into the affected
`architecture/<capability>.md`** — that hand-edit is what keeps `architecture/`
true.
that breaks same-date ties. The implementing PR sets `status: shipped` and fills
`pr` / `outcome` in the branch, alongside the code and the
`architecture/<capability>.md` promotion — that hand-edit is the only ship-time
step; there is no folder move. The change listing is generated — run `just index`
(no committed Index).

**Three lanes.** Scale the artifact to the change. **Full** — a `design.md` +
`plan.md` bundle — for real design judgment, a new file/module, a public-API
Expand All @@ -39,7 +39,7 @@ subagent before landing (`superpowers:requesting-code-review`).
Planning artifacts live under `planning/` (not under `docs/`, so they're
excluded from the mkdocs site automatically). When superpowers skills default to
`docs/superpowers/specs/` or `docs/superpowers/plans/`, use the change bundle
under `planning/changes/active/` here instead.
under `planning/changes/` here instead.

## Commit messages

Expand Down
4 changes: 4 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@ publish:
# Strict local docs build (no deploy). Mirrors CI's link/strict checks.
docs-build:
uvx --with-requirements docs/requirements.txt mkdocs build --strict

# Print the planning change index (grouped by status) to stdout.
index:
uv run python planning/index.py
83 changes: 20 additions & 63 deletions planning/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,35 @@ at the repo root; this directory records *how it got there*.
## Conventions

> This section is the portable convention — identical across the
> modern-python repos. The Index below is repo-specific. To adopt elsewhere,
> modern-python repos. The generated change listing (`just index`) and the `## Other` pointers below are repo-local. To adopt elsewhere,
> copy this section plus [`_templates/`](_templates/) and point that repo's
> `CLAUDE.md` Workflow + truth home at it.

### Two axes, never mixed

- **`architecture/` (repo root) — the present.** One file per capability,
living prose, updated whenever a change ships. The truth home.
living prose, updated in the same PR that ships the change. The truth home.
- **`planning/changes/` — the past-and-pending.** One folder per change,
frozen once shipped.
kept in place after ship.

Shipping a change **promotes** its conclusions into the affected
`architecture/<capability>.md` by hand, then archives the bundle. That
hand-edit is what keeps `architecture/` true; the archived bundle carries the
*why*.
A change **promotes** its conclusions into the affected
`architecture/<capability>.md` by hand **in the implementing PR, alongside the
code** — the edit rides in the same diff and is reviewed with it, never applied
as a separate post-merge step. That hand-edit is what keeps `architecture/`
true; the bundle stays in `changes/` as the *why*.

### Change bundles

A change is a folder `changes/active/YYYY-MM-DD.NN-<slug>/`:
A change is a folder `changes/YYYY-MM-DD.NN-<slug>/`:

- `YYYY-MM-DD` — proposal date; `.NN` — zero-padded intra-day counter
(`.01`, `.02`, …) that breaks same-date ties so the timeline sorts stably.
- `<slug>` — kebab-case description, not a story ID.

On merge the folder moves to `changes/archive/` with `status: shipped`, `pr:`,
and `outcome:` filled, and its line moves from **Active** to **Archived** in
the Index below.
`summary` is written when the change is created (it is the change's
one-liner). The implementing PR then sets `status: shipped` and fills `pr`
and `outcome` **in the branch**, alongside the code and the `architecture/`
promotion — no post-merge bookkeeping, no folder move.

### Three lanes

Expand Down Expand Up @@ -62,58 +64,13 @@ Templates live in [`_templates/`](_templates/).
### Frontmatter

`design.md` / `change.md`: `status` (draft|approved|shipped|superseded),
`date`, `slug`, `supersedes`, `superseded_by`, `pr`, `outcome`.
`plan.md`: `status`, `date`, `slug`, `spec`, `pr`. Files in `architecture/`
carry **no** frontmatter — living prose, dated by git.
`date`, `slug`, `summary` (single line), `supersedes`, `superseded_by`, `pr`,
`outcome`. `plan.md`: `status`, `date`, `slug`, `spec`, `pr`. Files in
`architecture/` carry **no** frontmatter — living prose, dated by git.

## Index

### Active

_None._

### Archived (shipped)

- **[httpware-max-error-body-bytes](changes/archive/2026-06-16.03-httpware-max-error-body-bytes/design.md)**
(#26, 2026-06-16) — Cap provider error-body reads at 1 MiB; translate
`ResponseTooLargeError` to `ProviderAPIError`.
- **[branch-prefix-patch-on-non-merge](changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md)**
(#24, 2026-06-16) — Opt-in `patch_on_non_merge_commit` flag: a non-merge HEAD
commit bumps patch instead of nothing.
- **[httpware-0.12-get-with-response](changes/archive/2026-06-16.01-httpware-0.12-get-with-response/change.md)**
(#24, 2026-06-16) — Bump httpware to 0.12.0; adopt `get_with_response` at the
pagination call sites.
- **[portable-planning-convention](changes/archive/2026-06-13.01-portable-planning-convention/design.md)**
(#21, 2026-06-13) — Adopt the portable two-axis convention: `architecture/`
truth home + `changes/` bundles, migrate the 15 spec/plan pairs, fresh Index.
- **[action-yml-dry-run](changes/archive/2026-06-09.03-action-yml-dry-run/design.md)**
(#16, 2026-06-09) — Composite action `dry-run` input wired to the CLI flag.
- **[dry-run-flag](changes/archive/2026-06-09.02-dry-run-flag/design.md)**
(#15, 2026-06-09) — `--dry-run` CLI flag: compute the next tag without
creating it.
- **[mkdocs-github-actions](changes/archive/2026-06-09.01-mkdocs-github-actions/design.md)**
(#14, 2026-06-09) — Docs hosting via MkDocs + GitHub Actions + Pages.
- **[action-yml-composite-wrapper](changes/archive/2026-06-08.03-action-yml-composite-wrapper/design.md)**
(#10, 2026-06-08) — `action.yml` composite GitHub Action wrapping the CLI.
- **[github-provider](changes/archive/2026-06-08.02-github-provider/design.md)**
(#4, 2026-06-08) — GitHub provider alongside GitLab.
- **[httpware-decoder-adoption](changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md)**
(#3, 2026-06-08) — Adopt the httpware response decoder in the providers.
- **[httpware-migration](changes/archive/2026-06-07.01-httpware-migration/design.md)**
(#2, 2026-06-07) — Migrate the HTTP client onto httpware.
- **[v0-1-0-release-prep](changes/archive/2026-05-31.08-v0-1-0-release-prep/design.md)**
(2026-05-31) — Pre-1.0 release preparation.
- **[strategy-no-bump-cleanup](changes/archive/2026-05-31.07-strategy-no-bump-cleanup/design.md)**
(2026-05-31) — Clean up the strategies' no-bump return path.
- **[cli-overlay-simplification](changes/archive/2026-05-31.06-cli-overlay-simplification/design.md)**
(2026-05-31) — Replace the CLI-overlay machinery with `model_copy`.
- **[ioc-idiomatic-modern-di-typer](changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md)**
(2026-05-31) — Idiomatic modern-di + Typer IoC wiring.
- **[usecase-callable](changes/archive/2026-05-31.04-usecase-callable/design.md)**
(2026-05-31) — Make the use-case a callable.
- **[settings-aliaschoices](changes/archive/2026-05-31.03-settings-aliaschoices/design.md)**
(2026-05-31) — pydantic-settings `AliasChoices` for env/CLI names.
- **[drop-doctor](changes/archive/2026-05-31.02-drop-doctor/design.md)**
(2026-05-31) — Remove the `doctor` command.
- **[bmad-to-superpowers-migration-and-httpx2-wrapper](changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md)**
(2026-05-31) — Retire BMad for Superpowers; add the HTTP-client wrapper.
The change listing is **generated**, not maintained — run `just index` to
print it (grouped by `status`: In progress / Shipped / Superseded). The
frontmatter in each bundle is the single source of truth; there is no
committed copy to drift.
1 change: 1 addition & 0 deletions planning/_templates/change.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: draft
date: YYYY-MM-DD
slug: my-change
summary: One line — shown in the generated index. Fill at ship time.
supersedes: null
superseded_by: null
pr: null
Expand Down
1 change: 1 addition & 0 deletions planning/_templates/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: draft
date: YYYY-MM-DD
slug: my-change
summary: One line — shown in the generated index. Fill at ship time.
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: bmad-to-superpowers-migration-and-httpx2-wrapper
summary: "Retire BMad for Superpowers; add the HTTP-client wrapper."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: drop-doctor
summary: "Remove the `doctor` command."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: settings-aliaschoices
summary: "pydantic-settings `AliasChoices` for env/CLI names."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: usecase-callable
summary: "Make the use-case a callable."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: ioc-idiomatic-modern-di-typer
summary: "Idiomatic modern-di + Typer IoC wiring."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: cli-overlay-simplification
summary: "Replace the CLI-overlay machinery with `model_copy`."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: strategy-no-bump-cleanup
summary: "Clean up the strategies' no-bump return path."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-05-31
slug: v0-1-0-release-prep
summary: "Pre-1.0 release preparation."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-07
slug: httpware-migration
summary: "Migrate the HTTP client onto httpware."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-08
slug: httpware-decoder-adoption
summary: "Adopt the httpware response decoder in the providers."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-08
slug: github-provider
summary: "GitHub provider alongside GitLab."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-08
slug: action-yml-composite-wrapper
summary: "`action.yml` composite GitHub Action wrapping the CLI."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-09
slug: mkdocs-github-actions
summary: "Docs hosting via MkDocs + GitHub Actions + Pages."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-09
slug: dry-run-flag
summary: "`--dry-run` CLI flag: compute the next tag without creating it."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-09
slug: action-yml-dry-run
summary: "Composite action `dry-run` input wired to the CLI flag."
supersedes: null
superseded_by: null
pr: null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
status: shipped
date: 2026-06-13
slug: portable-planning-convention
summary: "Adopt the portable two-axis convention: `architecture/` truth home + `changes/` bundles, migrate the 15 spec/plan pairs, fresh Index."
supersedes: null
superseded_by: null
pr: 21
Expand All @@ -17,7 +18,7 @@ Port the planning convention from `lite-bootstrap` (its #120, itself from
`architecture/` truth home at the repo root (one living-prose file per
capability, the promotion target on every ship) and `planning/changes/`
bundles (one frozen folder per change). The existing 15 `planning/specs/` +
`planning/plans/` pairs migrate into dated `changes/archive/` bundles; the
`planning/plans/` pairs migrate into dated `changes/` bundles; the
portable `## Conventions` block, `_templates/`, and `deferred.md` are copied
byte-identical. **Docs and file-moves only — no runtime code, tests, or public
API touched.**
Expand Down Expand Up @@ -88,7 +89,7 @@ code:
### 3. Migrate the 15 spec/plan pairs into archived bundles

Each `planning/specs/<date>-<slug>-design.md` + `planning/plans/<date>-<slug>.md`
pair becomes `planning/changes/archive/<date>.NN-<slug>/{design.md,plan.md}`.
pair becomes `planning/changes/<date>.NN-<slug>/{design.md,plan.md}`.
The `.NN` intra-day counter is taken from git first-commit order so the timeline
sorts stably:

Expand Down
Loading