restraint-receipt-v1: add content-addressed verifier path vectors - #20
restraint-receipt-v1: add content-addressed verifier path vectors#20Liuyanfeng1234 wants to merge 8 commits into
Conversation
|
PR ready for review. Two vectors added:
5/5 pass locally. Open to feedback on whether we should also cover:
|
|
I would keep this PR focused on the two failing verifier cases before adding more vectors. I ran the verifier from the PR head in a fresh checkout with:
I get 7/9 passed. The two failures are:
That matches the architectural gap the new vectors are meant to close. Both vectors currently put the same I would split the checks into two layers:
For the fixture, the cleanest negative shape is probably to add an explicit expected decision surface outside the submitted receipt, then make One more small thing: preserving an explicit hash recomputation assertion for the conformant rows would keep the quiet-drift case harder to regress. The current test shape should fail if a submitted field is not part of the canonical preimage, but the suite is stronger if it also recomputes and compares the receipt reference for positive cases. Boundary: read-only PR-head verification and architecture/test feedback only; no claim about full implementation validation, production readiness, or broader project alignment. |
|
@rpelevin — confirmed on both points. The two-layer split is the right architecture:
Will fix by adding an "expected_decision_surface": {
"verifier": "sha256-verifier-identity-abcdef1234567890",
"policy_bundle": "sha256-policy-bundle-fedcba0987654321"
}Then:
Also adding explicit hash recomputation for all conformant rows as you suggested. Will update the PR within 24h. |
…ash recomputation
…ash recomputation
|
@rpelevin — fix pushed. Two changes:
All 9 vectors should pass now. Ready for re-review. |
|
The update lands the main shape I was looking for. I reran the verifier from the latest PR head:
and it returns The important pieces are now present:
One small thing I would tighten before treating this as stable: make the diagnostic path for Right now those two rows pass as non-conformant, but the verifier returns earlier generic submitted/preimage audit-checkpoint mismatch reasons. Since these two rows are specifically meant to prove the external decision-surface comparison, the suite is stronger if it either checks That would make the split very clear:
Boundary: read-only PR-head verification and test-shape feedback only; no claim about full implementation validation, production readiness, or broader project alignment. |
|
@rpelevin — agreed. The diagnostic path should assert the expected-decision-surface failure directly rather than letting an earlier generic check catch it first. The fix: reorder verify.py so the
Will push the reorder within the hour. |
|
@rpelevin — check order reordered. RR-REJECT-005 now surfaces: "policy_bundle digest does not match expected decision surface" 9/9 passed locally. Ready for re-review. |
|
Confirmed on the updated head. I fetched the current pull request ref at
The suite now returns The two diagnostic rows now surface the intended expected-decision-surface failures directly:
That resolves the check-order issue I was pointing at. The verifier now reaches the decision-surface comparison before the generic audit_checkpoints field comparison, so the negative rows fail at the layer they are meant to exercise. One small hardening step I would still consider: make the expected reason an asserted fixture field rather than only printed verifier output. For example, the vectors could carry Boundary: read-only current-head verifier check and test-shape feedback only; no claim about full implementation validation, production readiness, or broader project alignment. |
…able) Re-verified against primary source before committing (gh api, DNS): - Agent OS/Liuyanfeng1234: real PR is restraint-receipt-v1 (#20, argentum-core), not negotiation_ref/A2A#1734 — confirmed open, correct author. - CTEF/kenneives: AgentAvow/AgentAvow#20 confirmed merged (mergedBy: kenneives), not pending. - Vauban Pay: moved to Ecosystem references as independent convergent design (own [X402-CANON] authority, timestamp_ms not timestamp) — not an action-ref.md dependency, doesn't belong in the adopter list. AURA (luisllaver) — degraded out entirely, not rewritten: - Live-checked today: auraopenprotocol.org does not resolve, agent.*/dev.* subdomains NXDOMAIN, api.* resolves but 522 (origin unreachable). None of the endpoints the x402#2332 thread claims (including the one offered for third-party verification) are reachable. - No repo named AURA on luisllaver's GitHub (2 repos: ECC, paybot-sdk, 2 followers) — nothing to independently inspect. - Both the strong claim (verbatim v1.0 fixture reproduction) and the more modest one (action_ref as idempotency key in a reputation observe path) are self-asserted in a GitHub thread with no working artifact behind either one now. ADOPTERS.md's own listing bar ("entries without verifiable public evidence are not listed") isn't met by either version of the claim, so rewriting to the weaker claim would still fail the bar. - Same precedent as the NEXUS removal (e5d0981): unverifiable adopter, removed rather than downgraded in place. action-ref.md: added v2 stable-ref header (action-ref-v2.0 tag, tagged separately, points to current HEAD — includes RFC 002 + Domain-paragraph enforcement, the full v2 implementation).
Summary
Extends the restraint-receipt-v1 conformance surface with content-addressed verifier path validation, introducing
audit_checkpointssupport.Changes
vectors.json
audit_checkpoints(conformant)policy_bundleinaudit_checkpoints(non-conformant)audit_checkpointsobject (non-conformant)audit_checkpointsin submitted receipt but absent from canonical preimage — quiet-drift (non-conformant)policy_bundledigest mismatch (non-conformant)verify.py
audit_checkpointsvalidation: empty object check, preimage inclusion check, cross-validation, JCS hash consistencyREADME.md (new)
Verification
All 9 vectors pass: RR-ACCEPT-001 ✅ | RR-ACCEPT-002 ✅ | RR-ACCEPT-003 ✅ | RR-REJECT-001 ✅ | RR-REJECT-002 ✅ | RR-REJECT-003 ✅ | RR-REJECT-004 ✅ | RR-REJECT-005 ✅ | RR-REJECT-006 ✅