Skip to content

test(conformance): self-contained, offline-verifiable ACTION fixture bundles #164

Description

@miyannishar

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions