Recorded evidence
20260915T060329Z-evidenceRecorded, not described.
Every command below was executed under a pseudo-terminal recorder and kept with its raw byte stream, its timing file and its SHA-256. The sessions cover the environment, the Rust and Python suites, a developer walkthrough against a live registry, a 112-agent campaign with an adversary, the benchmark and a C++ verifier through the C ABI. Nothing on this page is typed by hand: it is built from the run's files.
- Started
- 2026-09-15 06:03:29 UTC
- Finished
- 2026-09-15 06:08:50 UTC
- Machine
- Intel(R) Xeon(R) Processor @ 2.10GHz, 4 CPUs
- Platform
- Linux-6.18.44-fc-v33-x86_64-with-glibc2.39
- Toolchain
- Python 3.11.15 · rustc 1.94.1 (e408947bf 2026-03-25)
- Commit
- 31ca0e784312

What the run produced
Every figure is read from the run's files.
Where the time went
80 sessions in six phases
Total 5 min 20 s of recorded wall-clock time.
The suites, as recorded
Pass counts read from the sessions
| Suite | Covers | Passed |
|---|---|---|
| The ID stack | issuance, presentations, status lists, persistence, cryptographic vectors, REST and MCP | 27 |
| The Agent Stack | contracts, escrow, the risk gate, consensus, disputes, restart with verified restore | 9 |
| Marks and rendering | the Mark engines, device profiles, the data page, the QR round trip | 22 |
| A live registry | the command line, the client, the TypeScript SDK, anchors, oversight | 11 |
| The browser verifier | the page a printed token opens, driven in Chromium against a live registry | 6 |
| Admission, payments, recognition, witnesses, publication | the policy and queue, the mandate chain and refusals, RFC 9421, the guard, rollback refusal, network enrichment, publication integrity, oversight | 21 |
| The protocol suite | the legacy modules with tamper detection | 94 |
| The verification core | recognition, verification, hybrid seals, anchors, ledger entries | 9 |
| The TypeScript SDK | protocol helpers and byte-for-byte vectors against the reference | 34 |
The page a scanned ID opens
Chromium, a real token, four verdicts.
The QR code on every ID opens phanes.app/id with the sealed token in the address. The page verifies the Ed25519 seal in the browser, loads the issuer anchors from its own origin, checks the signed status lists and asks the registry for the hybrid verdict. Below: that page, opened from a real token during the run.







