diff --git a/planning/README.md b/planning/README.md index 422eeb6..eda0b1c 100644 --- a/planning/README.md +++ b/planning/README.md @@ -65,3 +65,6 @@ _None._ *shipped* state, not pending work. - **[lint-suppressions.md](lint-suppressions.md)** — audit of `noqa` / `ty: ignore` directives and why each one stays. +- **[deferred-work.md](deferred-work.md)** — real-but-unscheduled items + raised in reviews/audits, parked with a revisit trigger (e.g. the + `OutboxRouter` DLQ/recorder forwarding gap). diff --git a/planning/deferred-work.md b/planning/deferred-work.md new file mode 100644 index 0000000..f35d708 --- /dev/null +++ b/planning/deferred-work.md @@ -0,0 +1,31 @@ +# Deferred Work + +Items raised in reviews or audits that are real but not actionable now. +Each is parked here with the reason it's deferred and the concrete trigger +that should bring it back. This is the long-tail register — not a backlog +of planned work. When an item is picked up it graduates to a spec/plan +pair in [`active/`](active/); see [CLAUDE.md](../CLAUDE.md#workflow). + +As of the 2026-06-12 code + docs audit closure (PRs #61–#74), the audit +backlog is empty. The items below are the remainder: technically real, +but deliberately unscheduled pending a trigger. + +## Open + +### FastAPI integration + +- **`OutboxRouter` doesn't forward `dlq_table` / `metrics_recorder` / + `routers`.** These three `OutboxBroker.__init__` arguments are not + exposed on `OutboxRouter.__init__`, and the router constructs the broker + internally with no handle to inject a pre-built one — so a FastAPI user + **cannot** enable the dead-letter queue or the metrics-recorder seam + through the router at all. The only path today is a standalone + `OutboxBroker`. This is documented as a limitation in + [`docs/usage/fastapi.md`](../docs/usage/fastapi.md) (audit improvement + P18, #72). Forwarding the kwargs is small in `OutboxRouter.__init__` + + the `super().__init__` passthrough, but it's a real feature with a + design surface (defaults, AsyncAPI/typing implications, whether + `routers` even makes sense through the FastAPI lifespan), not a + mechanical fix — hence a spec, not a drive-by. Revisit when a concrete + "FastAPI + DLQ" or "FastAPI + recorder seam" demand surfaces. + (`faststream_outbox/fastapi/router.py`)