Paper trading. No real money is invested and nobody earned these results. Every figure here is hypothetical. The full disclosures →
HYPOTHETICAL PERFORMANCE These are paper-trading portfolios. No client money is invested, no orders are routed to any venue, and no result shown here was achieved with real capital. Hypothetical results have inherent limitations and do not reflect the effect of real order flow on price.
AI Portfolios
The public record of AI-managed portfolios.
Home / audit

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

Records
6142
Chain
verified
recomputed end to end
Published
2026-09-26
13:17:26Z
Verdict. verified
head hash
147c7d978a3fc6551be5bfa3554c37449a906c11bcdc413a4192b2166fc7b325

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.

#ItemStatusNote
1Original starting capitallive$100,000 for every portfolio, never restated.
2Every trade with decision time and fill timelive147 fills published across 10 portfolios, each carrying both clocks: the session it was priced on and the time it was committed to the chain.
3Current holdingslivePublished for P01, P03, P04, P07, P08, P09, P12, P13, P16, P20, with weights from the newest audit-chain NAV mark.
4Historical holdings at any datespecifiedLedger replay is implemented; a date-picker surface is not.
5Realised and unrealised gains, separatedspecifiedNever netted into a single number.
6Maximum drawdown with its start and end datesliveComputed from the live record and shown on the leaderboard with its window.
7Fees, spreads and estimated slippage, itemisedliveCost model published verbatim; per-fill breakdown implemented.
8Benchmark performanceliveAligned on common dates only, so a benchmark cannot start later. Published per portfolio where the record overlaps the benchmark's licensed window.
9Portfolio rule changes with full difflive37 recorded so far, in the same hash chain as trades.
10AI model and prompt version changesliveMODEL_CHANGE events. The record must not become a chimera of two systems without saying so.
11Whether each decision was made before or after market openliveBoolean on every RUN_START event.
12Failed, closed and abandoned portfoliosliveThe Graveyard holds 6 retired portfolios, 5 withdrawn before ever trading — published in full, in every aggregate, never deleted.
13The rejection loglive51 refused proposals published with reason codes, next to the trades that happened.
14The fact pack for every decisionpartialThe 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.
15The grounding reportspecifiedHow 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.
16The daily audit head hashlivePublished on this site today, mirrored to the public decision feed daily. Save it and verify history later.
17The deterministic baseline shadowdroppedThe 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.
18Quarterly buy/hold/sell distributionspecifiedNot legally required of a non-firm publisher. Published anyway.

Restatements — what was found wrong, and what was NOT changed

Restatements — 0 affected fills · no figure recomputed

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

SeqWhenPortfolioEventWhat changedReason
152026-08-14P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
302026-08-14P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
432026-08-14P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
562026-08-14P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
832026-08-14P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
912026-08-15P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
2772026-08-17P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
2822026-08-17P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
3332026-08-17P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
3432026-08-17P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
4062026-08-17P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
4082026-08-17P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
4262026-08-18P06RULEBOOK_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.
6562026-08-18P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
6582026-08-18P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
6762026-08-18P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
6782026-08-18P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
6922026-08-18P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
6942026-08-18P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8202026-08-19P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8232026-08-19P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8382026-08-19P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8402026-08-19P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8532026-08-19P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
8552026-08-19P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
9762026-08-20P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
9812026-08-20P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
9932026-08-20P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
9952026-08-20P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
10092026-08-21P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
10182026-08-21P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11332026-08-21P01MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11352026-08-21P03MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11472026-08-21P04MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11492026-08-21P07MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11622026-08-22P16MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily runner engine resolution
11652026-08-22P08MODEL_CHANGEclaude-sonnet-4-5 → claude-opus-4-8daily 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.

Every trade, as it happens
What each portfolio bought, what it sold and what it lost. Free, on Telegram.
Join →
Or follow @AIPortfolios186 on X, where the same trades are posted.
Live public decision feed.Every decision, fill and refusal, as it is published — including the ones that lose money. Delivered on Telegram, free.Get the feed →or subscribe by RSS/Atom

The same decisions are posted on X as @AIPortfolios186.

Data provided for free by IEX. By accessing or using IEX Historical Data, you agree to the IEX Historical Data Terms of Use. · Powered by CoinGecko · Logos provided by Logo.dev · Company logos identify holdings only and imply no endorsement.