Cross-module truthful runtime persistence supporting the sprint_20260415 and sprint_20260416 cutovers. These modules have no single dedicated sprint owner in the current batch, but they unblock downstream wiring in Policy (reachability facts), ReachGraph (signals adapter), and the air-gap controller/time services. - Signals.Persistence: migration 003 runtime_canonical_tables; Postgres repos (callgraph + projection, reachability fact/store, deployment refs, graph metrics); DB context factory + service collection extensions. - Signals: swap in-memory callgraph/reachability repositories for Postgres wired via SignalsPersistenceExtensions; durable host tests. - ReachGraph.WebService: SignalsHttpAdapter + program wiring; host wiring + adapter tests. - AirGap.Controller: service-collection extensions + infrastructure wiring; endpoint + startup contract tests. - AirGap.Time: PostgresTimeAnchorStore + startup service; runtime contract + persistence tests. - AirGap.Persistence: persistence extensions. - Zastava: csproj cleanup (Observer + Core). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ReachGraph
Container(s): stellaops-reachgraph-web Slot: 22 | Port: 8080 | Consumer Group: reachgraph Resource Tier: light
Purpose
The ReachGraph service provides content-addressed storage and retrieval of reachability subgraphs. It stores canonical serialized reachability data with digest-based addressing, uses PostgreSQL for persistence and Valkey for caching, and supports rate-limited access for high-throughput graph queries.
API Surface
reachgraph(via Router) — reachability subgraph storage (PUT), retrieval by digest (GET), comparison, rate-limited queries
Storage
PostgreSQL (via ConnectionStrings:PostgreSQL); Valkey cache (via ConnectionStrings:Redis)
Background Workers
None