PREVIOUS MEETING → THIS PAGE: debugging the full agent was too hard → a code-first experimental base. We built it.

Skills mined while playing, scored only by the engine, carried as memory — that is TTSO.

Reference: Jul 10 — leak-free full-game WIN ×2 (ft09 6/6, fork = 0). This fortnight: an instrumented repair battery on the base.

01

The pipeline

Code acts, the engine folds, surprise sleeps, skills persist.

WAKE — act on the real game SLEEP — mine and score BRIEFINGclick → real codeACTORclick → real codefold()click → real codeJUDGEclick → real codeMINERclick → real codeSTOREclick → real code winners return to the next briefing — skills are long-term memory
Briefing winner claims uncut + victory reports + refuted tail
Each round: read the board, form or update a
hypothesis about how the game works and what
clears the level, then act on it. When a level's
reference keys resist decoding, reverse-infer the
rule from a level you ALREADY cleared [...]
Never phrase a goal as a fact you have not tested.
auto/prompt.py · PROMPT_THIN (excerpt)
Actor (frozen LLM) one hypothesis, one python block, real clicks
HYPOTHESIS: the failed submit means the target
is not simply the lower-left copy - re-read the
macro-tile state and clue panels exactly.
clicks: ACTION6(40,54), ACTION6(56,54)
engine: levels 0 -> 1  (L0 CLEARED)
h9 round 5 - the actual L0-clearing turn
fold() engine facts fold into alpha/beta - the only writer
fold(record, {"key": "tfclr:5", "saved": credit})
# the ONLY function that may touch alpha/beta.
# idempotent by key: one observation, one charge.
# r33's real trail:
#  tfclr:5      SURVIVOR   a+8  -> 0.90 (winner)
#  tfanom:7,8   ANOMALY    b++  <- eroded on L1 (bug: no winner shield)
#  tfclr:12     SURVIVOR   a+
#  tfanom:24,25 ANOMALY    b++  -> final 0.34
sleep/evaluate.py + r33's real evidence trail
Judge code computes scores; LLM writes advisory + future-rank f
packet = {credence, target_f1, residual_cells,
          evidence_refs: ("transition:0", ...)}
# LLM judge writes advisory + future-rank f only.
# KNOWN GAPS (external audit, confirmed):
#  - cites are not checked against evidence_refs
#  - settle events (false_clear/ANOMALY) missing
#  -> both queued in the next package (h12)
sleep/judge.py · EvaluationPacket
Miner one LLM call per work item -> skill JSON, smoke-repaired
def predict_next(state, action):
    # click toggles a connected same-colour tile
    # between the board's two play colours
    x, y = int(action[1]), int(action[2])
    old = int(state[y, x])
    play = sorted(v for v in np.unique(state)
                  if v not in {0,2,4,5,11,12})
    lo, hi = play[0], play[-1]
    new = lo if old == hi else hi if old == lo else None
    if new is None: return {}
    return {c: new for c in flood_fill(state, x, y)}
real mechanic r10 · alpha=121 beta=3 (credence 0.98)
Store park-all at (1,3); winners surface as MEMORY
def target(state):
    # goal guess: the bottom status strip,
    # filled end-to-end with its "done" value
    bg = most_common_value(state)
    goal = state.copy()
    row, done = goal[-1], goal[-1][-1]
    xs = where(row != bg)
    goal[-1, xs.min():xs.max()+1] = done
    return goal
real wincond r33 · won L0 at 0.90, eroded to 0.34 (bug being fixed)
02

The diagnosis

Knowing how the world moves is not knowing what “done” means.

dynamics certainty (union accuracy) → goal certainty → C3 WIN — by reasoning, not by model (union fell 0.57→0.14) h10 — dynamics 0.9, goal never found h11d — goals now 100% runnable target: both certified knowing HOW the world moves is not knowing WHAT done means

Every point re-measured from raw traces.

02b

What broke, and what fixed it

Each fix entered the constitution before the code; each dot is a re-measured trace, not a memory.

