The record, and how to check it
Every event is committed to a hash chain in which each record commits to its predecessor. Altering any historical record changes its hash and breaks every link after it.
Today's commitment
Save this. Save this object. Later, fetch the full log, recompute each record hash in seq order, and confirm the record at head_seq still hashes to head_hash.
Algorithm: sha256(canonical_json(record | prev_hash)). The database blocks UPDATE and DELETE on the log table at the trigger level, and a test deliberately drops that trigger, rewrites a record the way a determined attacker would, and asserts the chain detects it.
What gets published, and what is actually built
18 items are specified. Rather than describe them as done, each carries its real status — live means it is on this site today, specified means the mechanism is built and tested but has no data to show yet, partial means part of it is real and the note says which part is not, backlog means it is not built, and dropped means it was specified, never built, and will not be — that row stays on this list, with its date and its reason, because a promise deleted from the list is the one you could never have checked. A legend that omitted a status the table uses would render an unexplained word next to the one item most in need of explaining.
| # | Item | Status | Note |
|---|---|---|---|
| 1 | Original starting capital | live | $100,000 for every portfolio, never restated. |
| 2 | Every trade with decision time and fill time | live | 147 fills published across 10 portfolios, each carrying both clocks: the session it was priced on and the time it was committed to the chain. |
| 3 | Current holdings | live | Published for P01, P03, P04, P07, P08, P09, P12, P13, P16, P20, with weights from the newest audit-chain NAV mark. |
| 4 | Historical holdings at any date | specified | Ledger replay is implemented; a date-picker surface is not. |
| 5 | Realised and unrealised gains, separated | specified | Never netted into a single number. |
| 6 | Maximum drawdown with its start and end dates | live | Computed from the live record and shown on the leaderboard with its window. |
| 7 | Fees, spreads and estimated slippage, itemised | live | Cost model published verbatim; per-fill breakdown implemented. |
| 8 | Benchmark performance | live | Aligned on common dates only, so a benchmark cannot start later. Published per portfolio where the record overlaps the benchmark's licensed window. |
| 9 | Portfolio rule changes with full diff | live | 37 recorded so far, in the same hash chain as trades. |
| 10 | AI model and prompt version changes | live | MODEL_CHANGE events. The record must not become a chimera of two systems without saying so. |
| 11 | Whether each decision was made before or after market open | live | Boolean on every RUN_START event. |
| 12 | Failed, closed and abandoned portfolios | live | The Graveyard holds 6 retired portfolios, 5 withdrawn before ever trading — published in full, in every aggregate, never deleted. |
| 13 | The rejection log | live | 51 refused proposals published with reason codes, next to the trades that happened. |
| 14 | The fact pack for every decision | partial | The committed hash is published on every decision card (102 so far, written to the chain before the model was called), and since 2026-08-11 the pack itself is stored, content-addressed, and verified against that hash — so a decision can be reconstructed on request. Two limits, stated: decisions committed before that date have no stored pack and never will, and there is no public download surface yet because packs contain licensed price data. |
| 15 | The grounding report | specified | How many quantitative claims traced back to source data. Since 2026-08-12 the guard separates a fabricated ticker from a real instrument this run's fact pack did not carry: only the first is refused as an invention, and a real company outside the pack is refused — if it is refused — by the mandate's own universe rule, named as such. The distinction is published on the decision card rather than collapsed into one word. |
| 16 | The daily audit head hash | live | Published on this site today, mirrored to the public decision feed daily. Save it and verify history later. |
| 17 | The deterministic baseline shadow | dropped | The same portfolio run by a five-line rule, to answer whether the model beats it. Specified since session 1, never built, and dropped on 2026-08-11. No comparison has been withdrawn — there has never been one to withdraw — and this row stays here rather than disappearing, because a question quietly deleted is the one a reader cannot check. |
| 18 | Quarterly buy/hold/sell distribution | specified | Not legally required of a non-firm publisher. Published anyway. |
Restatements — what was found wrong, and what was NOT changed
A figure named here was published, and the code that produced it was later found defective. The figure is UNCHANGED — the chain is append-only, so it cannot be edited — and the record now carries an explanation of how it was produced. Where `any_figures_restated` is false, nothing has been recomputed and the original numbers still stand.
Nothing is under a restatement note today. This block renders whether or not there is anything in it, so that its absence one day cannot be mistaken for the section having been removed.
Rule and model changes
| Seq | When | Portfolio | Event | What changed | Reason |
|---|---|---|---|---|---|
| 15 | 2026-08-14 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 30 | 2026-08-14 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 43 | 2026-08-14 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 56 | 2026-08-14 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 83 | 2026-08-14 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 91 | 2026-08-15 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 277 | 2026-08-17 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 282 | 2026-08-17 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 333 | 2026-08-17 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 343 | 2026-08-17 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 406 | 2026-08-17 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 408 | 2026-08-17 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 426 | 2026-08-18 | P06 | RULEBOOK_CHANGE | — | P06 is retired to the graveyard, flat, on the operator's decision of 2026-08-18. MEASURED on era 2's own record, not asserted: the book publishes five decision instants a session and keeps three. `box read watchdog` reports `d1100` (15:00 UTC) and `d1300` (17:00 UTC) as PERMANENTLY MISSED, each with seven older instants carrying permanent holes behind it, back to this mandate's own effective date of 2026-08-06; `d0945`, `d1430` and `d1545` run clean. `box read q3-gate-sweep` reports 5 runs with 2 HALT_STALE_DATA, at 15:02:36 and 17:02:49 UTC on 2026-08-17 — so the engine was present at both missed instants and refused its own data. `box read book-report` reports 5 runs, 5 answered, 4 proposals, 3 accepted, 0 orders and 0 fills. `box read holdings` reports cash 100,000.00 and 0 positions: the book has never opened a position in era 2. This was already reaching readers — the published payload carried `health=SCHEDULE_MISSED` for P06 on the live site, which is the gap between a published cadence and a kept one appearing on the page. THE CAUSE OF THE STALE-DATA HALTS WAS NEVER DIAGNOSED AND THIS AMENDMENT DOES NOT CLAIM IT WAS. Nobody established whether the 11:00 and 13:00 NY instants fail on feed lag, on this mandate's own max_data_age, or on the intraday bar path. What was decided is that the book is not worth the cost of finding out, after several sessions had already been spent on its tick. That is a budget decision by the operator and it is recorded as one rather than dressed as a technical finding. Unlike P02, which retired holding eight positions and 11.7% cash and whose era-1 residue still fails the nightly ledger replay, P06 retires with its full starting capital and nothing held, so it strands no state and leaves no open reconciliation. It is retired, not deleted: the mandate, the rulebook and era 2's record stay published and verifiable, and P08's experience block continues to name P06, because excluding a retired book from the platform's own record is survivorship bias. |
| 656 | 2026-08-18 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 658 | 2026-08-18 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 676 | 2026-08-18 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 678 | 2026-08-18 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 692 | 2026-08-18 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 694 | 2026-08-18 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 820 | 2026-08-19 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 823 | 2026-08-19 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 838 | 2026-08-19 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 840 | 2026-08-19 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 853 | 2026-08-19 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 855 | 2026-08-19 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 976 | 2026-08-20 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 981 | 2026-08-20 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 993 | 2026-08-20 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 995 | 2026-08-20 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1009 | 2026-08-21 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1018 | 2026-08-21 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1133 | 2026-08-21 | P01 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1135 | 2026-08-21 | P03 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1147 | 2026-08-21 | P04 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1149 | 2026-08-21 | P07 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1162 | 2026-08-22 | P16 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
| 1165 | 2026-08-22 | P08 | MODEL_CHANGE | claude-sonnet-4-5 → claude-opus-4-8 | daily runner engine resolution |
Mirror the head hash somewhere we do not control
Publishing the daily head hash here converts "we say we did not edit it" into "we could not have edited it without you noticing" — but only if the hash exists somewhere outside our control. Posting it to a public repository, a social post or an RFC 3161 timestamp authority is cheap, and it is exactly the artifact a bank's diligence team asks for. This is on the build list and is not yet done.
Reproduce this page
The complete payload every page on this site was rendered from is downloadable, and its hash is 540d30e63326f8ee011c9663…. Two builds of the same record produce the same payload hash, which is asserted by a test — otherwise "the site is a function of the record" would not be something a third party could check.