Alessio receipt card vs current ArenaWire
Executive summary
Pipeline: YES — completed pump_dump battle → battle-card-payload → ArenaWire → render Worker PNG → PostIntent → Telegram. Live X off.
Card product: PARTIAL — layout and zones exist, but SAID/THOUGHT/DID quality and copy are not Alessio-final. ~1/10 recent battles pass proof. DID reads like engine debug (“never entered at tick 16”). THOUGHT is raw transcript head-clipped to 70 chars.
Seven zones — side by side
| Zone | Alessio spec | ArenaWire today | Status | Gap |
|---|---|---|---|---|
| 0. Format | Vertical 4:5 receipt card | pump_dump_receipt_v0, format: "4:5", social-render Worker |
YES | Deployed |
| 1. Header | Mode + market on every card. Not “battle complete”. | PUMP/DUMP COORDINATION // BTC top bar; title is PACT BROKEN or PACT REVIEW |
YES | Matches intent |
| 2. Verdict | First read: who rugged whom, verdict words | Proof-ready: “{actor} broke the pact against {target}.” Else: outcome + “receipt proof unavailable” | PARTIAL | Works when betrayalMoment; fallback is honest but not viral |
| 3. SAID | One line ~70 chars; drama score picks most damning public clause | Nearest pumpdump_chat_message before defection; clampText(..., 70) — no drama ranking |
PARTIAL | Verbatim, not “most damning” |
| 4. THOUGHT | One line ~70 chars; same decision window; private betrayal intent | Nearest private row matching signal keywords; 70-char clamp + ...; often negotiation copy not rug line |
PARTIAL | #48 prompts help new battles; no punchy-line contract; no smart excerpt |
| 5. DID | Action in same window as proof — human spectacle | {defectionKind} at tick {N} e.g. “never entered at tick 16” from compliance enum |
NO | Engine jargon on social card — needs human copy in battle-card-payload.ts |
| 6. W/L + payoff | Always winner/loser rows with payoff | Always rendered when winnerSide + payoff in payload |
YES | Live demo shows real PnL rows |
| 7. Betrayal Index | Both models; updated every settlement; full index story | V0 structured events only; both sides when sampleReady; not full 5-subindicator Alessio index |
PARTIAL | Movement real when threshold met; not full Alessio index |
| 8. Next match | UTC + SF, London, HK locals; calendar UX | After #4+#28: GET /api/schedule/next → displayLabel + UTC on card; FE ICS on Pages — not 3-city block on receipt |
PARTIAL | Wired post-merge; timezone block not on PNG |
Live battle example (staging today)
Battle e5848a26-… · intent f330e95e-… · PACT BROKEN (proof passed)
Alessio intent
- Public line that sounds like a deal
- Private line that contradicts it — short, damning
- Action a normal person understands (“stayed flat while partner entered”)
What the card actually shows
SAID: "Short conflicts with my long proposal. Counter: agree to long, 25 ticks…" THOUGHT: "Direction conflict: they want short, I proposed long. Reject their…" (70 chars + …) DID: "never entered at tick 16"
Team-readable diagnosis: SAID and THOUGHT repeat the same negotiation thread. DID is compliance-speak. Truncation is layout (70-char zone), not model summarization.
ArenaWire layer vs Alessio (not on the PNG)
| Capability | Alessio / Content Machine | Current | Status |
|---|---|---|---|
| Proof fail-closed | No fabricated SAID/THOUGHT | PACT REVIEW + proof-missing box; content-manager blocks betrayal claims | YES |
| Launch gate | pump_dump only | ARENAWIRE_LAUNCH_BATTLE_MODES=pump_dump | YES |
| Proof-first queue | Don’t promote weak cards | ARENAWIRE_PROOF_FIRST_DISCOVERY=true (post #4) | YES |
| Human review | Telegram HITL before post | manual_review, sendPhoto | YES |
| Scheduler / broadcast | Recurring units, betrayal-of-day | Cron creates bare intents; no full broadcast machine | PARTIAL |
| Social copy skill | Receipt-native post text | post_content_not_found on render-only path; manual --text for Telegram | PARTIAL |
What merged today (staging)
- mechbattle #48 — honest private thoughts on defection (new battles)
- arenawire #5 — scheduler cap, cap-before-render, Telegram hardening
- arenawire #4 —
schedule/next→nextMatch, proof-first discovery - frontend #28 — nextMatch zone on receipt PNG
- frontend #29 — clearer proof-missing copy (open, not merged)
Top gaps to close Alessio vision
| Priority | Owner | Change |
|---|---|---|
| 1 | mechbattle prompts | Private thought = one ≤70-char betrayal line (not strategy paragraph) |
| 2 | mechbattle picker | SAID drama score; THOUGHT best substring around signal terms; human DID copy |
| 3 | mechbattle-frontend | Merge #29; optional tick as fine print not headline |
| 4 | arenawire | Receipt-native content skill for Telegram caption |
| 5 | mechbattle | Full betrayal index vs V0 subset; 3-city next block on card |
Demo talking point
“The receipt pipeline matches Alessio’s zone layout and honesty rules. The spectacle layer isn’t there yet: DID is engineer copy, THOUGHT is truncated chat, and most battles don’t pass proof. We’re tuning prompts and picker next—not ArenaWire plumbing.”
Code refs: Alessio zones in checklist §Receipt Card Target; render in mechbattle-frontend/workers/social-render-sandbox.ts; receipt model arenawire/src/battle-card.ts; proof picker mechbattle/workers/api/src/battle-card-payload.ts.