chore: drop the planning/ directory and the curated-release-notes convention - #449
Merged
Conversation
…vention Retires all five of planning/'s jobs: curated release notes and their template, the where-a-fact-goes rules (moved into CLAUDE.md), the repo-wide link checker, and two multi-agent audit scripts. Claude-Session: https://claude.ai/code/session_01FdBFyAZ6nntxXwPjy6Xm7p
There was a problem hiding this comment.
Benchmark
Details
| Benchmark suite | Current: 143017d | Previous: 1110d4c | Ratio |
|---|---|---|---|
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type |
3134503.3243164895 iter/sec (stddev: 2.7749399615333034e-8) |
2973498.9286641614 iter/sec (stddev: 1.231159274414513e-8) |
0.95 |
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry |
3137850.872133636 iter/sec (stddev: 2.881231661949404e-8) |
2986010.183962908 iter/sec (stddev: 9.788926322984658e-9) |
0.95 |
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve |
23434.155169910544 iter/sec (stddev: 0.000005127450579228218) |
26560.358180927957 iter/sec (stddev: 0.000004352985959499135) |
1.13 |
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached |
18321.20428725045 iter/sec (stddev: 0.000004705694571475458) |
20691.970569831406 iter/sec (stddev: 0.0000026091460184789175) |
1.13 |
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] |
460.4672952696038 iter/sec (stddev: 0.00007333408353481653) |
429.03756232680587 iter/sec (stddev: 0.00009568077414034088) |
0.93 |
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] |
444.48742817883215 iter/sec (stddev: 0.000030183977893687496) |
391.8991713417992 iter/sec (stddev: 0.00022869199630442898) |
0.88 |
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] |
397.2560757229045 iter/sec (stddev: 0.00010021629818935621) |
376.607403925421 iter/sec (stddev: 0.00002631709265123598) |
0.95 |
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] |
2256.8502033160275 iter/sec (stddev: 0.00002579116559226861) |
2403.974394705907 iter/sec (stddev: 0.00003135419298488846) |
1.07 |
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] |
1615.0048376803643 iter/sec (stddev: 0.00019058055106452274) |
1764.2170385681352 iter/sec (stddev: 0.00024939593097565) |
1.09 |
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] |
1142.936092528558 iter/sec (stddev: 0.0000355611670627448) |
1209.8328682466229 iter/sec (stddev: 0.0000433590848327564) |
1.06 |
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container |
751251.9943157351 iter/sec (stddev: 4.460350608573049e-8) |
747181.5983230952 iter/sec (stddev: 6.238976357299855e-8) |
0.99 |
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope |
697335.250145131 iter/sec (stddev: 4.581818996730928e-8) |
697694.0392206679 iter/sec (stddev: 4.004143405304659e-8) |
1.00 |
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch |
2358.9616610159337 iter/sec (stddev: 0.000013088472429696477) |
2346.777875876585 iter/sec (stddev: 0.000007748725984796808) |
0.99 |
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control |
61349.97476959026 iter/sec (stddev: 0.000002007024747350427) |
61705.370370006065 iter/sec (stddev: 0.0000013613767700774523) |
1.01 |
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale |
46402.49975859761 iter/sec (stddev: 0.0000027120277591603175) |
43549.91286075941 iter/sec (stddev: 0.000003003271181235822) |
0.94 |
benchmarks/test_guard_resolve.py::test_g1_transient_resolve |
1956742.9680606495 iter/sec (stddev: 3.679566394610606e-8) |
2058891.9270256252 iter/sec (stddev: 2.1811745546945094e-8) |
1.05 |
benchmarks/test_guard_resolve.py::test_g2_cached_resolve |
3525270.6914433134 iter/sec (stddev: 1.1765221973931988e-8) |
3249700.978769265 iter/sec (stddev: 8.488431554352757e-9) |
0.92 |
benchmarks/test_guard_resolve.py::test_g3_deep_chain |
755140.572248651 iter/sec (stddev: 3.493109987967728e-8) |
760111.2179524907 iter/sec (stddev: 4.919543864401783e-8) |
1.01 |
benchmarks/test_guard_resolve.py::test_g4_wide_resolve |
405255.9919027869 iter/sec (stddev: 9.779577520420318e-8) |
411793.20560404117 iter/sec (stddev: 1.2407551889930304e-7) |
1.02 |
benchmarks/test_guard_resolve.py::test_g5_cross_scope |
1609744.6212612905 iter/sec (stddev: 3.5102700784211594e-8) |
1683729.015264325 iter/sec (stddev: 2.4358361458241133e-8) |
1.05 |
benchmarks/test_guard_resolve.py::test_g9_context_resolve |
858002.5695897768 iter/sec (stddev: 8.243584712716222e-8) |
842154.799588125 iter/sec (stddev: 1.0466392208282428e-7) |
0.98 |
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve |
503138.8569149087 iter/sec (stddev: 5.0038791403493e-8) |
459896.3485580914 iter/sec (stddev: 4.330749547399607e-7) |
0.91 |
benchmarks/test_guard_resolve.py::test_g18_alias_hop |
2410532.7747489726 iter/sec (stddev: 1.1371070293494599e-8) |
2237418.1697861045 iter/sec (stddev: 1.1310824821004893e-8) |
0.93 |
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain |
27953.980517254895 iter/sec (stddev: 0.000003870671796457084) |
30220.004047517636 iter/sec (stddev: 0.00000262697023406689) |
1.08 |
benchmarks/test_guard_validate.py::test_g11_validate_wide |
17154.76225376437 iter/sec (stddev: 0.000004490324760893902) |
17750.225850963463 iter/sec (stddev: 0.000004533922463496549) |
1.03 |
This comment was automatically generated by workflow using github-action-benchmark.
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.
Why
planning/had accumulated five unrelated jobs behind one name, and the biggestof them was pulling its weight the least. Curated release notes were a mandatory
gate on every stable tag:
release.ymlaborted the release ifplanning/releases/<tag>.mdwas missing. That is a hand-written file standingbetween a green
mainand PyPI, and its output is reproducible from the squashedPR titles this repo already writes carefully.
The other four jobs were not planning either. A link checker is a lint tool. Two
audit workflow scripts are agent tooling. The
README.mdrules are the repo'soperating instructions, which belong where an agent already reads them.
Design
Each of the five jobs is retired or rehomed:
releases/*.md(30 files)release.ymlalways uses GitHub's generated notes._templates/release.mdREADME.mdCLAUDE.mdas Where a fact goes: the four-home table, the admission check, theINVARIANT:docstring shape.links.pyjust check-linksand itslint-ciline.scripts/*.mjs(2)3.4.0was tagged and published before this PR, so the last curated notes filewas used for its intended purpose rather than deleted unread. Every curated body
from 2.15.0 to 3.4.0 is on the
Releases page, byte-identical
to the file that produced it, so nothing is lost by deleting the files.
docs/changelog.mdand its nav entry go too: the page's entire content was apointer to
planning/releases.writing-integrations.mdno longer recommends the externalplanning-conventionrepo, and no longer tells integration authors to write release notes. Both were
claims about what
modern-didoes.Links from
.github/andCLAUDE.mdare now bare file links with no#anchor,since anchors were the main thing
links.pycaught and nothing validates them now.Non-goals
just docs-build(mkdocs --strict, run onevery PR) still covers
docs/. Root Markdown,.github/, anddocs/agents/become unchecked. Accepted:
docs/agents/was already unchecked, becausemkdocs.ymlexcludes it from the build entirely.architecture/-directory post-mortem thatplanning/README.mdcarried. The rule it justified survives; the four-month history does not.
release.yml. A tag remains the commitment point.are the two copies.
Verification
just lint-ci— clean (ruff format, ruff check, ty).just test-ci— 512 passed, 100% line coverage. No test referencedplanning/.just docs-build—mkdocs --strictbuilds clean with theChangelognaventry removed; nothing else linked to that page.
planning,check-links, orlinks.pyin any Markdown, YAML, TOML, Python file, or the justfile.https://claude.ai/code/session_01FdBFyAZ6nntxXwPjy6Xm7p