Everything a third party needs to pin against to build an interoperable OpenChainGraph v0.4 implementation, in one place: reproducible golden vectors, the published kernel-identity binding a verifier cross-checks, which historical spec_versions the current verifier still reads, and the exact gate suite that defines conformance. Every table below is generated from the same source the §15 gate suite and conformance roster already run against, so re-running the generator against a changed fixture set, changelog, or gate table changes this page with it, with no hand edit.
A canonical artifact, its exact hash preimage, and the resulting execution_hash, produced by the reference kernels. Reproduce the hash and your canonicalizer matches the standard. Full set: standard/conformance-vectors/, regenerated by build-vectors.mjs from the same fixtures the §15 gate suite runs.
A tagged rcpt_test_ subset of chaingraph/kernels/fixtures/, naming a golden-vector/integrator-sandbox set within the existing fixture tree, was scoped for this page and is unshipped here. Where that marker sits structurally, whether at the tool_id level, the fixture filename, or elsewhere, has not been confirmed against mcp-apps-poc/generate.mjs or the tool_id validation path, and it must never enter a hash preimage. This is an open question for a follow-up spec note rather than a guess shipped without confirmation. Until answered, the existing conformance vectors above are the reproducible-vector surface a third party has today.
The §17 Kernel Identity Binding a verifier cross-checks: the artifact's audit_signature.build_identity.kernel_digest, the node's published Graph Index compute_images[] entry, and a live recompute from source. This is a documentation and publication gap only, adding no new field and no new hash path. The date-pinned schema a third party pins against is chaingraph.json's spec_version below, published as-is.
Pin against spec_version:"0.8.13": every node in the live chaingraph.json was published against this schema/gate baseline. §17 requires the cross-check below to hold for every node that publishes a digest; a mismatch fails the binding rather than this page.
| field | example (tool_id: 503-canton-tokenization-readiness-diagnostic) |
|---|---|
| compute_images[].system | sha256-source |
| compute_images[].image_id | sha256:cd83aaa98a7055cdc55b74bf14d81e559e4797625a9796e5d8deaa43a9021157 |
| compute_images[].valid_from | 2026-07-10 |
| cross-checked against | audit_signature.build_identity.kernel_digest on that node's own artifacts, and a live recompute via kernels/_buildid.mjs over the deployed kernel source |
Which historical spec_version the current verifier still reads. Generated from standard/CHANGELOG.md's own record-bump history: every entry not explicitly marked "not a record bump" is a version of record, and every one of them is additive-only by construction, with §4 preimage members and chaingraph_version ("0.4.0") frozen and existing execution_hash values never moving. That invariant is proven live every CI run rather than asserted here: golden-parity.test.mjs and linear-hash-freeze.mjs (§15) recompute and freeze the pinned hashes on every run.
| spec_version | what it added | additive-only | current verifier reads it |
|---|---|---|---|
0.8.13 |
xBRL-CSV export profile (§13.14) | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.8 |
`seeded-stochastic` determinism class (§24.6.2) + the deferred vouch-hunt record bump | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.7 |
ML landing-pass riders (§HASHRES-1, §PQC-1, §REVOKE-1, §SIDECAR) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.6 |
Deterministic Compute Profile `@2`: WebCrypto subset split (§24.5) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.5 |
Private-Input Profile (§25) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.4 |
Deterministic Compute Profile (§24) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.3 |
Input Attestations (§23) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.8.2 |
Escalation records (§22.8) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.7.0 |
Anchor Binding (§20) + SD-JWT selective-disclosure export (§13.12) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.6.1 |
Deterministic-node proof profile (§18.6) | yes (CHANGELOG states additive) | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.6.0 |
Kernel Identity Binding (§17) + Compute-Integrity Proof (§18, zkVM) | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.5.0 |
Proof Binding (§16) + audit_signature schema alignment | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.4.1 |
Verifiable Credentials export profile | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.4.0 |
Compute Binding + Export Profiles | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
0.3.1 |
base for v0.4 | unconfirmed in CHANGELOG text | yes, frozen $defs/artifact.required, verified live by golden-parity.test.mjs / linear-hash-freeze.mjs |
15 record-bump versions found in CHANGELOG.md. Every artifact produced under any version above validates against the current v0.4 schema unchanged, because the frozen root schema ($defs/artifact.required) and chaingraph_version ("0.4.0") have never moved across any of them.
No separate grading engine or badge-tier scenario list exists. The ladder's scenario set IS the §15 gate suite, the same rows enforced against AINumbers.co on the conformance roster. Climbing the ladder means passing more of the rows below; there is nothing else to pass.
Zero external implementations have run and published a dated §15 result yet. That is demand-gated rather than build-gated, so it is not a defect in this ladder. The ladder and its gate rows exist and are truthful at N=0 today, the same way the internal §15 gates already are. See the conformance roster for how an implementation gets listed.
| rule | gate | when |
|---|---|---|
| §4 canonical execution_hash | kernel-hash-integrity.mjs, lint-forbidden-hash.mjs, golden-parity.test.mjs, determinism-replay.test.mjs (N=3 idempotency + JCS key-order stability) |
validate |
| §12 every gpu:false node has a kernel | check-kernel-coverage.mjs --strict |
validate |
| §4 buildArtifact reproduces hash offline | kernel-contract.test.mjs |
validate |
| §4 live re-verifiability of every deployed node | hash-sweep.mjs |
post-deploy |
| Live server registers every expected mcp_name | verify-mcp-registered.mjs (Addendum A) |
post-deploy |
| §1 envelope + node object well-formed | schema-validate.mjs (this schema) |
validate |
| single version of record across surfaces | spec-version-consistency.mjs |
validate |
| rendered spec page | spec-page-parity.mjs |
validate |
| every surface count == chaingraph.json | surface-parity.mjs (Addendum A) |
validate |
| every node url page + chain page exists | catalog-parity.mjs |
validate |
| unique mcp_name | check-tool-names.mjs |
validate |
| chain integrity | validate-chains.mjs |
validate |
| /mcp handshake works | smoke-mcp.mjs |
post-deploy |
| §13 export gate honored | exporters/export.test.mjs (unit) + smoke-compute.mjs (export round-trip) |
validate + post-deploy |
| §16 proof: eddsa-jcs-2022 whole-artifact at audit_signature.proof, no new hash, no chaingraph_version bump,... | proof-binding.test.mjs (unit: sign→verify round-trip + tamper-detect + determinism + backward-compat) |
validate |
| §17 kernel identity binding: digest at audit_signature.build_identity ↔ Graph Index compute_images ↔ recomp... | kernel-identity.test.mjs (unit: digest determinism + three-way cross-check + tamper-detect + backward-compat) |
validate |
| §18 compute-integrity proof: object structure, imageId ↔ Graph Index compute_images, journal ↔ output_paylo... | compute-proof.test.mjs (unit: binding + real-receipt verify + tamper-detect + backward-compat) |
validate |
| §20 anchor binding: per-type proof verification | anchor-binding.test.mjs |
validate |
| §13.12 SD-JWT export: redact→verify round-trip with disclosures, digest mismatch fails, always-disclosed se... | sd-export-roundtrip.test.mjs |
validate |
| §13.13 xBRL-JSON export profile ocg-xbrl-json@1: fixture round-trip determinism | xbrl-json-fixtures.test.mjs |
validate |
| §13.14 xBRL-CSV export profile ocg-xbrl-csv@1: JSON metadata part round-trip determinism | xbrl-csv-fixtures.test.mjs |
validate |
| §16.5 proof sets/chains: parallel proof set verifies, endorsement previousProof chain verifies in dependenc... | proof-binding.test.mjs |
validate |
| §1 supersedes shape: array of sha256:-prefixed execution_hashes | schema-validate.mjs |
validate |
| §PPH-1 policy_parameters_hash: JCS-SHA-256 over policy_parameters alone through the one canonical cgCanon p... | policy-params-hash.test.mjs (unit) + schema-validate.mjs (shape, exercised by fixtures/policy-params-hash.fixture.json) |
validate |
| §21.1–§21.3 linear composite contract: NO existing linear chain's composite_execution_hash moves | linear-hash-freeze.mjs |
validate |
| §21.4 gate static validity: RFC 6901 pointer syntax, closed op enum + value typing, default present, all ta... | validate-chains.mjs (Layer 4) + gate-static.test.mjs |
validate |
| §21.4 evaluator semantics: each op × type mismatch × first-match × mandatory default, determinism, decision... | gate-semantics.test.mjs |
validate |
| §21.4 both-branch coverage: a gated chain's fixtures drive every branch | gate-branch-coverage.test.mjs |
validate |
| §21.4 evaluator byte-parity: Worker run_chain and embedded runChain yield identical route + decisions + com... | gate-parity.test.mjs |
validate |
| §20.1 merkle_inclusion: reconstruct RFC 6962 root from leaf+path, root == anchored_hash, leaf == recomputed... | anchor-binding.test.mjs |
validate |
| §22 Work Mandate document: separate workMandateDocument $def present + well-formed | schema-validate.mjs |
validate |
| §22.4 compile_work_mandate determinism: same mandate → byte-identical chain_config | compile-mandate-determinism.test.mjs |
validate |
| §22.3 "escalate" reserved target: static validation accepts "escalate" as a reserved forward target | validate-chains.mjs |
validate |
| §22.2 mandate signature: eddsa-jcs-2022 whole-artifact proof REQUIRED | proof-binding.test.mjs, mandate-binding.test.mjs |
validate |
| §22.5 run_chain mandate binding: no-mandate run hash-identical to pre-mandate | mandate-binding.test.mjs, linear-hash-freeze.mjs |
validate |
| §22.8 "escalate" evaluator: recognized as a terminal target | gate-parity.test.mjs, linear-hash-freeze.mjs |
validate |
| §23 input attestations: hash-excluded top-level input_attestations[] | validate-input-attestations.test.mjs, schema-validate.mjs |
validate |
| §25 private-input profile: hash-excluded top-level private_inputs[] | validate-private-inputs.test.mjs, schema-validate.mjs |
validate |
| §HASHRES-1 Ledger addressing: the resolution address IS the §4 execution_hash | hash-sweep.mjs, kernel-hash-integrity.mjs |
post-deploy + validate |
| §CID-1 OCG CID profile: toCid()/fromCid() round-trip bijectively over §4-shaped sha256 digests | cid-roundtrip.test.mjs |
validate |
| §PQC-1 hybrid dual proof: a §16.5 parallel proof set may carry eddsa-jcs-2022 + a PQ suite over the SAME §1... | proof-binding.test.mjs |
validate |
| §HEAD-1 head-commit: genesis shape | head-commit.test.mjs |
validate |
| §SNAP-1 state-snapshot artifact: mandate_type:"state_snapshot" accepted in the existing open envelope string | schema-validate.mjs (fixture), golden-parity.test.mjs |
validate |
| §APROV-1 ocg-agent-provenance@1 evidence bundle: CARv1 write→read round-trip byte-identity | car-roundtrip.test.mjs |
validate |
| §REVOKE-1 revocation reference: OPTIONAL W3C BitstringStatusList credentialStatus object under audit_signature | schema-validate.mjs |
validate |
| §SIDECAR.2 resource-narrowing invariant | mandate-binding.test.mjs |
validate |
| §24.6.2 seeded-stochastic replay: a kernel declaring the class re-runs at its own declared seed to a byte-i... | seed-replay.test.mjs |
validate |
| §27 human-accountability records: $defs/humanAccountabilityRecord shape | validate-ha-records.test.mjs, schema-validate.mjs |
validate |
| §28 clause binding profile ocg-clause-binding@1: hash-excluded top-level clause_bindings[] | clause-binding.test.mjs, schema-validate.mjs |
validate |
| §21.6 ancestry_digest: bottom-up recompute over {execution_hash, parent_ancestry_digests} via the one cgCan... | ancestry-digest.test.mjs (unit) + schema-validate.mjs (shape) |
validate |
| §20.3 retention profile: a verifier presented a hash-only survivor | retention-profile.test.mjs |
validate |
| §STPFWD-1 forward decision-outcome mandate: a NEW gpu:false live node emits haGatePolicy | check-kernel-coverage.mjs --strict, compute-proof.test.mjs |
validate |
| §30 cited clause digest: a chaingraph.json nodes[] entry NEW or CHANGED on the current branch MUST declare... | check-clause-digest.mjs, check-clause-digest.test.mjs |
validate |
| §NODEPAGE-1 pageless waiver: a node declaring pageless with no page owned PASSES | check-pageless-consistency.mjs, pageless-consistency.test.mjs, schema-validate.mjs |
validate |
| §AGID-1 agent-identity binding: OPTIONAL hash-excluded audit_signature.requesting_agent, absence fully conf... | schema-validate.mjs, agent-identity-binding.test.mjs |
validate |
| every rule above has a gate | spec-gate-coverage.mjs |
validate |