docs: fix 22 inaccuracies from the 2026-06-12 docs audit (I1–I22)#64
Merged
Conversation
Corrects stale/misleading (but not flatly broken) docs from
planning/active/2026-06-12-docs-audit-findings.md, each verified against
current source:
- I1 how-it-works: illustrative fetch CTE — real ORDER BY (next_attempt_at,
id), deliveries_count increment, "simplified" note on the OR shape
- I2 how-it-works/timers: NOTIFY skipped only when genuinely future-dated;
a past activate_at still notifies
- I3 installation: base ships no async driver; asyncpg DSNs need it
- I4 add-kafka-relay: listener rationale — Step 5 consumer uses the HOST
listener from inside the broker container, not the DOCKER listener
- I5 add-kafka-relay: T1 cleanup destroys the --rm Postgres container;
recovery note added
- I6 subscriber: min_fetch_interval is the jittered idle-backoff base +
queue-full wait, not a floor "when the queue has work"
- I7 subscriber/troubleshooting: start() only schedules tasks; pool
exhaustion = repeating reconnect ERRORs + starved dispatch, not a hang
- I8 dlq/observability: dlq_written always emits exception_type (None when
absent)
- I9 dlq: add missing `from sqlalchemy import MetaData`
- I10 schema-validation: note the second pass over the DLQ table
- I11 publisher: terminal write runs on the worker autocommit conn, not the
user session
- I13 fastapi: broker middlewares go through OutboxRouter(middlewares=[...])
- I14 setup-prometheus: kwarg is `middlewares`, not `broker_middlewares`
- I15 observability: dispatched/acked/nacked_terminal/lease_lost catalog rows
- I16 instrumentation-seams: "four events" → three (empty-fetch == fetched)
- I17 comparison: drop unreachable "channel name too long" NOTIFY-loss mode
- I18 subscriber/troubleshooting/checklist: server-side budget is
max_workers + 2 (pool +1 plus the raw LISTEN conn); pool formula +1 kept
- I19 alembic: astext_type=sa.Text() (qualified)
- I20 alembic: validate_schema is opt-in — fails a /health probe or CI gate,
doesn't run at broker.start()
- I21 observability: seven subscriber emission points (with dlq_written)
- I22 setup-prometheus: OTel recorder also emits messaging.publish.messages
and the three messaging.outbox.* instruments
I12 (testing.md "_FakeRow dicts") was already resolved as collateral of the
B3 fix in #63. Bugs (B1–B14) shipped in #63; improvements (P1–P25) remain
open triage. mkdocs build --strict passes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
Fixes all 22 inaccuracy-severity findings from
planning/active/2026-06-12-docs-audit-findings.md— docs that are stale or misleading but not flatly broken. Each correction was verified against current source (post-#61/#63).ORDER BY (next_attempt_at, id),deliveries_countincrement, "simplified" note on the partial-indexORshapeactivate_atstill notifiesasyncpgDSNs need one--rmPostgres container — recovery note addedmin_fetch_intervalis the jittered idle-backoff base + queue-full wait, not a "floor when the queue has work"start()only schedules tasks; pool exhaustion = repeating reconnect ERRORs + starved dispatch, not a hang atstart()dlq_writtenalways emitsexception_type(Nonewhen absent)from sqlalchemy import MetaDataOutboxRouter(middlewares=[...])middlewares, notbroker_middlewaresdispatched/acked/nacked_terminal/lease_lostevent-catalog rows corrected to actual tagsfetchedwithcount=0)make_outbox_tableraises first)max_workers + 2(pool+1plus the rawLISTENconn); pool formula+1keptastext_type=sa.Text()(qualified)validate_schema()is opt-in — fails a/healthprobe or CI gate, never runs atbroker.start()dlq_written)messaging.publish.messages+ the threemessaging.outbox.*instrumentsNotes
_FakeRowdicts") was already resolved as collateral of the B3 fix in docs: fix 14 confirmed bugs from the 2026-06-12 docs audit (B1–B14) #63.dlq_writtenrow in observability.md (I8) and thebroker.start()troubleshooting heading/TOC (I7).Test plan
just docs-build(mkdocs build --strict) passes_base_tagssubscriber, lease_lost phases, OTel instrument set,dlq_writtenexception_type,max_workers + 2,middlewareskwarg) verified against current codebroker_middlewares, "six emission points", or "four events" in docs🤖 Generated with Claude Code