Reachability Evidence Schema (Draft v1, Nov 2026)

Purpose: define the canonical fields for reachability graph nodes/edges, runtime facts, and unknowns so Scanner, Signals, Policy, Replay, CLI/UI, and SbomService stay aligned. This replaces scattered notes in advisories.

1. Core identifiers

2. Graph payload (richgraph-v1 additions)

{
  "nodes": [
    {
      "id": "sym:sha256:...",
      "symbol_id": "func:ELF:sha256:...",
      "code_id": "code:ELF:sha256:...",
      "code_block_hash": "sha256:deadbeef...",
      "purl": "pkg:deb/ubuntu/openssl@3.0.2?arch=amd64",
      "symbol": { "mangled": "_Z15ssl3_read_bytes", "demangled": "ssl3_read_bytes", "source": "DWARF", "confidence": 0.98 },
      "build_id": "a1b2c3...",
      "lang": "c",
      "evidence": ["dwarf", "dynsym"],
      "analyzer": { "name": "scanner.native", "version": "1.2.0", "toolchain": "ghidra-11" }
    }
  ],
  "edges": [
    {
      "from": "sym:sha256:caller",
      "to": "sym:sha256:callee",
      "kind": "direct|plt|indirect|runtime",
      "purl": "pkg:deb/ubuntu/openssl@3.0.2?arch=amd64",          // callee owner
      "symbol_digest": "sha256:...",                              // callee digest
      "candidates": ["pkg:deb/openssl@3.0.2", "pkg:deb/openssl@3.0.1"],
      "confidence": 0.92,
      "evidence": ["import", "reloc@GOT"]
    }
  ],
  "roots": [
    { "id": "init_array@0x401000", "phase": "load", "source": "DT_INIT_ARRAY" },
    { "id": "main", "phase": "runtime" }
  ],
  "graph_hash": "blake3:..."
}

2.5 Attestation levels (hybrid default)

3. Runtime facts (Signals ingestion)

Fields per NDJSON event:

4. Unknowns registry payload

See docs/modules/signals/guides/unknowns-registry.md; reachability producers emit Unknowns when:

Unknowns must include unknown_type, scope, provenance, confidence.p, and labels.

5. CAS layout

Metadata for each CAS object: { schema: "richgraph-v1", analyzer: {name,version}, createdAtUtc, toolchain_digest }. When analyzer metadata is supplied at ingest (Signals OpenAPI), persist it alongside parsed analyzer fields from the artifact.

6. Validation rules

7. Acceptance checklist