Reachability Evidence Delivery Guide

Last updated: November 8, 2025. Owner: Reachability Tiger Team (Scanner, Signals, Replay, Policy, Authority, UI).

Audience: any contributor landing a reachability ticket across Scanner, Signals, Replay, Policy, Authority, or UI.

This guide translates the deterministic reachability blueprint into concrete work streams you can pick up without re-reading the full proposal. Use it as the single navigation point for the reachability program: it maps the evidence chain, the owning guilds, the sprint targets, and the per-module task breakdown, then points to the deeper specs.


1. Scope & Principles

Goal: ship a verifiable reachability signal for every scan by chaining SBOM → graph → runtime facts → VEX into DSSE-attested, replayable evidence.

Principles

  1. Deterministic inputs – canonical IDs, sorted payloads, normalized timestamps.
  2. Provable facts – every artifact has a DSSE envelope anchored in Authority + Rekor mirror.
  3. Replay-first – manifests pin feed snapshots, analyzer digests, and policies so auditors can rerun.
  4. Least surprise – same API and file layouts across languages; tests run fixture packs at CI time.

2. Evidence Chain Overview

StageProducerArtifactRequirements
SBOM per layer & composed imageScanner Worker + Sbomersbom.layer.cdx.json, sbom.image.cdx.jsonDeterministic CycloneDX 1.6, DSSE envelope, CAS URI
Static reachability graphScanner Worker lifters (DotNet, Go, Node/Deno, Rust, Swift, JVM, Binary, Shell)richgraph-v1.json + sha256Canonical SymbolIDs, framework entries, predicates, graph hash
Runtime factsZastava Observer / runtime probesruntime-trace.ndjson (gzip or JSON)EntryTrace schema, CAS pointer, process/socket/container metadata, optional compression
Replay manifestScanner Worker + Replay Corereplay.yamlContains analyzer versions, feed locks, graph hash, runtime trace digests
VEX statementsScanner WebService + Policy Enginereachability.json + OpenVEX docLinks SBOM attn, graph attn, runtime evidence IDs
Signed bundleAuthority + SignerDSSE envelope referencing aboveSupport FIPS + PQ variants (Dilithium where required)

3. Work Streams (modules + hand-offs)

StreamOwner Guild(s)Key deliverables
Native symbols & callgraphsScanner Worker · Symbols GuildShip Scanner.Symbols.Native + Scanner.CallGraph.Native, integrate Symbol Manifest v1, demangle Itanium/MSVC names, emit FuncNode/CallEdge CAS bundles (task SCANNER-NATIVE-401-015).
Reachability storeSignals · BE-Base PlatformProvision shared PostgreSQL tables (func_nodes, call_edges, cve_func_hits), indexes, and repositories plus REST hooks for reuse (task SIG-STORE-401-016).
Language liftersScanner WorkerCLI/hosted lifters for DotNet, Go, Node/Deno, JVM, Rust, Swift, Binary, Shell with CAS uploads and richgraph output
Signals ingestion & scoringSignals/callgraphs, /runtime-facts (JSON + NDJSON/gzip), /graphs/{id}, /reachability/recompute GA; CAS-backed storage, runtime dedupe, BFS+predicates scoring
Runtime captureZastava + Runtime GuildEntryTrace/eBPF samplers, NDJSON batches (symbol IDs + timestamps + counts)
Replay evidenceReplay Core + Scanner WorkerManifest schema v2, ReachabilityReplayWriter integration, hash-lock tests
Authority attestationsAuthority + SignerDSSE predicates for SBOM, Graph, Replay, VEX; Rekor mirror alignment
Policy & VEXPolicy Engine + Web + CLI + UIAccept reachability states, render “Why safe” call paths, CLI/UI explain flows
QA & DocsQA + Docs Guildsreachbench-2025-expanded fixtures wired to CI; operator + developer runbooks
Binary quality guardrails (Nov 2026)Scanner · Signals · QABuild-id capture, init-array roots, purl-resolved edges, unknowns emission, and patch-oracle fixtures; see sections 5.7–5.9

4. Sprint Targets

