Skip to content

References: add the observed-effect relation and its example set (#402) - #403

Merged
imran-siddique merged 5 commits into
agentrust-io:mainfrom
astrogilda-forks:register-observed-effect
Oct 1, 2026
Merged

imran-siddique merged 5 commits into
agentrust-io:mainfrom
astrogilda-forks:register-observed-effect

Conversation

@astrogilda

@astrogilda astrogilda commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Closes #402 by registering observed-effect in §3.1.2 as a non-breaking informative addition, in the shape of #389. The registry entry defines the referenced object as facts and limits what a verifier may conclude to rule 3.

Five signed records in examples/observed-effect/ cover a verified observation, one altered after issue, a disagreement, an unresolvable reference and an unknown observer key. Two of their statements come byte for byte from the observed-effect corpus in agent-evidence-vectors. At review I renamed the condition-appraisal example's verdicts the same way, and both example suites now test a bad signature over matching bytes.

Every commit is signed off, CHANGELOG.md is updated, and on f160107 pytest reports 2234 passed and 6 skipped.

Edited on September 24 to add the condition-appraisal rename and the current test counts.

Closes agentrust-io#402. Registers observed-effect in section 3.1.2 following the
steps docs/references-registry.md gives for adding a name, in the shape
of agentrust-io#389: the registry entry defines the referenced object as facts and
bounds what a verifier may conclude to rule 3, and examples/observed-effect/
carries five signed records whose verdicts tests/test_observed_effect_fixtures.py
recomputes from the committed bytes.

Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
@astrogilda
astrogilda requested review from a team and lywinged as code owners September 23, 2026 12:33
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

🔴 Contributor Check: HIGH

Check Result
Profile HIGH
Credential LOW
Overall HIGH

Automated check by AgenTrust Contributor Check.

@github-actions github-actions Bot added the needs-review:HIGH Contributor check flagged HIGH risk label Sep 23, 2026

Copy link
Copy Markdown
Member

Please rename the example verdicts to describe the referenced object, rather than the effect itself. effect-confirmed currently means that the digest matches and the observer’s signature verifies; it does not establish that the reported change occurred. Likewise, altered evidence does not establish that the effect was contradicted. Keep resolution, digest match and signature verification as separate findings, consistent with the registry text.

The example verdicts described the effect rather than the object the
reference points at. A digest match and a verified observer signature
establish that the cited observation is intact and signed; they do not
establish that the reported change occurred, and an altered stored copy
does not establish that it did not.

The verdicts are now observation-verified, observation-digest-mismatch,
observation-unresolved and observation-unverified, and a signature that
fails over matching bytes is observation-signature-invalid. Resolution,
digest match and signature verification stay separate findings in their
own fields, as the registry text lists them. Cases 01 and 02 are renamed
to match; their bytes are unchanged and the generator reproduces them.

Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
@astrogilda

Copy link
Copy Markdown
Contributor Author

Thanks, Imran, for catching the overclaim in effect-confirmed. In 305895c each verdict describes the referenced observation instead: verified, digest-mismatch, unresolved, unverified or signature-invalid, with the prefix observation-. Resolution, digest match and signature verification stay separate fields, each recomputed from the committed bytes.

Should I send the matching rename for the condition-appraisal example, whose appraisal-contradicted has the same overclaim?

@imran-siddique

Copy link
Copy Markdown
Member

The revised observation verdicts address my wording concern. All 36 related tests pass. A corrupted signature with a recomputed reference digest correctly reports signature failure separately.

Please include the matching condition-appraisal rename in this PR, limited to example terminology and tests.

The condition-appraisal example verdicts had the same overclaim as the
observed-effect ones: appraisal-contradicted read as a finding about the
condition when it only meant the stored copy no longer matched what the
record cited.

The verdicts are now appraisal-verified, appraisal-digest-mismatch,
appraisal-unresolved and appraisal-unverified, and a signature that fails
over matching bytes is appraisal-signature-invalid. Case 01 is renamed to
match; its bytes are unchanged and the generator reproduces the set.

Both example suites gain a test for the signature-invalid branch: a
corrupted signature with the reference digest recomputed over the
corrupted object matches on digest, fails on signature, and gets its own
verdict rather than being folded into a digest mismatch.

Terminology and tests only; no registry text, schema or wire format
changes.

Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
@astrogilda

Copy link
Copy Markdown
Contributor Author

Hey @imran-siddique, thanks for running the suite and for the corrupted-signature case, which is now a test in both example suites. In f160107 the condition-appraisal verdicts follow the observation ones: appraisal-verified, appraisal-digest-mismatch, appraisal-unresolved, appraisal-unverified and appraisal-signature-invalid, with only example terminology and tests changed. Locally on f160107, 2234 tests pass and 6 skip.

@chernistry, only your example's verdict names moved, and I'm happy to change them if you'd prefer others.

@chernistry

Copy link
Copy Markdown
Collaborator

@astrogilda the new names are right and I would not change them: appraisal-verified, appraisal-digest-mismatch, appraisal-unresolved and appraisal-unverified each name the state of the referenced appraisal, which is the rule the README now states, and the separate appraisal-signature-invalid for a failing signature over bytes whose digest matches is a case the old set could not express. Nothing on my side reads the old strings. Thanks for carrying the rename.

imran-siddique
imran-siddique previously approved these changes Sep 25, 2026

@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.

The requested terminology change is complete at f160107. All 38 example tests pass, including separate signature-failure and digest-mismatch cases. Existing validation rules remain unchanged. Hosted CI passes; five local Windows fixture failures also reproduce on the pre-PR base.

@imran-siddique

Copy link
Copy Markdown
Member

@astrogilda main moved 12 commits and this now conflicts on CHANGELOG.md only. Merging main in, keep main's two new Added entries (intent_bridge.verify_bridge() successor observation, provenance.verify_record() now) and your observed-effect entry, and take your condition-appraisal wording (it says "verified" where main still says "confirmed"). I ran that resolution locally: same 28 files, +1070/-36, and the four affected test files pass 173/173. Once you push it I will merge.

Resolve CHANGELOG.md: keep main's intent_bridge successor-observation and provenance now entries, the observed-effect entry, and the condition-appraisal wording that says verified.

Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
imran-siddique
imran-siddique previously approved these changes Sep 30, 2026

@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.

@astrogilda approving c217d83; it should have merged after your 09-28 push. #437, #432 and #401 merged today and it now conflicts on CHANGELOG.md and examples/README.md only. Merge main once more keeping both sides' entries and I will merge it the same day.

Keep the observed-effect entries in CHANGELOG.md and examples/README.md
beside the entries that landed on main. The earlier one-stage successor
observation entry is replaced by the entry main now carries for it.

Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
@astrogilda

Copy link
Copy Markdown
Contributor Author

@imran-siddique, 5a6a5fe merges main (152c843), keeps both sides' entries in CHANGELOG.md and examples/README.md, and passes the full test suite locally. The old verify_bridge() successor-observation bullet is gone, since main's entry for #424 replaces it.

Pushing it dismissed your approval, so the approval check needs one on 5a6a5fe, and CI, CodeQL, ClusterFuzzLite and runtime-evidence need their runs approved. After the merge I plan a follow-up PR that tests the observed-effect examples against a pinned release of https://github.com/probityai/agent-evidence-vectors.

@imran-siddique
imran-siddique merged commit 11c0868 into agentrust-io:main Oct 1, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-review:HIGH Contributor check flagged HIGH risk

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Register rel: observed-effect in the references registry

3 participants