Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Console CI / console-ci (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
- Added graph.inspect.v1 documentation outlining payload structure and determinism rules. - Created JSON schema for graph.inspect.v1 to enforce payload validation. - Defined mapping rules for graph relationships, advisories, and VEX statements. feat(notifications): establish remediation blueprint for gaps NR1-NR10 - Documented requirements, evidence, and tests for Notifier runtime. - Specified deliverables and next steps for addressing identified gaps. docs(notifications): organize operations and schemas documentation - Created README files for operations, schemas, and security notes to clarify deliverables and policies. feat(advisory): implement PostgreSQL caching for Link-Not-Merge linksets - Created database schema for advisory linkset cache. - Developed repository for managing advisory linkset cache operations. - Added tests to ensure correct functionality of the AdvisoryLinksetCacheRepository.
3.2 KiB
3.2 KiB
graph.inspect.v1 · Inspector Contract (2025-12-04)
Replaces the archived Cartographer handshake note and grounds the Concelier/Excititor → Graph Indexer/API interface. Use this shape for any inspector payloads that carry SBOM relationships plus advisory/VEX linkouts destined for graph ingestion or replay.
Purpose
- Give Concelier (Link-Not-Merge v1) and Excititor a frozen, deterministic payload so graph nodes/edges can be regenerated or replayed offline.
- Encode the evidence hashes and provenance needed for append-only rebuilds and audit trails.
- Keep ordering stable to avoid hash churn between runs.
Payload shape (summary)
schemaVersion— must begraph.inspect.v1.tenant,artifactDigest,sbomDigest,collectedAt.components[](ordered):purl, optionalversion, optional sortedscopes[].relationships[]→contains|depends_on|provides|runtime_observedwithtargetPurl,scope?,source,evidenceHash.advisories[]→advisoryId,source,status,severity?,cvss?,justification?,linksetDigest?,evidenceHash,modifiedAt.vexStatements[]→statementId,source,status,justification,impactStatement?,knownExploited?,issuedAt,expiresAt?,evidenceHash.provenance→source,collectedAt,eventOffset?,linksetDigest?,evidenceHash?.
- Optional
links.sbomObservationEventIdandlinks.linksetDigestfor traceability.
Full machine-readable schema: docs/modules/graph/contracts/graph.inspect.v1.schema.json.
Determinism rules
- Preserve input order for
components[]andrelationships[]; sortscopes,advisories, andvexStatementsby (source,advisoryId/statementId) before emitting. - All timestamps UTC ISO-8601; hashes are SHA-256 hex.
- Keep arrays unique where noted (
scopes), and avoid null/empty strings.
Graph mapping
relationships→ graph edges:contains/depends_on/provides/runtime_observedalign withCONTAINS,DEPENDS_ON,PROVIDES,OBSERVED_RUNTIME.advisories→advisorynodes +AFFECTED_BYedges (uselinksetDigestandevidenceHashfor provenance).vexStatements→vex_statementnodes +VEX_EXEMPTSedges (propagatejustification,knownExploited,impactStatement).provenancefields flow into graphprovenanceobjects andeventOffsetbecomes the replay cursor.
Validation
# Example (offline-friendly if ajv is already installed locally)
ajv validate -s docs/modules/graph/contracts/graph.inspect.v1.schema.json \
-d docs/modules/graph/contracts/examples/graph.inspect.v1.sample.json
Use any JSON Schema Draft 2020-12 validator if ajv is unavailable.
Sample
See docs/modules/graph/contracts/examples/graph.inspect.v1.sample.json for a one-component payload that exercises relationships, advisory observations, VEX statements, and provenance fields.
Upstream alignment
- Link-Not-Merge fixtures:
docs/modules/concelier/link-not-merge-schema.md. - Excititor overlay prep:
docs/modules/excititor/prep/2025-11-20-graph-21-001-prep.mdand...graph-21-002-prep.md. - Graph canonical model:
docs/modules/graph/schema.md(node/edge taxonomy the inspector feeds).