Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions benchmark.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Against the agent tools teams already use, from the maintainers' [published resu
| [Permission revoked](https://proofable.me/proof/0x8a3e5ff89c8a86423bae61db96c9732f319a6f6cdb34f4bde560c90d25366c95) | Stopped; no job created |
| [Permission expired](https://proofable.me/proof/0xf1880cba0876acc2364e31892b261a47299c0a70177b61b32d465fcd1b61447a) | Stopped; no job created |
| [Revoked permission reused](https://proofable.me/proof/0x1d987781eb519337fa9e62043831ee187340f6e589f217b16b99ed98be5acfbc) | Stopped every time |
| [Revoked mid-job](https://github.com/proofable/docs/tree/main/public/evidence/aaif/authority-at-dispatch/2026-11-01-suite) | The call in flight was refused with its reason, nothing committed, and the next one was refused |
| [Revoked mid-job](https://github.com/proofable/docs/tree/main/public/evidence/aaif/authority-at-dispatch/2026-11-01-suite-c1) | The call in flight was refused with its reason, nothing committed, and the next one was refused |

Reviewers in the AgenTrust integrations project [verified the records offline](https://github.com/agentrust-io/integrations/issues/333#issuecomment-6414048198) on their own machines: every checksum matched and every signature verified. Its maintainers then [chose them](https://github.com/agentrust-io/integrations/issues/333#issuecomment-6436264551) as the dispatch evidence for their authority comparison. Rerun all eight on your own account with [Run the chain](/run-the-chain#run-it-end-to-end).

Expand Down Expand Up @@ -199,11 +199,13 @@ Pin both refs to the same commit so a rerun measures the same kit. The action wr

```sh
git clone --depth 1 https://github.com/proofable/docs
cd docs/public/evidence/aaif/authority-at-dispatch/2026-11-01-suite
cd docs/public/evidence/aaif/authority-at-dispatch/2026-11-01-suite-c1
sha256sum -c SHA256SUMS
npm install @proofable/sdk@0.1.11
node verify-portable-proofs.mjs
```

Then, from `../reproduce/`, `node aad.mjs verify ../2026-11-01-suite-c1` recomputes every checksum, the trace digest, all 15 envelopes offline and the coverage the packet declares, and `node aad.mjs report ../2026-11-01-suite-c1` prints the typed cost and the grading scope. The packet states which of its payloads a 2 November correction moved and which it did not.
</Accordion>

<Accordion title="How each result was measured">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Correction to 2026-11-01-suite

This directory corrects the packet at [`../2026-11-01-suite/`](../2026-11-01-suite/) — `2026-11-01-suite@9358761ff88444425b85fc77266609916de4c16b`.

**No evidence was re-run and no record changed.** The run, the revision, the job and authority records
and every disclosed envelope are those of `aad-2026-11-01T22-24-26-865Z` on `0d1b934f40d38233fa588267354fcccec5e1edeb`. This revision corrects wording and
grading scope, and is identified separately so that a reader can tell a correction from a new evaluation.
The packet it corrects stays published and hash-pinned.

## What changed

1. `manifest.json` → `grading_scope.binding` states what `observed_matches_expected` grades: the authority
predicate of each case together with the typed boundary capture for `post_dispatch_revoke`. It does not
grade the literal committed-effect clause of the expectation as first written.
2. `manifest.json` → `post_dispatch_revocation.separates` no longer describes the earlier action as already
committed. It states the boundary outcome this run recorded (`refused_at_tool_call`).
3. `trace.jsonl` → the `post_dispatch_revoke` record carries `expectation_status: superseded_by_revision`
and `expectation_revised`, so the expectation the run was appraised against is retained and marked rather
than silently matched.

## What each payload hash covers

| File | In the packet corrected | In this revision | Status |
| --- | --- | --- | --- |
| `README.md` | `717353e0ae497c4754051e09b5f97050526beaa2a20eb1ec75011e986c183bd4` | `fc86c842f5db0459dcb12d087914206637fb04dc6be46e62f63801815719c89c` | **changed** |
| `manifest.json` | `155c554f8ba975a01fc6aa664dc5f4c331c5ccf497d588cb7fb2414ad2f56e45` | `dcfd7c123ec4808e16f1577a4bfbd9be380f494df1319a5476441683ef7ab9e4` | **changed** |
| `authority-effect-results.md` | `5f99ab626b65d48725812e7b4371a510ce0b0dca6d70749e8831496f0428b558` | `35967f2aa21b03389d91dace21bcb387932a94d5ac69a794400716c96a72c1a2` | **changed** |
| `authority-effect-results.json` | `63592305352d5d82cf129f451ae424dde7b66c2b6b2ed7705b12f3d6230c04c2` | `63592305352d5d82cf129f451ae424dde7b66c2b6b2ed7705b12f3d6230c04c2` | unchanged |
| `trace.jsonl` | `feea298e0c4d923afba7fadc867715162a5554e94886a977a3a8fdb8f93188a9` | `5d55f221d9a096e207b3a0bc5368c142b9932c9a3a8696031d43a40823037818` | **changed** |
| `portable-proofs.json` | `9bc0f10ca4175c2a9f27225360a95094a963976849b378d0b2c2dda85f4b0f49` | `9bc0f10ca4175c2a9f27225360a95094a963976849b378d0b2c2dda85f4b0f49` | unchanged |
| `verify-portable-proofs.mjs` | `f7eb8f74885518b3ba0d945f60500e3236a25ad569fdcc6c8e44af462eaa3248` | `f7eb8f74885518b3ba0d945f60500e3236a25ad569fdcc6c8e44af462eaa3248` | unchanged |
| `CORRECTION.md` | — | this file | added |

Verify both: `sha256sum -c SHA256SUMS` here, and the same command in `../2026-11-01-suite/`, which is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Proofable — Authority-at-Dispatch Evidence

Proofable's implementation evidence for the authority/effect comparison associated with
[AAIF Identity & Trust issue #13](https://github.com/aaif/wg-identity-and-trust/issues/13).

**Run.** Live production hosted MCP, protocol revision `0d1b934f40d38233fa588267354fcccec5e1edeb`, run `aad-2026-11-01T22-24-26-865Z`,
assembled from 2 source runs:
- `aad-2026-11-01T22-24-26-865Z` — eight-case authority suite
- `aad-2026-11-01T22-24-26-865Z` — ordered post-revocation probe
Executed by the Proofable operator under a non-privileged review profile (not an administrative
path), with the dedicated agent `proofable-authority-review` under an explicit pinned delegation
per case. The ordered post-revocation boundary is a second source run in the same packet, not a
re-observation of the same run.

**Coverage.** Expected case set fixed by the suite.
8 of 8 expected cases produced a record in this run.

**Signer and subject.** Every disclosed envelope is signed by the Proofable service wallet
`0xa41494e1e5f9e5eaf786961e6ef84cd1a3071eec`. The signature means *Proofable attests this
server-observed statement*; it is not the controller signing their own outcome. The controller
`0x0d4e513a3a7eb92bab65c97786c67b198d9dca15` is the statement's subject/owner whose record is
stored. The two addresses differ by design.

## Results

| Scenario | Result |
| --- | --- |
| Binding veto / action outside delegated authority | **SUPPORTED** — unauthorized execution is denied before executor assignment |
| Revoked authority / stale grant | **SUPPORTED** — revoked authority is denied while the never-revoked control remains accepted |
| Human approver unavailable (case 4) | **SUPPORTED** — a job that needs approval is held with no executor; with no answer the hold ends without execution and a late approval is refused; the approved control completes. The 24 h approval window was not waited out, and no fallback authority exists |
| Remote authority status unavailable | **NOT APPLICABLE TO CURRENT PATH** — Proofable evaluates current authority state locally at dispatch and has no remote authorization dependency on this path |
| Revocation after dispatch | **SUPPORTED** — the dispatch decision, the later revocation, the resulting effect/outcome, and the refusal of the next dispatch are separately attributable |

**Protocol boundary:** authority → decision → dispatch → effect/outcome → receipt.

**Revocation after dispatch.** One grant is dispatched under, revoked while the action is in flight, and
then used for the next dispatch. The earlier action was allowed at dispatch; after the revocation became
visible, the call was refused with a typed reason at the executor's own boundary check, so no effect committed. The next dispatch under the same revoked grant was refused with a reason. When
authorization was refused is therefore reported separately from what the prior action did. Revocation
latency is **not measured** in this run.

The result is a portable proof/receipt of the protocol decision and outcome; disclosure controls
which fields are shared. Where Proofable does not independently observe a target-side effect, the
record states `platform_observed_only`.

**Evidence scope:** author-operated; independent reproduction not yet claimed.

This is implementation evidence for the comparison in #13 — not AAIF certification or WG
conformance.

**Corrects** `2026-11-01-suite@9358761ff88444425b85fc77266609916de4c16b` (same run, same records, nothing re-run). Wording and grading scope only; `CORRECTION.md` lists which payloads moved. The packet it corrects stays published and hash-pinned.

**Reproduce it yourself.** `../reproduce/` runs the same cases against the live hosted service under
your own Proofable account, so the records it writes are yours, not Proofable's.

## Files

| File | Role |
| --- | --- |
| `README.md` | this summary |
| `manifest.json` | machine-readable manifest: revision, run, custody, results, disclosure |
| `authority-effect-results.md` | results under the shared authority/effect contract |
| `authority-effect-results.json` | machine-readable results |
| `trace.jsonl` | one sanitized record per supporting case (8 records, contract v1 fields on each) |
| `portable-proofs.json` | disclosed CAIP-380 job and authority envelopes |
| `verify-portable-proofs.mjs` | offline SDK verification of every envelope |
| `CORRECTION.md` | what this revision changed against the packet it corrects, and what it did not |
| `SHA256SUMS` | SHA-256 for every payload file beside it |

`SHA256SUMS` covers every payload file in this directory except itself. Verify with
`sha256sum -c SHA256SUMS`.

Install the pinned `@proofable/sdk@0.1.11` package once. Then verify every signature and qHash offline:

`node verify-portable-proofs.mjs`

Disclosure controls which fields of the Proofable record are shared; non-public fields are not
required to evaluate these results.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
fc86c842f5db0459dcb12d087914206637fb04dc6be46e62f63801815719c89c README.md
dcfd7c123ec4808e16f1577a4bfbd9be380f494df1319a5476441683ef7ab9e4 manifest.json
35967f2aa21b03389d91dace21bcb387932a94d5ac69a794400716c96a72c1a2 authority-effect-results.md
63592305352d5d82cf129f451ae424dde7b66c2b6b2ed7705b12f3d6230c04c2 authority-effect-results.json
5d55f221d9a096e207b3a0bc5368c142b9932c9a3a8696031d43a40823037818 trace.jsonl
9bc0f10ca4175c2a9f27225360a95094a963976849b378d0b2c2dda85f4b0f49 portable-proofs.json
f7eb8f74885518b3ba0d945f60500e3236a25ad569fdcc6c8e44af462eaa3248 verify-portable-proofs.mjs
45b0591eb323539493be68ae4f2755deab7ace719c159a9472bf2ecf30a1b9e4 CORRECTION.md
Loading
Loading