chore: migrate off the planning/ convention - #40
Merged
Conversation
Replaces the two-axis planning/ + architecture/ convention with PR-body-as-spec, CONTEXT.md for vocabulary, and docs/adr/ for rejected alternatives, per modern-python/.github#67. - planning/ deleted in full. changes/ and releases/ held nothing git history and GitHub Releases do not; the release notes were byte-identical to the published Release bodies. deferred.md was empty, so no issues needed spawning. - The one decision record becomes docs/adr/0001, keeping its revisit trigger. - architecture/ carried no capability pages. The only claim worth rescuing was the two-symbol public surface, now an INVARIANT test checked against three cases: __all__ growing and an unprefixed public binding both fail it, and narrowing the surface does not. - CONTEXT.md defines only the three terms local to this package; the rest are modern-di's. Its install/inject/register entry reflects real usage (install 12, inject 3, register 2), so the three stragglers in factory.py and README.md were brought to the winner rather than the entry dropped. One is a user-visible ValueError string. - AGENTS.md gains Workflow and Where-a-fact-goes, loses the lanes, and sheds the prose restatement of factory.py that the admission check disallows. - justfile and lint-ci drop index/check-planning/check-links; the offline lychee gate replaces links.py (modern-python/.github#66), reporting 0 errors. Beyond the recipe, and the reason this is chore: and not docs: release.yml sourced the Release body from planning/releases/<tag>.md and hard-required one for every stable tag, so deleting planning/ would have failed every future stable release. It now uses GitHub's generated notes, byte-identical to modern-di's post-migration workflow, which dropped the same gate in 1ea74ee ("drop the planning/ directory and the curated-release-notes convention", #449) — one of the five migration PRs #67 cites. Stable releases lose a hard gate; that is the precedent's call, not a new one.
21 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the two-axis
planning/+architecture/convention withPR-body-as-spec,
CONTEXT.mdfor vocabulary, anddocs/adr/for rejectedalternatives, per modern-python/.github#67.
What moves, and what is genuinely deleted
planning/deleted in full.changes/andreleases/held nothing githistory and GitHub Releases do not: the release notes were byte-identical to
the published Release bodies.
deferred.mdwas empty, so no issues neededspawning.
docs/adr/0001, keeping its revisittrigger.
architecture/carried no capability pages. The only claim worth rescuingwas the two-symbol public surface, now an INVARIANT test checked against three
cases:
__all__growing and an unprefixed public binding both fail it, andnarrowing the surface does not.
CONTEXT.mddefines only the three terms local to this package; the restare modern-di's. Its install/inject/register entry reflects real usage
(install 12, inject 3, register 2), so the three stragglers in
factory.pyand
README.mdwere brought to the winner rather than the entry dropped. Oneis a user-visible
ValueErrorstring.AGENTS.mdgains Workflow and Where-a-fact-goes, loses the lanes, andsheds the prose restatement of
factory.pythat the admission checkdisallows.
justfileandlint-cidropindex/check-planning/check-links; theoffline lychee gate replaces
links.py(Add the offline link gate to the 18 green repos, and unpublish the ADRs in the two that have them .github#66).Why this is
chore:and notdocs:release.ymlsourced the Release body fromplanning/releases/<tag>.mdandhard-required one for every stable tag, so deleting
planning/would havefailed every future stable release. It now uses GitHub's generated notes,
byte-identical to modern-di's post-migration workflow, which dropped the same
gate in 1ea74ee ("drop the planning/ directory and the curated-release-notes
convention", modern-python/modern-di#449), one of the five migration PRs #67
cites. Stable releases lose a hard gate; that is the precedent's call, not a new
one.
Verification
just lint-ciclean.just test-cipasses at 100% coverage, 18 tests(17 plus the new public-surface invariant). No remaining relative link points
into
planning/orarchitecture/; the new offline lychee job covers the rest.Rebased onto
11a0d11for this PR. It picked up the three README/expose()changes that landed while it sat (#37, #38, #39) with no conflicts, and the two
independent edits to the same
expose()paragraph composed correctly: thisbranch's install/onto rewording plus #39's
TypeErrorsentence.