From cfe9aec544cc6368dc79f53c7f97ab3ae222d31b Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 25 Jun 2026 22:33:08 +0300 Subject: [PATCH 1/2] chore: sync planning/index.py to canonical, clear done deferred item Pick up the canonical index.py fresh-adopt guard (tolerate a missing changes/ dir) so the vendored file is byte-identical to lesnik512/planning-convention again, and remove the now-completed 'roll the convention into sibling repos' entry from deferred.md (the org-wide rollout shipped 2026-06-25). --- planning/deferred.md | 13 ------------- planning/index.py | 9 ++++++--- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/planning/deferred.md b/planning/deferred.md index d7e045c..b483aa6 100644 --- a/planning/deferred.md +++ b/planning/deferred.md @@ -19,16 +19,3 @@ replaced the old set-`kwargs_compiled`-after-the-bucket-fields sequence — but options: build and publish `wiring_plan` under the existing container lock, or publish the reference behind an explicit barrier/atomic. Until then, document modern-di as GIL-assuming for plan compilation. See [2026-06-14 audit A-1](audits/2026-06-14-deep-audit-report.md). - -## Roll the planning convention into sibling repos — from 2026-06-25 - -The convention now lives in the canonical repo -[`lesnik512/planning-convention`](https://github.com/lesnik512/planning-convention) -(v1.0.0); `modern-di` is consumer #1 (`planning/.convention-version`). Sibling -repos (`faststream-outbox`, the modern-di integrations) still carry an older, -hand-copied form. - -**Revisit trigger:** next time a sibling repo's planning convention is touched, -or in a dedicated sync pass — from each sibling, run the canonical repo's -`APPLY.md` flow (fresh adopt: it has no `.convention-version` yet), verify with -`just check-planning`, and open a PR. diff --git a/planning/index.py b/planning/index.py index 8916661..a1632e1 100644 --- a/planning/index.py +++ b/planning/index.py @@ -58,6 +58,8 @@ def _named(fields: dict[str, str], name: str, pattern: re.Pattern[str]) -> dict[ def load_bundles() -> list[dict[str, str]]: """Read each bundle's summary; derive date/slug from the directory name.""" bundles: list[dict[str, str]] = [] + if not CHANGES_DIR.is_dir(): + return bundles for bundle in sorted(CHANGES_DIR.iterdir()): if not bundle.is_dir(): continue @@ -160,9 +162,10 @@ def _check_decision(path: pathlib.Path, violations: list[str]) -> None: def check() -> list[str]: """Validate every bundle and decision; return the list of violation strings.""" violations: list[str] = [] - for bundle in sorted(CHANGES_DIR.iterdir()): - if bundle.is_dir(): - _check_bundle(bundle, violations) + if CHANGES_DIR.is_dir(): + for bundle in sorted(CHANGES_DIR.iterdir()): + if bundle.is_dir(): + _check_bundle(bundle, violations) if DECISIONS_DIR.is_dir(): for path in sorted(DECISIONS_DIR.glob("*.md")): if path.name == "README.md" or path.name.startswith("_"): From 0e102e5de88aaf9ec6d3e85705e786db4d9c42a0 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 25 Jun 2026 22:37:08 +0300 Subject: [PATCH 2/2] chore: drop ty:ignore[invalid-assignment] now unused under ty 0.0.54 ty 0.0.54 (released 2026-06-25) refined its analysis of method reassignment, so the three # ty: ignore[invalid-assignment] directives on Container.resolve_provider = _baseline_resolve_provider in the override benchmark are now flagged as unused. Since uv.lock floats (untracked), CI picks up the new ty and main's lint job goes red independently of any change. Remove the now-unused directives. --- benchmarks/test_bench_override_fastpath.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/test_bench_override_fastpath.py b/benchmarks/test_bench_override_fastpath.py index 62493a0..0d87bc4 100644 --- a/benchmarks/test_bench_override_fastpath.py +++ b/benchmarks/test_bench_override_fastpath.py @@ -62,7 +62,7 @@ def test_no_overrides_optimized(benchmark): def test_no_overrides_baseline(benchmark): original = Container.resolve_provider - Container.resolve_provider = _baseline_resolve_provider # ty: ignore[invalid-assignment] + Container.resolve_provider = _baseline_resolve_provider try: container = Container(scope=Scope.APP, groups=[BenchGroup]) benchmark(container.resolve_provider, BenchGroup.svc) @@ -83,7 +83,7 @@ def test_override_other_optimized(benchmark): def test_override_other_baseline(benchmark): original = Container.resolve_provider - Container.resolve_provider = _baseline_resolve_provider # ty: ignore[invalid-assignment] + Container.resolve_provider = _baseline_resolve_provider try: container = Container(scope=Scope.APP, groups=[BenchGroup]) container.override(BenchGroup.dep, Dep()) @@ -105,7 +105,7 @@ def test_override_self_optimized(benchmark): def test_override_self_baseline(benchmark): original = Container.resolve_provider - Container.resolve_provider = _baseline_resolve_provider # ty: ignore[invalid-assignment] + Container.resolve_provider = _baseline_resolve_provider try: container = Container(scope=Scope.APP, groups=[BenchGroup]) container.override(BenchGroup.svc, Service(dep=Dep()))