Signals API — Reachability Contract

Status: Working contract (aligns with src/Signals/StellaOps.Signals/Program.cs).

This document is the as-wired contract for the Stella Ops Signals service: it enumerates exactly the HTTP routes the Signals host registers in the request pipeline, the scopes each requires, and the routes that are defined in the assembly but not served. It is the authoritative companion to the Signals API reference, which presents the same surface in a more narrative form — when the two disagree, prefer this contract and the source it cites.

All routes are registered in Program.cs (minimal-API endpoints), CompatibilityApiV1Endpoints.cs, and ScmWebhookEndpoints.cs. URLs are lowercased (AddRouting(LowercaseUrls = true)).

Auth, scopes, sealed mode

Endpoints

Discovery, health & status

Callgraph ingestion & retrieval

Sample request: docs/api/signals/samples/callgraph-sample.json

Runtime facts ingestion

Runtime observations ingestion (internal agent)

Unknowns ingestion, retrieval & query

Reachability scoring & facts

Sample fact: docs/api/signals/samples/facts-sample.json

Execution evidence

Beacon attestation

Reachability union bundle ingestion (CAS layout)

Compatibility surface (/api/v1/signals)

These return a fixed, in-memory deterministic sample dataset (operator/console compatibility) and accept either signals:read or orch:read.

SCM / CI webhooks

Anonymous endpoints (AllowAnonymous()); authentication is per-provider signature/token validation rather than Authority scopes. All are subject to sealed-mode enforcement.

Responses: 501 Not Implemented problem+json with code source_scan_not_available (or sbom_ingest_not_available) when the event asks for a scan or an SBOM ingest, which Signals cannot dispatch; 200 with a message when the event asks for neither or is not mapped; 400/401 on validation failures. No webhook answers 202.

Withdrawn surfaces

Withdrawn 2026-09-27 (SPRINT_20260927_003 PCD-44). The attribute-routed controllers that were compiled into the Signals assembly but never served (Program.cs maps no MVC controllers) are withdrawn, and their routes answer 404:

  • RuntimeAgentController / RuntimeFactsController, route base api/v1/agents (register, heartbeat, get, list, delete, commands, posture, facts). That base is Release Orchestrator’s agent surface. Runtime observations are ingested at POST /api/v1/runtime/observations and POST /signals/runtime-facts.
  • HotSymbolsController, route base api/v1/signals: hot-symbols, hot-symbols/top, hot-symbols/stats, hot-symbols/correlated.