S00 Endpoint Contract Ledger v2 (Pack 22 Delta)
Status: Historical Pack 22 contract baseline; not current UI route authority (2026-07-13) Date: 2026-02-20 Working directory: docs/modules/ui/v2-rewire Template source: S00_contract_ledger_template.md Supersedes for new IA planning: S00_endpoint_contract_ledger_v1.md remains historical baseline for pre-Pack-22 structure.
Verify backend contract rows against their owning source. Current UI route and scope authorities are linked from the directory currency notice.
Status class definitions
| Status class | Meaning |
|---|---|
EXISTS_COMPAT | Endpoint exists and is compatible with Pack 22 screen needs without schema change. |
EXISTS_ADAPT | Endpoint exists but requires schema additions, filter/sort extensions, or composition changes for Pack 22. |
MISSING_NEW | No endpoint exists; must be designed and implemented before the consuming sprint can complete. |
Ledger
| Domain | Screen/Page | Canonical source refs | Current route/page | Current endpoint candidate(s) | Status | Owner module | Auth scope impact | Schema delta summary | Decision/risk notes | Action ticket |
|---|---|---|---|---|---|---|---|---|---|---|
| Global context | Region/Environment top-bar selectors and persistence | source-of-truth.md 2.2, pack-22.md 3, authority-matrix.md A | Canonical v3 top-bar context route family under /api/v2/context/* | GET /api/v2/context/regions; GET /api/v2/context/environments?regions=; GET /api/v2/context/preferences; PUT /api/v2/context/preferences | EXISTS_COMPAT | Platform | New read/write scope pair (platform.context.read, platform.context.write) implemented in Platform auth policy map | Shipped in sprint SPRINT_20260220_018 with migration 047_GlobalContextAndFilters.sql (platform.context_regions, platform.context_environments, platform.ui_context_preferences) and deterministic ordering indexes | FE top-bar context cutover unblocked for contract baseline; keep v1 aliases for unrelated surfaces during transition | S22-T01-CTX-01 |
| Dashboard | Mission control posture | source-of-truth.md 3.2, pack-22.md 5, pack-16.md | /, /dashboard | Existing GET /api/v1/dashboard/summary plus policy/scanner aggregates | EXISTS_ADAPT | Platform | Reuse viewer scopes | Extend dashboard payload with blocked promotion reasons, hotfix lane, evidence posture summary, quick-action counters | Keep /api/v1/dashboard/summary alias while adding /api/v2/dashboard/posture | S22-T02-DASH-01 |
| Releases | Releases list (standard + hotfix) | source-of-truth.md 3.3, pack-22.md 5 | /release-control/releases (legacy) | GET /api/v2/releases; fallback composition from /api/v1/release-control/bundles, /api/v1/approvals | EXISTS_COMPAT | Platform + ReleaseOrchestrator | Existing orch:read plus release list scope alias (policy mapped via platform.releasecontrol.read) | Shipped release type, gate summary, risk delta, and region/env filters in deterministic read-model projection backed by migration 048_ReleaseReadModels.sql | B22-02 shipped list contract; maintain legacy routes until B22-06 deprecation telemetry pass | S22-T03-REL-01 |
| Releases | Release detail tabs (overview/timeline/deploy/security/evidence/audit) | source-of-truth.md 3.3, pack-22.md 5, pack-13.md, pack-14.md, pack-17.md | Split across /release-control/*, /deployments/*, /approvals/* | GET /api/v2/releases/{releaseId}; GET /api/v2/releases/{releaseId}/timeline; GET /api/v2/releases/{releaseId}/deployments; GET /api/v2/releases/{releaseId}/security; GET /api/v2/releases/{releaseId}/evidence; GET /api/v2/releases/{releaseId}/audit | EXISTS_ADAPT | Platform + ReleaseOrchestrator + Policy + Scanner + EvidenceLocker | Existing read scopes; add composite read policy | Base detail endpoint GET /api/v2/releases/{releaseId} now ships summary+versions+recent activity+approvals projection with correlation keys from migration 048; tab-specific sub-endpoints remain pending | Partial closure in B22-02; keep row open for timeline/deploy/security/evidence/audit endpoint split completion | S22-T03-REL-02 |
| Releases | Run detail provenance tabs (timeline/gate/approvals/deployments/security-inputs/evidence/rollback/replay) | source-of-truth.md 3.3, pack-22.md 5, docs/implplan/SPRINT_20260220_022_FE_pack22_run_detail_provenance_contract.md | /releases/runs/:runId (target canonical route) | GET /api/v2/releases/runs/{runId}; GET /api/v2/releases/runs/{runId}/timeline; GET /api/v2/releases/runs/{runId}/gate-decision; GET /api/v2/releases/runs/{runId}/approvals; GET /api/v2/releases/runs/{runId}/deployments; GET /api/v2/releases/runs/{runId}/security-inputs; GET /api/v2/releases/runs/{runId}/evidence; GET /api/v2/releases/runs/{runId}/rollback; GET /api/v2/releases/runs/{runId}/replay; GET /api/v2/releases/runs/{runId}/audit | EXISTS_COMPAT | Platform + ReleaseOrchestrator + Policy + Scanner + EvidenceLocker + Attestor | Existing read scopes plus v1 alias reads for cutover compatibility | Shipped in SPRINT_20260220_023 with deterministic run-detail contracts and migrations 052_RunInputSnapshots.sql through 056_RunCapsuleReplayLinkage.sql | FE sprint SPRINT_20260220_022 unblocked for tab-by-tab binding; monitor alias telemetry before removing legacy v1 reads | S23-T01-RUN-01 |
| Releases | Activity (cross-release runs timeline) | source-of-truth.md 3.3, pack-22.md 5, pack-14.md | /release-control/runs (legacy) | GET /api/v2/releases/activity with filters; fallback from /api/v1/runs/* | EXISTS_COMPAT | ReleaseOrchestrator + Platform | Existing orch:read | Shipped cross-release activity projection with correlation keys + region/env filters from deterministic read-model composition | Deterministic order enforced by occurredAt DESC + stable activityId tie-break | S22-T03-REL-03 |
| Releases | Approvals queue (cross-release) | source-of-truth.md 3.3, pack-22.md 5, pack-17.md | /release-control/approvals (legacy) | Existing /api/v1/approvals; add /api/v2/releases/approvals alias with richer metadata | EXISTS_COMPAT | Policy + ReleaseOrchestrator + Platform | Existing reviewer/approver scopes (orch:read path for queue projection) | Shipped release identity fields, blocker summaries, and region/env filters in /api/v2/releases/approvals projection | Single queue UX dependency unblocked for FE contract migration; v1 approvals endpoint remains for backward compatibility | S22-T03-REL-04 |
| Topology | Regions, Environments, Targets/Hosts, Agents | source-of-truth.md 3.4, pack-22.md 5, pack-18.md | Legacy under /release-control/regions, /platform-ops/agents, /integrations/hosts | GET /api/v2/topology/regions; GET /api/v2/topology/environments; GET /api/v2/topology/targets; GET /api/v2/topology/hosts; GET /api/v2/topology/agents | EXISTS_COMPAT | Platform + ReleaseOrchestrator + Integrations | platform.topology.read policy now mapped to existing orch:read scope in Platform auth wiring | Shipped migration 049_TopologyInventory.sql with normalized region/environment/target/host/agent projection tables and sync watermark tracking | Duplicate inventory placement can now be removed from Integrations/Operations nav during FE route migration | S22-T04-TOP-01 |
| Topology | Promotion Paths, Workflows, Gate Profiles | source-of-truth.md 3.4, pack-22.md 5, pack-13.md | Legacy setup pages under /release-control/setup/* | GET /api/v2/topology/promotion-paths; GET /api/v2/topology/workflows; GET /api/v2/topology/gate-profiles; write routes in follow-up sprint | EXISTS_COMPAT | ReleaseOrchestrator + Policy + Platform | Topology read policy uses existing orch:read scope; write-authoring scopes stay in module-owned follow-up routes | Shipped deterministic read projections for paths/workflows/gate profiles with region/environment filters; write contracts remain follow-up scope | FE can consume read contracts now; explicit write routes can phase in a subsequent sprint without blocking Pack 22 IA cutover | S22-T04-TOP-02 |
| Policy | Policy Simulation Studio (history, compare, reproducibility, conflicts, batch evaluations) | source-of-truth.md 3.8, pack-22.md 5 | /policy/simulation/* | GET /policy/simulations/history; GET /policy/simulations/compare; POST /policy/simulations/{simulationId}/verify; PATCH /policy/simulations/{simulationId}; POST /policy/conflicts/detect; POST /policy/conflicts/{conflictId}/resolve; POST /policy/conflicts/auto-resolve; POST /policy/batch-evaluations; GET /policy/batch-evaluations; GET /policy/batch-evaluations/{batchId}; POST /policy/batch-evaluations/{batchId}/cancel | EXISTS_COMPAT | Policy | Existing policy:simulate + policy read scopes | FE runtime cutover (Sprint 042) removed inline component mock datasets and now binds these screens to backend responses through POLICY_SIMULATION_API -> PolicySimulationHttpClient | Keep mock simulation service for test harness wiring only; runtime bindings must remain tokenized in app config | S22-T10-POL-01 |
| Security | Graph Explorer (runtime graph metadata/tile fetch) | source-of-truth.md 3.5, pack-19.md, pack-22.md 5 | /analyze/graph | GET /api/graph/graphs; GET /api/graph/graphs/{graphId}/tiles | EXISTS_COMPAT | Graph + Platform | Existing graph:read viewer scope | FE runtime cutover (Sprint 042) removed inline MOCK_NODES/MOCK_EDGES from graph explorer and now maps graph tile payloads to canvas node/edge view-models | If graph inventory is empty, UI renders deterministic empty state; endpoint aliasing remains gateway-owned | S22-T10-SEC-04 |
| Security | Findings unified explorer with pivots | source-of-truth.md 3.5, pack-22.md 5, pack-19.md | /security-risk/findings, /security-risk/vulnerabilities, /security-risk/reachability | GET /api/v2/security/findings; legacy /api/v1/security/findings and /api/v1/security/vulnerabilities retained during migration | EXISTS_COMPAT | Scanner + Platform | platform.security.read mapped to existing findings:read viewer scope in Platform policy map | Shipped pivot/facet schema (CVE/package/component/release/environment), disposition summary columns, and deterministic filter/sort envelope in B22-04 | Legacy endpoints stay available through cutover window; FE security explorer can migrate to v2 contract | S22-T05-SEC-01 |
| Security | Disposition (VEX + Exceptions UX join) | source-of-truth.md 2.3, source-of-truth.md 3.5, pack-22.md 5 | /security-risk/vex, /security-risk/exceptions (legacy split) | GET /api/v2/security/disposition; GET /api/v2/security/disposition/{findingId}; exception/VEX writes remain module-owned routes | EXISTS_COMPAT | Policy + Scanner + Platform | platform.security.read mapped to findings:read for read projection; exception/VEX writes keep module approval scopes | Shipped migration 050_SecurityDispositionProjection.sql for read-only disposition projection joining VEX state and exception state | Write authority boundaries preserved by design: no combined /api/v2/security/disposition/exceptions POST route in Platform | S22-T05-SEC-02 |
| Security | SBOM Explorer (table/graph/diff) | source-of-truth.md 2.3, source-of-truth.md 3.5, pack-22.md 5 | /security-risk/sbom, /security-risk/sbom-lake | `GET /api/v2/security/sbom-explorer?mode=table | graph | diff` with release compare filters | EXISTS_COMPAT | Scanner + Graph + Platform | platform.security.read mapped to existing findings:read viewer scope | Shipped unified response envelope for table/graph/diff views with deterministic diff composition from migration 050 projection objects |
| Evidence | Evidence packs, audit, replay linkage from Releases/Security | source-of-truth.md 3.6, pack-22.md 5, pack-20.md | /evidence-audit/* (legacy) | Existing /api/v1/evidence/*; add release/finding correlation filters on /api/v2/evidence/* | EXISTS_ADAPT | EvidenceLocker + Attestor + Platform | Existing evidence read scopes | Add optional filters (releaseId, findingId, approvalId) and deterministic pagination | Ensures inline evidence references across modules | S22-T06-EVID-01 |
| Platform / Integrations | Advisory feeds and VEX source setup + health/activity | source-of-truth.md 2.3, source-of-truth.md 3.8, pack-23.md 2, pack-10.md | /platform/integrations/feeds | GET /api/v2/integrations/feeds; GET /api/v2/integrations/vex-sources; legacy /api/v1/integrations/* retained during migration | EXISTS_COMPAT | Integrations + Concelier + Platform | platform.integrations.read mapped to advisory:read; platform.integrations.vex.read mapped to vex:read | Shipped source-type discriminator plus status/freshness/last-sync metadata and Security/Dashboard consumer hints, backed by migration 051_IntegrationSourceHealth.sql | Integrations setup + health routes are now v2-ready for FE cutover while legacy aliases remain available during transition | S22-T07-INT-01 |
| Platform / Ops | Platform health/data integrity/offline/scheduler | source-of-truth.md 3.7, pack-23.md 2, pack-15.md | /platform/ops/* | Existing /api/v1/platform/data-integrity/*, scheduler/jobengine/health routes | EXISTS_COMPAT | Platform + Scheduler + Orchestrator | Existing ops scopes | No schema change required for baseline migration; route names will change in FE | Keep aliases from old path prefix during cutover | S22-T08-OPS-01 |
| Administration | Identity/tenant/notifications/usage/policy/system | source-of-truth.md 3.9, pack-22.md 5, pack-21.md | /administration/* | Existing /api/v1/administration/* | EXISTS_COMPAT | Platform + Authority + Policy | Existing admin scopes | No immediate schema change in Pack 22 baseline | Track trust-posture entry points from Evidence as FE task | S22-T09-ADM-01 |
Sign-off requirement
Before readiness closure, frontend and backend leads must confirm:
- All
MISSING_NEWrows are shipped or formally deferred with owner/date. EXISTS_ADAPTrows have accepted schema and alias compatibility tests.- No Pack 22 authority screen remains unclassified.
Sign-off output should be captured in an updated handoff packet after the first Pack 22 implementation wave.