SprintNicknameFocusExit Criteria
401Evidence PipelineFinish static lifters + CAS graph storage + runtime ingestion endpointGraph CAS layout documented, lifter fixtures passing, /runtime-facts receives NDJSON batches
402Replay & AttestManifest v2, DSSE envelopes, Authority/Rekor publishingReplay packs include hashes + analyzer fingerprint; DSSE statements passed integration; Rekor mirror updated
403Policy & ExplainVEX generation, SPL predicates, UI/CLI explainersPolicy engine uses reachability states, CLI stella graph explain returns signed paths, UI shows explain drawer

Each sprint is two weeks; refer to docs/implplan/SPRINT_0401_0001_0001_reachability_evidence_chain.md for per-task tracking.


5. Task Breakdown Cheat Sheet

5.1 Scanner Worker

  1. Lifter SDK – Define RichGraphWriter, canonical SymbolID helpers, analyzer interface updates.
  2. Language passes – deliverables per language: discovery, graph build, framework wiring, predicate extraction, runtime overlay.
  3. Replay hooks – plug lifter output + runtime traces into ReachabilityReplayWriter; enforce CAS registration before emitting manifest references.
  4. Fixture runs – add tests under tests/reachability/StellaOps.ScannerSignals.IntegrationTests to execute lifter outputs against reachbench A/B cases.

5.2 Signals Service

  1. Callgraph CAS layout – migrate from filesystem to CAS (cas://reachability/graphs/{hash}), include metadata doc.
  2. Runtime facts API – accept NDJSON or gzip, dedupe events, compute hit stats, link to graph nodes.
  3. Scoring engine v2 – support multi-state lattice (Unknown → Observed), record predicates, blocked edges, runtime evidence CAS URIs.
  4. API responses/graphs/{scanId} returns graph CAS refs + manifest pointers; /reachability/recompute accepts replay manifest IDs.

5.3 Replay Core & Authority

  1. Manifest schema v2 – YAML + JSON versions, includes feeds/analyzers/policies.
  2. CAS naming – standardize cas://reachability/{kind}/{sha256}.
  3. DSSE predicate typesSbomAttestation, GraphAttestation, VexAttestation, ReplayManifest.
  4. Authority integration – new endpoints for submitting reachability predicates, rotation tests, Rekor mirror update instructions.

5.4 Policy / Web / UI / CLI

  1. Policy Engine – ingest reachability fact from Signals, expose via SPL, produce metrics, integrate into explanation tree.
  2. Web API – join reachability fields in vuln responses, add override endpoints, simulate support.
  3. UI/CLI – Visual explain drawer/CLI command showing signed call-path, predicates, runtime hits; counterfactual toggles.
  4. VEX emitter – generate OpenVEX statements with evidence references, DSSE sign via Signer.

5.5 Native binaries (build-id + init roots)

5.6 PURL-resolved edges

5.7 Unknowns Registry integration

5.8 Patch-oracle guardrails

5.9 JS/PHP framework reachability

5.10 Vulnerability Surfaces (Sprint 3700)

Vulnerability surfaces identify which specific methods changed in a security fix, enabling precise reachability analysis:

5.11 Confidence Tiers

Reachability findings are classified into confidence tiers:

TierConditionDisplayImplications
ConfirmedSurface exists AND trigger method is reachableRed badgeHighest confidence—vulnerable code definitely called
LikelyNo surface but package API is calledOrange badgeMedium confidence—package used but specific vuln path unknown
PresentNo call graph, dependency in SBOMGray badgeLowest confidence—cannot determine reachability
UnreachableSurface exists AND no trigger reachableGreen badgeHigh confidence vulnerability is not exploitable

5.12 Reachability Drift (Sprint 3600)

Track function-level reachability changes between scans:


6. Acceptance Tests

  1. Hash-lock – reorder analyzer flags and confirm graph hash unchanged.
  2. Replay – delete caches, replay manifest, verify DSSE + hash equality.
  3. Tamper – alter single edge and expect VEX verification failure with specific path mismatch.
  4. Golden corpus – run all reachbench cases; ensure NotReachable vs Reachable twins align with expectations JSON.
  5. Runtime sanity – feed staged runtime traces and ensure confidence bump + observed=true path chips propagate to UI.

7. Documentation & Runbooks


8. Contact & Rituals

Keep this guide updated whenever scope shifts or a new sprint is added.