You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracking issue for moving the rest of the org off the planning/ convention and onto
PR-body-as-spec. #50 did this repo; modern-di and faststream-outbox did themselves
earlier. This covers everyone else.
Where the org actually stands
Measured across all 28 non-archived repos, not estimated:
fastapi-sqlalchemy-template and litestar-sqlalchemy-template are on neither
convention and have no planning/ tree, so there is nothing here to migrate. Whether
they should adopt one is undecided and untracked.
Why this is a programme, not a sweep
The .github migration (#50) was one PR but a session of judgment: ruling on 24 change
files, one decision record, a deferred list, and a 5-page architecture/ tree — each one
either derivable and dropped, enforceable and turned into a test, a rejected alternative
turned into an ADR, or real work turned into an issue. modern-di took five PRs
(modern-python/modern-di#424, #432, #433, #439, #449).
Per-repo issues should be spawned as work starts, not written upfront — 21 stale specs
would be worse than none.
The recipe, as actually performed twice
CONTEXT.md — the vocabulary. Seed from architecture/glossary.md where one exists;
otherwise author it, and audit every _Avoid_ entry against real usage before committing
(in .github that cut ten terms to seven — four rejected synonyms appeared nowhere in
the repo).
docs/adr/ — planning/decisions/* become NNNN-slug.md, each with a revisit
trigger. Also rescue rejected alternatives buried in change files and capability pages.
Deferred items become GitHub issues, self-contained, carrying their revisit triggers.
planning/changes/* are deleted. Git history is the record; route anything
load-bearing through the admission check first.
architecture/ is dropped. Enforceable claims become tests whose name is the claim,
with an INVARIANT: docstring naming what breaks it.
AGENTS.md gains the Workflow and Where-a-fact-goes sections and loses the lanes.
docs/agents/domain.md repoints to CONTEXT.md + docs/adr/.
Do not touch .github/PULL_REQUEST_TEMPLATE.md. The org default is staying as the
generic form and is true under either convention, so a migrating repo needs no template
change. Template work is Delete the local PR templates; keep the generic org default #53, which runs independently of this issue.
The link gate rides along
#66 adopts a blocking offline link check in the 18 repos that are already green. Seven
repos are red, and all seven are red only inside planning/:
httpware 56, lite-bootstrap 8, compose2pod 4, semvertag 3, faststream-concurrent-aiokafka 3,
faststream-redis-timers 2, db-retry 1 — 77 broken links, 77 of 77 in planning/, zero in
any user-facing surface.
Deleting planning/ deletes all 77. So each migration PR should add the gate as its last
step and land green, rather than #66 excluding planning/ to work around history that is
about to be removed.
Tracking issue for moving the rest of the org off the
planning/convention and ontoPR-body-as-spec. #50 did this repo;
modern-diandfaststream-outboxdid themselvesearlier. This covers everyone else.
Where the org actually stands
Measured across all 28 non-archived repos, not estimated:
CONTEXT.md+docs/adr/, noplanning/.github,modern-di,faststream-outboxchat-appplanning/onlythat-depends,fastapi-sqlalchemy-template,litestar-sqlalchemy-templateThree of those are handled elsewhere and are not part of this issue's checklist:
chat-app— chat-app is half-migrated: the PR body is the spec, but planning/ is still a merge gate #70that-depends— that-depends has no agent instructions file #69fastapi-sqlalchemy-templateandlitestar-sqlalchemy-templateare on neitherconvention and have no
planning/tree, so there is nothing here to migrate. Whetherthey should adopt one is undecided and untracked.
Why this is a programme, not a sweep
The
.githubmigration (#50) was one PR but a session of judgment: ruling on 24 changefiles, one decision record, a deferred list, and a 5-page
architecture/tree — each oneeither derivable and dropped, enforceable and turned into a test, a rejected alternative
turned into an ADR, or real work turned into an issue.
modern-ditook five PRs(modern-python/modern-di#424, #432, #433, #439, #449).
Per-repo issues should be spawned as work starts, not written upfront — 21 stale specs
would be worse than none.
The recipe, as actually performed twice
CONTEXT.md— the vocabulary. Seed fromarchitecture/glossary.mdwhere one exists;otherwise author it, and audit every
_Avoid_entry against real usage before committing(in
.githubthat cut ten terms to seven — four rejected synonyms appeared nowhere inthe repo).
docs/adr/—planning/decisions/*becomeNNNN-slug.md, each with a revisittrigger. Also rescue rejected alternatives buried in change files and capability pages.
planning/changes/*are deleted. Git history is the record; route anythingload-bearing through the admission check first.
architecture/is dropped. Enforceable claims become tests whose name is the claim,with an
INVARIANT:docstring naming what breaks it.AGENTS.mdgains the Workflow and Where-a-fact-goes sections and loses the lanes.docs/agents/domain.mdrepoints toCONTEXT.md+docs/adr/.justfileand CI dropcheck-planning/index. Add the offline link gate (Add the offline link gate to the 18 green repos, and unpublish the ADRs in the two that have them #66) inthe same PR — see below.
.github/PULL_REQUEST_TEMPLATE.md. The org default is staying as thegeneric form and is true under either convention, so a migrating repo needs no template
change. Template work is Delete the local PR templates; keep the generic org default #53, which runs independently of this issue.
The link gate rides along
#66 adopts a blocking offline link check in the 18 repos that are already green. Seven
repos are red, and all seven are red only inside
planning/:httpware 56, lite-bootstrap 8, compose2pod 4, semvertag 3, faststream-concurrent-aiokafka 3,
faststream-redis-timers 2, db-retry 1 — 77 broken links, 77 of 77 in
planning/, zero inany user-facing surface.
Deleting
planning/deletes all 77. So each migration PR should add the gate as its laststep and land green, rather than #66 excluding
planning/to work around history that isabout to be removed.
Checklist — the 21 not-migrated repos
compose2pod(4 dead links) — chore: migrate off the planning/ convention compose2pod#89db-retry(1) — chore: migrate off the planning/ convention db-retry#37eof-fixer— chore: migrate off the planning/ convention eof-fixer#34faststream-concurrent-aiokafka(3) — chore: migrate off the planning/ convention faststream-concurrent-aiokafka#65faststream-redis-timers(2) — chore: migrate off the planning/ convention faststream-redis-timers#68httpware(56) — chore: migrate off the planning/ convention httpware#119lite-bootstrap(8) — chore: migrate off the planning/ convention lite-bootstrap#176modern-di-aiogram— chore: migrate off the planning/ convention modern-di-aiogram#14modern-di-aiohttp— chore: migrate off the planning/ convention modern-di-aiohttp#19modern-di-arq— chore: migrate off the planning/ convention modern-di-arq#14modern-di-celery— chore: migrate off the planning/ convention modern-di-celery#14modern-di-fastapi— chore: migrate off the planning/ convention modern-di-fastapi#42modern-di-faststream— chore: migrate off the planning/ convention modern-di-faststream#43modern-di-flask— chore: migrate off the planning/ convention modern-di-flask#14modern-di-grpc— chore: migrate off the planning/ convention modern-di-grpc#13modern-di-litestar— chore: migrate off the planning/ convention modern-di-litestar#44modern-di-pytest— chore: migrate off the planning/ convention modern-di-pytest#40modern-di-starlette— chore: migrate off the planning/ convention modern-di-starlette#19modern-di-taskiq— chore: migrate off the planning/ convention modern-di-taskiq#12modern-di-typer— chore: migrate off the planning/ convention modern-di-typer#37semvertag— chore: migrate off the planning/ convention semvertag#62chat-app(#70) andthat-depends(#69) are tracked separately and are not on this list.Out of scope