From 351fdea864fcbe73c509b19ff3c68ed71e0770d1 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 13 Jul 2026 14:36:31 +0300 Subject: [PATCH] docs(release): add 2.2.0 notes (adopt the modern-di integration kit) Curated notes for the integration-kit conversion, matching this repo's 2.1.0 precedent for the same shape of change. --- planning/releases/2.2.0.md | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 planning/releases/2.2.0.md diff --git a/planning/releases/2.2.0.md b/planning/releases/2.2.0.md new file mode 100644 index 0000000..dd1192f --- /dev/null +++ b/planning/releases/2.2.0.md @@ -0,0 +1,39 @@ +# modern-di-starlette 2.2.0 — adopt the modern-di integration kit + +Internal refactor, no API change. Swaps this package's hand-rolled +connection-dispatch loop and `FromDI`/parse/resolve triad for the shared +primitives in [`modern_di.integrations`](https://github.com/modern-python/modern-di/blob/main/architecture/integration-kit.md), +shipped in +[modern-di 2.28.0](https://github.com/modern-python/modern-di/releases/tag/2.28.0). +This is the first of 13 planned adapter conversions across the `modern-di` +ecosystem. + +## Internal + +- `_DIMiddleware`'s isinstance-over-tuple connection dispatch is now + `integrations.classify_connection`. +- The child container's manual `try`/`finally: await child_container.close_async()` + is now `Container`'s own `async with` — entering an already-open container + is a no-op; exiting closes it, including on the exception path. +- `_FromDI`, `_parse_inject_params`, and `_resolve_di_params` are gone. + `FromDI` is now a direct re-export (`FromDI = integrations.from_di`); + `inject` calls `integrations.parse_markers`/`integrations.resolve_markers`. +- `architecture/container-lifecycle.md`, `architecture/dependency-resolution.md`, + and `architecture/glossary.md` updated to describe the new internals. + +## Packaging + +- Bumps the `modern-di` floor to `>=2.28.0,<3`. + +## Downstream + +No action needed — the public API (`setup_di`, `FromDI`, `@inject`, +`fetch_di_container`, `starlette_request_provider`/`starlette_websocket_provider`) +is unchanged, and no test in this package's own suite needed to change. +Upgrading only requires `modern-di>=2.28.0`. + +## Internals + +- 100% line coverage; `ruff`, `ty` clean across Python 3.10–3.14. +- Built via `subagent-driven-development`: 5 planned tasks, each with an + independent spec+quality review; a whole-branch review before merge.