Friday: game awareness spec
Pipeline
codeLunaSol
One minute of activity
Who writes what
Store rules
- The ledger is append-only. Nothing is edited or deleted.
- One writer process, the coach. Swift readers send observations over JSON lines.
- Order and staleness use
t, the game time of the evidence, not arrival. - Same fact from several sources merges: sources unioned, confidence up.
- Conflicts follow the ladder. A fresh fact beats an expired one. Unresolved conflicts are shown to Friday.
- Corrections reference what they fix (
corrects). Dedupe bykey.
Precedence
api
code
chat
voice
model
Merge
9:41 commsJohn: "Cho flashed", 0.7
9:43 friday
record, when told9:44 chat[09:44] … Flash 14:41
→
Cho'Gath Flash down until 14:413 sources, sure
// ledger entry { seq, t, source, kind, subject, data, conf, evidence, key?, corrects?, expires? } // subject "enemy:Chogath" | "ally:Brand" | "obj:dragon" | "camp:their-raptors" // World champion (all 10) { team, role, level, alive, respawnAt?, vitals?{hp,mana,t}, ult, spells{name: ready | {backAt,sources} | unknown}, seen?{zone,x,y,t}, trail[{t,zone}], likely?{zone,conf,why,t} }
Friday
Per-call part of the prompt, target tokens
World render 1.8k
talk 0.5k
events
Talk: last 2 min. Events: last 3 min. Last segment: the trigger.
- World render: ages on everything, everyone's trails for the last 3 min.
- Never collects. Images only through Eye.
- Writes with
record({kind, subject, data, say?}); the turn ends after the call. sayonly when addressed directly; otherwise silent.- If Sol is unavailable, triggers speak plain lines from the World.
Minimap check
- In: 3× crop, 8×8 grid, numbered marks on rings the reader found, the 10 portraits (cached prefix), dead list from the API.
- Out:
[{mark, champion, cell, conf}]plus unmarked icons. Code counts. - Check: visible allies = alive allies, else zoom 4× on clusters and retry.
- Pass bar, ~50 labelled frames: ≥95% of icons right, no invented enemies.
Triggers
Code, every second, on World changes. The periodic check stays as a backstop.
enemy jungler on our side, near you, near our objective
objective ≤60 s + lane priority + who's alive
you in their jungle, ≥2 enemies missing
fight startedfight ended
kill window: lane enemy's Flash down, jungler near
summoner or ult back soon
analyst: worth a call
Model calls per 30-minute game
- Code readers make no model calls.
- Luna: medium effort, standard tier, never Fast. Sol: Friday, strategist, eye.
- No rationing: run until the 5-hour window is empty, then code readers and plain trigger lines.
- Cost per call from token counts (
codex.call), not the 5-hour meter.
Build order
1Record frames
2Ledger, World,
record3Minimap reader, counting test
4Ally frames, HUD
5Movement, triggers
6Comms, chat
7Strategist, Eye, health bars
Open
- Chat format for summoner timers posted from Tab: needs a screenshot.
- When the 5-hour window is empty: spend credits or stop?
- Fast for Friday's direct answers: keep or drop?