diff --git a/CLAUDE.md b/CLAUDE.md index 9ccde37..21f0973 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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-/design.md` → writing-plans → plan +`planning/changes/YYYY-MM-DD.NN-/design.md` → writing-plans → plan in the same bundle's `plan.md` → executing-plans / subagent-driven-development → requesting-code-review → finishing-a-development-branch. `` 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/.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/.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 @@ -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 diff --git a/Justfile b/Justfile index 1ca450d..fadd480 100644 --- a/Justfile +++ b/Justfile @@ -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 diff --git a/planning/README.md b/planning/README.md index 48d64f2..4397ce9 100644 --- a/planning/README.md +++ b/planning/README.md @@ -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/.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/.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-/`: +A change is a folder `changes/YYYY-MM-DD.NN-/`: - `YYYY-MM-DD` — proposal date; `.NN` — zero-padded intra-day counter (`.01`, `.02`, …) that breaks same-date ties so the timeline sorts stably. - `` — 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 @@ -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. diff --git a/planning/_templates/change.md b/planning/_templates/change.md index 0fe24c0..7ffec26 100644 --- a/planning/_templates/change.md +++ b/planning/_templates/change.md @@ -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 diff --git a/planning/_templates/design.md b/planning/_templates/design.md index fb0fe5b..b9e11c9 100644 --- a/planning/_templates/design.md +++ b/planning/_templates/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md b/planning/changes/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md rename to planning/changes/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md index ce3c1d3..6470446 100644 --- a/planning/changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md +++ b/planning/changes/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/plan.md b/planning/changes/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/plan.md rename to planning/changes/2026-05-31.01-bmad-to-superpowers-migration-and-httpx2-wrapper/plan.md diff --git a/planning/changes/archive/2026-05-31.02-drop-doctor/design.md b/planning/changes/2026-05-31.02-drop-doctor/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.02-drop-doctor/design.md rename to planning/changes/2026-05-31.02-drop-doctor/design.md index 50b20cd..a0dc088 100644 --- a/planning/changes/archive/2026-05-31.02-drop-doctor/design.md +++ b/planning/changes/2026-05-31.02-drop-doctor/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.02-drop-doctor/plan.md b/planning/changes/2026-05-31.02-drop-doctor/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.02-drop-doctor/plan.md rename to planning/changes/2026-05-31.02-drop-doctor/plan.md diff --git a/planning/changes/archive/2026-05-31.03-settings-aliaschoices/design.md b/planning/changes/2026-05-31.03-settings-aliaschoices/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.03-settings-aliaschoices/design.md rename to planning/changes/2026-05-31.03-settings-aliaschoices/design.md index c204333..cf37683 100644 --- a/planning/changes/archive/2026-05-31.03-settings-aliaschoices/design.md +++ b/planning/changes/2026-05-31.03-settings-aliaschoices/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.03-settings-aliaschoices/plan.md b/planning/changes/2026-05-31.03-settings-aliaschoices/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.03-settings-aliaschoices/plan.md rename to planning/changes/2026-05-31.03-settings-aliaschoices/plan.md diff --git a/planning/changes/archive/2026-05-31.04-usecase-callable/design.md b/planning/changes/2026-05-31.04-usecase-callable/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.04-usecase-callable/design.md rename to planning/changes/2026-05-31.04-usecase-callable/design.md index 25e9692..813b91e 100644 --- a/planning/changes/archive/2026-05-31.04-usecase-callable/design.md +++ b/planning/changes/2026-05-31.04-usecase-callable/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.04-usecase-callable/plan.md b/planning/changes/2026-05-31.04-usecase-callable/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.04-usecase-callable/plan.md rename to planning/changes/2026-05-31.04-usecase-callable/plan.md diff --git a/planning/changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md b/planning/changes/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md rename to planning/changes/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md index b6880cc..21e2330 100644 --- a/planning/changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md +++ b/planning/changes/2026-05-31.05-ioc-idiomatic-modern-di-typer/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/plan.md b/planning/changes/2026-05-31.05-ioc-idiomatic-modern-di-typer/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.05-ioc-idiomatic-modern-di-typer/plan.md rename to planning/changes/2026-05-31.05-ioc-idiomatic-modern-di-typer/plan.md diff --git a/planning/changes/archive/2026-05-31.06-cli-overlay-simplification/design.md b/planning/changes/2026-05-31.06-cli-overlay-simplification/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.06-cli-overlay-simplification/design.md rename to planning/changes/2026-05-31.06-cli-overlay-simplification/design.md index 2141ec8..7244edc 100644 --- a/planning/changes/archive/2026-05-31.06-cli-overlay-simplification/design.md +++ b/planning/changes/2026-05-31.06-cli-overlay-simplification/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.06-cli-overlay-simplification/plan.md b/planning/changes/2026-05-31.06-cli-overlay-simplification/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.06-cli-overlay-simplification/plan.md rename to planning/changes/2026-05-31.06-cli-overlay-simplification/plan.md diff --git a/planning/changes/archive/2026-05-31.07-strategy-no-bump-cleanup/design.md b/planning/changes/2026-05-31.07-strategy-no-bump-cleanup/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.07-strategy-no-bump-cleanup/design.md rename to planning/changes/2026-05-31.07-strategy-no-bump-cleanup/design.md index 0042a63..adbb1d1 100644 --- a/planning/changes/archive/2026-05-31.07-strategy-no-bump-cleanup/design.md +++ b/planning/changes/2026-05-31.07-strategy-no-bump-cleanup/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.07-strategy-no-bump-cleanup/plan.md b/planning/changes/2026-05-31.07-strategy-no-bump-cleanup/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.07-strategy-no-bump-cleanup/plan.md rename to planning/changes/2026-05-31.07-strategy-no-bump-cleanup/plan.md diff --git a/planning/changes/archive/2026-05-31.08-v0-1-0-release-prep/design.md b/planning/changes/2026-05-31.08-v0-1-0-release-prep/design.md similarity index 99% rename from planning/changes/archive/2026-05-31.08-v0-1-0-release-prep/design.md rename to planning/changes/2026-05-31.08-v0-1-0-release-prep/design.md index 9941846..e3bb43a 100644 --- a/planning/changes/archive/2026-05-31.08-v0-1-0-release-prep/design.md +++ b/planning/changes/2026-05-31.08-v0-1-0-release-prep/design.md @@ -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 diff --git a/planning/changes/archive/2026-05-31.08-v0-1-0-release-prep/plan.md b/planning/changes/2026-05-31.08-v0-1-0-release-prep/plan.md similarity index 100% rename from planning/changes/archive/2026-05-31.08-v0-1-0-release-prep/plan.md rename to planning/changes/2026-05-31.08-v0-1-0-release-prep/plan.md diff --git a/planning/changes/archive/2026-06-07.01-httpware-migration/design.md b/planning/changes/2026-06-07.01-httpware-migration/design.md similarity index 99% rename from planning/changes/archive/2026-06-07.01-httpware-migration/design.md rename to planning/changes/2026-06-07.01-httpware-migration/design.md index 71f4bf0..f8f028e 100644 --- a/planning/changes/archive/2026-06-07.01-httpware-migration/design.md +++ b/planning/changes/2026-06-07.01-httpware-migration/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-07.01-httpware-migration/plan.md b/planning/changes/2026-06-07.01-httpware-migration/plan.md similarity index 100% rename from planning/changes/archive/2026-06-07.01-httpware-migration/plan.md rename to planning/changes/2026-06-07.01-httpware-migration/plan.md diff --git a/planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md b/planning/changes/2026-06-08.01-httpware-decoder-adoption/design.md similarity index 99% rename from planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md rename to planning/changes/2026-06-08.01-httpware-decoder-adoption/design.md index 8321c3c..bd8199f 100644 --- a/planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md +++ b/planning/changes/2026-06-08.01-httpware-decoder-adoption/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/plan.md b/planning/changes/2026-06-08.01-httpware-decoder-adoption/plan.md similarity index 100% rename from planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/plan.md rename to planning/changes/2026-06-08.01-httpware-decoder-adoption/plan.md diff --git a/planning/changes/archive/2026-06-08.02-github-provider/design.md b/planning/changes/2026-06-08.02-github-provider/design.md similarity index 99% rename from planning/changes/archive/2026-06-08.02-github-provider/design.md rename to planning/changes/2026-06-08.02-github-provider/design.md index 2f453cf..3bed565 100644 --- a/planning/changes/archive/2026-06-08.02-github-provider/design.md +++ b/planning/changes/2026-06-08.02-github-provider/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-08.02-github-provider/plan.md b/planning/changes/2026-06-08.02-github-provider/plan.md similarity index 100% rename from planning/changes/archive/2026-06-08.02-github-provider/plan.md rename to planning/changes/2026-06-08.02-github-provider/plan.md diff --git a/planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/design.md b/planning/changes/2026-06-08.03-action-yml-composite-wrapper/design.md similarity index 99% rename from planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/design.md rename to planning/changes/2026-06-08.03-action-yml-composite-wrapper/design.md index 63637ec..a1a05b6 100644 --- a/planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/design.md +++ b/planning/changes/2026-06-08.03-action-yml-composite-wrapper/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/plan.md b/planning/changes/2026-06-08.03-action-yml-composite-wrapper/plan.md similarity index 100% rename from planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/plan.md rename to planning/changes/2026-06-08.03-action-yml-composite-wrapper/plan.md diff --git a/planning/changes/archive/2026-06-09.01-mkdocs-github-actions/design.md b/planning/changes/2026-06-09.01-mkdocs-github-actions/design.md similarity index 99% rename from planning/changes/archive/2026-06-09.01-mkdocs-github-actions/design.md rename to planning/changes/2026-06-09.01-mkdocs-github-actions/design.md index bbba1fa..868781d 100644 --- a/planning/changes/archive/2026-06-09.01-mkdocs-github-actions/design.md +++ b/planning/changes/2026-06-09.01-mkdocs-github-actions/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-09.01-mkdocs-github-actions/plan.md b/planning/changes/2026-06-09.01-mkdocs-github-actions/plan.md similarity index 100% rename from planning/changes/archive/2026-06-09.01-mkdocs-github-actions/plan.md rename to planning/changes/2026-06-09.01-mkdocs-github-actions/plan.md diff --git a/planning/changes/archive/2026-06-09.02-dry-run-flag/design.md b/planning/changes/2026-06-09.02-dry-run-flag/design.md similarity index 99% rename from planning/changes/archive/2026-06-09.02-dry-run-flag/design.md rename to planning/changes/2026-06-09.02-dry-run-flag/design.md index 6362668..0f87d54 100644 --- a/planning/changes/archive/2026-06-09.02-dry-run-flag/design.md +++ b/planning/changes/2026-06-09.02-dry-run-flag/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-09.02-dry-run-flag/plan.md b/planning/changes/2026-06-09.02-dry-run-flag/plan.md similarity index 100% rename from planning/changes/archive/2026-06-09.02-dry-run-flag/plan.md rename to planning/changes/2026-06-09.02-dry-run-flag/plan.md diff --git a/planning/changes/archive/2026-06-09.03-action-yml-dry-run/design.md b/planning/changes/2026-06-09.03-action-yml-dry-run/design.md similarity index 99% rename from planning/changes/archive/2026-06-09.03-action-yml-dry-run/design.md rename to planning/changes/2026-06-09.03-action-yml-dry-run/design.md index 8b125c1..6eb93eb 100644 --- a/planning/changes/archive/2026-06-09.03-action-yml-dry-run/design.md +++ b/planning/changes/2026-06-09.03-action-yml-dry-run/design.md @@ -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 diff --git a/planning/changes/archive/2026-06-09.03-action-yml-dry-run/plan.md b/planning/changes/2026-06-09.03-action-yml-dry-run/plan.md similarity index 100% rename from planning/changes/archive/2026-06-09.03-action-yml-dry-run/plan.md rename to planning/changes/2026-06-09.03-action-yml-dry-run/plan.md diff --git a/planning/changes/archive/2026-06-13.01-portable-planning-convention/design.md b/planning/changes/2026-06-13.01-portable-planning-convention/design.md similarity index 96% rename from planning/changes/archive/2026-06-13.01-portable-planning-convention/design.md rename to planning/changes/2026-06-13.01-portable-planning-convention/design.md index 6c7e3cd..0a2e60b 100644 --- a/planning/changes/archive/2026-06-13.01-portable-planning-convention/design.md +++ b/planning/changes/2026-06-13.01-portable-planning-convention/design.md @@ -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 @@ -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.** @@ -88,7 +89,7 @@ code: ### 3. Migrate the 15 spec/plan pairs into archived bundles Each `planning/specs/--design.md` + `planning/plans/-.md` -pair becomes `planning/changes/archive/.NN-/{design.md,plan.md}`. +pair becomes `planning/changes/.NN-/{design.md,plan.md}`. The `.NN` intra-day counter is taken from git first-commit order so the timeline sorts stably: diff --git a/planning/changes/archive/2026-06-13.01-portable-planning-convention/plan.md b/planning/changes/2026-06-13.01-portable-planning-convention/plan.md similarity index 92% rename from planning/changes/archive/2026-06-13.01-portable-planning-convention/plan.md rename to planning/changes/2026-06-13.01-portable-planning-convention/plan.md index 003a41a..f1b1975 100644 --- a/planning/changes/archive/2026-06-13.01-portable-planning-convention/plan.md +++ b/planning/changes/2026-06-13.01-portable-planning-convention/plan.md @@ -43,7 +43,7 @@ committed there). - Create: `planning/_templates/change.md` - Create: `planning/deferred.md` - Create: `planning/changes/active/.gitkeep` -- Create: `planning/changes/archive/.gitkeep` +- Create: `planning/changes/.gitkeep` These four content files are copied **byte-identical** from `lite-bootstrap` (the portable convention). Reproduce them exactly. @@ -231,8 +231,8 @@ _None._ - [ ] **Step 5: Create the `changes/` directory keepers** ```bash -mkdir -p planning/changes/active planning/changes/archive -touch planning/changes/active/.gitkeep planning/changes/archive/.gitkeep +mkdir -p planning/changes/active planning/changes +touch planning/changes/active/.gitkeep planning/changes/.gitkeep ``` - [ ] **Step 6: Verify the templates are byte-identical to lite-bootstrap** @@ -250,7 +250,7 @@ Expected: four `identical` lines, no diff output. - [ ] **Step 7: Commit** ```bash -git add planning/_templates planning/deferred.md planning/changes/active/.gitkeep planning/changes/archive/.gitkeep +git add planning/_templates planning/deferred.md planning/changes/active/.gitkeep planning/changes/.gitkeep git commit -m "docs(planning): add portable templates, deferred register, changes/ skeleton Co-Authored-By: Claude Opus 4.8 (1M context) " @@ -310,8 +310,8 @@ Co-Authored-By: Claude Opus 4.8 (1M context) " ### Task 3: Migrate the 15 spec/plan pairs into archived bundles **Files (per pair):** -- Move: `planning/specs/--design.md` → `planning/changes/archive/.NN-/design.md` -- Move: `planning/plans/-.md` → `planning/changes/archive/.NN-/plan.md` +- Move: `planning/specs/--design.md` → `planning/changes/.NN-/design.md` +- Move: `planning/plans/-.md` → `planning/changes/.NN-/plan.md` - Delete: `planning/specs/.gitkeep`, `planning/plans/.gitkeep` (after dirs are empty) This is the bundle table. `.NN` is the git first-commit order. `pr` stays @@ -342,16 +342,16 @@ lite-bootstrap house style. The eight `2026-05-31` items predate PR numbering For each row, derive `` and `` from the bundle dir, then: ```bash -mkdir -p "planning/changes/archive/.NN-" -git mv "planning/specs/--design.md" "planning/changes/archive/.NN-/design.md" -git mv "planning/plans/-.md" "planning/changes/archive/.NN-/plan.md" +mkdir -p "planning/changes/.NN-" +git mv "planning/specs/--design.md" "planning/changes/.NN-/design.md" +git mv "planning/plans/-.md" "planning/changes/.NN-/plan.md" ``` Concretely, the 30 moves are (note `2026-05-31.01`'s plan keeps its full descriptive source name): ```bash -B=planning/changes/archive +B=planning/changes S=planning/specs P=planning/plans for row in \ @@ -382,8 +382,8 @@ done ```bash ls planning/specs planning/plans # expect only .gitkeep in each -find planning/changes/archive -name design.md | wc -l # expect 15 -find planning/changes/archive -name plan.md | wc -l # expect 15 +find planning/changes -name design.md | wc -l # expect 15 +find planning/changes -name plan.md | wc -l # expect 15 ``` - [ ] **Step 3: Prepend frontmatter to each `design.md`** @@ -430,7 +430,7 @@ pr: null python3 - <<'PY' import pathlib, yaml, sys bad = 0 -for f in pathlib.Path("planning/changes/archive").rglob("*.md"): +for f in pathlib.Path("planning/changes").rglob("*.md"): text = f.read_text() if not text.startswith("---\n"): print("NO FRONTMATTER:", f); bad += 1; continue @@ -440,7 +440,7 @@ for f in pathlib.Path("planning/changes/archive").rglob("*.md"): assert d["status"] == "shipped" and d["slug"] and d["date"] except Exception as e: print("BAD:", f, e); bad += 1 -print("checked", len(list(pathlib.Path('planning/changes/archive').rglob('*.md'))), "files, bad =", bad) +print("checked", len(list(pathlib.Path('planning/changes').rglob('*.md'))), "files, bad =", bad) sys.exit(1 if bad else 0) PY ``` @@ -449,7 +449,7 @@ Expected: `bad = 0`, exit 0. - [ ] **Step 6: Verify `git mv` preserved history on a sample file** ```bash -git log --follow --oneline -- planning/changes/archive/2026-06-08.02-github-provider/design.md | tail -1 +git log --follow --oneline -- planning/changes/2026-06-08.02-github-provider/design.md | tail -1 ``` Expected: a commit predating this branch (history followed through the rename). @@ -515,7 +515,7 @@ A change is a folder `changes/active/YYYY-MM-DD.NN-/`: (`.01`, `.02`, …) that breaks same-date ties so the timeline sorts stably. - `` — kebab-case description, not a story ID. -On merge the folder moves to `changes/archive/` with `status: shipped`, `pr:`, +On merge the folder moves to `changes/` with `status: shipped`, `pr:`, and `outcome:` filled, and its line moves from **Active** to **Archived** in the Index below. @@ -560,36 +560,36 @@ carry **no** frontmatter — living prose, dated by git. ### Archived (shipped) -- **[action-yml-dry-run](changes/archive/2026-06-09.03-action-yml-dry-run/design.md)** +- **[action-yml-dry-run](changes/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)** +- **[dry-run-flag](changes/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)** +- **[mkdocs-github-actions](changes/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)** +- **[action-yml-composite-wrapper](changes/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)** +- **[github-provider](changes/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)** +- **[httpware-decoder-adoption](changes/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)** +- **[httpware-migration](changes/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)** +- **[v0-1-0-release-prep](changes/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)** +- **[strategy-no-bump-cleanup](changes/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)** +- **[cli-overlay-simplification](changes/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)** +- **[ioc-idiomatic-modern-di-typer](changes/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)** +- **[usecase-callable](changes/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)** +- **[settings-aliaschoices](changes/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)** +- **[drop-doctor](changes/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)** +- **[bmad-to-superpowers-migration-and-httpx2-wrapper](changes/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. ``` @@ -777,7 +777,7 @@ in the same bundle's `plan.md` → executing-plans / subagent-driven-development requesting-code-review → finishing-a-development-branch. `` 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:` +`planning/changes/` with `status: shipped`, `pr:`, and `outcome:` filled, **and the change promotes its conclusions into the affected `architecture/.md`** — that hand-edit is what keeps `architecture/` true. @@ -862,7 +862,7 @@ Expected: `mkdocs build --strict` exits 0. ```bash test ! -d planning/specs && test ! -d planning/plans && echo "old dirs gone" find architecture -name '*.md' | wc -l # expect 3 -find planning/changes/archive -name design.md | wc -l # expect 15 +find planning/changes -name design.md | wc -l # expect 15 ls planning/changes/active # expect the convention bundle + .gitkeep ``` Expected: `old dirs gone`, `3`, `15`, and the active bundle present. @@ -872,7 +872,7 @@ Expected: `old dirs gone`, `3`, `15`, and the active bundle present. ## On merge Move `planning/changes/active/2026-06-13.01-portable-planning-convention/` → -`planning/changes/archive/`, fill its `design.md` frontmatter (`status: +`planning/changes/`, fill its `design.md` frontmatter (`status: shipped`, `pr:` = this PR's number, `outcome:`) and `plan.md` (`status: shipped`, `pr:`), and shift its README Index line from **Active** to **Archived**. No `architecture/` promotion — this change defines the diff --git a/planning/changes/archive/2026-06-16.01-httpware-0.12-get-with-response/change.md b/planning/changes/2026-06-16.01-httpware-0.12-get-with-response/change.md similarity index 96% rename from planning/changes/archive/2026-06-16.01-httpware-0.12-get-with-response/change.md rename to planning/changes/2026-06-16.01-httpware-0.12-get-with-response/change.md index 7a930ce..c4f9f0a 100644 --- a/planning/changes/archive/2026-06-16.01-httpware-0.12-get-with-response/change.md +++ b/planning/changes/2026-06-16.01-httpware-0.12-get-with-response/change.md @@ -2,6 +2,7 @@ status: shipped date: 2026-06-16 slug: httpware-0.12-get-with-response +summary: "Bump httpware to 0.12.0; adopt `get_with_response` at the pagination call sites." supersedes: null superseded_by: null pr: 24 diff --git a/planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md b/planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md similarity index 98% rename from planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md rename to planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md index f399bc3..09daad4 100644 --- a/planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md +++ b/planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md @@ -2,6 +2,7 @@ status: shipped date: 2026-06-16 slug: branch-prefix-patch-on-non-merge +summary: "Opt-in `patch_on_non_merge_commit` flag: a non-merge HEAD commit bumps patch instead of nothing." supersedes: null superseded_by: null pr: 24 diff --git a/planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md b/planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md similarity index 99% rename from planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md rename to planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md index 3aaa2fd..1c7f51a 100644 --- a/planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md +++ b/planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md @@ -221,7 +221,7 @@ Promote the new behavior into the capability doc and the user-facing docs. ## Notes for finishing - This bundle is on lane **full** (`design.md` + `plan.md`). On merge: move the - bundle to `planning/changes/archive/` with `status: shipped`, `pr:`, and + bundle to `planning/changes/` with `status: shipped`, `pr:`, and `outcome:` filled, and confirm the `architecture/strategies.md` edit from Task 2 landed (that hand-edit is what keeps `architecture/` true). - Release tags are bare semver — not relevant to this change, but the flag, once diff --git a/planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/design.md b/planning/changes/2026-06-16.03-httpware-max-error-body-bytes/design.md similarity index 98% rename from planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/design.md rename to planning/changes/2026-06-16.03-httpware-max-error-body-bytes/design.md index 6a80f06..3e90ab3 100644 --- a/planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/design.md +++ b/planning/changes/2026-06-16.03-httpware-max-error-body-bytes/design.md @@ -2,6 +2,7 @@ status: shipped date: 2026-06-16 slug: httpware-max-error-body-bytes +summary: "Cap provider error-body reads at 1 MiB; translate `ResponseTooLargeError` to `ProviderAPIError`." supersedes: null superseded_by: null pr: 26 diff --git a/planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/plan.md b/planning/changes/2026-06-16.03-httpware-max-error-body-bytes/plan.md similarity index 99% rename from planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/plan.md rename to planning/changes/2026-06-16.03-httpware-max-error-body-bytes/plan.md index cc9358b..c767af1 100644 --- a/planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/plan.md +++ b/planning/changes/2026-06-16.03-httpware-max-error-body-bytes/plan.md @@ -283,7 +283,7 @@ Promote the hardening into the capability doc. ## Notes for finishing - Lane **full** (`design.md` + `plan.md`). On merge: move the bundle to - `planning/changes/archive/` with `status: shipped`, `pr:`, `outcome:` filled; + `planning/changes/` with `status: shipped`, `pr:`, `outcome:` filled; confirm the `architecture/providers.md` edit landed; and remove the "httpware bounded-error-body adoption" item from `planning/deferred.md` (this change resolves it). diff --git a/planning/changes/2026-06-20.01-flat-changes-generated-index/change.md b/planning/changes/2026-06-20.01-flat-changes-generated-index/change.md new file mode 100644 index 0000000..59bf0f0 --- /dev/null +++ b/planning/changes/2026-06-20.01-flat-changes-generated-index/change.md @@ -0,0 +1,18 @@ +--- +status: shipped +date: 2026-06-20 +slug: flat-changes-generated-index +summary: Flatten changes/ (drop active/archive), make status frontmatter the sole lifecycle state, add a summary field, and replace the hand-maintained README Index with a stdlib generator (just index). +supersedes: null +superseded_by: null +pr: 29 +outcome: Flattened planning/changes/; backfilled summary: into every bundle; added stdlib planning/index.py + just index; slimmed README Index to a generator note; ported the single-step in-branch lifecycle into CLAUDE.md. +--- + +# flat-changes-generated-index + +Adopts the planning change shipped in `faststream-outbox` (#105/#106): the flat +`changes/` directory, `status:`-as-sole-lifecycle, the `summary:` frontmatter +field, and the generated index (`just index`). See that repo's +`planning/changes/2026-06-20.01-flat-changes-generated-index/design.md` for the +full rationale. `pr:` is backfilled once the PR opens. diff --git a/planning/changes/active/.gitkeep b/planning/changes/active/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/planning/changes/archive/.gitkeep b/planning/changes/archive/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/planning/index.py b/planning/index.py new file mode 100644 index 0000000..80ef1f4 --- /dev/null +++ b/planning/index.py @@ -0,0 +1,95 @@ +# ruff: noqa: INP001 # planning/ is not a Python package; this is a standalone script +""" +Generate the planning change index from bundle frontmatter. + +Run via ``just index``. Globs ``planning/changes/*/``, reads each bundle's +``design.md`` (falling back to ``change.md``) frontmatter, and prints a +Markdown listing grouped by lifecycle status to stdout. Never writes a file: +the listing is a query over the bundles, not a committed artifact. +""" + +import pathlib +import sys + + +CHANGES_DIR = pathlib.Path(__file__).parent / "changes" +GROUPS: tuple[tuple[str, tuple[str, ...]], ...] = ( + ("In progress", ("draft", "approved")), + ("Shipped", ("shipped",)), + ("Superseded", ("superseded",)), +) + + +def parse_frontmatter(text: str) -> dict[str, str]: + """Parse a single-line-scalar YAML frontmatter block into a dict.""" + lines = text.splitlines() + if not lines or lines[0].strip() != "---": + return {} + fields: dict[str, str] = {} + for line in lines[1:]: + if line.strip() == "---": + break + key, sep, value = line.partition(": ") + if not sep: + continue + cleaned = value.strip().strip('"').strip("'") + fields[key.strip()] = "" if cleaned == "null" else cleaned + return fields + + +def load_bundles() -> list[dict[str, str]]: + """Read every bundle's spec frontmatter under ``CHANGES_DIR``.""" + bundles: list[dict[str, str]] = [] + for bundle in sorted(CHANGES_DIR.iterdir()): + if not bundle.is_dir(): + continue + spec = bundle / "design.md" + if not spec.exists(): + spec = bundle / "change.md" + if not spec.exists(): + continue + fields = parse_frontmatter(spec.read_text(encoding="utf-8")) + fields["path"] = f"changes/{bundle.name}/{spec.name}" + fields["name"] = bundle.name + bundles.append(fields) + return bundles + + +def format_row(bundle: dict[str, str]) -> str: + """Render one bundle as a Markdown list item.""" + slug = bundle.get("slug", "?") + path = bundle.get("path", "") + pr = bundle.get("pr") or "—" + date = bundle.get("date", "") + summary = bundle.get("summary") or "(no summary)" + line = f"- **[{slug}]({path})** (#{pr}, {date}) — {summary}" + if bundle.get("supersedes"): + line += f" _(supersedes {bundle['supersedes']})_" + if bundle.get("superseded_by"): + line += f" _(superseded by {bundle['superseded_by']})_" + return line + + +def render(bundles: list[dict[str, str]]) -> str: + """Render the full grouped Markdown listing.""" + out = ["# Change index", "", "_Generated by `just index` — do not edit._", ""] + for title, statuses in GROUPS: + out += [f"## {title}", ""] + rows = sorted( + (b for b in bundles if b.get("status") in statuses), + key=lambda b: b.get("name", ""), + reverse=True, + ) + out += [format_row(b) for b in rows] if rows else ["_None._"] + out.append("") + return "\n".join(out).rstrip() + "\n" + + +def main() -> int: + """Print the listing to stdout.""" + sys.stdout.write(render(load_bundles())) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/planning/releases/0.2.0.md b/planning/releases/0.2.0.md index 34fd96f..a25fdad 100644 --- a/planning/releases/0.2.0.md +++ b/planning/releases/0.2.0.md @@ -56,10 +56,10 @@ The `semvertag` CLI surface, exit codes, environment variables (`SEMVERTAG_*`), Two design+implementation cycles fed this release: - **httpware migration** — replace the in-tree HTTP stack with `httpware.Client` + `httpware.Retry`. - - Spec: [`planning/changes/archive/2026-06-07.01-httpware-migration/design.md`](../changes/archive/2026-06-07.01-httpware-migration/design.md) - - Plan: [`planning/changes/archive/2026-06-07.01-httpware-migration/plan.md`](../changes/archive/2026-06-07.01-httpware-migration/plan.md) + - Spec: [`planning/changes/2026-06-07.01-httpware-migration/design.md`](../changes/2026-06-07.01-httpware-migration/design.md) + - Plan: [`planning/changes/2026-06-07.01-httpware-migration/plan.md`](../changes/2026-06-07.01-httpware-migration/plan.md) - PR [#2](https://github.com/modern-python/semvertag/pull/2) - **Decoder adoption** — switch the three GETs to use `response_model=` / `send_with_response`, delete the in-tree validator helpers. - - Spec: [`planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md`](../changes/archive/2026-06-08.01-httpware-decoder-adoption/design.md) - - Plan: [`planning/changes/archive/2026-06-08.01-httpware-decoder-adoption/plan.md`](../changes/archive/2026-06-08.01-httpware-decoder-adoption/plan.md) + - Spec: [`planning/changes/2026-06-08.01-httpware-decoder-adoption/design.md`](../changes/2026-06-08.01-httpware-decoder-adoption/design.md) + - Plan: [`planning/changes/2026-06-08.01-httpware-decoder-adoption/plan.md`](../changes/2026-06-08.01-httpware-decoder-adoption/plan.md) - PR [#3](https://github.com/modern-python/semvertag/pull/3) diff --git a/planning/releases/0.3.0.md b/planning/releases/0.3.0.md index dee0ae7..415cf14 100644 --- a/planning/releases/0.3.0.md +++ b/planning/releases/0.3.0.md @@ -69,8 +69,8 @@ See `docs/providers/github.md` for token scopes, fine-grained vs classic PATs, G ## See also -- Spec: [`planning/changes/archive/2026-06-08.02-github-provider/design.md`](../changes/archive/2026-06-08.02-github-provider/design.md) -- Plan: [`planning/changes/archive/2026-06-08.02-github-provider/plan.md`](../changes/archive/2026-06-08.02-github-provider/plan.md) +- Spec: [`planning/changes/2026-06-08.02-github-provider/design.md`](../changes/2026-06-08.02-github-provider/design.md) +- Plan: [`planning/changes/2026-06-08.02-github-provider/plan.md`](../changes/2026-06-08.02-github-provider/plan.md) - PR [#4](https://github.com/modern-python/semvertag/pull/4) ## Known follow-ups diff --git a/planning/releases/0.4.0.md b/planning/releases/0.4.0.md index 5701f85..ecc1f69 100644 --- a/planning/releases/0.4.0.md +++ b/planning/releases/0.4.0.md @@ -76,5 +76,5 @@ None. The action is additive; the pure-CLI recipe still works exactly as before ## See also -- Spec: `planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/design.md` -- Implementation plan: `planning/changes/archive/2026-06-08.03-action-yml-composite-wrapper/plan.md` +- Spec: `planning/changes/2026-06-08.03-action-yml-composite-wrapper/design.md` +- Implementation plan: `planning/changes/2026-06-08.03-action-yml-composite-wrapper/plan.md` diff --git a/planning/releases/0.5.0.md b/planning/releases/0.5.0.md index 1e7619a..788bae0 100644 --- a/planning/releases/0.5.0.md +++ b/planning/releases/0.5.0.md @@ -43,8 +43,8 @@ The `modern-python/semvertag@v0` action still pins `'semvertag>=0.3.1,<1'` after ## See also -- Spec: `planning/changes/archive/2026-06-09.02-dry-run-flag/design.md` -- Implementation plan: `planning/changes/archive/2026-06-09.02-dry-run-flag/plan.md` +- Spec: `planning/changes/2026-06-09.02-dry-run-flag/design.md` +- Implementation plan: `planning/changes/2026-06-09.02-dry-run-flag/plan.md` - Dry-run feature: [PR #15](https://github.com/modern-python/semvertag/pull/15) - Docs site auto-deploy: [PR #14](https://github.com/modern-python/semvertag/pull/14) - Composite action follow-up (the second half of the smell fix): 0.6.0 — see `planning/releases/0.6.0.md` diff --git a/planning/releases/0.6.0.md b/planning/releases/0.6.0.md index 56ce70f..8180535 100644 --- a/planning/releases/0.6.0.md +++ b/planning/releases/0.6.0.md @@ -55,8 +55,8 @@ gh release create 0.6.0 \ ## See also -- Spec: `planning/changes/archive/2026-06-09.03-action-yml-dry-run/design.md` -- Implementation plan: `planning/changes/archive/2026-06-09.03-action-yml-dry-run/plan.md` +- Spec: `planning/changes/2026-06-09.03-action-yml-dry-run/design.md` +- Implementation plan: `planning/changes/2026-06-09.03-action-yml-dry-run/plan.md` - PR: [#16](https://github.com/modern-python/semvertag/pull/16) - Predecessor (CLI half): [PR #15](https://github.com/modern-python/semvertag/pull/15) — semvertag 0.5.0 - Original smell surfacing: [PR #14](https://github.com/modern-python/semvertag/pull/14) — mkdocs deploy + the action-smoke side-effect discovery diff --git a/planning/releases/0.7.0.md b/planning/releases/0.7.0.md index 21e7cc9..afd1456 100644 --- a/planning/releases/0.7.0.md +++ b/planning/releases/0.7.0.md @@ -43,8 +43,8 @@ gh release create 0.7.0 \ ## See also -- Spec: `planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md` -- Implementation plan: `planning/changes/archive/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md` -- httpware bump: `planning/changes/archive/2026-06-16.01-httpware-0.12-get-with-response/change.md` +- Spec: `planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/design.md` +- Implementation plan: `planning/changes/2026-06-16.02-branch-prefix-patch-on-non-merge/plan.md` +- httpware bump: `planning/changes/2026-06-16.01-httpware-0.12-get-with-response/change.md` - PR: [#24](https://github.com/modern-python/semvertag/pull/24) - Deferred follow-up: `conventional-commits` parity for a non-conforming-commit fallback (`planning/deferred.md`) diff --git a/planning/releases/0.7.1.md b/planning/releases/0.7.1.md index 1e31136..a919da4 100644 --- a/planning/releases/0.7.1.md +++ b/planning/releases/0.7.1.md @@ -31,7 +31,7 @@ gh release create 0.7.1 \ ## See also -- Spec: `planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/design.md` -- Implementation plan: `planning/changes/archive/2026-06-16.03-httpware-max-error-body-bytes/plan.md` +- Spec: `planning/changes/2026-06-16.03-httpware-max-error-body-bytes/design.md` +- Implementation plan: `planning/changes/2026-06-16.03-httpware-max-error-body-bytes/plan.md` - PR: [#26](https://github.com/modern-python/semvertag/pull/26) - Predecessor: [semvertag 0.7.0](0.7.0.md) — opt-in patch bump for non-merge commits