Skip to content

test(conformance): separate ACTION provenance, authorization, and controller reporting - #162

Merged
imran-siddique merged 4 commits into
agentrust-io:mainfrom
Bashirloyan:main
Sep 11, 2026
Merged

test(conformance): separate ACTION provenance, authorization, and controller reporting#162
imran-siddique merged 4 commits into
agentrust-io:mainfrom
Bashirloyan:main

Conversation

@Bashirloyan

Copy link
Copy Markdown
Contributor

What

Adds three fields (provenance_status, authorization_decision, controller_outcome)
to the private ACTION conformance helper's result, so a correct denial or a correct
controller rejection is never confused with a broken or absent delegation chain.

Why

Issue #144: the ACTION helper currently returns a broad classification and an exact
code, which conflates "evidence didn't verify" with "evidence verified but the action
was denied or rejected." This separates those into three independently reported axes,
set in prerequisite order (provenance, then authorization, then controller outcome).

Closes #144

Security impact

None. This PR only changes a private test-only helper
(tests/conformance/test_profile_conformance.py) and its documentation
(tests/conformance/README.md). It does not modify runtime code in src/ca2a_runtime
or src/ca2a_verify, and does not change TEE attestation, message signing, TRACE/
provenance-DAG verification logic, capability-token semantics, or trust-score inputs.
It does not add a public API. controller_outcome continues to reflect a claimed
test-helper input only — it is not cryptographically proven execution evidence, and
this PR does not represent it as such.

Test plan

  • pytest passes — pytest tests/conformance/ -v: 47 passed. Full suite
    (pytest): 592 passed, 2 skipped.
  • ruff check passes
  • mypy passes — unchanged from main: 69 pre-existing no-untyped-call warnings
    in this file (untyped local test helpers), none introduced by this change.
  • Manual test performed

DCO sign-off

  • [ x] I certify that I wrote or have the right to submit this contribution, and I agree to the
    Developer Certificate of Origin (https://developercertificate.org).

test(conformance): separate ACTION provenance, authorization, and controller reporting

Adds provenance_status, authorization_decision, and controller_outcome to
the private ACTION conformance helper's result, so a correct denial or a
correct controller rejection is never confused with a broken or absent
delegation chain. Fields are set in prerequisite order, per the agreed
scope: authorization is reported only once provenance verifies, and
controller_outcome only once authorization allows the request.

provenance_status distinguishes invalid (chain/records present but a check
found a defect) from missing (the record set needed to complete the check
was never supplied), per the five agreed reporting cases. Cases 1-4 map
onto existing ACTION-003/005/006/007/008 cases, now asserting all three new
fields. Case 5 (outside helper scope) is documented in
tests/conformance/README.md but not exercised by a new case in this change.

Preserves the existing classification and code fields, and every existing
reason code, for compatibility.
Updates tests/conformance/README.md to document the three fields, the
security order, the provenance/controller boundaries (controller_outcome
remains a claimed test-helper input, not cryptographically proven
execution evidence), and the five minimum reporting cases.
test(conformance): add provenance/authorization/controller reporting to ACTION helper

Adds provenance_status, authorization_decision, and controller_outcome to
_ActionEvidenceResult, set by _verify_action_evidence() in prerequisite
order: authorization only once provenance verifies, controller_outcome
only once authorization allows the request.

provenance_status distinguishes invalid (chain/records present but a check
failed), missing (records incomplete for the claimed chain), and
not_evaluated (no chain claimed at all, ACTION-016: outside this
helper's scope). Updates all 13 existing ACTION assertions and adds
ACTION-016 for the fifth agreed reporting case. Preserves existing
classification, code, and reason codes.
docs(conformance): document ACTION provenance/authorization/controller fields

Documents provenance_status, authorization_decision, and controller_outcome
on the ACTION helper's result for Issue agentrust-io#144: what each field covers, the
security order, the invalid/missing/not_evaluated distinction, and that
controller_outcome is a claimed test-helper input, not cryptographically
proven evidence. Lists the five minimum reporting cases and updates the
ACTION-001 through ACTION-013 and ACTION-016 outcome column.

Closes agentrust-io#144
@Bashirloyan
Bashirloyan requested review from a team, carloshvp and zohebk8s as code owners September 8, 2026 19:28
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Thanks for this, @Bashirloyan. Closing it for now, and it is not about the change itself.

This repository asks first-time contributors to be vouched by a maintainer before opening a pull request. That is because agent-written contributions are easy to produce and expensive to review, and we would rather talk to you first than review something neither of us can explain.

To get vouched: open an issue saying what you want to change and why, in your own words. A maintainer will reply, and add you with /vouch. After that, reopen this pull request or open a new one.

See CONTRIBUTING.md for the detail.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@imran-siddique imran-siddique left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. Ran the suite rather than reading it: 47 passed on 23930803, 13 checks green once the held runs were released.

What the three axes buy, and why the ordering is the load-bearing part. Reporting provenance_status, authorization_decision and controller_outcome separately only helps if the later two cannot be guessed at when the earlier one failed, and here they cannot. With no delegation chain every axis is not_evaluated with reason outside_helper_scope. With a record set shorter than the chain, provenance_status is missing while authorization and controller are not_evaluated. An accepted controller outcome can no longer sit beside provenance that was never established.

not_evaluated is reachable rather than decorative. It appears in thirty places and the tests reach it from both directions. That matters more than the field count: an enum value nobody can produce is documentation, and the whole point of splitting the axes is to stop "we did not check" being reported as "it was fine".

The distinction in the comments is the one to keep through any later revision. "Evidence that failed verification" against "evidence that was never supplied" is why missing and invalid are separate values, and it is the first thing a future simplification would collapse.

On process: the vouch-gate closing this was ours misfiring, not anything you did. You were assigned #144 and you implemented it; being a first-time contributor should not have cost you the PR.

@imran-siddique
imran-siddique merged commit d3b7eb6 into agentrust-io:main Sep 11, 2026
13 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Separate evidence status from ACTION outcome reporting

3 participants