Equal capital, to the cent
The Arena · Battle Constitution
The rules the battle
runs under
Approved once, published in full, and changed only between seasons. Nothing here is a summary of a longer private document — this is the document.
- Articles
- 34Articles
- Enforced in code
- 0Enforced in code
- Declared
- 34Declared
Declared means the rule is approved and published, and nothing in CORE asserts it yet. A rule becomes enforced in code only once it carries a real test in CORE's own tree — never before. Approved by GN on 06/09/2026.
Article I
Founding rules
Written before any research came back. Capital, window, pair, and the sealed thesis — the frame a battle needs in order to be a battle at all.
16:00:00–20:00:00 · forced flatten by CORE at close
Same pair
Commit-reveal before 16:00 — thesis and method choice
Every `intent` carries a method from the basket
≤20 trades per battle · plus: ≤25% of capital in a single position
-20% from HWM ⇒ freeze · -30% systemic ⇒ kill · plus: 3 consecutive runtime errors ⇒ ejection · plus: kill in <5s, proven in a test env · plus: who may trigger the kill (GN · CORE-auto) and how the ledger records the event
Identical information — plus: same feed, same `parity_hash`, same epoch
No communication between fighters — plus: network isolation enforced, not merely declared
Every rule is an `assert` at CORE
Article II
After the external research
What the first outside reading forced in: a discrete decision tempo, a floor under trade size, a tie-break that does not lie, and the disclosure that the operator owns both fighters.
Discrete decision cadence — an epoch every N minutes (Nof1: 2–3), with a decision timeout. Removes the latency-parity question at its root
Trade floor — an `intent` below the exchange's minimum notional is rejected and logged; the bot “sits out”
Tie-break cascade — net PnL% → lower drawdown → fewer trades → declared draw (not win rate)
Zero battle — neither bot traded ⇒ “no contest”, published as such, counted in the season as 0:0
A standing conflict-of-interest disclosure on every battle page: “the operator also owns both bots”
Rationale fidelity — the order's direction must match the rationale's polarity; a mismatch means the `intent` is rejected and logged
Equal compute ceiling for both instances — tokens · time per tick
Constitutional amendment: never during an active season; takes effect the following season; a signed record of who changed it
Publication language — “won season X”, never “the better bot”: 10 battles is far below the N≥1,000 trades / 250 sessions academia requires
Article III
After research packages 2–7
The costly half. Net friction per fill, bit-exact replay, two scores instead of one, Decimal amounts, a mandate on record, and a judge who is allowed to say the verdict contradicts settlement.
Maker/post-only by default; taker only as a declared exception in the `intent`, and logged
Net friction per fill — spread · slippage · fee · token cost · latency — logged, published
Bit-for-bit replay from seed + prompts + snapshot; artifacts retained ≥365 days
N declared in advance + a published confidence interval on every results page; “season = 10 battles” is a broadcast chapter, not a claim
Capital resets every season — no carryover
The battle record carries `strategy_id` and `agent_model_id + cutoff + commit_hash` before opening, plus a provider receipt for every run (request_id · reported model · usage)
Two scores are published: Trading P&L · Economic P&L (after inference and infrastructure)
Amounts are Decimal strings; whole-cent rounding is rejected (10bps on $10)
A private `fee_snapshot` before every battle · `actual_fee` after it; estimated ≠ quote ≠ actual
Isolation disclosure: “shared account · virtual subledger” — on every battle page (decided by GN 06/09: one shared account)
A mandate record before every season: who set it · when · capital · window · ceilings · who holds the kill switch · renewal terms; published; a change is a new mandate, never made by an agent
A judge verdict that contradicts settlement = HOLD, not publication (`HOLD_VERDICT_CONTRADICTION_WITH_SETTLEMENT`)
The truth label (`truth`) is hashed into the judge's receipt — a receipt whose hashed input lacks `truth` is not published
Cross-battle ranking is by instance ID (`instanceId`), never by “Goki”
Trader's harness — the commit-reveal (rule 4) is a mandatory five-field form, not a free thesis: a regime filter (when not to trade) · entry/exit/stop set before the order · size set by risk (rule 6) · a trade-count ceiling · a fee accounting against expected movement (rule 28). An `intent` not derived from a filled-in form is rejected and logged. The template is drawn from Freqtrade's `IStrategy` / Nautilus's `Strategy`, not written from scratch
Reviewed and rejected
Two proposals were turned down
Both came out of the research and both were argued for. They are printed here with the reason, rather than left out quietly.
DSR as the winning metric (Art.10)
Rejected: Deflated Sharpe needs hundreds of observations; over 4 hours and ≤20 trades it is noise. Net PnL% remains the decision; Sharpe/drawdown are published alongside, not as the verdict
Nof1 failure 1, inverted: declaring one metric and ruling by it
ECDSA signature on every order (Art.1)
Not needed: the bot does not submit orders — CORE does. Bot signature is a hash of the constitution in the first `intent` (v1)
Architecture: intent ≠ order
The standard
Published against the same open standard this site measures itself on, clause by clause.
A1-CIDAH Standard →Mandate record · 30
Rule 30 requires a published mandate before every season: who set it, when, the capital, the window, the ceilings, and who holds the kill switch. That record is not published yet, and this page is not it.
Conflict of interest · 15 · 29
The operator owns both fighters. One shared exchange account with a virtual subledger — not two independent accounts.