From 260be1c24785fcde7ac5d36c2e79fe4890f56c1d Mon Sep 17 00:00:00 2001 From: Imran Siddique Date: Sat, 5 Sep 2026 23:19:18 -0700 Subject: [PATCH] docs: align reference pages and experiments with the runtime Signed-off-by: Imran Siddique --- CHARTER.md | 2 +- LIMITATIONS.md | 4 +- ROADMAP.md | 2 +- docs/spec/call-graph.md | 159 ++++------ docs/spec/cedar-policy.md | 142 +++------ docs/spec/component-model.md | 74 ++--- docs/spec/failure-modes.md | 188 +++--------- docs/spec/provenance-dag.md | 157 +++------- docs/spec/sealed-channel.md | 42 +-- docs/spec/verification-library.md | 12 +- .../authoring-a-delegation-credential.md | 44 ++- docs/tutorials/emit-and-verify-provenance.md | 275 +++++------------- docs/tutorials/reproducing-the-claims.md | 186 ++---------- docs/tutorials/verify-a-delegation-chain.md | 84 +++--- .../claim1-attenuation-soundness/run.py | 13 +- experiments/claim2-cross-chain-replay/run.py | 17 +- .../claim3-scope-policy-intersection/run.py | 18 +- .../run.py | 4 +- tests/unit/test_documented_experiments.py | 59 ++++ 19 files changed, 496 insertions(+), 986 deletions(-) create mode 100644 tests/unit/test_documented_experiments.py diff --git a/CHARTER.md b/CHARTER.md index 7fda880..e492c27 100644 --- a/CHARTER.md +++ b/CHARTER.md @@ -44,7 +44,7 @@ Upon host organization acceptance, governance transitions from the current Proje ## 4. Intellectual Property Policy -All contributions must be made under the terms of [LICENSE](LICENSE). Contributors must sign commits with the Developer Certificate of Origin (DCO). No contribution may incorporate material covered by a patent the contributor is unwilling to license royalty-free to conforming implementations. +All contributions must be made under the terms of [LICENSE](https://github.com/agentrust-io/ca2a/blob/main/LICENSE). Contributors must sign commits with the Developer Certificate of Origin (DCO). No contribution may incorporate material covered by a patent the contributor is unwilling to license royalty-free to conforming implementations. ## 5. Trademark Policy diff --git a/LIMITATIONS.md b/LIMITATIONS.md index 6326cb7..c85d82e 100644 --- a/LIMITATIONS.md +++ b/LIMITATIONS.md @@ -4,7 +4,7 @@ cA2A 0.2 is a Developer Preview with a runnable, tested profile and runtime. Thi ## What is built -- The delegation credential model and the offline chain verifier skeleton: signature checks, scope attenuation (a child grant must be a provable subset of its parent), depth limits, and cross-chain replay rejection. The hardest of these semantics is reused from [agent-manifest](https://github.com/agentrust-io/agent-manifest), where it is implemented and tested. +- The delegation credential model and offline chain verifier: trusted-root checks, signatures, scope attenuation, depth and validity bounds, duplicate credential IDs within a chain, and cross-chain splice rejection. These checks do not maintain a global history of used credentials. - Configuration, error registry, and the CLI surface, including `ca2a start`, which builds a `PeerNode` from a config file and serves it over the reference transport. - A reference HTTP transport and the attestation handshake, in software mode. `ca2a_runtime.transport.server` and `ca2a_runtime.transport.client` (standard library only) run a live inbound A2A-profile call end to end: the caller fetches the callee's attested channel key, seals a payload to it, and sends a delegated task; the callee parses the A2A metadata with the adapter, runs verify + policy + enforce + open-sealed + provenance, and replies. `ca2a_runtime.attestation` gates the seal on a verified channel key. This is a **reference** transport, not part of the profile: the profile mandates no wire protocol (see Out of scope), and in software mode the peer key is accepted at `assurance="none"`. @@ -18,7 +18,7 @@ cA2A 0.2 is a Developer Preview with a runnable, tested profile and runtime. Thi What **failed**, and it is the important half: `verify_tpm_report` could not chain to a pinned root, reporting "AK chain root is not among the supplied trusted TPM roots". On that host the AK certificate at NV `0x01C101D0` is 994 bytes, is issued by `CN=Global Virtual TPM CA - 03`, and carries **no AIA extension at all**, so there are no intermediates to fetch and none stored elsewhere in NV. A different Azure host (`Standard_D2s_v5`, eastus, 2026-07-31) presented a 1596-byte certificate under `Azure Cloud Virtual TPM CA - 11` with a walkable AIA chain reaching the root pinned in `ca2a_verify/tpm_roots.py`. Both observations are real: Azure runs more than one vTPM CA generation, so **the shipped Azure root is not sufficient fleet-wide** and a deployment must pin the hierarchy its own hosts actually present. Until then, treat the TPM tier as: evidence is genuine and its signature and binding are verifiable, but key provenance is host-dependent. - **TPM evidence proves key provenance only where a chain reaches a pinnable root.** A quote signed by the transient fallback key is a verifiable signature but carries no certificate chain, so it proves nothing about *where* the key lives, and `verify_tpm_report` rejects it. As above, a platform-provisioned certified attestation key is necessary but not sufficient: the chain must also be assemblable, which fails when the AK certificate carries no AIA. A GCP Shielded VM is weaker still (probed 2026-07-31: no EK certificate, no persistent handles, and `get-shielded-identity` returns a bare `ekPub` with no certificate). Client firmware TPM vendor roots are not yet published in a pinnable form. Separately, the TCG event log is 0 bytes on both Azure and GCP, so PCR values cannot be attributed to specific boot events on either cloud. -## Platform state is not appraised +## Platform-state appraisal is opt-in {#platform-state-is-not-appraised}