Service Catalog
Status
Active
Date
2026-04-28
Owners
- Platform Backend
Last Verified Commit
Use git log -- <this file> for current last-touch history; this field is intentionally not pinned to a static hash so it does not become stale after unrelated commits.
Runtime Services
| Service | Runtime Type | Primary Purpose | Main Entry Surface | Background Work | Current Cutover Posture |
|---|---|---|---|---|---|
gateway | API | Player HTTP edge and legacy payload translation | root paths and /api/v1/* for players | none | player-facing cutover candidate |
player_service | API + worker | player auth, profile, messages, common/public data | /internal/players/*, /internal/common/* | outbox publishing in player_worker | supports gateway cutover |
wallet_service | API + worker | player-wallet balances, deposits, withdrawals, approved finance events, legacy player-balance compatibility writes | /internal/wallet/* | outbox publishing, cleanup, sweeper, lag gauges, reconciliation in wallet_worker | central player-wallet dependency; independent data-plane split pending |
game_service | API | Aggregator-backed game APIs plus provider protocol/wallet semantics | signed /aggregator/provider/* relay and internal /integration/* | none | Aggregator-only cutover |
rolling_service | API + worker | rolling records, completion, cancel, expiry, retry | /internal/rolling/* | wallet-event consumer, outbox, cleanup, expiry, retry in rolling_worker | internal domain runtime ready |
promotion_service | API + worker | coupons, rebate/lossback config, settlement orchestration | /internal/promotions/* | wallet-event consumer, settlement scheduler, saga recovery | internal domain runtime ready |
agent_service | API + worker | agent portal APIs and legacy compatibility aliases | /agent/* agent-facing surface | outbox publishing, cleanup, coupon wallet saga in agent_worker | agent cutover candidate |
admin_service | API + worker | back-office edge, top-info websocket, operational APIs | /api/v1/*, /ws, /internal/meta/* | scheduler in admin_worker | core admin ready, not full middle_server replacement |
recon_service | API + worker | SMS automation and reconciliation domain | /internal/recon/* via admin edge | Pushbullet/Telegram/parse/match worker loops | recon cutover candidate |
Legacy Runtime Still Relevant During Migration
| Legacy Service | Why It Still Matters |
|---|---|
web_server | compatibility baseline for player-facing route parity |
agent_server | compatibility baseline for agent-facing route parity |
game_server | compatibility baseline for callback surface parity |
middle_server | still owns non-recon legacy back-office modules not yet fully represented in servers_v2 |
Cutover And Ownership Notes
Cutover posture in the table above is route-surface readiness, not a claim that all legacy data ownership has been retired. Current production claims must keep these limits:
wallet_serviceowns player-wallet money writes, but still writes legacy player-balance compatibility fields while the data plane remains shared.- agent-domain money writes still have legacy-compatible direct updates in
admin_serviceandagent_service; they are audited and metered but not yet behind the final owner boundary. - event graph closure is also pending.
docs/architecture/event-catalog.mdlistsDEPOSIT_APPROVED,WITHDRAW_APPROVED, andROLLING_COMPLETED_CONFIRMEDas producer-only; do not claim full event closure until every production-significant event has an intentional consumer or an explicit producer-only exception. admin_serviceis ready for its core v2 routes, but it is not a fullmiddle_serverreplacement. The seven residual prefixes are governed bydocs/runbooks/legacy-middle-server-retirement.md.
Multi-Brand Notes
Per ADR-009:
admin_serviceadditionally owns thebrandcatalog,brand_configper-brand configuration, andagent_brandallow-list write surface.admin_serviceno longer carries staff identity logic. Thelegacy_admin_v2.py,legacy_auth.py,legacy_agents_v2.py,legacy_agent_withdrawals_v2.py,legacy_meta_v2.py,legacy_recon.py, andlegacy_web_content.pyroute files are deleted; their/api/admin/*route families return404.- Every service runtime resolves brand from
X-Brand-Id(forwarded by the edge service that resolved the brand from the request domain) or from JWT, and scopes its writes bybrand_id.
Shared Infrastructure
Every runtime service currently depends on some combination of:
- PostgreSQL
- Redis
- shared contracts in
servers_v2/shared/contracts - shared database runtime and migrations in
servers_v2/shared/rgb_db
Supporting Evidence
- local stack contract:
servers_v2/tests/test_compose_contract.py - service route registration:
servers_v2/*/app/api/routes/api.py - worker runtime entrypoints:
servers_v2/*/worker.py