Auctions Truth Map
This document is the Sprint 02 auction truth map.
Rules used here:
VERIFIED: proven directly in codeINFERRED: likely from code shape, but not fully proven end-to-endUNVERIFIED: not provenREAL: durable canonical backend path existsMIXED: real and non-canonical paths coexistUI-FIRST: browser/session/UI behavior is the effective implementationSHELL: shape exists, but operational depth is weakMISSING: no trustworthy implementation found
Capability Matrix
| Capability | Truth | State | Canonical source of truth | Evidence | Reality note |
| --- | --- | --- | --- | --- | --- |
| Public list/read | VERIFIED | MIXED | services/svc-tenders backed by Postgres + | ; , , ; ; | Public reads are canonical only when the gateway successfully proxies to . The gateway can still fall back to the local compatibility engine. |
| Public detail/read | | | backed by Postgres + | ; ; | Same split as list/read: canonical if proxied upstream, compatibility if the gateway falls back. |
| Internal declaration list/read | | | internal admin routes | , , ; , , | This is the cleanest auction read surface in the repo. It is capability-gated and service-backed. |
| Create draft / declaration authoring | | | table plus registry projection in | ; ; ; , | Durable. This is the real auction creation path in the current repo, but it is an internal/admin declaration flow, not a public bidder-facing action flow. |
| Mark ready / declare / announce | | | , , registry projection row in | , ; ; , ; , , | Durable and transactionally written inside . This is the real state-transition path for announcement, not the public gateway local engine route. |
| Public create action surface () | | | No canonical durable owner found | ; | Exists and runs, but only against the gateway-local compatibility engine. It is not the durable canonical auction creation path. |
| Public bid submit | | | No durable public source of truth | ; ; | The current user-facing bid flow does not call a durable backend. It writes to browser . A compatibility gateway bid route exists, but the main portal flow is not using it as canonical truth. |
| Public bid state updates in list/detail UI | | | Base read comes from service or fallback; visible updates are overlaid in browser session state | ; session overlay reads/subscriptions; session sync/subscriptions | The UI can look stateful and coherent, but it is not a single durable read model. Canonical service reads and session overlays are mixed together. |
| Winner selection as public action | | | No canonical public durable route found | | Public winner selection currently exists only as a local-engine compatibility route. That is executable, but not durable platform truth. |
| Settlement recording / entitlement creation | | | table in , mirrored to linked record when present | ; , reuse/backfill logic | Durable. This is the strongest post-award auction write in the current backend. It is not the same thing as a public winner-selection API. |
| Fulfillment transition | | | No durable backend source of truth | ; ; fulfillment and transport selection handlers | Winner fulfillment and transport choice are intentionally session-local today. They can look workflow-like, but they are not durable backend state. |
| Analytics / history | | | Declaration event log exists; public portal history does not | ; ; | There is real internal declaration history, but the public portal detail currently exposes an empty audit trail. Do not overstate public auction history as operational. |
| Notifications / events | | | Internal declaration event table only | ; and | There is evidence of durable declaration-event logging. I did verify an auction-specific Kafka/outbox/consumer chain equivalent to KES. Treat auction eventing as partial, not fully event-driven. |