Briefing churn — every sleep reshuffled the top of the briefing, so the actor changed its framing mid-game instead of finishing a plan. h9 L2: 8 framings in 9 rounds
Sleep now fires only after 2 consecutive mismatch rounds, and stays small (≤3 cycles, 6 new admissions). A pinned WORKING-GOAL slot is the remaining piece.
Winconds fused with mechanics → reward starved — dynamics rules leaked into the goal posterior, and the real goal hypotheses could not even run — so no engine event could ever pay them. r10 (a dynamics rule) at 0.98 in the goal posterior · h10: 4/6 goals crashed on call
Goals are smoke-run on the live board and repaired once; a composite namespace lets clears see its sibling target (runnability 33% → 100% in h11d); GAME_OVER now refutes. The full kind contract (E1) is next.
The LLM judge over-forced the actor — narrative plausibility moved credence and the judge’s plan constrained play; citations had decayed to decoration. 0714: L0 death under judge-pushed scores · audit P0-1
The judge is advisory only: every number comes from code, citations are machine-checked against packet facts, and no wincond narrative folds in either direction.
Silent scorer — a list-vs-numpy boundary made every mechanic score 0/21, freezing all credence while everything looked healthy. 0716: 0/21 → 12/21, four F1 = 1.0 after one line
np.asarray at the fold boundary — and the lesson: when a probe disagrees with the gate, suspect the probe first.
Briefing starvation — skill claims were truncated at 160 chars, so the actor never saw the rule it was supposed to use. claim cut mid-sentence in every briefing
head_capped never trims the first segment: the winning claim always arrives whole.
Goal bankruptcy was silent — the agent kept clicking for 11 rounds with no live goal hypothesis at all; nothing forced it to stop and re-think. r45–r56: failed submits, zero live winconds, no trigger
A goal-bankrupt trigger: failed submit + no live wincond above 0.10 → a wincond-labeled sleep, once per episode.
Winner erosion — the skill that cleared a level kept being charged for rounds on other levels, bleeding from 0.90 to 0.34. r33: tfclr:5 · tfanom:7/8 · tfclr:12 · tfanom:24/25
Proposed winner shield: stamp winner@level, no cross-level charging — awaiting approval (§2 amendment).

shipped & re-measured    partial / awaiting approval   ·  full forensic timeline: seven crises →

03

Who came before

Five lineages, one missing piece each: none carries memory across games.

symbolica bestiary — our engine's ancestor

agent A agent B agent C NL skill DB posteriorper record playft09 6/6 every record carries a belief; play consults the DB — the origin of our credence store
“A skill database with a posterior on every record — cleared ft09 6/6.”
deep dive →

baseline1 (astroseger) — the executable world model

observe world_model writes .py planner run replay verify attempt log world model = an edited python file · mismatch = VerificationMismatchError
“Write the world model as a runnable python file; verify by replaying every past attempt.”
deep dive → source anatomy

Microsoft SkillOpt — the document is the parameter

rollout diagnosis: re-clicked cleared cells skill.md gate (door) library patch patch′
“The skill document IS the parameter — learning edits text; a gate decides deployment.”
deep dive → source anatomy

Ellis & Lake line — rules as a posterior

discriminating experiment ✓ 0.9 r1 r2 r3 r4 bars = posterior over candidate rules; the experiment moves the mass
“Hypotheses live as a distribution; experiments split it.” (Piriyakulkij & Ellis) + DreamCoder(MDL prior + sleep abstraction) · WorldCoder(fit + optimism).
full original card → (07-03 §02)

Schema (2026‑07) — certify‑then‑plan

theorize edit certify exact replay plan BFS execute record Timeline certify = run_backtest exact full replay · failure = a pointed bug, no entry to plan
“No plan without a certificate — BFS stands only on an exact full-history replay.”
deep dive → source anatomy
04b

One real turn, step by step — h9 round 5, the L0 clear

One real turn: briefed skill → two clicks → level cleared → memory written.

board before (crop 32–60)
◎ = the two clicks: ACTION6(40,54)·(56,54)

engine:
levels 0→1
±3568 cells
(level transition)
board after (new level loads)
L0 CLEARED — no submit needed; the board itself was the goal
1 · briefed skill (input)
[r37 0.50] the doubled 3×3 mini-symbols define
binary masks: 2 = on-colour 9, 0 = off-colour 8;
the framed answer = cellwise intersection.
2 · actor hypothesis
"the failed submit means the target is NOT
 the lower-left copy - re-read the panels" → 2 clicks
NOVELTIES THIS FORTNIGHT competing hypothesis SET goals live as a scored, falsifiable set · simplified sleep–wake ≤3 cycles, quota 6, smoke-repaired · world model as code executable predict_next, union accuracy 1.0 · past–future split scoring engine folds α/β; LLM rank orders only
05

Where it stands

Goals now 100% runnable; next: kind contract → model-ready gate → certified search (E0–E6).

turn cardsskill anatomyexperimentscode mapcrises & arcsSchema deep diveall weeks