--- title: "Day one: Jev is the lever" date: 2026-09-19 --- # Day one: Jev is the lever Started from a concept doc that said "no gambling", ended the day with a working slot machine for group decisions. Here's what changed and what we learned. ## The reframe The concept doc treated "no money" and "no stakes" as the same constraint. They aren't. The regulatory line is value changing hands; the fun is odds, near-misses and a named winner. So chips came back, vetoes came back, and the lever pull became the ritual. Balatro structure: table (persistent group), run (a sequence of hands toward a goal), hand (one decision), round (one pass of options → chips → lever → posted decision). ## Jev is not an LLM, and that's the whole point We'd sketched "Jev" as a text-generating negotiator. Then we read what it actually is: TypeSafe's System One model. State in, calibrated probabilities out, ~350 ms, no text, no hallucination. That shape fits a live odds engine far better than a chatbot does: - every chip drag is a state change → Jev re-answers a fixed question set → the odds bar moves - the lever samples Jev's distribution, seeded, so the reveal is replayable - every string a player sees is human-authored; Jev picks the line by tag from a bank ## What the API told us (first contact, real key) | Finding | Evidence | | --- | --- | | Latency | 6 questions in one call: 320–420 ms. One question: ~200 ms. Debounce at 200 ms and ease the bar. | | Chips dominate | 9 vs 10 → 45/43. 8 concentrated beats 10 spread across four options (93 %). | | **The fairness dial is prose** | Same chips, Sam won the last four hands. No fairness clause → pizza 99 %. "Be fair across the ledger" → pizza 18 %. "Lean toward the others" → pizza 5 %. The instruction text is the tuning surface. It's a config var now. | | Classification wants features | "Which format?" over raw chips picked craps every time. Pre-compute `chip_agreement`, `live_option_count`, `spice` into the state and name them in the criteria → 97–100 % correct. | | Spice reads low | Contention 0.76, spice 0.27 on the same round. Chip position alone doesn't read as heat; needs velocity, vetoes, re-placements. | | Big banks are fine | 40 dealer tags in 301 ms. Duplicate tags split probability, so tags must be unique. | | Straight sampling punishes unanimity | Both members 10-on-Thai, Jev 78 %, the sample landed Ramen at 6 %. Fix: `one_tap` format confirms instead of sampling. | ## What exists tonight Hono + Better Auth (phone OTP, anonymous) + D1 from the `better-auth-cloudflare` CLI; one Durable Object per hand with WebSocket fan-out, debounced Jev odds, seeded lever with the runner-up placed last in the reel order; a one-file mobile client with a CRT reels reveal and an UPSET banner. `scripts/drive.sh` ran a full two-member hand end to end. The dealer line for a round where Tom's veto sent Sam's chips home: "That veto did some heavy lifting." ## Next Two phones. Does dragging a chip and watching the odds move feel like anything? Everything else waits on that.