From 9b7c95e398014a79c74e4407b80ee28b784b39c8 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 2 Jul 2026 14:18:27 +0300 Subject: [PATCH 1/4] docs: stage deferred modern-di-aiohttp public-surfaces bundle Ready-to-fire change (profile row + docs bullet + stack sentence + GitHub settings) with exact strings in the current post-#30 table format. Blocked until the repo is public / on PyPI; not merged until then. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../2026-07-02.04-aiohttp-surfaces/change.md | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 planning/changes/2026-07-02.04-aiohttp-surfaces/change.md diff --git a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md new file mode 100644 index 0000000..f34aa87 --- /dev/null +++ b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md @@ -0,0 +1,94 @@ +--- +summary: Ready-to-fire — add modern-di-aiohttp to the profile README, docs site, and its GitHub repo settings once the repo is public. +--- + +# Change: modern-di-aiohttp public surfaces (deferred) + +## Status + +**BLOCKED / staged.** Do not execute until +`github.com/modern-python/modern-di-aiohttp` is public **and** the package is on +PyPI. As of 2026-07-02 the repo does not resolve and PyPI returns 404, so the +Stars/Downloads badges and the repo link would 404 and `gh repo edit` would +fail. This bundle records the exact edits so they can be applied in one pass the +moment the repo ships. + +The brand mark and assets are already done and merged (bundle +`2026-07-02.02-aiohttp-brand`, PR #31) — `brand/projects/modern-di-aiohttp/` +exists on `main`. Only the three public surfaces remain. + +## Precondition check (run first, all must pass) + +```bash +gh repo view modern-python/modern-di-aiohttp --json name # resolves +curl -s -o /dev/null -w '%{http_code}' https://pypi.org/pypi/modern-di-aiohttp/json # 200 +``` + +## Edits + +Canonical one-liner, used verbatim: **`modern-di integration for aiohttp`** +(note lowercase `aiohttp`). Insert everywhere immediately **after** +`modern-di-starlette` (order: fastapi -> litestar -> starlette -> aiohttp). + +### 1. `profile/README.md` — Dependency injection table + +Insert after the `modern-di-starlette` row. Match the current 4-column format +(`| Project | What it is | Stars | Downloads |`, post-#30 — no PyPI/Context7): + +```markdown +| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | +``` + +### 2. `docs/index.md` — DI list (`## Dependency injection { #di }`) + +Insert after the `modern-di-starlette` bullet: + +```markdown +- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. +``` + +### 3. `docs/index.md` — "The stack" sentence + +Add `aiohttp,` after `Starlette,`. Replace: + +``` + dependency injection with one wiring shared across FastAPI, Litestar, + Starlette, FastStream, and Typer. +``` + +with: + +``` + dependency injection with one wiring shared across FastAPI, Litestar, + Starlette, aiohttp, FastStream, and Typer. +``` + +### 4. GitHub repo settings (read-then-diff, apply only what's missing) + +```bash +gh repo view modern-python/modern-di-aiohttp --json description,homepageUrl,repositoryTopics +gh repo edit modern-python/modern-di-aiohttp \ + --description "modern-di integration for aiohttp" \ + --homepage "https://modern-di.modern-python.org" \ + --add-topic python --add-topic dependency-injection --add-topic di \ + --add-topic ioc-container --add-topic modern-di --add-topic aiohttp +``` + +## Verification (post-publish) + +- `just check-planning` -> `planning: OK`; `just test` green (no code touched, + but run the gate). +- `grep -c modern-di-aiohttp profile/README.md` -> 1; `... docs/index.md` -> 1 + (the DI bullet; the stack sentence names "aiohttp", not the slug). +- Badge/link resolve: `curl -sI` the Stars + Downloads badge URLs and the repo + link return 200 (Downloads may lag until pepy indexes the new package — the + same self-healing lag seen for modern-di-starlette; note it, do not block). +- `gh repo view` reflects the intended description, homepage, and topics. +- The `modern-di-aiohttp` README's brand images already resolve (assets on + `main` since #31). + +## Notes + +Ship as one PR (this bundle finalized + the two file edits) once unblocked; the +GitHub-settings step is out-of-repo and applied alongside. Independent of any +other pending work. From 41e987ea19d0aee2b3735aeec1dc82da811ccb05 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 2 Jul 2026 14:39:57 +0300 Subject: [PATCH 2/4] docs: aiohttp repo settings applied; profile/docs listing still pending PyPI Repo went public before PyPI publish. Homepage + topics set (description already canonical). Profile row + docs listing held until the package is on PyPI to avoid advertising an uninstallable package / broken Downloads badge. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../2026-07-02.04-aiohttp-surfaces/change.md | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md index f34aa87..b282ee8 100644 --- a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md +++ b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md @@ -6,16 +6,29 @@ summary: Ready-to-fire — add modern-di-aiohttp to the profile README, docs sit ## Status -**BLOCKED / staged.** Do not execute until -`github.com/modern-python/modern-di-aiohttp` is public **and** the package is on -PyPI. As of 2026-07-02 the repo does not resolve and PyPI returns 404, so the -Stars/Downloads badges and the repo link would 404 and `gh repo edit` would -fail. This bundle records the exact edits so they can be applied in one pass the -moment the repo ships. +**Partially applied.** The repo went public before the package was published to +PyPI. Progress so far: + +- **GitHub repo settings — DONE.** Applied once the repo was public: description + was already `modern-di integration for aiohttp`; homepage set to + `https://modern-di.modern-python.org`; topics set to `python, + dependency-injection, di, ioc-container, modern-di, aiohttp`. Verified via + `gh repo view`. +- **Profile README row + docs-site listing — still BLOCKED on PyPI.** The + package is not on PyPI yet (`/pypi/modern-di-aiohttp/json` → 404), so the + Downloads (pepy) badge would 404 and the package is not pip-installable. + Decision: do not advertise an uninstallable package. Apply the profile/docs + edits below once the package is on PyPI. The brand mark and assets are already done and merged (bundle `2026-07-02.02-aiohttp-brand`, PR #31) — `brand/projects/modern-di-aiohttp/` -exists on `main`. Only the three public surfaces remain. +exists on `main`. + +## Remaining precondition (for the profile/docs listing) + +```bash +curl -s -o /dev/null -w '%{http_code}' https://pypi.org/pypi/modern-di-aiohttp/json # must be 200 +``` ## Precondition check (run first, all must pass) From bcef123ac5575ce4b57266702964403a8378e160 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 2 Jul 2026 14:44:30 +0300 Subject: [PATCH 3/4] docs: list modern-di-aiohttp on profile README and docs site Add the DI-table row, docs DI bullet, and stack-sentence mention (after Starlette). Shipped ahead of PyPI per maintainer decision; the pepy Downloads badge will 404 until the package is published and pepy indexes it. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/index.md | 3 ++- .../2026-07-02.04-aiohttp-surfaces/change.md | 17 ++++++----------- profile/README.md | 1 + 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/index.md b/docs/index.md index 3b572c4..8d27dc9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -67,7 +67,7 @@ production Python services. Use one piece or all of them — each is independent - **Wire your dependencies** with [`modern-di`](https://github.com/modern-python/modern-di) — typed, scoped dependency injection with one wiring shared across FastAPI, Litestar, - Starlette, FastStream, and Typer. + Starlette, aiohttp, FastStream, and Typer. ([`that-depends`](https://github.com/modern-python/that-depends), its production-proven predecessor, is still maintained.) - **Call other services reliably** with @@ -99,6 +99,7 @@ catalog below. - [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) — `modern-di` integration for FastAPI. - [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) — `modern-di` integration for Litestar. - [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) — `modern-di` integration for Starlette. +- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. - [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) — `modern-di` integration for FastStream. - [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) — `modern-di` integration for Typer. - [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) — `modern-di` integration for pytest. diff --git a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md index b282ee8..918ee39 100644 --- a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md +++ b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md @@ -14,22 +14,17 @@ PyPI. Progress so far: `https://modern-di.modern-python.org`; topics set to `python, dependency-injection, di, ioc-container, modern-di, aiohttp`. Verified via `gh repo view`. -- **Profile README row + docs-site listing — still BLOCKED on PyPI.** The - package is not on PyPI yet (`/pypi/modern-di-aiohttp/json` → 404), so the - Downloads (pepy) badge would 404 and the package is not pip-installable. - Decision: do not advertise an uninstallable package. Apply the profile/docs - edits below once the package is on PyPI. +- **Profile README row + docs-site listing — DONE (shipped ahead of PyPI).** + Maintainer chose to ship the listing now even though the package is not on + PyPI yet (`/pypi/modern-di-aiohttp/json` → 404). Consequence: the pepy + Downloads badge on the new profile row 404s until the package is published to + PyPI and pepy indexes it — same self-healing lag pattern seen for + `modern-di-starlette`. All other elements (repo link, Stars badge) resolve. The brand mark and assets are already done and merged (bundle `2026-07-02.02-aiohttp-brand`, PR #31) — `brand/projects/modern-di-aiohttp/` exists on `main`. -## Remaining precondition (for the profile/docs listing) - -```bash -curl -s -o /dev/null -w '%{http_code}' https://pypi.org/pypi/modern-di-aiohttp/json # must be 200 -``` - ## Precondition check (run first, all must pass) ```bash diff --git a/profile/README.md b/profile/README.md index 5f768d2..cf913ab 100644 --- a/profile/README.md +++ b/profile/README.md @@ -27,6 +27,7 @@ Open-source templates and libraries for building production-ready Python applica | [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) | modern-di integration for FastAPI | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-fastapi)](https://github.com/modern-python/modern-di-fastapi/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-fastapi/month)](https://pepy.tech/projects/modern-di-fastapi) | | [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) | modern-di integration for Litestar | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-litestar)](https://github.com/modern-python/modern-di-litestar/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-litestar/month)](https://pepy.tech/projects/modern-di-litestar) | | [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) | modern-di integration for Starlette | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-starlette)](https://github.com/modern-python/modern-di-starlette/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-starlette/month)](https://pepy.tech/projects/modern-di-starlette) | +| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | | [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) | modern-di integration for FastStream | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-faststream)](https://github.com/modern-python/modern-di-faststream/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-faststream/month)](https://pepy.tech/projects/modern-di-faststream) | | [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) | modern-di integration for Typer | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-typer)](https://github.com/modern-python/modern-di-typer/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-typer/month)](https://pepy.tech/projects/modern-di-typer) | | [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) | modern-di integration for pytest | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-pytest)](https://github.com/modern-python/modern-di-pytest/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-pytest/month)](https://pepy.tech/projects/modern-di-pytest) | From db8ce1da1e33ad1a5b1647f5630ba3ee4db043b4 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Thu, 2 Jul 2026 14:55:06 +0300 Subject: [PATCH 4/4] docs: sort DI integrations alphabetically (profile, docs, MANIFEST) Order the Dependency injection integrations alphabetically across the profile table, docs DI list, and MANIFEST (modern-di first, that-depends last). aiohttp lands in its alphabetical slot; future integrations slot in without an insertion-point decision. No asset changes (render order is cosmetic). Co-Authored-By: Claude Opus 4.8 (1M context) --- brand/build/projects.py | 6 +++--- docs/index.md | 6 +++--- planning/changes/2026-07-02.04-aiohttp-surfaces/change.md | 6 ++++++ profile/README.md | 6 +++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/brand/build/projects.py b/brand/build/projects.py index 3a47edb..c9bdb0c 100644 --- a/brand/build/projects.py +++ b/brand/build/projects.py @@ -18,13 +18,13 @@ # dependency injection "modern-di": lambda: sym.graph(_CX, _CY, R, dashed=True), "that-depends": lambda: sym.graph(_CX, _CY, R, dashed=False), + "modern-di-aiohttp": lambda: sym.async_loop(_CX, _CY, R), "modern-di-fastapi": lambda: sym.bolt_disc(_CX, _CY, R), + "modern-di-faststream": lambda: sym.faststream(_CX, _CY, R), "modern-di-litestar": lambda: sym.star_disc(_CX, _CY, R), + "modern-di-pytest": lambda: sym.bars(_CX, _CY, R), "modern-di-starlette": lambda: sym.sparkle_cluster(_CX, _CY, R), - "modern-di-aiohttp": lambda: sym.async_loop(_CX, _CY, R), - "modern-di-faststream": lambda: sym.faststream(_CX, _CY, R), "modern-di-typer": lambda: sym.terminal(_CX, _CY, R), - "modern-di-pytest": lambda: sym.bars(_CX, _CY, R), # templates — reuse the org chevron "fastapi-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), "litestar-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), diff --git a/docs/index.md b/docs/index.md index 8d27dc9..c4e2a6c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -96,13 +96,13 @@ catalog below. ## Dependency injection { #di } - [`modern-di`](https://github.com/modern-python/modern-di) — powerful DI framework with scopes. +- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. - [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) — `modern-di` integration for FastAPI. +- [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) — `modern-di` integration for FastStream. - [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) — `modern-di` integration for Litestar. +- [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) — `modern-di` integration for pytest. - [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) — `modern-di` integration for Starlette. -- [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) — `modern-di` integration for aiohttp. -- [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) — `modern-di` integration for FastStream. - [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) — `modern-di` integration for Typer. -- [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) — `modern-di` integration for pytest. - [`that-depends`](https://github.com/modern-python/that-depends) — predecessor DI framework, still actively maintained. ## Microservices, HTTP & messaging { #services } diff --git a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md index 918ee39..c66622f 100644 --- a/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md +++ b/planning/changes/2026-07-02.04-aiohttp-surfaces/change.md @@ -20,6 +20,12 @@ PyPI. Progress so far: Downloads badge on the new profile row 404s until the package is published to PyPI and pepy indexes it — same self-healing lag pattern seen for `modern-di-starlette`. All other elements (repo link, Stars badge) resolve. +- **DI section sorted alphabetically (folded in).** Per maintainer request, the + Dependency injection integrations are now ordered alphabetically across the + profile table, the docs DI list, and the `MANIFEST` (`modern-di` stays first, + `that-depends` last). This supersedes the earlier "insert after Starlette" + placement — `modern-di-aiohttp` now lands in its alphabetical slot. Future + integrations slot in alphabetically, no insertion-point decision needed. The brand mark and assets are already done and merged (bundle `2026-07-02.02-aiohttp-brand`, PR #31) — `brand/projects/modern-di-aiohttp/` diff --git a/profile/README.md b/profile/README.md index cf913ab..1e59a18 100644 --- a/profile/README.md +++ b/profile/README.md @@ -24,13 +24,13 @@ Open-source templates and libraries for building production-ready Python applica | Project | What it is | Stars | Downloads | |---|---|---|---| | [`modern-di`](https://github.com/modern-python/modern-di) | Powerful DI framework with scopes | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di)](https://github.com/modern-python/modern-di/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di/month)](https://pepy.tech/projects/modern-di) | +| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | | [`modern-di-fastapi`](https://github.com/modern-python/modern-di-fastapi) | modern-di integration for FastAPI | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-fastapi)](https://github.com/modern-python/modern-di-fastapi/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-fastapi/month)](https://pepy.tech/projects/modern-di-fastapi) | +| [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) | modern-di integration for FastStream | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-faststream)](https://github.com/modern-python/modern-di-faststream/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-faststream/month)](https://pepy.tech/projects/modern-di-faststream) | | [`modern-di-litestar`](https://github.com/modern-python/modern-di-litestar) | modern-di integration for Litestar | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-litestar)](https://github.com/modern-python/modern-di-litestar/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-litestar/month)](https://pepy.tech/projects/modern-di-litestar) | +| [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) | modern-di integration for pytest | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-pytest)](https://github.com/modern-python/modern-di-pytest/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-pytest/month)](https://pepy.tech/projects/modern-di-pytest) | | [`modern-di-starlette`](https://github.com/modern-python/modern-di-starlette) | modern-di integration for Starlette | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-starlette)](https://github.com/modern-python/modern-di-starlette/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-starlette/month)](https://pepy.tech/projects/modern-di-starlette) | -| [`modern-di-aiohttp`](https://github.com/modern-python/modern-di-aiohttp) | modern-di integration for aiohttp | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-aiohttp)](https://github.com/modern-python/modern-di-aiohttp/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-aiohttp/month)](https://pepy.tech/projects/modern-di-aiohttp) | -| [`modern-di-faststream`](https://github.com/modern-python/modern-di-faststream) | modern-di integration for FastStream | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-faststream)](https://github.com/modern-python/modern-di-faststream/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-faststream/month)](https://pepy.tech/projects/modern-di-faststream) | | [`modern-di-typer`](https://github.com/modern-python/modern-di-typer) | modern-di integration for Typer | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-typer)](https://github.com/modern-python/modern-di-typer/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-typer/month)](https://pepy.tech/projects/modern-di-typer) | -| [`modern-di-pytest`](https://github.com/modern-python/modern-di-pytest) | modern-di integration for pytest | [![Stars](https://img.shields.io/github/stars/modern-python/modern-di-pytest)](https://github.com/modern-python/modern-di-pytest/stargazers) | [![Downloads](https://static.pepy.tech/badge/modern-di-pytest/month)](https://pepy.tech/projects/modern-di-pytest) | | [`that-depends`](https://github.com/modern-python/that-depends) | Predecessor DI framework, still actively maintained | [![Stars](https://img.shields.io/github/stars/modern-python/that-depends)](https://github.com/modern-python/that-depends/stargazers) | [![Downloads](https://static.pepy.tech/badge/that-depends/month)](https://pepy.tech/projects/that-depends) | ### Microservices, HTTP & messaging