Request lifecycle and module boundaries
Console :3000 ─┐
Application ──┴─> Gateway :4000
-> Auth / Authz / Limits
-> Router -> Dataplane -> Provider
-> Usage -> PostgreSQL
-> Redis queue (optional)Follow one request
| Stage | Source | Boundary |
|---|---|---|
| HTTP wiring | gateway | UI buttons do not authorize requests |
| Identity / authorization | auth, authz | Client metadata is not trusted identity |
| Candidate compilation | router | Cannot expand model scope |
| Upstream execution | dataplane | Cannot splice another provider after a partial stream |
| Protocol registration / conversion | provider, llm | A catalog entry does not prove executable support |
| Configuration / identity / accounting | store, iam | Current configuration must not rewrite historical ownership |
Normal inference runs authentication, limits, guardrails, routing, execution and accounting. Native tasks use a separate lifecycle; chat cache and retry rules do not apply automatically.
Verification
go test ./internal/router ./internal/dataplane/... -count=1
go test ./internal/gateway -run 'TestVisibilityChain' -count=1