The adversary
43 of 43 attacks, each with the status it expected.
An adversary process ran against the campaign registry while the agents used it. Each attack names the outcome it expected and the outcome it observed; a defence is a match.
| Attack | Expected | Observed | Defended |
|---|---|---|---|
| replay_signed_request | HTTP 401 | HTTP 401 | yes |
| stale_timestamp_-10min | HTTP 401 | HTTP 401 | yes |
| future_timestamp_+10min | HTTP 401 | HTTP 401 | yes |
| unsigned_holder_route | HTTP 401 | HTTP 401 | yes |
| wrong_key_read_full_id | HTTP 403 | HTTP 403 | yes |
| wrong_key_record_event | HTTP 403 | HTTP 403 | yes |
| wrong_key_quote | HTTP 403 | HTTP 403 | yes |
| operator_route_wrong_bearer | HTTP 403 | HTTP 403 | yes |
| operator_route_no_bearer | HTTP 401 | HTTP 401 | yes |
| signature_over_different_path | HTTP 401 | HTTP 401 | yes |
| signature_over_different_body | HTTP 401 | HTTP 401 | yes |
| forged_mark_attacker_signed_offline | False | False | yes |
| forged_mark_attacker_signed_online | False | False | yes |
| pq_downgrade_v2_to_v1_online | False | False | yes |
| pq_downgrade_v2_to_v1_offline | False | False | yes |
| pq_signature_forged_random_online | False | False | yes |
| pq_signature_forged_random_offline | False | False | yes |
| pq_signature_by_attacker_key_online | False | False | yes |
| pq_signature_by_attacker_key_offline | False | False | yes |
| pq_signature_byte_tampers_113_offline | 113 | 113 | yes |
| single_bit_tampers_1280_offline | 1280 | 1280 | yes |
| byte_tampers_11_online | 11 | 11 | yes |
| garbage_mark_online | False | False | yes |
| short_mark_online | False | False | yes |
| tampered_event_body_commit | HTTP 4xx | HTTP 403 | yes |
| unregistered_witness | HTTP 4xx | HTTP 403 | yes |
| replay_committed_event | HTTP 4xx | HTTP 400 | yes |
| presentation_nonce_reuse | False | False | yes |
| presentation_wrong_audience | False | False | yes |
| presentation_swapped_disclosure | False | False | yes |
| visa_from_unregistered_venue | HTTP 403 | HTTP 403 | yes |
| robotics_package_for_software_agent | HTTP 403 | HTTP 403 | yes |
| physical_cover_without_hardware_attestation | HTTP 4xx | HTTP 400 | yes |
| policy_beyond_pool_capacity_refused | HTTP 400 | HTTP 400 | yes |
| bind_without_verified_premium_strict_registry | HTTP 403 | HTTP 403 | yes |
| suspended_mark_online | False | False | yes |
| suspended_mark_offline_after_refresh | False | False | yes |
| unsuspended_mark_online | True | True | yes |
| revoked_mark_online | False | False | yes |
| revoked_mark_offline_after_refresh | False | False | yes |
| new_mark_for_revoked_id | HTTP 4xx | HTTP 400 | yes |
| unknown_id_number | HTTP 404 | HTTP 404 | yes |
| path_traversal_number | HTTP 4xx | HTTP 404 | yes |
The sessions
80 sessions under a pseudo-terminal.
Each window is the session's raw byte stream drawn as a terminal, with the command that ran, its exit code and its duration. The typescript, its timing file and its SHA-256 are in the run directory; the raw link opens the file the window was drawn from.
Environment
1 session · 0.1 s
Build and test suites
10 sessions · 2 min 0 s
cargo-build
exit 026.811 s2026-09-15 06:03:29 UTCcargo-test
exit 019.83 s2026-09-15 06:03:56 UTCShow the remaining 10 linesShowing all 34 lines
pytest-id-stack
exit 05.783 s2026-09-15 06:04:16 UTCShow the remaining 12 linesShowing all 36 lines
pytest-agent-stack
exit 03.279 s2026-09-15 06:04:22 UTCpytest-mark-render
exit 05.841 s2026-09-15 06:04:25 UTCShow the remaining 7 linesShowing all 31 lines
pytest-client-live
exit 037.285 s2026-09-15 06:04:31 UTCpytest-web-verifier
exit 010.455 s2026-09-15 06:05:08 UTClegacy-test-all
exit 02.474 s2026-09-15 06:05:19 UTCShow the remaining 114 linesShowing all 138 lines
pytest-admission-payments-witnesses
exit 07.64 s2026-09-15 06:05:21 UTCShow the remaining 6 linesShowing all 30 lines
sdk-tests
exit 00.872 s2026-09-15 06:05:29 UTCShow the remaining 29 linesShowing all 53 lines
Walkthrough against a live registry
65 sessions · 57 s
cli-doctor
exit 00.421 s2026-09-15 06:05:30 UTCcli-keygen
exit 00.165 s2026-09-15 06:05:31 UTCcli-apply
exit 00.566 s2026-09-15 06:05:31 UTCcli-id-public
exit 00.516 s2026-09-15 06:05:32 UTCShow the remaining 62 linesShowing all 86 lines
cli-mark
exit 00.566 s2026-09-15 06:05:32 UTCShow the remaining 6 linesShowing all 30 lines
cli-token
exit 00.516 s2026-09-15 06:05:33 UTCcli-recognize
exit 00.115 s2026-09-15 06:05:33 UTCcli-anchors
exit 00.566 s2026-09-15 06:05:33 UTCcli-verify-mark-offline
exit 00.566 s2026-09-15 06:05:34 UTCcli-verify-mark-online
exit 00.566 s2026-09-15 06:05:34 UTCShow the remaining 6 linesShowing all 30 lines
cli-packages
exit 00.566 s2026-09-15 06:05:35 UTCShow the remaining 566 linesShowing all 590 lines
cli-record-1
exit 00.666 s2026-09-15 06:05:35 UTCShow the remaining 8 linesShowing all 32 lines
cli-record-2
exit 00.566 s2026-09-15 06:05:36 UTCShow the remaining 8 linesShowing all 32 lines
cli-record-3
exit 00.616 s2026-09-15 06:05:37 UTCShow the remaining 8 linesShowing all 32 lines
cli-transcript
exit 00.566 s2026-09-15 06:05:37 UTCShow the remaining 2 linesShowing all 26 lines
cli-insure
exit 00.566 s2026-09-15 06:05:38 UTCShow the remaining 15 linesShowing all 39 lines
cli-certify
exit 00.867 s2026-09-15 06:05:38 UTCShow the remaining 15 linesShowing all 39 lines
cli-render-full
exit 01.067 s2026-09-15 06:05:39 UTCcli-render-public
exit 00.967 s2026-09-15 06:05:40 UTCcli-verify-page
exit 00.566 s2026-09-15 06:05:41 UTCShow the remaining 36 linesShowing all 60 lines
curl-verify-page-html
exit 00.065 s2026-09-15 06:05:42 UTCShow the remaining 16 linesShowing all 40 lines
curl-id-page-and-anchors
exit 00.616 s2026-09-15 06:05:42 UTCShow the remaining 16 linesShowing all 40 lines
cli-audit-stats
exit 00.516 s2026-09-15 06:05:43 UTCcli-audit-entries
exit 00.566 s2026-09-15 06:05:43 UTCShow the remaining 165 linesShowing all 189 lines
cli-audit-inclusion
exit 01.017 s2026-09-15 06:05:44 UTCShow the remaining 15 linesShowing all 39 lines
robot-manufacturer-attestation
exit 00.165 s2026-09-15 06:05:45 UTCcli-apply-robot
exit 00.616 s2026-09-15 06:05:45 UTCcli-robot-packages
exit 00.516 s2026-09-15 06:05:46 UTCShow the remaining 666 linesShowing all 690 lines
cli-robot-render
exit 01.017 s2026-09-15 06:05:46 UTCcli-keygen-payee
exit 00.165 s2026-09-15 06:05:47 UTCcli-apply-payee
exit 00.566 s2026-09-15 06:05:47 UTCcli-credits
exit 00.566 s2026-09-15 06:05:48 UTCcli-stack
exit 00.566 s2026-09-15 06:05:48 UTCShow the remaining 30 linesShowing all 54 lines
cli-propose
exit 00.616 s2026-09-15 06:05:49 UTCShow the remaining 165 linesShowing all 189 lines
cli-sign-contract-payer
exit 00.669 s2026-09-15 06:05:50 UTCShow the remaining 171 linesShowing all 195 lines
cli-sign-contract-payee
exit 00.719 s2026-09-15 06:05:50 UTCShow the remaining 265 linesShowing all 289 lines
cli-fulfill
exit 00.716 s2026-09-15 06:05:51 UTCShow the remaining 40 linesShowing all 64 lines
cli-stack-ledger
exit 00.767 s2026-09-15 06:05:52 UTCcli-dispute
exit 011.461 s2026-09-15 06:05:52 UTCShow the remaining 19 linesShowing all 43 lines
cli-evidence
exit 00.668 s2026-09-15 06:06:04 UTCcli-resolve
exit 01.117 s2026-09-15 06:06:05 UTCShow the remaining 31 linesShowing all 55 lines
cli-inspect-verify
exit 00.716 s2026-09-15 06:06:06 UTCcli-anchor
exit 00.717 s2026-09-15 06:06:06 UTCcurl-network
exit 00.064 s2026-09-15 06:06:07 UTCcli-admission-policy
exit 00.566 s2026-09-15 06:06:07 UTCcli-admission-review
exit 03.827 s2026-09-15 06:06:08 UTCShow the remaining 149 linesShowing all 173 lines
venue-register
exit 00.666 s2026-09-15 06:06:12 UTCcli-pay-intent
exit 00.616 s2026-09-15 06:06:12 UTCShow the remaining 12 linesShowing all 36 lines
cli-pay-cart
exit 00.616 s2026-09-15 06:06:13 UTCShow the remaining 20 linesShowing all 44 lines
cli-pay-token
exit 00.616 s2026-09-15 06:06:13 UTCShow the remaining 3 linesShowing all 27 lines
cli-pay
exit 01.168 s2026-09-15 06:06:14 UTCShow the remaining 14 linesShowing all 38 lines
cli-verify-receipt
exit 00.768 s2026-09-15 06:06:15 UTCShow the remaining 8 linesShowing all 32 lines
cli-pay-refund
exit 01.168 s2026-09-15 06:06:16 UTCShow the remaining 4 linesShowing all 28 lines
recognition-by-merchant
exit 00.165 s2026-09-15 06:06:17 UTCShow the remaining 3 linesShowing all 27 lines
enforcement-guard
exit 00.616 s2026-09-15 06:06:17 UTCcli-register-witness
exit 00.667 s2026-09-15 06:06:18 UTCcli-witness-cosign
exit 00.617 s2026-09-15 06:06:19 UTCShow the remaining 29 linesShowing all 53 lines
cli-register-overseer
exit 00.616 s2026-09-15 06:06:19 UTCcli-oversight
exit 01.669 s2026-09-15 06:06:20 UTCShow the remaining 134 linesShowing all 158 lines
cli-publish
exit 02.572 s2026-09-15 06:06:22 UTCShow the remaining 33 linesShowing all 57 lines
cli-publish-verify
exit 00.515 s2026-09-15 06:06:24 UTCcli-revoke
exit 00.566 s2026-09-15 06:06:25 UTCcli-verify-page-after-revocation
exit 00.566 s2026-09-15 06:06:25 UTCShow the remaining 1 linesShowing all 25 lines
cli-anchors-refresh-and-verify
exit 01.118 s2026-09-15 06:06:26 UTCShow the remaining 4 linesShowing all 28 lines
cpp-build-and-verify
exit 00.566 s2026-09-15 06:06:27 UTCThe campaign
2 sessions · 1 min 56 s
campaign-112-agents
exit 0115.712 s2026-09-15 06:06:28 UTCcampaign-summary
exit 00.165 s2026-09-15 06:08:50 UTCShow the remaining 72 linesShowing all 96 lines
Benchmark
1 session · 26.8 s
phanes-bench
exit 026.804 s2026-09-15 06:08:23 UTCShow the remaining 29 linesShowing all 53 lines
Manifest
1 session · 0 s
sha256-manifest
exit 00.032 s2026-09-15 06:08:50 UTCShow the remaining 60 linesShowing all 84 lines
The documents
683 files, 78.7 MB, each with its SHA-256.
The run directory carries every session, the campaign's files, the walkthrough's publication and two documents built only from those files. The manifest lists every one with its digest.
| File | What it is | Bytes | SHA-256 |
|---|---|---|---|
| evidence-report.pdf | The recorded evidence report | 27,279,814 | dd1175516dc48067c870d8a5a92faad97a4da04045574a5adc2b6c945fd9e851 |
| how-it-works.pdf | How it works, with the recorded sessions | 8,024,469 | 374cb3c1d23d9dd2d4828f5020bd41f394a9aa2b671ef7a2db01279bab46686f |
| evidence.json | Every session's metadata | 153,306 | 6155a6952cc66369946703cd10f9a18ccdcc2bc6e1b8deb2d4d0f2928f25616a |
| campaign/summary.json | The campaign's summary | 476,604 | 495dd1518ac96697e5eddc7f68f8415a99c2501fc852d070bddb3af4b9aa929c |
| campaign/registry.access.jsonl | The campaign registry's access log | 1,929,133 | 56fecc9ada0cbde066bd3558c578e7b543bc2bcacfa0b92767251a8c050fe14e |
| walkthrough.registry.access.jsonl | The walkthrough registry's access log | 28,084 | 592a4fefc9e0b570aaf296ff3e05e5f527489ff68de05fd3b43b60f9278e4a58 |