Fast enough to play live.
Every lane plays the same seeded game and picks every move itself — nothing scripted, bad picks get played. No install needed: the Reflex boards run in this tab.
No engine needed. Reflex · modelless and Reflex · rulebook play live in this tab (rulebook also live from the Cloudflare edge). laya and raw replay recorded games — labelled as such. What's live vs recorded
Play laya and raw live on your machine
Play the laya and raw lanes on your machine — nothing is uploaded. Install Reflex (engine
v0.2.3+), then run the command below. RIIR_REFLEX_LAYA=1 downloads the Apache-2.0
weights on first start (measured size). If the browser asks to reach local devices, allow it — that is
127.0.0.1.
RIIR_REFLEX_ALLOWED_ORIGIN=https://reflex.gist.rs RIIR_REFLEX_LAYA=1 reflexChrome blocked the local call — allow the local-network permission for this site (the icon in the address bar), then refresh.
The final result — no need to wait for the replays
loading the recorded games…
Seed 607, re-scored from each lane's recorded moves. ✕ topped out · ● still alive when recording stopped. Latency is log scale (each grid step = 10×).
How each lane picks a spot
Same game for everyone (seeded 7-bag, hard drop, guideline scoring) — only the pick differs. Source: tetris_lane_flows.md.
Why ask what it sees, not what to do?
The game writes where the bird is — “The bird is a little below the gap center, falling. The gap is narrow. The pipe is just ahead.” — and asks one typed question per action: “Will the bird pass through the gap cleanly?” over the frozen v2 option sentences. The bird does the action with the higher P(clean). Asked which way to move, decision models answer backwards; asked where things are, they read cleanly.
Does wording matter?
A lot. Each barrier row is described in plain English and the engine answers “Is this lane safe to run?” per lane; the runner takes the highest P(safe). Even the noun moves the answer (“a barrier” vs “a train” for the same lane), so the grammar pins ONE noun per obstacle class — and the fitted head absorbs the rest.
Notes & sources
What's live, what's recorded, and how it is checked
- With your engine connected, every board except laya (Python) plays live on your machine; the page reaches
only
127.0.0.1:7331. - Without an engine, Reflex · modelless plays live in-tab from compiled WebAssembly heads, each parity-checked against the recorded engine play before any board moves. arena_head_parity.mjs — Tetris bit-exact, Flappy and three-lanes pinned to their published agreement
- Reflex · rulebook runs the public reflexer engine as WebAssembly — in this tab and on a Cloudflare Worker (stateless, no storage). Both replay the recorded walk pick-for-pick. reflexer_parity.mjs gist-rs/riir-reflexer
- Recorded boards (laya, raw, and any lane without its host) replay committed runs through the same wire — labelled, never mixed with live results. demo_oracle.json
- laya (Rust) is our Rust port of the open-weights model, G5-parity-gated against its reference checkpoints; no Python ships anywhere. laya (Python) is that reference, recorded offline for comparison only. laya_riir_parity.rs laya
- The TL;DR above is computed from data/bench.json on load — never typed. arena_tldr.js