Skip to main content

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

ServiceRuntime TypePrimary PurposeMain Entry SurfaceBackground WorkCurrent Cutover Posture
gatewayAPIPlayer HTTP edge and legacy payload translationroot paths and /api/v1/* for playersnoneplayer-facing cutover candidate
player_serviceAPI + workerplayer auth, profile, messages, common/public data/internal/players/*, /internal/common/*outbox publishing in player_workersupports gateway cutover
wallet_serviceAPI + workerplayer-wallet balances, deposits, withdrawals, approved finance events, legacy player-balance compatibility writes/internal/wallet/*outbox publishing, cleanup, sweeper, lag gauges, reconciliation in wallet_workercentral player-wallet dependency; independent data-plane split pending
game_serviceAPIAggregator-backed game APIs plus provider protocol/wallet semanticssigned /aggregator/provider/* relay and internal /integration/*noneAggregator-only cutover
rolling_serviceAPI + workerrolling records, completion, cancel, expiry, retry/internal/rolling/*wallet-event consumer, outbox, cleanup, expiry, retry in rolling_workerinternal domain runtime ready
promotion_serviceAPI + workercoupons, rebate/lossback config, settlement orchestration/internal/promotions/*wallet-event consumer, settlement scheduler, saga recoveryinternal domain runtime ready
agent_serviceAPI + workeragent portal APIs and legacy compatibility aliases/agent/* agent-facing surfaceoutbox publishing, cleanup, coupon wallet saga in agent_workeragent cutover candidate
admin_serviceAPI + workerback-office edge, top-info websocket, operational APIs/api/v1/*, /ws, /internal/meta/*scheduler in admin_workercore admin ready, not full middle_server replacement
recon_serviceAPI + workerSMS automation and reconciliation domain/internal/recon/* via admin edgePushbullet/Telegram/parse/match worker loopsrecon cutover candidate

Legacy Runtime Still Relevant During Migration

Legacy ServiceWhy It Still Matters
web_servercompatibility baseline for player-facing route parity
agent_servercompatibility baseline for agent-facing route parity
game_servercompatibility baseline for callback surface parity
middle_serverstill 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_service owns 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_service and agent_service; they are audited and metered but not yet behind the final owner boundary.
  • event graph closure is also pending. docs/architecture/event-catalog.md lists DEPOSIT_APPROVED, WITHDRAW_APPROVED, and ROLLING_COMPLETED_CONFIRMED as producer-only; do not claim full event closure until every production-significant event has an intentional consumer or an explicit producer-only exception.
  • admin_service is ready for its core v2 routes, but it is not a full middle_server replacement. The seven residual prefixes are governed by docs/runbooks/legacy-middle-server-retirement.md.

Multi-Brand Notes

Per ADR-009:

  • admin_service additionally owns the brand catalog, brand_config per-brand configuration, and agent_brand allow-list write surface.
  • admin_service no longer carries staff identity logic. The legacy_admin_v2.py, legacy_auth.py, legacy_agents_v2.py, legacy_agent_withdrawals_v2.py, legacy_meta_v2.py, legacy_recon.py, and legacy_web_content.py route files are deleted; their /api/admin/* route families return 404.
  • 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 by brand_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