In the #36 thread, @Ahmedibrahim222 proposed self-contained per-case ACTION bundles (parent/child TRACE records, delegation credential, key material) to make the offline-verification requirement concrete, and @imran-siddique suggested it become its own issue while preferring the originator file it. @Ahmedibrahim222 — do you still want to take this? I'm happy to pick it up if not.
Problem
ACTION-001–016 evidence is currently assembled in memory inside tests/conformance/test_profile_conformance.py (the _action_chain / _records / _action_evidence / _verify_action_evidence helpers). Nothing serializes a case to disk and re-verifies it with the shipped offline verifier, so cA2A's "offline-verifiable provenance" claim isn't exercised end-to-end from files — only through live Python objects.
Proposal
Add a small set of self-contained bundle directories under tests/fixtures/action/<case>/, each containing:
chain.json — the serialized signed delegation chain (the shape ca2a verify-chain already consumes)
records.json — the serialized provenance records (the shape ca2a verify-dag already consumes)
expected.json — the documented offline verdict plus trusted_root_issuer and optional at_time
- a one-line
README naming which behavior the bundle embodies
…plus a generator script that derives these from the existing chain/record builders, and a loader test that runs the real offline path (ca2a verify-dag --dag records.json --chain chain.json --trusted-root-issuer <iss>, i.e. verify_dag / verify_chain / cross_check_chain) against each bundle and asserts the verdict matches expected.json.
Honest boundary
The offline path verifies provenance (chain signatures / attenuation / validity windows), the DAG, the chain↔record cross-check, and any recorded denial outcome. It does not exercise the holder-proof authorization-replay axis, which needs live audience / secret / challenge material and isn't offline-replayable evidence — consistent with the README note that the ACTION helper "does not check holder-proof binding." I'd keep that axis in-code and say so in the fixtures' README.
Scope
Additive only: new fixtures + generator + loader test. Does not touch ACTION-014/015 (#36) or the reporting design (#144).
Could a maintainer confirm the preferred fixture location/shape and /vouch me so I can open the PR?
In the #36 thread, @Ahmedibrahim222 proposed self-contained per-case ACTION bundles (parent/child TRACE records, delegation credential, key material) to make the offline-verification requirement concrete, and @imran-siddique suggested it become its own issue while preferring the originator file it. @Ahmedibrahim222 — do you still want to take this? I'm happy to pick it up if not.
Problem
ACTION-001–016 evidence is currently assembled in memory inside
tests/conformance/test_profile_conformance.py(the_action_chain/_records/_action_evidence/_verify_action_evidencehelpers). Nothing serializes a case to disk and re-verifies it with the shipped offline verifier, so cA2A's "offline-verifiable provenance" claim isn't exercised end-to-end from files — only through live Python objects.Proposal
Add a small set of self-contained bundle directories under
tests/fixtures/action/<case>/, each containing:chain.json— the serialized signed delegation chain (the shapeca2a verify-chainalready consumes)records.json— the serialized provenance records (the shapeca2a verify-dagalready consumes)expected.json— the documented offline verdict plustrusted_root_issuerand optionalat_timeREADMEnaming which behavior the bundle embodies…plus a generator script that derives these from the existing chain/record builders, and a loader test that runs the real offline path (
ca2a verify-dag --dag records.json --chain chain.json --trusted-root-issuer <iss>, i.e.verify_dag/verify_chain/cross_check_chain) against each bundle and asserts the verdict matchesexpected.json.Honest boundary
The offline path verifies provenance (chain signatures / attenuation / validity windows), the DAG, the chain↔record cross-check, and any recorded denial outcome. It does not exercise the holder-proof authorization-replay axis, which needs live audience / secret / challenge material and isn't offline-replayable evidence — consistent with the README note that the ACTION helper "does not check holder-proof binding." I'd keep that axis in-code and say so in the fixtures' README.
Scope
Additive only: new fixtures + generator + loader test. Does not touch ACTION-014/015 (#36) or the reporting design (#144).
Could a maintainer confirm the preferred fixture location/shape and
/vouchme so I can open the PR?