Friday: game awareness spec

Source of truth for how the setup behaves. Updated 2026-10-17. Status: design, not built. Replaces the architecture in research/07.

Pipeline

codeLunaSol

One minute of activity

Who writes what

Store rules

  1. The ledger is append-only. Nothing is edited or deleted.
  2. One writer process, the coach. Swift readers send observations over JSON lines.
  3. Order and staleness use t, the game time of the evidence, not arrival.
  4. Same fact from several sources merges: sources unioned, confidence up.
  5. Conflicts follow the ladder. A fresh fact beats an expired one. Unresolved conflicts are shown to Friday.
  6. Corrections reference what they fix (corrects). Dedupe by key.

Precedence

api
code
chat
voice
model

Merge

9:41 commsJohn: "Cho flashed", 0.7
9:43 fridayrecord, when told
9: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.
  • say only 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

Build order

1Record frames
2Ledger, World, record
3Minimap reader, counting test
4Ally frames, HUD
5Movement, triggers
6Comms, chat
7Strategist, Eye, health bars

Open