# Evidence

What has been run, with the numbers it printed. Every review and every test harness so far was written by Claude models; the cross-check below is the one place where the expected answers come from code sigelo's authors did not write. Nothing has been reviewed by anyone outside the project.

## Suites, measured for this site

Run at `c2c9cdc` on 2026-10-01 (the test host, go1.27.1, node v24.18.1).

| Command | Result |
|---|---|
| `cd go && go test ./... -v` | 498 `PASS` lines, exit 0 |
| `sigelo-verify --conformance ../test-vectors.json` (monero vectors beside it) | 242 passed, 0 failed, `ALL PASS` |
| `sigelo-verify --conformance test-vectors.json` (the file alone, as released) | 188 passed, one `SKIP monero section`, `ALL PASS` |
| `sigelo-verify --conformance test-vectors.json --impl ./sigelo-verify` | 139 passed: positive 14/14, monero 9/9, negative 29/29, parity 87/87; 6 invoice vectors not scored |
| `cd integrations/mcp && npm test` | `ALL PASS (50 checks)` |
| `cd adapters/moadim && npm test` | 84 checks, `ALL PASS` |

**Recorded, not re-run for this site** (the figures the repository's READMEs record at `cad0357`): `ts/` 620 `PASS` lines with `monero-wallet-rpc` on `PATH` (608 and one `SKIP` without it); `spend/` 659 passed with the funded stagenet wallet reachable, 626 passed and 2 skipped without it; `release/pack-test.sh` 16 checks on a built directory, 17 when it runs the build itself.

## Release build

`release/build.sh` builds every artefact from a clean clone of HEAD. At `c2c9cdc` with go1.27.1, node v24.18.1 and npm 11.11.0 it wrote:

```
11f71314ab6d093cae209e7bdefb38e9ebf3bf32960dbf3e0d73434517028b2e  sigelo-0.1.0.tgz
6574249b8b271bbb18d12b831ae422413a988ece0305afef563c794d81e39f26  sigelo-agent-0.1.0.tgz
c0006cafc946dd7040db55dc71198ac3479dfe83a77dcfe248e8e62d57e8529f  sigelo-mcp-0.1.0.tgz
c73d4de82bc141893d21caea88c08384694be62737669d0e51e2f28f7c81624f  sigelo-spend-0.1.0.tgz
2e024f6afcd15609c8dd2012d5ba467c8dee032a7f66b81ef3a04b0be197e0e6  sigelo-verify-darwin-amd64
40498f95a62121bf8b18ec6e7303b3efab5e43abb6324ce0b3b381f2f29727d9  sigelo-verify-darwin-arm64
554f259dcfb75061701145e182b0b344d6167056c9bb4140a5053bfffcd0b31e  sigelo-verify-linux-amd64
c8edcb1f8be99f2dc554203145a97496dd91030494691513ef7c82afd5d0267f  sigelo-verify-linux-arm64
7104943beeb569ee8eed6e2c15ec03136d42b59d9098af61ea997d5140e34a5e  sigelo-verify-src-0.1.0.tar.gz
603e1cc6a282f51800c73cdd6a3e9aa8140d6c7a16067585fca331b2ca8d6659  sigelo-verify-windows-amd64.exe
5fe0405db81a841fbab2fff8b9622857988ba321895f9e4fa79354589fb6e3d1  test-vectors.json
```

`build.sh` is made so that the same commit and the same Go toolchain give byte-identical binaries (ROADMAP §1 R2 records `SHA256SUMS` identical across two builds); the npm tarballs also depend on the node, npm and TypeScript versions. With these tarballs in an empty directory, every command on [adopt](/adopt.md)'s agent path ran and `sigelo-verify` accepted the bundle (exit 0). Nothing has been published.

## Simulations

Seeded and deterministic, so a digest names a run ([repository `sim/README.md`](https://github.com/csigelo/sigelo/blob/main/sim/README.md)):

| Simulation | What | Digest |
|---|---|---|
| `swarm.mjs`, seed `sigelo-swarm-1` | 300 agents, 6 worlds, 40 rounds: joins, migrations, rotations, Monero bindings, thefts, forks, recoveries, tampered and fuzzed bundles; a sample re-verified by the Go verifier byte for byte | `e7500c102bd9cbad` (6 and 3 workers alike) |
| `worlds.mjs`, seed `sigelo-worlds-1` | dishonest worlds and the 1f916 adapter as a world: 36 case kinds, each with the SPEC section that decides it | `c51d1462e916bac8` |
| `keeper-scenarios.mjs`, seed `sigelo-keeper-scenarios` | 78 scripted keeper steps: nested delegation, `policy.json` edited under a running keeper | `e9622c852b72a605` |

Checks on the checkers: 13 bugs planted one at a time in a copy of `ts/dist`, each reported by the swarm or the worlds run; 7 planted in the keeper's delegation tree, each caught by the scenarios (the repository's `sim/REPORT.md`).

## Cross-check against third-party code

2026-09-29, sigelo `4e1a5aa`, seed 20260929: **0 divergences**. Oracles: the RFC 8785 author's reference canonicalizers and testdata, monero-python 1.1.1, libsodium through PyNaCl 1.6.2, the RFC 8032 text, Wycheproof (151 Ed25519 vectors), ed25519-speccheck (12 cases). Among the runs: 20 000 random JCS documents and 100 008 integers equal in ts and go; 1 800 forbidden inputs rejected by both; 10 000 Monero base58 encodes, 5 000 seed-derived wallets and 2 500 subaddresses equal; 500 libsodium signatures byte-identical and 800 malleated ones rejected. The three monero-python disagreements are its own departures from Monero's C++. Not covered: Monero message signatures (SigV2), for lack of a third-party oracle; the wallet-rpc oracle in `spend/` checks those. Source: the repository's `crosscheck/README.md`.

## Docs-only comprehension

A model gets only a task prompt and a frozen snapshot of the docs, and a program grades what it produces. One run per cell, Claude models only, so a datapoint, not a distribution. The table, copied from the repository's `docs-test/RESULTS.md`:

| Date | Round | Task | Model | Result | Docs at | Led to |
|---|---|---|---|---|---|---|
| 2026-09-17 | 1 | lifecycle from docs only | Sonnet | **8/10** | before `38e9c76` | `38e9c76` |
| 2026-09-17 | 1 | lifecycle from docs only | Haiku | **6.5/10** | before `38e9c76` | `38e9c76` |
| 2026-09-17 | 1b | the same, after QUICKSTART fixes and `examples/world.mjs` | Haiku | **7/10** | `38e9c76` | its two remaining asks folded into QUICKSTART in `f1aba94` |
| 2026-09-17 | 2 | a verifier from SPEC alone | Opus | **34/34** vectors, first iteration; **12 spec findings** | before `f1aba94` | spec round 2, `f1aba94` |
| 2026-09-23 | keeper | the MONERO.md §4.2 snippet only, `sigelo-wallet` on stagenet | Haiku | accepted (below) | `fdaba3f`..`393b7b4` | recorded in MONERO.md §8 |
| 2026-09-29 | 3 | lifecycle from docs only | Sonnet | **10/10** (artifacts `b9278416cb18388d…`, transcript `9c8c12e479fb9952…`, no forbidden reads) | `9dadab0` (snapshot `ff3639074728bd09…`) | — |
| 2026-09-29 | 3 | lifecycle from docs only | Haiku | **7/10** (artifacts `e27afc796896aebd…`, transcript `01ec4245607ad494…`; FAIL binding discarded — cross-signed correctly but dated `now + 3600`, so §9 step 6 drops it; FAIL stolen `iat` earlier than recovery — it spaced every `iat` like a story and wrote "recovery must be AFTER the stolen one"; FAIL invariants: that binding discarded in both bundles) | `9dadab0` | R3 bar (≥ 9/10 Haiku) not met. Root cause for both: the docs stated "iat is the signing time" and "recovery beats iat" only as permissions in SPEC, with no `bind()` line and no worked case in QUICKSTART → `a795275` (QUICKSTART: the exact `ed25519-test` `bind({… addr_secret, iat: now})`, a Timestamps paragraph, recovery-beats-iat worked at T and T+3600; ts/README API notes). Re-measure at the next round |
| 2026-09-29 | 3 | a verifier from SPEC + vectors alone, **Python** (1 033 lines; PyNaCl, pycryptodome, Edwards arithmetic by hand) | Opus | **139/139** on `grade-verifier.mjs` and **139/139** on `sigelo-verify --conformance --impl`, first iteration; 0 spec findings (it asked whether an object-form parity case with `__proto__` grades as a reject — it does, by the grader's text interface, `grade-verifier.mjs:152`) | `9dadab0` (verifier snapshot `469da8a3c59fe898…`) | Perl (the second foreign language on the host) impossible: no Ed25519 library, no compiler. Non-Claude models: still no API keys |
| 2026-10-01 | site | adopt sigelo from the website alone (`site/test/TASK-site.md`: the served site + the release files, nothing else) | Haiku | **6/6** in 97 s (install from tarballs, SHA256SUMS checked, tier-2 recovery key, attested by the served mock world, bundle accepted by the release `sigelo-verify-linux-arm64`; transcript `48392b8c8c560116…`, no forbidden reads; pages read: `/`, `/adopt`, `/quickstart`, `/spec`, `/examples/world.mjs`) | site at `4bf622b` (tree c2c9cdc release) | the candidate ran the world from a subdirectory, so `site/test/collect.sh` now finds the world state anywhere under the workspace |
| 2026-10-01 | 3b | lifecycle from docs only, after `a795275` (QUICKSTART: the exact `ed25519-test` `bind()` call, a Timestamps paragraph, recovery-beats-`iat` worked) | Haiku | **10/10** (artifacts `b2d1dff2922602fb…`, transcript `ccd508f60726b629…`, no forbidden reads; 24 min) | `9516622` (snapshot `docs-test/snapshot/9516622`) | **R3 bar met at Haiku tier** (≥ 9/10) with Claude models; non-Claude families still unmeasured (API keys) |

The bar for v0.2 is at least 9/10 at Haiku tier across model families; it is not met. Non-Claude families have not run.

## Keeper soak (stagenet)

Scripted agents against a real keeper and wallet on stagenet, started 2026-09-23 (`41076a6`), planned for at least 14 days; ROADMAP §1 R4 records day 6 on 2026-09-29. Four incidents are written up in the repository's `spend/soak/README.md` (a stale lock after a reboot, a torn log tail pre-empted, a near-miss redeploy, 32 hours offline). The incident rehearsal (T14) has no recorded result at this commit.
