Skip to content

About

A public slice of a solo operator's hash-chained record of AI-agent work being graded, refused and voided. Paper-only. Run verify.py in 60 seconds.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

A verifiable slice of an AI-agent work record

Operator: Henry Gers, New Zealand.
To reach me: open an issue here.

What this is. One person, "the operator", runs a team of AI agents that build and review software for paper-only trading research. The agents log their steps to an append-only record: work proposed, graded by other agents, refused, declined, retracted. Each row carries the sha256 hash of the row before it. This package is a small verbatim excerpt from that record, with a script that checks the hashes. Everything is paper. No real money is involved, and no row here authorises real capital.

Head hash (seq 7203): 5307336d9e9f0bd441e587023ac09cca7118bc8d89dc88660579484a2164662d Showpieces digest: ccfb67c2de80ae0a9862a0dfd17ad21fe9b53df5e70c041c26779cfdb3355c62 Published: 2026-10-15 (UTC)

Run it (60 seconds, no signup, no network)

python3 -I verify.py

You need Python 3 and nothing else: standard library only, no arguments. It should print 90 of 90 links verify, then the two hashes above. Change any character in a row and run it again: it exits 1 and says where the chain broke.

What is in it

  • slice_7117_7203.jsonl: 87 consecutive rows from 2026-09-19, 00:17 to 02:19 UTC. In them, the coordinator works through a backlog of review results that arrived late. Each one is recorded, and none is replayed. Changes blocked by a FATAL finding stay uninstalled. One review result is declined because the model that answered was not the one requested; the same run also went over its spend cap (seq 7186, 7202). A hold on one desk stays engaged at every recheck. Scheduled self-wakes that ran but produced no progress are logged as misses.
  • showpieces.jsonl: ten rows, chosen to show specific events:
seq UTC date what the row records
2083 2026-08-22 The record had frozen at seq 2082. It was unfrozen with 0 historical bytes rewritten. Rows 2070–2082 were kept, and their links are marked unverified, not repaired.
3326 2026-08-29 A review returned PROVISIONALLY_CLEAN, then was retracted because two manifest counts were wrong (it said 7/7 and 10/10; the actual counts were 6/6 and 11/11).
7714 2026-09-23 A worker checked the premise it was handed and found it false: what the requested counter would show was already logged on 11,200 of 11,200 rows. It dropped the redundant fix and recorded the real defect.
7782 2026-09-25 The "cold" reviewers turned out to be reading the builder's memory file. 21 past verdicts were marked tainted, as a custody defect rather than retractions, and a gate now quarantines a primed verdict.
14866, 14873–14874 2026-10-14 At 06:36 UTC the coordinator decided to install a fix while one FATAL finding was still open, calling that finding inherited. An audit by a different vendor's model found that this broke the rule that a FATAL blocks installation. The coordinator accepted the finding, decided to roll back at 07:12, and restored the previous files and restarted by 07:13. It also recorded that one of its own earlier claims was false.
15127–15129 2026-10-15 A fix failed review rounds 1–3 with one FATAL finding each. It was installed only when round 4 reported 0 FATAL, and the new debt it left was given an owner and an expiry date.
  • ANCHOR.json: the predecessor hash for the first slice row, and the slice's head hash. showpieces_anchors.json: for each showpiece, its own hash, its predecessor's hash and the file digest.
  • CLAIMS_TABLE.md: which public claims these rows can and cannot back. SCAN_REPORT.md: what was scanned before publishing. GRADE.md: a check by a separate AI seat run by the operator. It is not an outside party.
  • REGISTRY_HEAD.json: the hash of the last row of the full record (seq 15133) when this was published. ANCHORS.md: where that hash and POST.md were timestamped outside this machine (Internet Archive snapshots, and an OpenTimestamps proof in REGISTRY_HEAD.json.ots).
  • DATA_CARD.md: what else from the record can be shared on request, how rows are scrubbed, what is never shared, and how to ask.

What the verifier proves

It proves the integrity of what was recorded, not that it was right. verify.py recomputes every link inside the slice and checks the slice's last row against the head hash. It hashes every showpiece row against its recorded hash, and the whole showpieces file against the digest. If a byte changes in any row, a link, a row hash or a published hash stops matching.

The chain is self-anchored: no outside party witnessed it being written. Anyone can build a fresh chain that is consistent with itself, and anyone who edits a row could also edit the anchor files. So it proves the future from the published hashes, not the past. From today, these exact bytes are what the two hashes above commit to. The hash of the full record's last row (REGISTRY_HEAD.json) now also has timestamps held outside this machine; see ANCHORS.md. If more of the record is published later, row 7204 must carry the head hash as its predecessor. Each showpiece's own hash must likewise appear as the predecessor of the row after it.

Each showpiece's link back to the row before it cannot be checked here, because those rows are not published. The exceptions are rows 14873–14874 and 15127–15129, which link to each other, so those three links are recomputed.

Reading the rows

  • seq, ts, prev_event_sha256: position in the record, UTC time, hash of the previous row. event and status say what happened and how it ended.
  • ALANIS, GOV, ROOT: names of the operator's agent lanes (the coordinator and its governance lanes). owner is the lane that owns the next step.
  • TERMINAL: a worker's or reviewer's final output. CONSUMED: the coordinator has read it and recorded a decision.
  • DELAYED_RECONCILED, LATE_TERMINAL: a result that arrived after its decision was made. It is recorded and not acted on again (NO_REPLAY, NO_RETRY, NO_REGRADE).
  • 0F/2M/4C: a review's findings by severity: FATAL, MATERIAL, COSMETIC. One FATAL blocks installation ("no install until 0 FATAL").
  • DECLINED, UNINSTALLED, UNACCEPTED, SUPERSEDED: the change was not installed, or a later attempt replaced it.
  • effects: counts of side effects such as orders, broker calls, installs and capital. 0 means none happened.
  • HOLD_PRESERVED, KEEP_ENGAGED: a hold on a trading desk stays on.
  • WAKE_..._MISS, MILESTONE_UNPROVED: a scheduled self-wake ran but produced no recorded progress, so it is logged as a miss.
  • A01, A02, R2, R3: attempt and review-round numbers. MODEL_ROUTE_MISMATCH: the reviewer that answered was not the model requested.

Not proven

  • No outside grader. Every reviewer in these rows is one of the operator's own AI agent seats, sometimes from a different vendor. None is an independent party.
  • No desk is a proven end-to-end loop. The operator's own audit (not included here) has not shown any trading desk running truthfully from signal to recorded result.
  • Tamper-evident, not tamper-proof. Whoever controls the machine could have rewritten the record before these hashes were published.
  • Chosen rows. The operator picked the excerpt and the showpieces, so they cannot show what was left out.
  • Paper only. Nothing here shows a profit, and nothing claims one.

Licence

Copyright 2026 Henry Gers. The text and the registry rows (POST.md, TIMELINE.md, README.md, CLAIMS_TABLE.md, SCAN_REPORT.md, GRADE.md, DATA_CARD.md, ANCHORS.md, and every *.jsonl and *.json file) are under CC BY 4.0. verify.py is under the MIT License. Full terms: LICENSE.

About

A public slice of a solo operator's hash-chained record of AI-agent work being graded, refused and voided. Paper-only. Run verify.py in 60 seconds.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages