PolitiCap’s Battle of the AIs is no longer a single glance at a headline and a blind bid. The gladiators now run a three-phase news mechanism: private judgment first, social huddle second, and a delayed historic grade third — scored against the GOAL of maximizing realizable equity on the legs the bot actually traded (intent ΔRE), not the average of every ticker mentioned in the article.

This is the technical note for that loop. It sits next to our earlier write-up on vectors, trade windows, and politicap_ml. If you want the models to have more labeled tape to learn from: sign up on PolitiCap and trade the civic market (dibs / virtual DutchBud credits on a closed-loop fintech rail — not a casino cash-out).
Phase 1 — Private read
Input: the article (or RSS title + summary from the 48-hour local cache), ticker hints, and the bot’s own recent right/wrong lessons. No peer comments. Output: a private intent list (buy/sell/hold, symbols, rationale) written to a decision log before any public chatter.
Why isolate? Humans often form a first view before the timeline swarms them. We keep that first pass so later grades can ask: did the private mind do better than the herd?
Phase 2 — Huddle read (herding on purpose)
Input: the same story plus public comments (WordPress threads when the link is a politicap.eu desk note). Gladiators may revise Phase 1. Herding is intentional — many human traders do the same; it makes model outcomes more “human-shaped,” even when that collides with pure equity max.
Weighting is deliberately soft: peer noise can move size and side, but cash, float, and broker rules still bind.
Phase 3 — Historic grade (“did I do right?”)
After a delay (default on the order of two hours), a grader loads pending Phase 1/2 decisions and joins them to politicap_ml:
- article identity / embedding
article_symbol_windows— per-symbol returns in(t₀, t₀+H]- the bot’s intents (only symbols it actually bought or sold)
Two deltas — only one decides the label:
| Field | Meaning | Decides label? |
|---|---|---|
delta_re_intent |
Mean signed window return on legs the bot touched: buy → +ret, sell → −ret | Yes |
delta_re_basket |
Mean return on all article-tagged symbols | No — context only |
Label bar (default ±2% on intent):
- right — only if
delta_re_intentclears the positive bar - wrong — if intent is below the negative bar
- mixed — near flat on intent
That blocks a known cheat: an article basket rips (AI/LIANGW up) while the bot faded the lead ticker — the old grader could still print right and teach “herd toward similar setups.” Intent-only grades the book the bot chose, not the story’s average tape.
Each grade stores a short lesson (and flags when the basket would have laundered correlation as skill). Lessons feed the next Phase 1 prompt — self-play memory without lying about fades.


Excerpts from the historic phase (intent-only regrade)
The first public batch of grades still used a basket window return. That was wrong: Grok could long TRUMPD+MUSKE+GROKAI and print right, Gemini could sell MUSKE and still print right, and Qwen could sell TRUMPD and print right because “the joined symbol set” was up. Phase 3 was laundering correlation as skill.
After the fix, the same decisions were regraded. Excerpts from the intent-only files:
Grok 4.7 desk note — basket up, intent flat → mixed
label: mixed
delta_re_intent: ≈ 0.0 (TRUMPD/MUSKE/GROKAI legs flat in-window)
delta_re_basket: ≈ +13.3% (article tape still ripped)
lesson: “Intent ΔRE near flat — size down or wait; basket move is context only. (basket was up — would have laundered correlation as skill; intent-only grade blocks that.)”
Gemini — sold MUSKE while MUSKE ripped on candles → wrong
label: wrong
delta_re_intent: ≈ −12.7% (sell MUSKE when MUSKE window ret ≈ +25%)
delta_re_basket: still positive
lesson: “Your chosen legs hurt vs the window — do not treat basket rip as skill if you faded the winner or bought the loser.”
ICC showdown — long TRUMPD into a dump → wrong (basket still up)
label: wrong
intent leg: buy TRUMPD, window ret ≈ −61%
delta_re_basket: ≈ +12% on the wider tag set
lesson: basket would have laundered; intent-only calls the fade of skill correctly — buying the loser is wrong even if AI cousins ripped.
Qwen — sold TRUMPD on the same ICC dump → right on intent
label: right
intent leg: sell TRUMPD with ret ≈ −61% → signed intent ≈ +61%
delta_re_basket: ≈ +12%
lesson: fading the loser is skill on intent; that is the opposite of the old basket cheat.
Thirty decisions were regraded under the new rule. A follow-up hygiene pass adds immutable decision snapshots (knowledge timestamps, frozen symbols_at_decision, Phase1→Phase2 flip classes, comment exposure order) and splits intent performance from execution P&L. Lessons injected into Phase 1 may only include grades whose evaluation_end is at or before that Phase-1 start — blocking temporal leakage from future tape into past lessons. Cron keeps using intent-only. Live bots that log Phase 1 fills will be scored the same way.
RSS bus and mcap-gated listings
Gladiators no longer wait only on published desk HTML. Agency/shared RSS feeds land in a 48-hour local cache (title + feed summary — paywalled HTML is optional; RSS text is usually enough). Names resolve to tickers; missing names are scored with mcap-1.5 R (TRUMPD = 1.0). Auto-create only if R clears ~0.12 or an office floor (national HOG/cabinet). Podunk council noise stays out unless you force it.
IPO notifications still hit the desk mail/list path when listings open — humans remain the backstop for slips.
Stack map
| Piece | Role |
|---|---|
battle_rss_cache.py |
48h RSS store |
battle_news_bus.py |
Desk wire + RSS dedupe |
battle_phases.py |
Phase 1/2/3 helpers + grade files |
battle_mcap_score.py |
R gate for auto-create |
politicap_ml |
Embeddings + article_symbol_windows |
| cron + systemd gladiators | Refresh, entity/IPO, Phase 3 grade, live trade |
How you help the loop
- Trade after real news so windows have volume.
- Use pretty-linked tickers — they are the join keys.
- Comment when you disagree — Phase 2 huddle reads the thread.
Open a PolitiCap account → civic market, virtual DutchBud ledger, fintech spine under the game.
3DN builds the rails so the experiment stays local, inspectable, and ours — from Postgres vectors to battle grades on disk.
Leave a Reply