A claim you can check
“CGP conformant” means green on contextgraph-conformance for your declared capability set. That is a checkable claim, not a self-attestation.
Provider checks
The suite runs 14 checks against a provider. A check that does not apply to what the provider declared is skipped, and the report lists every skip. A skip never fails a run.
| Check | Proves |
|---|---|
| handshake | Completes the handshake with non-empty identity and capabilities. |
| consent-scope | Declared egress scopes are well-formed and consistent with data_flow.egress. |
| frame-validity | Every frame has score ∈ [0,1], a non-empty title and citation label, well-formed timestamps and digests, and file ranges in the line grammar. |
| verify-honesty | A provider that advertises verify answers valid for digests it served and stale for mutated ones. |
| budget-honesty | Canonical token_cost, sum ≤ max_tokens, count ≤ max_frames. |
| as-of-temporal | At an as_of pin, every returned frame’s validity window contains the pin. |
| kinds-filter | A kind-filtered query returns only that kind. |
| anchor-relevance | A graph provider’s frames anchor on a uri or a relation target. |
| provenance-fixture-consistency | Each file provenance digest matches the bytes it names. |
| shutdown-clean | Tears down on shutdown without error. |
| malformed-input-tolerance | Malformed input gets bad_request or is ignored, and the provider keeps running. Stdio only. |
| embedding-fingerprint | A query embedding that contradicts the declared dimension gets bad_request. Stdio only. |
| correlation | A provider that declares correlation echoes each request id. Stdio only. |
| attestation | Every provenance attestation the provider serves verifies against a key from its handshake. Stdio only. |
Host and composition suites
The host has binding rules too. contextgraph-inspect host runs 9 host checks against the reference host: it rejects a wrong-family version, drops an over-budget or frame-flooding provider, gates egress on consent, requires a scope receipt, re-hashes file provenance, quotes frame content, isolates a crashed provider, and audits composition.
A host with its own composition layer can run the 4 composition checks against it through run_composition_conformance. They check that the admitted frames fit the shared budget, that every offered frame is either admitted or reported dropped, that a quarantined provider contributes nothing, and that the same frame set composes in the same order on every run.
RED suite
A suite that only ever passes proves nothing about its ability to catch a broken provider. The bundled reference provider, contextgraph-example-docs, ships 31 --misbehave modes. Each breaks exactly one guarantee: lying about costs, flooding past max_frames, dropping correlation ids, rubber-stamping verification, declaring a false egress scope, or forging a signature. CI runs every mode and requires a check to fail on it. A skipped check does not count as a catch. The mode list comes from the binary’s own --help, so a new misbehaviour without a check that catches it turns CI red.
Probing a provider
contextgraph-inspect is an interactive prober, analogous to MCP’s inspector. It prints negotiated capabilities, optionally fires a test query, runs the full suite, and exits non-zero when the provider is not conformant, so CI can gate on it. It ships in the contextgraph-conformance crate.
cargo install contextgraph-conformance
contextgraph-inspect stdio -- ./your-provider
contextgraph-inspect stdio --json -- ./your-provider
contextgraph-inspect stdio --query "goal text" -- ./your-provider
contextgraph-inspect http https://my-provider.example.com/contextgraph
contextgraph-inspect hostFrom a checkout of the protocol repository, point the same Rust oracle at a provider written in any language:
cargo build --workspace --bins
./.github/scripts/conformance-external.sh -- node sdk/typescript/dist/examples/example-docs.jsGolden fixtures
Cross-language byte-exactness rests on golden fixtures: seven JSON files plus a manifest, published for fixture profile 1.1.0 under contextgraph-conformance/fixtures/contextgraph-1.0/. They cover a fully populated and a minimal ContextFrame, compact and reference frames, a minimal ContextQuery, missing and blank citation labels, strict unknown-field negatives, and RFC 8785 (JCS) normalization vectors.
Each frame and query digest case carries four artifacts: the source object, the digest-profile-normalized object, the exact JCS UTF-8 text, and the SHA-256 of those canonical bytes. The manifest pins the protocol version and the profile version, records the generation command, and carries a digest for every other file, so a fixture cannot drift unnoticed.
egress: false can open a socket anyway, and nothing on the pipe shows it (C3). The HTTP transport rules C4, C7, and C8 have no test against a live TLS peer yet. A suite that quietly left these out would be the self-attestation the project rejects.