A frozen LLM, forbidden from peeking, cleared all six levels of a game it had never seen — twice.
And the second win cannot yet be credited to the learning system.
Read it in this order: the result → the machine → the four axes, one screen each → the two games → the decision.
Every ▸ opens the raw logs, coordinates, file paths and verification notes behind the number above it.
The APPENDIX below carries the full research record (§01–§08). Nothing has been deleted.
1
Result
one sentence · three numbers
ARC‑AGI‑3 contains games that never tell you their rules.
We cleared all six levels of one of them (ft09) twice.
And the second win was not produced by the skill loop we built.
Cleared
2 runs × 6/6
n=1 each
Confirmed repairs
2
each isolated by an on/off pair
Defects behind it
3
one of them explains two whole axes
The loop's own functions were not carrying the win: the model's in-context adaptation and
batched action solved ft09, while the accumulated bundle showed only limited transfer in a matched comparison.
Read this once and the rest of the deck is detail. Three defects, four axes, and the
line from ➊ forking into both axis 3 and axis 4 — that fork is what §5 corrects and §6 measures.
Evidence — run ids · action counts · RHAE · leak check · boundary conditions · run glossary
2× 6/6leak-free full games (C3 07-10 · bwsvfull 07-29) · n=1 eachfork_dependence* = 0no fork leakage52r/174a vs 59r/227aC3 vs bwsvfull · rounds/actionsRHAE† 40.9 / 19.7score falls with the square of actions
*fork_dependence — how many times the engine was cloned to peek at the rules. Must be 0 for the run to count.
†RHAE — per level
min((human baseline actions / our actions)² × 100, 115), 0 if uncleared,
averaged with weight = level index
(metrics.html).
Boundary conditions — stated first
bwsvfull's 6/6 is not to the skill loop's credit.
Four sections of the expert briefing were absent for 35 consecutive rounds (delivery basis; 36 briefings on the generation basis).
Simulation happened 3 times, all in one round (r53), and nowhere else.
Seeds 1 and 2 were never run, so 6/6 is an anecdote (n=1). Who actually won is the question this deck asks.
Run glossary — the name is the condition
run
condition (what this name means)
outcome
C3
Leak-free ft09 full game, 2026-07-10. Code from before the scoring architecture under audit here existed.
52R · 6/6 · WIN
cWall
The ft09 level-2 wall. E3 gate ON — the 544-character lock sentence is in the prompt.
8R · 0 levels
noE3wall
Same wall. That one sentence deleted byte-exact (TTSO_NO_E3_GATE=1). Nothing else differs.
10R · 0 levels
bw
Same wall. Gate OFF + the ledger penalty fix only (TTSO_WRONGVALUE_HARM=1).
10R · 0 levels
bwsv
Same wall. Gate OFF + both the penalty and the reward fix (+TTSO_STANDALONE_SAVED=1).
10R · 0 levels
bwsvfull
The bwsv configuration, run as a full ft09 game. The second 6/6, and what this deck dissects.
59R · 6/6
noE3full
Gate-OFF full game without the ledger fixes — the full-game control for those fixes.
60R · 4 levels
ls20a
A different game, ls20 (movement-based, ACTION1–4 + RESET). Fresh store, no bundle.
40R · 0 levels
allfix
ft09, all fixes on at once (ledger ×2 + advisory abort + applicable-top). In flight.
26R · running
cWall → noE3wall → bw → bwsv is a ladder at the same wall, turning on one thing at a time.
2
The machine, and where it breaks
one figure · three defect sites
A frozen LLM plays; a second pass mines Python rules from what changed; a Bayesian ledger scores those
rules against the engine's own diffs; the survivors are handed back on the next turn. The three red marks below
are the only places this deck claims something is broken.
➊ SELECT never asks when(board) — it takes the highest-credence rule in the
whole library, even one that cannot fire here. This single line produces the failures on axes 3 and 4.
➋ REFINE stores a sibling instead of a new version — axis 2, 0 of 244.
➌ MINE writes prose that is never scored — 122 of 132 prose records have zero evidence, bounding axis 1's PASS.
How the implementation actually works — skill kinds · scoring · λ · momentum · sleep triggers
FIVE SKILL KINDS — skills.py:78
kind
what it claims
records in the 6/6 bundle
scored?
mechanic
executable: predict_next(grid, action) returns the cells it expects to change
70
yes — 62 of 70
wincond
executable: what state counts as clearing the level
108
via a separate settle path
strategy
prose: what to try next
71
never
metathinking
prose: how to reason about this game
61
never
plan
a multi-move route stitched in advance (added 2026-07-18)
0
—
Only mechanic reaches the F1 scorer. That is why axis 1's 0.813 is a statement about 70 records, not 346.
SCORING IS CODE EXECUTION, NOT AN LLM OPINION
A mechanic is Python. To score it, fold() runs the rule's own
predict_next on the real pre-state and compares the cells it names against the cells the
engine actually changed. The LLM never assigns the score.
Per-skill, not per-library. Each record carries its own α/β. EVENT_EVIDENCE_CAP = 24.0
scales down a single observation's correlated evidence so one dramatic round cannot mint certainty
(evaluate.py:69,130-135).
Each rule declares its own scope.when(state) returns whether the rule
claims this board at all. applicable() computes the subset of transitions it accepts.
The scorer honours it. SELECT does not — that asymmetry is defect ➊.
credence is the past — a Beta mean built only from executed evidence.
f is the future — the LLM's batch rank for "is this heading toward the answer, and is it new".
λ grows with the world model's residual, so a stuck model tilts toward exploration (adaptive_lambda, evaluate.py:161).
There is deliberately no momentum. The code says so: “f carries NO momentum” — recomputed from scratch at every sleep — f is recomputed from scratch every sleep, packet builders pass a blank
f=0, and α/β never sees f at all, so an LLM opinion can never contaminate the posterior
(decision_value, evaluate.py:171-190).
WHEN DOES SLEEP RUN?
The trigger is unified on the world-model residual — how badly the union of rules is mispredicting.
The old level-boundary trigger was explicitly removed (constitution §4). A separate wincond-error arm can
force a sleep and label it.
In practice the residual channel never fired. All 39 of 39 sleeps in bwsvfull were
labelled wincond; surprise fired 0 times. “My prediction was wrong”
is not what wakes this system up.
Sleep is 82% of all LLM calls (320 of 390). Non-LLM compute per round grows 1.5 → 116 minutes,
O(n²) in rules × buffer — the tax that makes seed replication expensive.
WHAT ONE TURN LOOKS LIKE — verbatim, ft09 round 19
HYPOTHESISLevel 2 keeps the central-key decoder from [r105] and [r50], but overlapped neighbour tiles are not controlled by either individual clue; any macro-tile shared by two keys remains the default 8, even if both keys show 0. R18 only tested mixed 0/2 overlaps; it did not restore the shared 0/0 centre tile (28,28).
WHYThe current board is exactly the “single-owner 0s painted, mixed overlaps default” state except for (28,28). Since all broader union/priority variants failed, the smallest structurally new test is to set this one remaining multi-owned overlap back to default.
EXPECTClicking the centre of macro-tile (28,28), i.e. (31,31), will repaint its 6×6 tile from 12 to 8; then ACTION5 should clear if all shared tiles must stay default.
This is the retrieval surface working: [r105] and [r50] are library
records carried across levels. The next round's briefing hands back the refutation of this EXPECT, and
20 of 64 actor responses name their own refuted attempts before narrowing. The reasoning machinery is
healthy — the question this deck asks is what it is being handed.
3
Axis 1 — does it mine good rules?
verdict: yes, within one kind
best rule in the library, per roundPASS · best_f1 0.813
On the transition the engine actually performed, some rule in the library would have predicted it
at F1 0.813 (ft09) and 0.832 (ls20). The mining is not the problem.
But read the denominator
Only mechanics are scored. Of the 6/6 bundle's 346 records, the 132 prose records
(strategy 71 + metathinking 61) include 122 with zero evidence — 74 still sit at their birth credence of
0.500 and 49 at 0.250. 38% of the store never touched the scoring machinery at all.
So axis 1 passes for one of five kinds.
best_f1 = the highest prediction F1 any rule in the library could have achieved on that round's real
transition, computed by executing each rule's predict_next against the engine's observed diff.
Source docs/reports/scripts/four_axes.py · wm_fidelity.jsonl.
Duplicate families matter downstream: two siblings asserting the same claim shield each other from the
marginal-contribution scorer, and they are what blocks unanimity in plan search.
4
Axis 2 — does sleep repair its own skills?
verdict: no — and it could not have
244→0records ever reaching version 2
Not 0 because refinement kept failing. 0 because an accepted refinement cannot become a version._with_code() returns a new Record instead of calling set_code() on the
existing one, so every accepted rewrite is filed as a sibling. The library grew in count and never in depth.
Same result in both games and in the control: 0/244 · 0/124 · 0/346.
r45 v1 r91 v1 r138 v1
0.25 0.25 0.25
three identities, each starting over
Evidence — the call sites
The only set_code call sites are :1267 (goal_reask) and
:1335 (when-gate repair). The refine path at :1497 builds its candidate
through _with_code and therefore never touches either. Source confirmed 2026-07-30.
Fixing this is the first time constitution §5's “improve the same skill repeatedly” becomes possible at all.
What would refute the fix: revised_share still ≈ 0 after the change → sibling storage was not the binding constraint.
5
Axis 3 — does credence track accuracy?
we had this one wrong
This deck has said for weeks that our judge is anti-calibrated — corr −0.305, “the more
confident, the more wrong”. Re-measured on 2026-07-31 by splitting the rounds:
that number was measuring our silence rate, not our judge.
Each dot is one round of the 6/6 run. x = the credence of the rule ranked first;
y = the F1 that rule actually achieved on the engine's real diff.
Filled = the top rule fired. Hollow = it produced no prediction at all.
The hollow column at x = 0.9888 is one rule, r186, holding first place for 34 consecutive rounds while
returning nothing — its when() was false on every one of those boards.
All 59 rounds
−0.305
what we have been reporting
Rounds where the rule fired
+0.628
n=20 — the judge, actually measured
Top rule was the best available
0 / 20
the residual weakness, and it is real
It holds in every run we have. The all-rounds figure swings from −0.305 to +0.571 depending only
on how often the top rule was silent. The firing-rounds figure does not move.
run
corr, all rounds
corr, firing rounds only
fired / total
top = best
bwsvfull (ft09)
−0.305
+0.628
20 / 59
0 / 20
ls20a (ls20)
+0.249
+0.689
15 / 39
2 / 15
allfix (applicable-top ON)
+0.571
+0.601
19 / 26
6 / 19
What this changes, and what it does not
Retracted: “credence is anti-correlated with accuracy”. It is not. Given a rule that
can fire, credence predicts its realized F1 at +0.63, stably, across three runs and two games.
Survives, and is sharper: the ranking never lands on the optimum —
top = best in 0/20, 2/15, 6/19. Credence orders rules roughly right and picks the best one almost never.
The cause moves one step upstream: the failure is not in how rules are scored but in
which rule is selected — and that is the same defect as axis 4.
Evidence — estimator, the split, and why the artifact arises
Estimator — corr(top_credence, value) over
runs/<arm>/g2-on-*/wm_fidelity.jsonl, where value is the realized F1 of the
rule handed to the actor. The split is on n_predicted > 0. Recomputed 2026-07-31.
Why the sign flips. When the top rule cannot fire, value is mechanically 0.0 —
not a wrong answer, an absent one. Those 39 rounds sit at the highest credences in the run
(0.8783–0.9888, against 0.7467–0.9863 for firing rounds), so they drag the whole-sample slope negative.
The metric was reporting our selection bug in the judge's column.
Honest caveat. A handful of silent rounds score value 1.0 by vacuous match
(empty prediction, empty observation) — r9 and r12. They are kept in the “all rounds” column exactly as logged.
n=1 per run, seed 0.
6
Axis 4 — is the right rule reached when needed?
the same defect, seen from the other side
0.813→0.267best available → actually used
The rule that would have predicted the round correctly was in the library. A different one was
handed to the actor. In 153 of 227 committed actions (67.4%) the top mechanic said nothing at all — and
147 of those actions changed the board anyway. The model was acting; the library was not driving.
○ = the best F1 available in the library that round ● = the F1 of the rule actually used
the vertical line is what was thrown away. After r25 the used value is flat at zero while the library still holds
rules scoring 0.97–1.00.
Every rule declares when(state); the scorer honours it and
SELECT never asks. Fixing exactly this (TTSO_APPLICABLE_TOP) moves allfix to
19/26 firing, silent 67.4% → 33.3%, USED 0.267 → 0.505.
Evidence — the 34-round freeze, and the code's own account
USED 0.267 vs best 0.813 · silent 67.4% (ft09) · 0.328 vs 0.832 · 62.5% (ls20a)
In rounds r26–59, 34 of 34 had n_predicted = 0 with r186 ranked first
every time. r186 is a level-boundary predictor; the actor was clicking inside a level. Meanwhile the mean
best_f1 across those silent rounds was 0.768 — the library was not empty, it was unreachable.
ttso/eval/guard.py · module docstringverbatim
the code's own accountthe SELECTION sites never did: they took `max(mechs, key=credence)` over the whole library, so a rule whose `when` is false on this board could still hold the top slot and hand the actor an empty prediction. … 153 of 227 committed actions (67%) went out with the top mechanic silent, and 147 of those changed the board anyway … credence correlates with the selected rule's actual F1 at -0.305.
That last clause is the sentence §5 now corrects — it is our own artifact, quoted here as written.
7
Two games — ft09 got around it, ls20 could not
the same four defects, one anaesthetic
The axes read almost identically in both games. What differs is not the disease but whether the game
lets you route around it — and ft09 does.
axis
ft09 (bwsvfull)
ls20 (ls20a)
same?
1 mine
best_f1 0.813
0.832
yes
2 refine
0 / 244
0 / 124
yes
3 judge (firing)
+0.628
+0.689
yes
4 retrieve
0.813 → 0.267
0.832 → 0.328
yes
outcome
6 / 6
0 levels, 40R
no
ft09 is a click game. Each round can commit six independent clicks; a wrong one costs a click, not the route.
So the actor could carry the whole burden in-context and batch its way through.
ls20 is a movement game (ACTION1–4 + RESET, no ACTION6). Every move is path-dependent, which needs exactly the
machinery that has zero records.
1No plan machineryplan records: 0 in every run, both games. Bindings over 39 sleeps: RESOURCE_LIMIT 22 ·
CONSENSUS_BLOCKED 11 · EDGE_STARVED 4. The search dies on budget or unanimity before it can emit a route.
2Goal and action are on different scalesMined win-condition targets sit 10–15 cells away; one ls20 move rewrites 52 cells.
Whichever button it presses, it overshoots the target it is aiming at.
3A phantom action contaminates the storeACTION5 does not exist in ls20. It entered 34 skill versions and 19 of 40 briefings.
Its source is the base prompt's interface list, not the bundle — mining forms hypotheses from the prompt surface.
The phantom, verbatim — and the one thing that stopped it
ls20a llm_calls.jsonl · round 21 · actorverbatim
HYPOTHESISThe top-alcove/marker route [r54] may require an explicit Spacebar activation rather than automatic clearing when the 5x5 actor reaches the marker; ACTION5 should test that structurally different interaction.
WHYMultiple ACTION1 steps under the high-credence movement rule [r14] moved the actor upward but the predicted automatic clear was refuted, so per [r7]/[r9] the best next cheap probe is the untested non-movement interaction at the apparent target instead of blindly continuing the same clear hypothesis.
ls20a llm_calls.jsonl · round 21, next call · the self-correctionverbatim
HYPOTHESISSince ACTION5 was unavailable/no-op, the best structurally different single-step probe is the briefed COVERAGE PROBE: ACTION3. Per [r9], mapping the remaining arrow dynamics is now more informative than repeating the refuted automatic top-alcove clear route [r54].
The citations are correct and the argument is valid. Only the premise is invented — and the actor
discards it within one round. The store never does.
ACTION5 in 43 of 43 actor prompts · 15 guarded submit branches · 0 unguarded · 0 reached the engine
The actor wrote if "ACTION5" in obs.available: submit_action("ACTION5") every single time,
so its own availability check caught the phantom on all 15 occasions. Committed actions were ACTION1×16, ACTION2×8,
ACTION3×8, ACTION4×8. The harness never caught this; the actor's defensive coding did. That is why the check
now lives in ttso/eval/guard.py and raises instead of printing.
Correction — guard.py's docstring still says “14 attempted submits”.
Re-measured 2026-07-31: all 15 were availability-guarded and none was attempted against the engine. The figure on this
page is the re-measured one; the docstring needs the one-line fix.
And the counterpart — how ft09 got around it (rounds 25–29, verbatim)
The promotion from level 3 to 4 came from in-context repair, not from the store: a mispredicted result
was read as an observation, the colour cycle 9→8→12 was learned, and the five predicted tiles flipped exactly.
Over that stretch: sims=0, n_predicted=0, zero expert briefing sections.
BEFORE — round 25 pre_grid · levels=3
→ 5 rounds 24 actions →
AFTER — round 29 post_grid · levels=4
runs/S5/bwsvfull.jsonl · round 27 · the turn that learned the cycleverbatim
HYPOTHESISR26 was wrong because it changed the target rule rather than just accounting for the paint cycle … ACTION6 cycles editable tiles 9→8→12→9
observed[37,36,37,37,36] · 183 cells · {(8,12):180} — exactly the five predicted tiles
The information that carried the repair travelled through the actor's own print() output,
which the briefing echoes back — not through the skill store. The full five-round table is in the appendix.
8
What we changed, and what moved
two isolated repairs · one unvalidated
A · the E3 gate — one sentence deleted1.00 → 2.90 actions/round
With the gate on, the model recited the prompt back — “per the one-probe guard” — and played
one move per round. Delete that 544-character sentence byte-exact and, same wall, same seed, it commits six
moves at once and all six land. Control: value-agreement is unchanged at 0.0182 to five digits — it bought
density, not accuracy.
B · two ledger fixes — what ranks firstapplicable 0/18 → 18/18
The correct rule was in the library all along, losing first place by 0.0071 to a rule with the
wrong palette, because the ledger could not charge being wrong about the value. After the fix the first-ranked
rule is applicable to all 18 wall transitions at F1 0.937. Control: the full-run USED f1 is still 0.267 —
the ledger got right, retrieval still did not consume it.
C · the briefing memory caplanded, never validated
CONSENSUS appeared in 0 of 59 rounds and the briefing carried MEMORY alone for 35 consecutive
rounds, because an uncapped block renders first and crowds out everything below it. The cap
(_MEMORY_KEEP = 2) has landed but there is no after-run. The problem is measured; the fix is
still a hypothesis.
Full before/after model responses, measurement tables, the clean-pair audit and two figures that did not
reproduce are in §03 and §05 of the appendix, unchanged.
9
What prior work removes by design
one claim form · deep links to the dissections
Schema's 98.98% is self-reported and their code is not public, so we claim nothing about what caused it.
The checkable observation is narrower: the failure modes their published architecture removes are exactly the ones we measured.
our defect
their design
our number
refine stores a sibling
theorize edits onestep() program in place — there is nothing to stack beside
0 / 244
select ignores when()
there is only one program, so there is no candidate pool to rank or retrieve from
67.4% silent
partial-credit ranking
certify replays the whole history binary — no confidence rank exists to miscalibrate
top = best 0 / 20
plan search emits nothing
run_bfs searches inside the certified program at zero real cost, then commits in batches
0 plan records
and one honest convergence
execute: “One mismatch discards the entire remaining plan.”
we pin the same rule at namespace.py:378-394
Verbatim quotes for every row, the evidence-grade table, and the two-loop figure are in
priors.html and §05b. The same team analysed our game:
their run suspected the representation and cleared 11 actions later; ours kept repairing the goal for
~240 more actions. Our sleep triggers were wincond in 39 of 39 cases — the behavioural face
of that difference.
10
What we decide today
three options · the case for each · a recommendation
A — replicate first (seeds 1–2)
What — the bwsvfull configuration unchanged; only the seed moves.
Case for — every cell in this deck is n=1. The 6/6 and all four axes are one seed's values.
What would refute it — if either seed fails to reach 6/6, “it wins reproducibly” is rejected and demoted to seed luck.
recommended
B — fix selection, then refine
What — make SELECT filter by when(board) everywhere, and make
orchestrator.py:1360 call set_code().
Case for — §5 and §6 now point at one line that produces two axis failures, and allfix
already shows it moving. Axis 2 is a second, independent one-line fix.
Case against — neither was used in this 6/6. Fixing them still leaves us not knowing why we won.
C — verify action efficiency
What — advisory abort (warn instead of cancel), so simulation and batching can coexist.
Case for — score falls with the square of actions. What separates C3 (40.9) from bwsvfull (19.7)
is not levels but actions spent. And the abort's information never reaches the actor: 0 of 64 responses mention
it, only its penalty lands.
Case against — allfix bundles four changes and isolates nothing.
Recommendation — A first, B in parallel
Only A changes the standing of every claim we hold. If it replicates, the rest become
measurements on a reproducible phenomenon; if it fails, half this deck must be rewritten.
B is now cheaper than it was this morning: §5 narrowed two axis failures onto a single
max(credence) call, and A changes no code, so the two can run together.
LIVE STATUS — allfix · PRELIMINARY · not a conclusion
In flight — ft09 · level 0 · --max-rounds 90 · complete: false.
Four levers: the two ledger fixes + advisory abort + applicable-top, with the E3 gate ON.
Reading of 2026-07-31 (runs/S5/allfix.jsonl) —
25 rounds · 74 actions (2.96 a/r) · levels 4 · Σsims 25 in 25 rounds · batches (≥3) 11 · NOT_FINISHED.Simulation and batching coexist in every round — the one thing this arm was built to test.
For scale: bwsvfull needed 87 actions to reach the same fourth level.
Nothing in this box feeds any conclusion — incomplete · n=1 · seed 0 · four changes at once means no isolation.
The in-flight box in §08 is a reading taken at round 17, and its four-axis snapshot is provisional too.
The previous summary layer, retained in full — the four-axis overview, the verdict table, GOOD ∥ BAD, the three change cards, the reasoning exhibits and the success episode
The 2026-07-31 restructure reorganised the summary layer around the four axes. Nothing was removed: the entire previous layer is reproduced verbatim below.
Seven screens — Result → Decision → System → Reasoning → Finding → Evidence → Episodes.
Every folded ▸ line holds the raw logs, coordinates, file paths and verification notes — expanded on request.
Below that, the APPENDIX carries the detail and §01–§08. Nothing was deleted in this restructure.
1
Result
one sentence · three numbers
ARC‑AGI‑3 contains games that never tell you their rules.
We cleared all six levels of one of them (ft09) twice.
And the second win was not produced by the skill loop we built.
Cleared
2 runs × 6/6
n=1 each
Confirmed repairs
2
each isolated by an on/off pair
Core functions not working
3
rule repair · rule judging · rule retrieval
Three of the learning loop's functions were not working; the model's in-context adaptation and
batched action solved ft09 anyway; and the accumulated bundle showed limited transfer in a matched comparison.
Evidence — run ids · action counts · RHAE · leak check · boundary conditions · the 30-second read
2× 6/6leak-free full games (C3 07-10 · bwsvfull 07-29) · n=1 eachfork_dependence* = 0no fork leakage52r/174a vs 59r/227aC3 vs bwsvfull · rounds/actionsRHAE† 40.9 / 19.7score falls with the square of actions
*fork_dependence — how many times the engine was cloned to peek at the rules. Must be 0 for the run to count.
†RHAE — per level
min((human baseline actions / our actions)² × 100, 115), 0 if uncleared,
averaged with weight = level index
(metrics.html).
Boundary conditions — stated first
bwsvfull's 6/6 is not to the skill loop's credit.
Four sections of the expert briefing were absent for 35 consecutive rounds (delivery basis; 36 briefings on the generation basis).
Simulation happened 3 times, all in one round (r53), and nowhere else.
Seeds 1 and 2 were never run, so 6/6 is an anecdote (n=1). Who actually won is the question this deck asks.
One sentence of the prompt was suppressing multi-action rounds.
Two scoring defects in the ledger distorted which skills got used.
isolated by on/off pairs at the same wall, same seed
WHAT FAILED
refine (the sleep stage that rewrites an existing skill) 0 / 244 · plan records (multi-move routes stitched in advance) 0
retrieval best 0.813 vs used 0.267
selection correlates −0.305 with realized accuracy
WHAT IS OPEN
What actually produced the 6/6.
Whether it replicates — every run is seed 0.
without seeds 1 and 2 it stays an anecdote
Three of the learning loop's functions were not working; the model's in-context adaptation and
batched action solved ft09 anyway; and the accumulated bundle showed limited transfer in a matched comparison.
—
Run glossary
the name is the condition · all n=1 · seed 0
run
condition (what this name means)
outcome
C3
Leak-free ft09 full game, 2026-07-10. Code from before the scoring architecture under audit here existed.
52R · 6/6 · WIN
cWall
The ft09 level-2 wall. E3 gate ON — the 544-character lock sentence is in the prompt.
8R · 0 levels
noE3wall
Same wall. That one sentence deleted byte-exact (TTSO_NO_E3_GATE=1). Nothing else differs.
10R · 0 levels
bw
Same wall. Gate OFF + the ledger penalty fix only (TTSO_WRONGVALUE_HARM=1).
10R · 0 levels
bwsv
Same wall. Gate OFF + both the penalty and the reward fix (+TTSO_STANDALONE_SAVED=1).
10R · 0 levels
bwsvfull
The bwsv configuration, run as a full ft09 game. The second 6/6, and what this deck dissects.
59R · 6/6
noE3full
Gate-OFF full game without the ledger fixes — the full-game control for those fixes.
60R · 4 levels
ls20a
A different game, ls20 (movement-based, ACTION1–4 + RESET). Fresh store, no bundle.
40R · 0 levels
cWall → noE3wall → bw → bwsv is a ladder at the same wall, turning on one thing at a time.
2
What we decide today
three options · the case for each · a recommendation
A — replicate first (seeds 1–2)
What — the bwsvfull configuration unchanged; only the seed moves.
Case for — every bwsvfull cell is n=1. The 6/6 and all four axes are one seed's values.
What would refute it — if either seed fails to reach 6/6, the claim "it wins reproducibly" is rejected and demoted to seed luck.
recommended
B — fix the mechanism first (refine · plan)
What — make orchestrator.py:1360 call set_code(), and loosen the budget and consensus bindings on plan search.
Case for — 0/244 was not improbable, it was structurally impossible. Plan records are 0 in both games, and that is precisely the machinery ls20 demands.
Case against — neither was used in this 6/6. Fixing them still leaves us not knowing why we won.
C — verify action efficiency first
What — use an advisory abort (warn instead of cancel) to test whether simulation and batching can coexist.
Case for — score falls with the square of actions. What separates C3 (40.9) from bwsvfull (19.7) is not levels but actions spent.
Case against — allfix has no isolation, and a better score does not answer why we won.
Recommendation — A first
B and C both touch parts the 6/6 never used. Fixing them leaves this deck's question exactly where it is.
Only A changes the standing of every claim we currently hold. If it replicates, all the rest become measurements on a reproducible phenomenon; if it fails, half this deck has to be rewritten.
A changes no code, so it can run in parallel with B and C — though allfix already holds the budget.
3
What this system does
five steps · in plain words
Play the game. Look at the screen and make a few moves.
Record what changed. Keep the before/after screen difference exactly as it was.
Mine a rule, and update how much we believe it. Belief goes up when it held, down when it did not.
Hand the useful rules back on the next turn. Summarised and placed in front of the model.
Do the same thing in fewer moves. Score falls with the square of moves, so efficiency is the score.
We expected behaviour to improve on each turn of this circle. What actually happened is that
rules got made, but not repaired, not well chosen, and barely used.
Implementation view — the store · briefing · actor · fold wiring
fold() is the single α/β write point mandated by constitution §2 (ttso/sleep/evaluate.py:78).
Five skill kinds: mechanic · wincond · strategy · metathinking · plan (skills.py:78).
Belief is credence = α/(α+β); ranking uses V = credence + λ·f
(f is recomputed from scratch each sleep and never mixes into credence).
The fifth kind, plan (added 2026-07-18), has 0 records in every run across both games. Diagnosis in §3 and §8.
R
What the reasoning actually looks like
verbatim · 389 model responses · ft09 + ls20
Every committed action is preceded by a written argument in a fixed form —
HYPOTHESIS / WHY / EXPECT — that cites specific library rules by id.
The three excerpts below are unedited. They are the mechanism, not an illustration of it.
EXHIBIT 1 — THE LIBRARY IS CITED, AND THE ACTOR NARROWS
Two consecutive rounds of the ft09 6/6 run. In round 19 the actor names two rules it is
reusing; in round 20 it names its own three failures and picks the structurally different test.
HYPOTHESISLevel 2 keeps the central-key decoder from [r105] and [r50], but overlapped neighbour tiles are not controlled by either individual clue; any macro-tile shared by two keys remains the default 8, even if both keys show 0. R18 only tested mixed 0/2 overlaps; it did not restore the shared 0/0 centre tile (28,28).
WHYThe current board is exactly the “single-owner 0s painted, mixed overlaps default” state except for (28,28). Since all broader union/priority variants failed, the smallest structurally new test is to set this one remaining multi-owned overlap back to default.
EXPECTClicking the centre of macro-tile (28,28), i.e. (31,31), will repaint its 6×6 tile from 12 to 8; then ACTION5 should clear if all shared tiles must stay default.
HYPOTHESISLevel 2’s actual editable output is the pair of 8-centred side keys, while the 12-centred top/bottom keys are reference/example panels. This still uses the transferable central-key decoder from [r105] and [r50], but differs structurally from the refuted “all keys,” “top/bottom output,” and overlap-priority attempts: only the left/right side-key 0-neighbours should be 12, and top/bottom-only tiles should remain 8.
This is the loop working as designed: [r105] and [r50]
are library records carried across levels, and the refutation of round 19’s EXPECT is what forces round 20’s
narrower claim. 20 of 64 actor responses in this run name their own refuted attempts this way.
EXHIBIT 2 — WELL-CITED REASONING BUILT ON A FALSE PREMISE
The same machinery in ls20, arguing about a button the game does not have. Note that the
citations are correct and the argument is valid; only the premise is invented.
ls20a llm_calls.jsonl · round 21 · actorverbatim
HYPOTHESISThe top-alcove/marker route [r54] may require an explicit Spacebar activation rather than automatic clearing when the 5x5 actor reaches the marker; ACTION5 should test that structurally different interaction.
WHYMultiple ACTION1 steps under the high-credence movement rule [r14] moved the actor upward but the predicted automatic clear was refuted, so per [r7]/[r9] the best next cheap probe is the untested non-movement interaction at the apparent target instead of blindly continuing the same clear hypothesis.
ls20a llm_calls.jsonl · round 21, next actor call · the self-correctionverbatim
HYPOTHESISSince ACTION5 was unavailable/no-op, the best structurally different single-step probe is the briefed COVERAGE PROBE: ACTION3. Per [r9], mapping the remaining arrow dynamics is now more informative than repeating the refuted automatic top-alcove clear route [r54].
Evidence — how far the phantom travelled, and where it stopped
ACTION5 in 43 of 43 actor prompts · 15 guarded submit branches · 0 unguarded · 0 reached the engine
The actor wrote if "ACTION5" in obs.available: submit_action("ACTION5") every
time, so its own availability check caught the phantom on all 15 occasions. Committed actions in this run were
ACTION1×16, ACTION2×8, ACTION3×8, ACTION4×8 — ACTION5 never among them.
The harness never caught this; the actor's own defensive coding did. That is why the check now lives in
ttso/eval/guard.py and raises rather than prints.
Source runs/ls20a/g2-on-ls20-s0-ls20a/llm_calls.jsonl · runs/S5/ls20a.jsonl.
Correction — the docstring in guard.py currently says
“14 attempted submits”. Re-measured 2026-07-31: all 15 were availability-guarded and none was attempted
against the engine. The claim on this page is the re-measured one.
EXHIBIT 3 — THE PUNISHMENT ARRIVES; THE REASON DOES NOT
The plan-abort cancels a round’s remaining clicks on the first simulate-vs-real divergence.
We searched the actor’s own words for any trace of it.
0 of 64 actor responses mention PLAN ABORTED ·
0 mention divergence · 2 mention simulation at all
The round loses its clicks and the actor never learns why. This is the direct argument for the
pre-registered TTSO_ABORT_ADVISORY arm, which keeps the divergence message and drops the
cancellation: the check’s information was never being delivered, only its penalty.
THE LEDGER THAT DRIVES ITERATION — AND WHAT IT NEVER SAYS
Each round the actor is handed back its own refuted claims, with an instruction not to repeat them:
runs/S5/ls20a.jsonl · round 21 · feedback to actorverbatim
ledgerHYPOTHESIS LEDGER — TRIED & REFUTED (harness-verified, this level; do NOT re-propose a REFUTED claim — prefer a structurally different one)
This is why round 20 above could name its three dead ends. But the ledger carries only two labels.
Across all 59 rounds of the 6/6 win, the entries read OPEN or REFUTED and
the label CONFIRMED never appears once. The run cleared six levels while its own hypothesis
record confirmed nothing — falsification was reaching the actor, corroboration was not.
Counts are label occurrences across every round’s re-printed ledger (max 12 entries shown per round),
not distinct hypotheses; the load-bearing fact is that CONFIRMED occurs zero times in either run.
Estimator: re.findall(r'^\s+R\d+ (OPEN|REFUTED|CONFIRMED)', feedback, re.M)
over runs/S5/{bwsvfull,ls20a}.jsonl.
Every LLM call is stored with its request, response, model id, latency and token usage in
runs/<arm>/g2-on-<game>-s0-<arm>/llm_calls.jsonl; the per-round distillation
(hypothesis, expect, feedback,
actions, sims) is in runs/S5/<arm>.jsonl.
Every excerpt on this page is copied byte-for-byte from those files.
4
The core finding — three of the four functions were dead
mine · refine · judge · retrieve · n=1 each
Rule generation (mine)works · best_f1 0.813
But only mechanics get scored — 92.4% of the 132 prose skills (122 of them) were never scored once.
Scope warning — this PASS scores one kind, mechanic, and nothing else.
Of the 346 records in the 6/6 bundle, the prose kinds (strategy 71 + metathinking 61 = 132) include 122 with zero evidence,
74 still at their birth value of 0.500 and 49 still at 0.250. Of the 70 mechanics, 8 are unscored.
38% of the whole store never touched the scoring machinery at all, and 91/346 (26%) are retired.
Source docs/reports/scripts/four_axes.py · wm_fidelity.jsonl.
Rule repair (refine)fails · 0 of 244 revised
Not improbable but structurally impossible — an accepted revision becomes a sibling record instead of version 2.
Evidence — the proximate cause of axis 2
0 of 244 ever past version 1 (ft09) · 0 of 124 (ls20a) · 0 of 346 (noE3full)
_with_code() at orchestrator.py:1360returns a new Record instead of calling set_code() (source confirmed 2026-07-30).
So every accepted refinement becomes a sibling record, never a version 2.
0/244 was not a matter of probability; it was structurally impossible. Detail in §04.
Rule judging (judge)fails · corr −0.305
Credence correlates negatively with realized accuracy — the more confident, the more wrong.
Evidence — axis 3
corr −0.305 (gauge floor: negative) · top = best 0/59 (ft09) · +0.249 · 3/39 (ls20a)
Estimator — corr(top_credence, the realized F1 of the rule selected that round),
over the 59 rows of runs/bwsvfull/g2-on-ft09-s0-bwsvfull/wm_fidelity.jsonl. n=1 (seed 0).
Rule retrievalfails · best 0.813 vs used 0.267
The right rule was in the library; a different one is what reached the actor.
Evidence — axis 4
USED 0.267 vs best 0.813 · silent 67.4% (ft09) · 0.328 vs 0.832 · 62.5% (ls20a)
best_f1 = the best prediction F1 that any rule in the library could have achieved on that round's actual transition.
USED f1 = the same F1 for the single rule actually handed to the actor. The gap is the retrieval failure.
Chart and per-round strip in §04.
The run won with three of the four functions not working — that is the finding, not a bug in the scoring script. n=1 per run.
The verdict table at equal weight — observed / isolated / improved / not working / anti-contributing / not yet proven / in flight, plus the full GOOD ∥ BAD list
verdict
what
evidence / control
observed
ft09 6/6 twice (C3 · bwsvfull), zero leakage
n=1 · seed 0 each. No causal attribution.
isolated-experiment
The E3 gate causes the 1-click lock
cWall vs noE3wall — same wall, bundle and seed; the prompt.py diff is empty otherwise. n=1 per cell.
improved-after-fix
The ledger now ranks an applicable rule first
bw (r9, applicable on 0 of 18 transitions) → bwsv (r78, 18/18, F1 0.937 · value-agree 1−0/504).
not working
refine · plan search · the late-run briefing
0/244 revised · 0 plan records (both games) · MEMORY-only for 35 consecutive rounds.
anti-contributing
selection (retrieval and ranking)
corr(top_credence, realized F1) −0.305 · top = best 0/59 · 67% silent commits.
not yet proven
The briefing memory cap (_MEMORY_KEEP=2)
No after-run exists. Only the problem has been measured.
Incomplete · n=1 · four changes at once, so nothing is isolated. See LIVE STATUS below.
GOOD
ft09 2×6/6, zero leakage.C3 52R/174a · bwsvfull 59R/227a · n=1 each
Bundle transfer positive (07-25). Fresh controls at seeds 1 and 2 reached 1 level each; the bundle-seeded pair at the same seeds reached 2.a matched placebo rules out the memorisation reading · n=1 per cell
E3 isolated as the cause. a/r 1.00→2.90 · batches 0→5 (≥3), 0→7 (≥2)control: value-agreement is unchanged at 0.018 — it did not buy accuracy
Ledger ranking repaired. The top-1 rule went from "applicable 0/18" to "18/18 · F1 0.937"control: full-run USED f1 is still 0.267
In-context repair works. r26 error → r27 learns the colour cycle → r28 local repair → r29 level 4control: the information channel was the actor's own print(), not the skill store
BAD
No replication. Every run is seed 0. The 6/6 is still an anecdote.
The briefing vanished in the winning run. CONSENSUS 0/59 · MEMORY-only for 35 consecutive rounds.
selection −0.305. The more confident, the more wrong. top = best 0/59.
retrieval 0.267 vs best 0.813. The rule existed and went unused.
ls20 never cleared even level 0. 40R · 40a · 1.00 a/r.
The ACTION5 phantom. An action the engine does not have entered 34 skill versions and contaminated 19 of 40 briefings.
O(n²) scoring cost. Non-LLM time per round grows 1.5 → 116 minutes — a tax that makes replication expensive.
Every positive sits next to its own control.
5
What we changed and what moved
numbers first · verbatim folded
CARD A
The E3 gate — same wall, one sentence deleted
fixed+validated
1.00→2.90actions / round
With the gate on, the model recited the prompt's sentence back
— “I will take one cheap observational probe first” — and played exactly one move per round.
Delete that one 544-character sentence byte-exact and, at the same wall on the same seed, it commits
six moves at once and all six clicks land.
Control: value-agreement (1 − Σ(wrong_value)/Σ(pred ∧ obs)) is
unchanged at 0.0182 to five digits — the gate bought no accuracy. Same wall · same seed · n=1 per cell.
Verbatim — the deleted 544 characters · before/after model responses · measurement table · how clean the pair is · two values that did not reproduce
PROBLEM
Locked at exactly 1.00 action per round at the wall — and since score falls with the square of actions, that is bankruptcy.
PROMPT CHANGE
The constant _G_E3_GATE at run_game.py:228-236, 544 characters. TTSO_NO_E3_GATE=1 removes it byte-exact.
What the deleted sentence says — “Before committing a dense multi-click move, simulate that exact move on your own world model. If it predicts no change, or your best rule is below 0.70 credence, take one cheap observational probe and verify before committing.”
_G_E3_GATE · 544 chars · the deleted sentenceverbatim
deletedBefore you commit a DENSE multi-click action meant to CHANGE the board, first simulate that exact action on your own world model: if the simulation predicts no state-changing diff, or your highest-credence world-model rule is below 0.70 credence, take ONE cheap observational probe and verify it before the dense commit -- lock the model before you leap (experiment E3, 2026-07-17). This is a one-probe-per-uncertainty guard, not a licence to observe forever: once a rule clears 0.70 or your simulation confidently predicts the change, commit.
ACTUAL MODEL RESPONSE — BEFORE vs AFTER
BEFORE · runs/S5/cWall.jsonl · round 1 · gate ONverbatim
What the model says — “I have no confident rule yet, so per the one-probe guard I will take exactly one cheap observational probe.” What it commits: one click, zero cells changed.
hypothesisHYPOTHESIS: The grey/white/orange inset panels are interactive keys; clicking the small orange marker inside one key should reveal or apply that key’s rule.
whyI do not yet have a confident world-model rule, so per the one-probe guard I should take exactly one cheap observational probe rather than dense-click the board.
expectOne local key/panel or its associated red-cell region changes; if nothing changes, this click location/rule is refuted and I will use the observed mismatch next turn.```python
action (committed)[["ACTION6", 62, 6]]
observed_diff[0] — 0 cells changed · NOT_FINISHED
AFTER · runs/S5/noE3wall.jsonl · round 6 · that sentence removedverbatim
What the model says — “per [r50] with [r3], the 0-coded neighbour positions from the four clue panels are the repaint targets” — then writes out six tile bounding boxes in advance and commits six moves at once. The probe language is gone.
hypothesisHYPOTHESIS: Per [r50] with [r3], the union of 0-coded neighbor positions from the four clue panels are target repaint tiles; ACTION6 repaints each clicked homogeneous 8 tile to 12 per [r45].
whyThis is structurally different from the refuted single-column/partial-consensus clear claims: it follows all local 0 clues rather than expecting these six alone to clear.
expectEach click changes exactly its 6x6 macro-tile from 8 to 12: bboxes x=20..25,y=20..25; x=28..33,y=20..25; x=36..41,y=20..25; x=44..49,y=20..25; x=20..25,y=36..41; x=36..41,y=36..41. No clear is assumed yet because one remaining union target may remain.
action (committed)[["ACTION6", 22, 22], ["ACTION6", 30, 22], ["ACTION6", 38, 22], ["ACTION6", 46, 22], ["ACTION6", 22, 38], ["ACTION6", 38, 38]]
observed_diff[36, 37, 37, 36, 37, 37] — all six clicks landed
The BEFORE why is the gate echoed straight back — "per the one-probe guard".
MEASURED OUTCOME
metric
cWall (ON)
noE3wall (deleted)
rounds / total actions
8 / 8
10 / 29
actions / round
1.00
2.90
per-round counts
[1,1,1,1,1,1,1,1]
[1,1,4,3,2,6,2,1,3,6]
batch rounds — ≥3 actions
0
5
batch rounds — ≥2 actions
0
7
Σ sims
6
0
levels cleared
0
0
value-agreement
0.0182
0.0182
Estimator1 − Σ(wrong_value)/Σ(pred ∧ obs), frozen preload bundle:
cWall 1−216/220 · noE3wall 1−648/660. Identical to five digits — the gate bought no accuracy.
Verification notes — how clean the pair is, two values that did not reproduce, the batch definition
The pair is clean.git diff 0d9c0c3 bec6156 -- ttso/auto/prompt.py is empty (PROMPT_THIN byte-identical),
load_bundle sha256 matches, round-1 pre_grid matches. Caveat:--max-rounds was 8 vs 10, so totals are not comparable; ratios are unaffected.
Flag 1 — neither run has wm_fidelity.jsonl (that logging starts at bwsv). The 0.0182 above is an offline reconstruction from each run's own recorded transitions against the same preload bundle, not a logged time series.
Flag 2 — docs/reports/2026-07-27-bw-prereg.md:53 records noE3wall value agreement as 0.006, which contradicts that prereg's own table and does not reproduce under any estimator. The prereg is what needs correcting, not this deck.
Batch definition. "0→5" only reproduces under the ≥3 definition; under ≥2 it is 0→7. Both are true, so both are printed in the table.
CARD B
Two ledger fixes — which rule becomes top-1
fixed+validated
0/18→18/18top-1 applicable · F1 0.937
Before the fix, the first-ranked rule was applicable to none of the wall's 18 transitions;
after it, the first-ranked rule was applicable to all 18.
The model says the same thing on both sides — “repaint these tiles to 12”. What changed is not the actor but
what the ledger promoted to first place. Control: full-run USED f1 is still 0.267.
Same wall · same preload bundle · 10 rounds · n=1 per cell.
Verbatim — the live ranking · the three rules' predict_next · before/after model responses · two reproduction failures
PROBLEM
The right rule was in the library the whole time. It lost first place by 0.0071 to a rule with the wrong palette,
and the ledger had no way to charge being wrong about the value, so the gap could never close.
CODE CHANGE
TTSO_WRONGVALUE_HARM=1 (penalty) · TTSO_STANDALONE_SAVED=1 (reward). Same wall · seed 0 · same preload bundle · 10 rounds.
WHAT WAS TOP-1 — argmax of the live candidate_ranking
r15 gets every colour wrong; r9 is not right but silent; r78 is the correct rule, buried at a 0.25 prior.
Verification note — the three rules' predict_next
r15 (the incumbent champion) toggles the clicked tile 8↔9 — it gets almost every cell right and every colour wrong (at this wall the engine paints 12).
r9 (the bw winner) is the same toggle, but its when() requires a 9 on the board, so it gates itself out —
not right, just silent, and saved_harmed scores silence as a neutral (0,0).
r78 (the bwsv winner) has ACTION6 paint the clicked 6×6 tile with the colour read off the footer row — the one that generalises to level 2's 8→12.
r33 belongs to the same 8↔9 family, so two siblings asserting the same wrong answer shielded each other into (0,0).
ACTUAL MODEL RESPONSE — BEFORE vs AFTER
BEFORE · runs/S5/bw.jsonl · round 3 · top-1 = r9verbatim
What the model says — “the consensus target set is correct; the 6×6 tiles around the upper key must be repainted to 12” — and calls it a no-regret move because the briefing marked those cells CONSENSUS.
hypothesisHYPOTHESIS: The current consensus target set is correct: the top-left and middle-left neighboring red 6x6 tiles around the upper key must be repainted to 12. ACTION6 repaints whole homogeneous 6x6 tiles per [r45], and the key/macro-tile grammar transfers per [r50].
whyThe briefing explicitly marks cells in both tiles x=20..25,y=4..9 and x=20..25,y=12..17 as CONSENSUS; per [r4/prim], these are no-regret commits rather than an uncertain coverage probe.
AFTER · runs/S5/bwsv.jsonl · round 4 · top-1 = r78verbatim
What the model says — “[r78]/[r107] model ACTION6 as repainting the whole clicked 6×6 tile to the board-read colour 12” — the same physical conclusion, reached by citing different rules.
hypothesisHYPOTHESIS: The central-key/frame target continues to mark specific red 6x6 macro-tiles for repainting to 12; the next consensus target is the tile x=20..25,y=12..17 per [r50].
whyThe briefing’s CONSENSUS cells all lie in that homogeneous red tile, and [r78]/[r107] model ACTION6 as repainting the whole clicked editable 6x6 tile to the board-read repaint colour 12. This is a confident no-regret move, so I skip the coverage probe.
We do not overclaim this. The actor reaches the physically correct answer on both sides. What the fix changed is which rule ranks first.
The honest claim is not "the actor got right" but "the ledger promoted the rule the actor already had reason to believe".
MEASURED OUTCOME
bwsv value-agreement = 1 − 0/504 = 1.0000 (10 logged rows, cross-checked two ways).
The stronger and fully reproducible statement: bw's top-1 r9 was applicable to 0 of 18 wall transitions; bwsv's top-1 r78 to 18/18 at F1 0.937.
Verification notes — bw = 0.000 cannot be recomputed; the prereg replay table does not reproduce
Flag 1 — runs/bw/g2-on-ft09-s0-bw/ has nowm_fidelity.jsonl (the run predates that logging).
The 0.000 in the old §03 came from the prereg's predicted replay table, defined as "mean F1 of the final top rule over 18 transitions" —
a different estimator from the 1.000 it was compared against. The 0.000 → 1.000 arrow crosses two estimators.
Flag 2 — replaying the real fold path (applicable → saved_harmed → Store.observe_bits) at today's HEAD over those 18 transitions makes
r78 the winner under all three ledger settings (18/18 · mean F1 0.9368); the prereg's r15 → r9 → r78 ladder does not appear.
Sweeping 12 combinations of level and filter changes nothing. Per git log this is a replay-methodology difference, not code drift.
One duplicate _tkey among the 18 transitions makes 17 distinct fold keys.
The live-trace evidence above is independent of this problem, and it is what holds the card up.
Secondary values reproduce too: bwsv mean best_f1 0.9975 · mean USED f1 0.7902.
bwsvfull gives 1 − 756/2591 = 0.7082 · USED 0.2666 · best 0.8132, matching the 0.71*/0.267/0.813 in the §02 table.
CARD C
The briefing memory cap — not yet validated
landed but unvalidated
35consecutive rounds · MEMORY only
The expert sections vanished from the winning run — CONSENSUS appears in 0 of 59 rounds, and
from round 25 to the end the briefing carried MEMORY and nothing else for 35 consecutive rounds.
The cause: an uncapped block renders first and crowds out the expert sections below it.
The cap (_MEMORY_KEEP = 2) has landed, but there is no after-run — the problem is measured; the fix is still a hypothesis.
Verbatim — the full 59-round census · the code change · an off-by-one convention and a wrong source comment
PROBLEM
The expert sections vanished from the winning run. Recomputed across all 59 rounds:
section
rounds present
first
last
CONSENSUS
0 / 59
—
—
OTHER SKILLS
6 / 59
2
7
WORLD MODEL
23 / 59
2
24
WIN-CONDITION POSTERIOR
23 / 59
2
24
MEMORY
54 / 59
6
59
Briefings carrying MEMORY only: 35, from round 25 to 59, unbroken to the end of the run.
CODE CHANGE
ttso/sleep/wake.py:221 — _MEMORY_KEEP = 2, applied at :255-257.
There was no cap on item count and this block renders first — so every level cleared added a winner line that pushed the expert sections out.
MEASURED OUTCOME
LANDED BUT UNVALIDATED — there is no after-run. The in-flight allfix exercises this cap, but it is incomplete, n=1, and confounded with three other levers.
The problem is measured; the fix is still a hypothesis.
Verification notes — an off-by-one convention and a wrong source comment
Flag 1 — the "OTHER SKILLS last at r6, WORLD MODEL and WIN-CONDITION last at r23" in the old §03 and §04 are consistently one too low.
The cause is a round-1 briefing that does not exist (round 1's user part is a single 4,155-character system prompt).
Counting briefings 1…58 gives 6 and 23; counting rounds gives 7 and 24. Every other number in this deck is a round index, so the round basis is the one to use.
MEMORY's absence in r1–5 is design, not truncation — memory_materials returns "" when level <= 0.
Flag 2 — the "36 consecutive briefings" in the comment at ttso/sleep/wake.py:248-249 is 36 on the generation basis and 35 on the delivery basis
(round 24's briefing still carries WORLD MODEL and WIN-CONDITION POSTERIOR). The comment needs fixing.
The cap is pinned by ttso/tests/test_ls20_readiness.py:120.
6
One success, one failure
success: ft09 r25–29 · failure: ls20 ACTION5
SUCCESS — three scenes (bwsvfull · ft09 · rounds 25–29)
SCENE 1 · ROUND 25
It meant to paint 9→12; it got 9→8.
SCENE 2 · ROUND 27
A new hypothesis — the colour cycles 9→8→12. Exactly the five predicted tiles go 8→12.
SCENE 3 · ROUND 29
Clicking the same tiles again advances the level. levels 3 → 4.
The honest summary: what produced the promotion was in-context repair — taking a mispredicted result as an observation and learning the action dynamics (the colour cycle).
Over the same stretch: sims=0 · n_predicted=0 · zero expert sections.
All five rounds — what it believed / did / observed / updated, with coordinates · before⋅after boards
BEFORE — round 25 pre_grid · levels=3
→ 5 rounds 24 actions →
AFTER — round 29 post_grid · levels=4
R
what it believed (hypothesis excerpt, verbatim)
what it did
what it observed
what got updated
25
“Level 3 continues the confirmed centre-colour-specific central-key grammar from [r173]…”
220 cells · {(9,8):216,(12,11):4} it went to 8, not 12
concludes its answer-colour inference was wrong
26
“…the local centre-colour rule is inapplicable; instead use the [r50] value rule … clue 0→8 and clue 2→9”
ACTION6 ×5 + ACTION5
184 cells · no clear
the harness marks the EXPECT REFUTED and writes it to the ledger
27
“R26 was wrong because it changed the target rule rather than just accounting for the paint cycle … ACTION6 cycles editable tiles 9→8→12→9”
ACTION6 ×5 (23,17)(23,33)(23,49)(31,49)(39,49)
[37,36,37,37,36] · 183 cells · {(8,12):180} exactly the five predicted tiles
fold raised r195 from 0.25 to 0.905, but top-1 stayed pinned to r186 at 0.9888
28
“The remaining Level-3 error is not the [r173] target grammar, but the Level-3 three-state paint cycle … stuck at 8 … cycles 8→12→9”
ACTION6 (39,17)×2, (47,33)×2 + ACTION5 the same coordinate twice = two steps around the cycle
[37,37,36,37,1] · {(8,9):72,(12,11):4}
the repair-candidate coordinates came back through the briefing from the actor's own print()
29
“…when two or more central-key constraints disagree on the same macro-tile, the tile should be the third editable colour 8”
ACTION6 ×4
[36,37,37,1901] — the whole board is replaced on the last action
levels 3 → 4
FAILURE — ls20a: an ACTION5 the engine does not have, circulating through the system
The actor learned in a single round that ACTION5 does not exist. The long-term store then multiplied that error into 34 records.
1The base prompt lists it — “non-click actions: RESET, up/down/left/right, and ACTION5 (Spacebar)”
submit_action(name) -- a non-click action: RESET, ACTION1 (Up),
ACTION2 (Down), ACTION3 (Left), ACTION4 (Right), ACTION5 (Spacebar);
check observe().available first
present in all 43 actor calls
2The engine does not have it
available ['ACTION1', 'ACTION2', 'ACTION3', 'ACTION4', 'RESET']
the same line appears 8 times in briefings · the 40 committed actions are ACTION1×16, 2×8, 3×8, 4×8 — ACTION5 committed 0 times
3The actor invents it at round 21ACTION5 is not in the round-21 briefing — the source is the prompt surface, not the bundle
4The store latches it — 34 skill versionswincond 24 · metathinking 9 · mechanic 1 (r69…r129). The text lodges in when_not clauses, where the refutation path cannot erase it
5The briefing repeats it — 19 of 40 roundseven the ledger's refutation re-injects the token: R21 REFUTED: ACTION5 may cause no ordinary cell translation; …
6The actor cites it in 11 rounds and writes a submit for it in 1411 by declared field (20 counting THINK) · 14 rounds contain submit_action("ACTION5") · 0 ever reached the engine
The store has no machinery for retracting a token it was wrongly given.
Verbatim — the round-21 board · the actor's guard code · one item that did not reproduce
ls20a round 21 pre_grid · levels=0
What the model says — “the top-alcove/marker route in [r54] may need an explicit Spacebar activation rather than clearing automatically when the 5×5 actor reaches the marker; ACTION5 should test that structurally different interaction.”
runs/S5/ls20a.jsonl · round 21verbatim
hypothesisHYPOTHESIS: The top-alcove/marker route [r54] may require an explicit Spacebar activation rather than automatic clearing when the 5x5 actor reaches the marker; ACTION5 should test that structurally different interaction.
code (guard)obs = observe()
if "ACTION5" in obs.available:
submit_action("ACTION5")
The actor guarded correctly and the branch failed closed. Its retry opens with
"Since ACTION5 was unavailable/no-op, …". The actor learned in one round. The store never did.
Verification note — one item that did not reproduce
"Round 21 committed nothing, so pre_grid == post_grid" is wrong at the round level.
Round 21's call_ids are ['c-0119','c-0120'], and the retry committed an ACTION3 that changed 52 cells.
The accurate statement is "the first call, the one that tried ACTION5, committed nothing".
The 19/40 briefing figure is r21–40 minus 28 on the feedback basis, and r22–40 minus 29 plus the system prompt on the llm_calls basis — the same 19 either way.
One line of a list the engine does not honour consumed attention in 20 of 40 rounds and entered 34 store records.
The store has no machinery for retracting a token it was wrongly given.
Detailed evidence from here — APPENDIX
Below is the detail this restructure moved off-screen (one full turn · the exhaustive ledger sweep),
followed by the §01–§08 research record unchanged. Nothing was deleted.
What this restructure changed — names and positions, not content (heading and nav-label crosswalk)
previously (the 2026-07-30 edition)
now
SUMMARY LAYER — five screens · decision · LIVE STATUS. Detail in the APPENDIX (§01–§08) below.
Folded ▸ lines are verification notes — expanded on request.
the six-screen badge row at the top
S1 30 seconds · happened / proved / failed / open
1 Result · one sentence, three numbers — the four old cards (WHAT HAPPENED/PROVED/FAILED/OPEN) are inside that screen's fold
— run glossary
inside the fold on screen 1, unchanged
S2 one full turn — bwsvfull round 27 · observe→briefing→actor→commit→observe→fold
demoted to the APPENDIX — verbatim, just below
S3 before and after — in the model's own words · problem · change · before/after · outcome
5 What we changed and what moved — same three cards, with the big number moved to the front
S4 the good and the bad, at equal weight · verdict table · good ∥ bad
4 The core finding — four axis lines; the verdict table and GOOD ∥ BAD are inside that screen's fold
S5 two episodes, seen on the board · SUCCESS — bwsvfull (ft09) rounds 25–29
6 One success, one failure · SUCCESS — three scenes; the five-round table is inside the fold
S6 what we decide today · three options · the case for each · a recommendation
2 What we decide today — content unchanged, moved to the front
16 nav links — 30 s · one turn · before/after · good & bad · episodes · decision ·
appendix · ledger · 4 axes · refuted · schema · ls20 · verbatim · next · priors · metrics defs
5 first-tier links (Result · Decision · System · Finding · Evidence) plus one Appendix control
§01–§08 below are the research record, unchanged.
the APPENDIX note above, extended to cover the demoted material
Exactly one screen is new — 3 What this system does — plus the reasoning exhibits in R. Everything else was moved or folded;
no number, quote, caveat or section was removed.
S2
One full turn — bwsvfull round 27
observe→briefing→actor→commit→observe→fold
The anchor is round 27; r26 is "the previous result" — feedback is produced after execution and serves as the next round's briefing, so
r26's feedback is c-0142's request_parts[8].
① OBSERVEruns/S5/bwsvfull.jsonl · round 27 pre_grid · the round 26 result
The previous round (r26) — 6 actions · 184 cells changed · levels still 3. Its EXPECT was judged REFUTED, and that sentence is carried verbatim into ②.
The image the actor saw is not the current board — the PNG in c-0142 differs from this board by 332 cells (8.1%).
Verification note — where the image stops updating
The same sha256 (ada39082…d44d.png, 2297 B) is attached to the actor calls at rounds 25, 26, 27, 28 and 29.
Decoding and comparing gives mismatched cells of r25 0 / r26 220 / r27 332 / r28 335.
The cause is ttso/auto/loop.py:422-425 — the image refresh sits inside an if cleared: block, so it never runs
within a level. The genuinely current board reached the actor only through grid() in its own code.
offset 280–408 · plannedplanned [(39, 17, 36, 14, 9, 8), (47, 33, 44, 30, 9, 8), (39, 49, 36, 46, 9, 8), (47, 17, 44, 14, 8, 9), (47, 25, 44, 22, 8, 9)]
offset 733–789 · statestate=NOT_FINISHED levels_completed=3 clicks_this_turn=5
offset 790– · OBSERVED — where the colour cycle is discoveredOBSERVED: click(39,17): 9->8 | flips (39,16):9->8; (38,17):9->8; (40,17):9->8; (39,18):9->8; (39,15):9->8; (38…
offset 2,431–2,571 · ledger headerHYPOTHESIS LEDGER — TRIED & REFUTED (harness-verified, this level; do NOT re-propose a REFUTED claim — prefer a structurally different one):
offset 3,599–3,912 · the R26 verdict — this one line triggered round 27 R26 REFUTED: Clicks at (39,17), (47,33), and (39,49) repaint those macro-tiles 9→8; clicks at (47,17) and (47,25) repaint the accidental 2-coded macro-tiles 8→9. After these five corrections, ACTION5 or the final click should advance levels_completed to 4.```python [predicted a clear; engine says NOT_FINISHED]
offset 4,911–5,442 · [r173] — the only skill round 27 actually cites L2 winner [r173 0.90] claim: Executable translation of the centre-colour-specific central-key family: detect every 6x6 key glyph made from uniform 2x2 subcells, read the two answer colours from homogeneous 6x6 macro-tiles, and decode each key locally so the lower-valued clue symbol maps to that key's centre colour while the higher-valued clue symbol maps to the other answer colour. This is the programmatic form of '12-centred keys and 8-centred keys use opposite local mappings' without hardcoding absolute board coordinates.
offset 11,721–11,845 · last lineSLEEP: mined 6: 1 accepted, 2 parked, 1 confirmed, 1 dropped, 15 observations folded, 23 competing mechanics (entropy 3.05).
66% of this turn's briefing was MEMORY, and it carried zero expert sections —
CONSENSUS·WORLD MODEL·WIN-CONDITION·OTHER SKILLS·TOOLS·PLAN·COVERAGE PROBE·NOTES all at offset −1.
Verification note — what was inside MEMORY
One line each for the L0/L1/L2 winners · 5 lines of VICTORY REPORT ·
21 Lesson: lines = 4,200 chars = 35.5% of the whole briefing. All of it repeats refuted families from levels 0–2, while the actor is on level 3.
③ ACTORruns/bwsvfull/g2-on-ft09-s0-bwsvfull/llm_calls.jsonl · c-0142 · response_text
hypothesisHYPOTHESIS: R26 was wrong because it changed the target rule rather than just accounting for the paint cycle. I now return to the Level-2-cleared centre-colour-specific target grammar per [r173]: for 12-centred keys, 0-coded neighbours should be 12 and 2-coded neighbours should stay 9; for the 9-centred key, 0-coded neighbours stay 9 and 2-coded neighbours become 12. The new refinement is only action mechanics: on Level 3, ACTION6 cycles editable tiles 9→8→12→9, so a 9 tile needing 12 must be clicked twice across turns.
whyWHY: The observed 9→8 and 8→12 sequence explains why R25 did not clear: the intended 12 targets were only halfway painted. The strongest move is to finish the five R25 target tiles currently at 8 by clicking each once to 12, while not spending a useless single click on the two accidental 8 tiles that need two clicks to return to 9.
expectEXPECT: Clicks at (23,17), (23,33), (23,49), (31,49), and (39,49) should repaint macro-tiles (20,14), (20,30), (20,46), (28,46), and (36,46) from 8 to 12. I do not necessarily expect a clear this turn because (36,14) and (44,30) likely still need 8→12→9 repair next turn.```python
The actor keeps the target grammar (returning to [r173]) and relearns only the action dynamics, and its EXPECT explicitly disclaims a clear.
The source is not the briefing but the OBSERVED: block in ②.
Verification note — why we quote response_text rather than the trace fields
In runs/S5/bwsvfull.jsonl, r27's why is truncated at …that nee by a 300-character log cap, and
expect carries parser residue. The text above is the complete version taken from response_text.
Of output_tokens 3376, reasoning accounts for 2530. The ```python at the end of EXPECT is the start of the code block; it is byte-present in the log, so we do not strip it.
Verification note — skill usage cannot be counted from the fields
The actor cites [r173] in its prose, but the structured hypothesis_ids and
skill_version_ids are empty arrays. The code block in c-0142 likewise contains no
simulate(, mismatch( or boards( call —
only observe(), obs.grid and submit_action("ACTION6", x, y).
Exactly the five tiles EXPECT predicted changed, and nothing else.
Verification note — the three footer cells
Tile cells are 5×36 = 180; the remaining 3 are on the footer row (y=63). Why only 3 of 5 clicks recorded one cannot be settled from the trace alone, so
rather than invent a mechanism we state only that they were "recorded as attributed to actions 1, 3 and 4".
Estimatorlocation = |pred ∩ obs| / |pred ∪ obs| · value = ev.f1
(run_game.py · wm_fidelity()). Because predicted is empty,
0.0 does not mean "wrong", it means "no prediction was made".
Why the prediction count is 0. The when of top-1 r186 is False on this board — a level-boundary predictor was ranked first for a click inside a level.
All 34 rounds r26–59 have n_predicted=0, with r186 top-1 in 34 of 34.
proximate cause — as the code itself states itthe SELECTION sites never did: they took `max(mechs, key=credence)` over the whole library, so a rule whose `when` is false on this board could still hold the top slot and hand the actor an empty prediction. … 153 of 227 committed actions (67%) went out with the top mechanic silent, and 147 of those changed the board anyway … credence correlates with the selected rule's actual F1 at -0.305.
record
r25
r26
r27
r28
r29
final α / β
r186 — top-1, when False
—
0.9888
0.9888
0.9888
0.9888
265.0 / 3.0
r115 — best_id, the rule that actually got it right
0.5615
0.6012
0.6341
0.6611
0.6830
215.84 / 124.16
r9
0.7823
0.8176
0.7872
0.6908
0.6908
135.4 / 84.6
r195 — born in sleep 17
—
—
0.2500
0.9050
0.9050
32.58 / 3.42
r190 — born in sleep 17
—
—
—
—
—
1.0 / 19.0 · retired
fold worked — r195 rose from 0.2500 to 0.9050 and its sibling r190 was retired. Yet top-1 stayed pinned to r186 for all 34 rounds.
fold updated the ranking; selection did not use the update. The α/β columns are final values.
reasoning logREASONING LOG (level 3, sleep 18): Hypothesis families tested on level 3: 6 (rounds 25-27). … - R26 was wrong because it changed the target rule rather than just accounting for the paint cycle. … (R27 — claims the current state clears; engine says NOT_FINISHED)
The judge failed to read the actor's own disclaimer — EXPECT says "I do not necessarily expect a clear this turn", yet
the harness labelled it claims the current state clears and filed it as REFUTED.
So the next briefing opens with the diagnostic printed by the actor's own code —
known repair candidate (36, 14) current 8 target 9 via two clicks if still 8.
the handover channel was the actor's print(), not the skill store.
Verification note — the sleep counters disagree with each other
The sleep_index 17 immediately before round 27 (c-0131–c-0141, 11 calls) produced r190…r197, and
the sleep_index 18 immediately after produced r198…r204.
The "mined 6" in the briefing's last line, the sidecar's 8 admitted records, and sleep 17's 4 miner calls do not agree —
the counters' meaning cannot be settled from these two files, so we typeset the string as-is and draw no derived interpretation.
Over the 20 rounds where a prediction existed (r3–25) the means are location 0.8208 and value 0.6864.
Five things this turn has no data for, and which we therefore do not invent
① the simulation result (sims=0) ② any prediction at all (n_predicted=0) ③ the expert sections
④ per-round α/β snapshots ⑤ hypothesis_ids and skill_version_ids (empty arrays)
From the exhaustive ledger sweep — five items that narrow this deck's own claims
Of the ledger's 95 entries, this deck had incorporated 9. Below are the five omitted ones that change how the
headline should be read. Every figure was recomputed from the traces.
The missing cell of the 2×2 — sixsix. 90 rounds, 247 actions, 4/6,
RHAE 17.9, simulation hard-disabled (sims 0), E3 gate ON (that commit had no disable flag).
Even with the gate on it batched at 2.72 clicks per round at the wall —
a natural experiment showing that the gate only bites through simulate.
This is not a refutation of "simulation is free exploration": the two sims-0 runs score
17.9 and 19.7 while C3 with sims 41 scores 40.9, which is consistent the other way. n=1.
The scope of the axis-1 "PASS". best_f1 0.813 comes from
wm_fidelity.jsonl and scores mechanics only. Of the winning run's 346 records,
92.4% of the 132 prose records (strategy 71 + metathinking 61) have zero evidence —
74 sit at credence 0.500 and 49 at 0.250, exactly their birth priors.
So it is not "one of four axes is healthy" but that axis covers only one of four kinds.
C3's scoring architecture is not today's. The C3 commit (3879ed5) had
none of the fold() single gate, V = credence + λ·f,
adaptive_lambda, EVENT_EVIDENCE_CAP or PROMPT_THIN.
The version that scored RHAE 40.9 did not contain the architecture this deck audits in §03–§05.
"Reproduce C3" and "validate this loop" are different experiments.
Sourced from the 2026-07-26 ledger; not re-audited against git this session.
The C3 replay is IDENTICAL. docs/reports/c3-action-replay.json:
52/52 rounds, 174/174 actions, no first divergence, 6/6 reproduced, 0 LLM calls.
When any C3-versus-today comparison meets the objection "maybe the environment changed",
this is the only licence we have.
The scope of the transfer positive — which half actually transfers. The bundle's +1 level in §05 is real, but
the same program lost nothing across three seeds with executable rollout switched off:
seed 1 FULL 2 → TEXT 3 · seed 2 2→2 · seed 3 1 → TEXT 2.
What transfers is the briefed text, not the executable code. n=1 per cell.
01
The loop: act by day, mine while asleep, and update belief in exactly one place
how it works
fold() is the single α/β write point mandated by constitution §2 (ttso/sleep/evaluate.py:78).
Five skill kinds: mechanic · wincond · strategy · metathinking · plan (skills.py:78).
Belief is credence = α/(α+β); ranking uses V = credence + λ·f
(f is recomputed from scratch each sleep and never mixes into credence).
The fifth kind, plan (added 2026-07-18), has 0 records in every run across both games. Diagnosis in §3 and §8.
02
How to read the numbers: RHAE falls with the square of actions, and simulation is free
how to read the numbers
Bars = actions/round · each ■ = one level cleared (of 6) · right = RHAE and the run's total sims.
RHAE 0 means zero levels cleared. Every row is n=1 (seed 0). Only ls20a is a different game (ls20).
sixsix ran with simulation hard-off (TTSO_DISABLE_SIMULATE=1) and the E3 gate on,
reaching 4 levels in 90R/247a — the second-best record under the current architecture, with zero simulations (git 8e07f09 · fork_dependence 0).
simulate is free — and that is all that has been measured
simulate(plan) does not increment game.actions.
What has been measured is only that it spends no action budget.
The observed correlation between simulation use and RHAE is absent or negative:
bwsvfull 3→19.7 · sixsix 0→17.9 · noE3full 0→16.5.
The high-simulation wall runs (cWall 6 · eWall 8 · svgate 9) are all 1.00 a/r and 0 levels.
The third cell of the 2×2 — the gate binds only when simulate is callable.
sixsix had the gate ON and still batched 35 times at the wall (2.74 clicks/round).
A 2026-07-16 commit pinned "cancel all remaining clicks when simulation and reality diverge"
into namespace.py:378-394. C3 predates that code.
C3's win predates the scoring architecture under audit here.
EVENT_EVIDENCE_CAP and PROMPT_THIN are
all absent (source checked 07-31).
RHAE 40.9 is not a score this loop produced — "reproduce C3" and "validate this loop" are different experiments.
The environment is exonerated. Replaying C3's action sequence today gives verdict: IDENTICAL —
52/52 rounds, 174/174 actions, no first_divergence, all six clears reproduced, final WIN.
docs/reports/c3-action-replay.json · 0 LLM calls. Every C3-versus-today comparison rests on this one artifact.
The full run table (8 rows) + the per-level RHAE arithmetic + the five quantities in a trace
run
R
levels
a/r
batch‡
value-agree
sims
best_f1
USED f1
RHAE
cWall
8
0
1.00
0
0.018
6
-
-
0
noE3wall
10
0
2.90
5
0.018
0
-
-
0
bw
10
0
1.70
1
0.000
0
-
-
0
bwsv
10
0
1.60
1
1.000
0
0.998
0.790
0
bwsvfull
59
6
3.85
43
0.71*
3
0.813
0.267
19.7
sixsix
90
4
2.74
37
-
0
-
-
17.9
noE3full
60
4
3.43
30
0.471†
0
-
-
16.5
ls20a
40
0
1.00
0
0.975
0
0.832
0.328
0
* Estimator-dependent: value-agree(bwsvfull) = 1 − Σ(wrong)/Σ(pred∧obs) = 0.71.
This differs from the per-round mean, so it is always printed together with its formula.
† Provisional — not recomputable (wm_fidelity.jsonl starts at bwsv). sixsix is unrecorded, hence "-".
‡batch = a round committing 3 or more actions. Every row is n=1 (seed 0).
level (weight)
baseline
C3 spent
C3 contrib.
bwsvfull spent
bwsvfull contrib.
1 (×1)
15
4
115.0 (capped)
16
87.9
2 (×2)
7
7
100.0
20
12.25
3 (×3)
15
14
114.8
51
8.7
4 (×4)
16
37
18.7
26
37.9
5 (×5)
21
58
13.1
65
10.4
6 (×6)
17
54
9.9
49
12.0
weighted mean →
RHAE 40.9
RHAE 19.7
ft09 baseline [15, 7, 15, 16, 21, 17]. Where the actions were spent changes the score by a factor of two.
The five quantities in a trace — HYPOTHESIS (a falsifiable claim carrying [rN] citations) ·
WHY (hard-capped at 300 chars in the log, cut mid-sentence) ·
EXPECT (the predicted diff) · action · sims.
03
Component ledger: nine parts, each with its defect, and “did the 6/6 use it?”
component ledger — centrepiece
actor prompt (E3 gate)fixed+validated
briefing renderlanded+unvalidated
skill miningunfixed
refineunfixed
ledger — penaltyfixed+validated
ledger — rewardfixed+validated
selectionunfixed · anti-contributing
plan searchunfixed · 0 records
control triggersunfixed
Three contribute measurably nothing (refine · plan search · the late-run briefing); one contributes negatively (selection).
Click a row to expand its defect, isolating pair, “did the 6/6 use it?”, and the prior-work counterpart
(references/schema.html).
actor prompt (E3 gate)ttso/auto/prompt.py:209–214the 6/6 won with the gate deleted (3.85 a/r)fixed+validated
defect
A sentence forcing the model to lock a rule by simulation before any dense commit. With it on, the run sticks at exactly 1.00 action per round → score bankruptcy at the wall. A commit bisection (07-27) pinned it to this sentence from 07-17.
change (when)
TTSO_NO_E3_GATE=1 — delete the sentence (2026-07-27, from the bw family on). Movement: a/r 1.00→2.90 · batches 0→5 · sims 6→0.
two cells of the 2×2
cWall (ON) vs noE3wall (OFF) — same wall, bundle and seed 0; n=1 each. This is not full isolation: the gate binds only when simulate is callable. The third cell, sixsix (gate ON, simulation hard-off), batched 35 times at the wall at 2.74 clicks/round, reaching 4 levels / RHAE 17.9.
did the 6/6 use it?
What contributed was not the gate but its deletion. Side effect: simulation collapsed to 3 uses (the §8 advisory arm targets this).
prior work
Schema gets its density from certification — run_bfs plans are consumed in batches by commit_actions (schema.html:369).
briefing renderttso/sleep/wake.py:224 · render :397no — it won with the expert sections absent for 36 roundslanded+unvalidated
defect
memory_materials has no cap on item count and renders above the truncation ladder, so cap_chars=8000 cuts every section below it. In bwsvfull: CONSENSUS 0/59 · OTHER SKILLS last at r6 · WORLD MODEL and WIN-CONDITION last at r23 · MEMORY alone through r59.
change (when)
_MEMORY_KEEP=2 (wake.py:221, 07-29). No isolating pair — no run exists after the fix.
did the 6/6 use it?
From r24 on, all the actor received was MEMORY and the hypothesis ledger. The late run proceeded on in-context reasoning with no expert sections.
prior work
Schema's memory is the world_model.py, notes.md and Timeline files themselves — there is no briefing re-rendered under a cap, so truncation is not an available failure mode (schema.html:371).
skill miningttso/sleep/orchestrator.py:3096 · :3295half — the rules were good (0.813) but never reached the actionsunfixed
defect
Quality is the only one of four axes that passes (0.813 / 0.832). Against that: (a) duplication — 4 duplicate code groups (max 6) / 3 (max 19); (b) ungrounded mining — in ls20a, hypotheses about an ACTION5 the game lacks appear in 19 of 40 briefings. The source is the base prompt's interface list, not the bundle (§6).
change (when)
None. Isolating pair bwsvfull vs ls20a — same code, same grade and same defect across two games.
did the 6/6 use it?
The best rule scored 0.813, but retrieval collapsed and the value actually used was 0.267. Good ore, closed mine.
prior work
theorize repairs a single program in place — it does not mine a heap of candidate records (schema.html:367).
refinettso/sleep/orchestrator.py:1497 → defect at :1360no — 0 of 244 records ever reached version 2unfixed
defect
Proximate cause (source confirmed 07-30):_with_code() at :1360 returns a new Record instead of calling set_code(), so every accepted refinement is stored as a sibling. The only set_code call sites are :1267 and :1335; the refine path is :1497.
change (when)
None (diagnosis complete only).
did the 6/6 use it?
No. bwsvfull 0/244 · ls20a 0/124 · noE3full 0/346. A measurable non-contribution, and the reason duplicate families block consensus in plan search.
prior work
theorize: "fixing the existing program, not stacking a new record beside it" — precisely the anti-pattern of _with_code()'s sibling storage (schema.html:367).
scoring ledger — penaltyttso/sleep/evaluate.py:78 (fold)yes — it was on (value-agree 0.71*)fixed+validated
defect
_error_cells keys by cell, so a wrong value folds into the same set as a MISSED cell → saved=0, harmed=0. The wrong-palette r15 (F1 0.018) held the top slot at credence 0.90 for two weeks while the correct r45 (0.983) stayed second by 0.0071, permanently.
change (when)
TTSO_WRONGVALUE_HARM=1 (2026-07-27).
co-fix pair (not isolation)
noE3wall (neither fix) → bw (penalty only) → bwsv (both). With penalty alone, bw gives value-agree 0.000 — the move from 0.018 to 1.000 is the two fixes acting together. Same wall, seed 0, n=1 each.
did the 6/6 use it?
It was on. Over the full run value-agree settles at 0.71 — each new level keeps introducing a new palette.
prior work
certify (run_backtest) replays the entire history as a binary check — with no partial-credit ledger, there is nowhere for a wrong-value fold to occur (schema.html:368).
scoring ledger — rewardttso/sleep/judge.py (_union_predicted_diff)yes — it was onfixed+validated
defect
Scoring by marginal contribution against the sibling union means a correct rule standing beside a correct sibling gets (0,0). The replay predicts that fixing only the penalty hands the top slot to r9 — a rule applicable to 0 of that wall's 18 transitions.
change (when)
TTSO_STANDALONE_SAVED=1 (07-27). Isolating pair bw vs bwsv, same wall, seed 0, n=1 each.
what moved
value-agree 0.000 → 1.000 · replay top-1 from r9 (applicable 0/18) to r78 (18/18, mean F1 0.937).
did the 6/6 use it?
It was on. But even with the ledger corrected, retrieval never consumed that correctness.
prior work
With a single program, marginal-contribution-against-siblings scoring does not exist as a concept (schema.html:368).
selection (retrieval and ranking)ttso/sleep/evaluate.py:171 (decision_value)anti-contributing — corr −0.305, top = best 0/59unfixed
defect
corr(top_credence, realized F1) = −0.305 — the more confident, the more wrong. The top-ranked rule is the round's best in 0 of 59 cases. USED 0.267 vs best 0.813, with 67.4% of commits silent (no prediction). The selection site never asks the when(board) that constitution §5 requires; it just takes max(credence).
change (when)
None.
isolating pair
bwsvfull vs ls20a — ls20a gives +0.249 with top = best in 3/39. The sign flips between games, so the ranking cannot be said to carry signal.
did the 6/6 use it?
It used it, and lost by doing so — the only anti-contributing row in this ledger.
prior work
Keeping exactly one certified program means there is no candidate pool to retrieve or rank, which structurally removes uncalibrated credence (schema.html:288).
plan searchttso/sleep/orchestrator.py:234 (mine_plan)no — it has never produced output (0 records)unfixed
defect
0 plan records in every run across both games. Binding reasons over bwsvfull's 39 sleeps: RESOURCE_LIMIT 22 · CONSENSUS_BLOCKED 11 · EDGE_STARVED_NO_MODEL 4 · SATURATED 1 · EXHAUSTED 1 — the search dies on budget or consensus before it can emit.
change (when)
None (the loosening arm is in §8).
did the 6/6 use it?
No. ft09 is a click game, so batching worked without plans — ls20 exposes this absence without anaesthetic (§6).
prior work
plan (run_bfs) searches inside a certified program at zero real cost — nothing binds it before emission (schema.html:369).
control triggersttso/core/control.py:195 · :334it slept — but 39 of 39 times for the same reason ("wincond")unfixed
defect
39 of 39 sleep triggers are "wincond" and 0 are "surprise" — the expectation-violation channel is entirely silent. Sleep accounts for 82% of LLM calls (320 of 390, recomputed from the finished artifacts). Non-LLM compute per round grows from 1.5 to 116 minutes (O(n²) in rule count × buffer).
change (when)
None.
did the 6/6 use it?
Sleep ran, but surprise never once called it — "my prediction was wrong" is not wired into the control path.
prior work
execute: "One mismatch discards the entire remaining plan." — expectation violation is structurally wired into control (schema.html:370).
04
The four axes: levels cleared cannot score this loop, so we measured its four functions directly
Scope warning — this PASS scores one kind, mechanic, and nothing else.
Of the 346 records in the 6/6 bundle, the prose kinds (strategy 71 + metathinking 61 = 132) include 122 with zero evidence,
74 still at their birth value of 0.500 and 49 still at 0.250. Of the 70 mechanics, 8 are unscored.
38% of the whole store never touched the scoring machinery, and 91/346 (26%) are retired.
2 improvementdoes sleep repair skills?
0 of 244 ever past version 1 (ft09) · 0 of 124 (ls20a) · 0 of 346 (noE3full)
3 judgingdoes credence track realized accuracy?
corr −0.305 (gauge floor: negative) · top = best 0/59 (ft09) · +0.249 · 3/39 (ls20a)
4 retrievalis the right rule reached when it is needed?
USED 0.267 vs best 0.813 (dotted) · silent 67.4% (ft09) · 0.328 vs 0.832 · 62.5% (ls20a)
The run won with three of the four functions not working — that is the finding, not a bug in the script. n=1 per run.
best_f1 vs USED f1 — the retrieval gap
How to read this.best_f1 is the best prediction F1 that
any rule in the library could have achieved on that round's actual transition (predicted cells and values vs the cells and values the engine really changed).
USED f1 is the same F1 for the single rule actually handed to the actor. The gap between them is the point of this chart —
the rule existed and was not used.
○ = that round's best_f1 · ● = USED · the vertical line is the gap.
After r22, USED is 0 almost throughout — commit after commit with no prediction, while a 0.98 rule sits in the library.
Data: runs/bwsvfull/g2-on-ft09-s0-bwsvfull/wm_fidelity.jsonl.
Briefing spectrogram — what the actor actually received (bwsvfull, 59R)
A filled cell means that section header was present in that round's briefing (runs/S5/bwsvfull.jsonl).
After the r23→r24 cliff, only MEMORY remains. CONSENSUS is 0/59 — it was never rendered once.
Cause: uncapped items in wake.py memory_materials plus the cap_chars=8000 truncation ladder (§3).
The proximate cause of axis 2 — orchestrator.py:1360
_with_code()returns a new Record instead of calling
set_code() (source confirmed 2026-07-30).
So every accepted refinement becomes a sibling record, never a version 2.
0/244 was not a matter of probability; it was structurally impossible.
How prior work designs these four failures out is in the comparison table in §05b;
the six Schema fields appear byte-exact in §7.
"We kept the half of Schema's idea that prevents damage and lost the half
that makes certification worth earning."
05
Claims we killed: a team catching itself with its own artifacts
what we refuted
First — one positive result that has a control (2026-07-25)
The bundle is worth exactly one level on every seed tested.
Fresh controls with no bundle ran 30 leak-free rounds to completion on two new seeds and reached
1 level each (runs/S5/freshs1.jsonl, freshs2.jsonl).
The bundle-seeded pair at the same seeds reached 2 levels each. The margin is the same at seed 0
(fresh 2 and 1 vs seeded 3, 3, 3, 3). The memorisation reading is rejected.
Scope — the half that transfers is the briefed text, not the executable rollout.
Phase 1 of the same program measured no loss across 3 of 3 paired seeds with runtime rollout switched off:
TEXT ≥ FULL in 3 of 3, strictly greater in 2 of them. Briefings byte-identical, 30 rounds each, n=1 per cell.
So this positive is evidence for text that transfers, not for "executable skills".
It is also no basis for crediting this 6/6 to the skill loop — that run's expert sections were empty for 36 rounds straight.
refuting others"five sentences cause the wall lock" — only three were cleared by measurement; two were the culprit
refuting others"the presence of simulate causes 1-click rounds" — unchanged with it off
refuting others"seeding accelerates level 0" — the placebo bundle cleared at r5; retracted
self-retraction · ledger"41 of 41 probe rounds were single-action" — the regex missed one form; retracted
self-retraction · ledger"the coverage arm died four times" — those deaths never happened
self-retraction · ledger"3 levels is a project first" — C3 already reached 4 within 30 rounds
All six rows: the claim · how it died · what it saved
claim
how it died
what it saved
The 1-click lock at the wall is caused by these five sentences in the prompt
Only three of the five (protocol step (iii), COVERAGE PROBE framing, ACTION MANDATE) were cleared by measurement. The other two were the E3 gate sentence itself, struck from the candidate list by reading — "the text permits batching" and "nobody cites it". A commit bisection overturned that dismissal: it binds even when uncited
What this saved was not five acquittals but catching that we had deleted the culprit from the candidate list. A sentence is not acquitted by reading it
The mere existence of the simulate tool causes 1-click rounds
A direct intervention, nosimw (TTSO_DISABLE_SIMULATE=1, control cWall) — still 1 click with it off
Removing the only free exploration channel after misidentifying it as the culprit
The seeded bundle accelerated the level-0 clear
A matched placebo bundle (decoy_bundle.py — same count, kinds and volume, unrelated domain) cleared level 0 at r5. Rescoring: clear rounds scatter from 4 to 29, and the seeded run's 11 is exactly the median → the acceleration claim is retracted (the higher-level-reach claim survives)
Selling n=1 variance as a knowledge effect
[self-retraction · ledger 07-26] "all 41 probe rounds were single-action"
A dedicated extractor, built under an instruction to report mismatches, failed to reproduce the figure; we verified the failure before accepting it. The regex caught only parenthesised click forms and missed the bare try ACTION3 form — and those were exactly the batched rounds. Corrected: probe rounds 26/20/9, compliance 7 of 55. The surviving conclusion is sharper — click form 27/27 single (max 1) vs bare form 22/28 (max 6), a form-conditional effect (recorded in the ledger; not re-derived this session)
An arm that would have deleted the wrong half of a prompt line. This incident produced the byte-exact quoting rule in §7
[self-retraction · ledger 07-23] "the coverage arm died four times"
The trace re-read four times, e9c_p1_coverage_s1.jsonl, carried the run_id of the first attempt (p1cov1b). The relaunch directories 1c/1d/1e do not exist — run_game.py creates the directory before any LLM call
Four deaths that never happened. The rule: a launch is confirmed when its own directory appears and its log grows
[self-retraction · ledger 07-24] "3 levels is a project first"
A scope error. C3_fullgame_prob_s0.jsonl — the leak-free 6-level WIN of 07-10 had already reached 4 levels within 30 rounds. We scanned only runs/S5/ and called it "the project's history"
The entire "this is the project best" narrative — wrong by a whole game
The pattern is one thing: before an interesting observation becomes a provisional conclusion, run the cheapest
experiment that could kill it. Three of the six rows above refuted others; three refuted us.
05b
Prior work predicts each of our four failures — compared against Schema
The 98.98% reported by Schema (Impossible Research) is self-reported, on the public set only,
with a Fable-5 fallback ensemble, and independently unverified.
Their code and prompts are not public.
What follows is not a claim about the cause of that score, but the observation that the failure modes
their design removes coincide with the four failures we measured.
stage
Schema
ours
our measurement
theorize
edits step()in place — a single program
_with_code creates a sibling Record orchestrator.py:1360
0 / 244 revised
certify
run_backtest — replays the whole history, binary pass/fail
partial-credit F1 that does not gate the commit
corr −0.305 · top = best 0/59
plan
run_bfs searches inside the certified program at zero real cost
the sleep BFS demands unanimity across all mechanics
0 plan records (both games)
commit
the only path, consuming a certified queue in batches
the actor chooses from a briefing reassembled each round
67.4% silent commits
memory
world_model.py + notes.md — the files are the weights
244 records, reassembled each round under an 8000-character cap
CONSENSUS in 0/59 briefings
representation
solves state grounding and mechanism discovery together
mechanics predict cell diffs on the raw 64×64 grid — the representation is fixed
triggers 39/39 wincond · surprise 0
The verbatim blog quote for each row, alongside our own round text, is in
references/schema.html.
The game they analysed is our game — FT09
Fable suspects the representation first. When the board satisfied the goal logic yet made no progress, it tested
“can these clues themselves be manipulated?”, found the lights-out cross button, and cleared 11 actions later.
Opus keeps repairing the goal. Facing the same contradiction, it tested alternative goal explanations for
about 240 more actions before finding the same mechanism at step 287. In the blog's words,
“the 247-action gap is a cost of discovery, not a difference in the final mechanism”.
Our run took the Opus path. It stacked 108 wincond versions (of 244 rows) and its
sleep triggers are wincond in 39 of 39 cases.
It repaired the goal instead of suspecting the representation — the behavioural face of the collapse in the
judging and retrieval axes.
06
ls20 is not a failure — it strips away what ft09 was covering up
transfer — same disease, no anaesthetic
The defects appear at the same magnitude in both games.
improvement 0/244 vs 0/124 · retrieval gap 0.813→0.267 vs 0.832→0.328 · silent 67.4% vs 62.5%.
What differs is not the disease but the painkiller. ft09 is a click game, so each round could batch six independent choices.
ls20 is a movement game (ACTION1–4 + RESET, no ACTION6), so it is path-dependent and demands
the plan machinery ft09 let us skip — the machinery with 0 records in every run.
The ACTION5 phantom — an action ls20 does not have, circulating through the system.
The hypothesis rode in 19 of 40 briefings, appeared in 11 of 40 actor reasonings, and the code wrote a submit for it in 14 rounds
(all 15 such submits were availability-guarded, and none reached the engine).
Its entry point is not the bundle but the interface list in the base prompt — mining forms hypotheses from the
prompt surface, not only from observation. Data: runs/S5/ls20a.jsonl · runs/ls20a/g2-on-ls20-s0-ls20a/llm_calls.jsonl.
A third cause — a scale mismatch between goal and action. The mined win-condition targets sit
10–15 cells away on the board, while one ls20 move changes 52 cells. Whichever button it presses, it overshoots.
start/best_distance are null in the record for EXHAUSTED rows, so no distance figures are printed.
runs/S5/ls20a.jsonl · round 33 — the phantom in both hypothesis and whyverbatim
hypothesisHYPOTHESIS: The live terminal route is still the plus-activation target [r87]: navigate the 5x5 two-band actor until its center coincides with the compact white plus marker, then use ACTION5 there rather than treating the shaft/top alcove as terminal [r54].
whyThe clean ACTION3 primitive is highly supported [r39]/[r34], and ACTION2 is modeled by the repaired movement/panel family [r83]/[r78]; so the safest next commit is the single navigation step that reduces the actor-to-plus offset, or ACTION5 if already centered.
How to read this: the rule citations ([r87], [r54], [r39]…) are working correctly.
Run ungrounded raw material through a diligent pipeline and you get a diligent phantom.
07
The machine, verbatim
verbatim · byte-exact
Every quote is byte-exact, with its trace path and round.
why is hard-capped at 300 characters in the log, so it breaks mid-sentence
([log-truncated]; we do not complete it).
The ```python at the end of some expect fields is byte-present in the log, so it is not stripped either.
C3's rhythm — a free observation round, then a batch (8 zero-click observation rounds of 52) · 2 quotes
This rhythm is now close to structurally impossible. The ACTION MANDATE that landed on 2026-07-16, six days after C3
(ttso/auto/loop.py:348–366), challenges any no-action round.
verbatim —
"Every round MUST commit at least ONE submit_action(...): use the diagnostics above to pick the
single most informative action"
Recomputed — of 1,372 v2-schema S5 rounds, 2 (0.15%) took no action; C3's rate was 8/52 (15.4%).
A 100× difference, and because it is a harness rule rather than a prompt, the advisory arm in §8 cannot reach it.
hypothesisHYPOTHESIS: Level 3 contains multiple embedded keys; each key’s center colour tells the colour for surrounding output tiles whose corresponding key entries are 0, extending [r9 0.50].
whyThe component summary shows multiple key-like blocks with centers 12 and 8, so exact slice inspection is the highest-value step before committing, per [r1/prim 0.50], [r2/prim 0.50], and [r5/prim 0.50].
expectNo cells change because this is grid inspection only.
same trace · round 116-click batch · sims 1
hypothesisHYPOTHESIS: For each 12-centered key block, adjacent output tiles corresponding to 0 entries should be recoloured from 8 to 12, while 2-matched tiles stay 8.
whyThis extends the already successful key/zero strategy [r9 0.50] using the current key-center colour per R10 and [r5/prim 0.50], and avoids center-8 keys whose outputs may already be satisfied.
expectSix 6×6 output tiles change 8→12: four around the top 12-centered key at its NW, N, W, and S positions, plus the N and W positions around the bottom 12-centered key; the level may remain unfinished if the remaining bottom 12-key zeros are still needed.
action[["ACTION6", 22, 6], ["ACTION6", 30, 6], ["ACTION6", 22, 14], ["ACTION6", 30, 22], ["ACTION6", 30, 38], ["ACTION6", 22, 46]]
bwsvfull — promotion by in-context repair even after briefing starvation, plus the final round · 2 quotes
r26 is 6 clicks (levels==3); level 4 is reached at r29. r59 is the final round.
runs/S5/bwsvfull.jsonl · round 26verbatim
whyThe last turn showed every clicked 9 tile becomes 8, not 12, proving my answer-colour inference was wrong. Under global 0→8 / 2→9, exactly five repairs are needed: add the three missed zero-coded tiles and revert the two accidentally changed 2-coded tiles.
expectClicks at (39,17), (47,33), and (39,49) repaint those macro-tiles 9→8; clicks at (47,17) and (47,25) repaint the accidental 2-coded macro-tiles 8→9. After these five corrections, ACTION5 or the final click should advance levels_completed to 4.```python
runs/S5/bwsvfull.jsonl · round 59 — the final round, reaching 6/6 on a carry-chain modelverbatim
hypothesisHYPOTHESIS: R58’s vertical carry model is now the best explanation: a centre ACTION6 click toggles the clicked 6×6 editable macrotile and, when present, the same-column macrotile one row above, so a bad state must be carried upward until it reaches a row where no further answer macrotile is toggled. This refines [r216] without changing the [r175] / Level-4 target decoding.
whyThe last six-click trace exactly moved the x=28 bad tile upward through y=38→30→22→14 and then removed it, and began the same process at x=36. I will audit the current bad macrotiles, then continue the carry-chain clicks bottom-to-top for the remaining columns rather than undoing temporary mismatch [log-truncated]
The gate's two faces — same wall, ON (single probe) vs OFF (6-click batch) · 2 quotes
runs/S5/cWall.jsonl · round 1 — gate ON1 action · sims 0 this round (6 for the run)
hypothesisHYPOTHESIS: The grey/white/orange inset panels are interactive keys; clicking the small orange marker inside one key should reveal or apply that key’s rule.
whyI do not yet have a confident world-model rule, so per the one-probe guard I should take exactly one cheap observational probe rather than dense-click the board.
expectOne local key/panel or its associated red-cell region changes; if nothing changes, this click location/rule is refuted and I will use the observed mismatch next turn.```python
action[["ACTION6", 62, 6]]
hypothesisHYPOTHESIS: Per [r50] with [r3], the union of 0-coded neighbor positions from the four clue panels are target repaint tiles; ACTION6 repaints each clicked homogeneous 8 tile to 12 per [r45].
whyThis is structurally different from the refuted single-column/partial-consensus clear claims: it follows all local 0 clues rather than expecting these six alone to clear.
expectEach click changes exactly its 6x6 macro-tile from 8 to 12: bboxes x=20..25,y=20..25; x=28..33,y=20..25; x=36..41,y=20..25; x=44..49,y=20..25; x=20..25,y=36..41; x=36..41,y=36..41. No clear is assumed yet because one remaining union target may remain.
action[["ACTION6", 22, 22], ["ACTION6", 30, 22], ["ACTION6", 38, 22], ["ACTION6", 46, 22], ["ACTION6", 22, 38], ["ACTION6", 38, 38]]
theorize (line 367)Edits the step(state,action) program itself, in place, to explain the observed violation — fixing the existing program, not stacking a new record beside it.
certify / run_backtest (line 368)Replays every Timeline transition recorded so far through the new program via run_backtest. A single mismatch pinpoints the bug.
plan / run_bfs + commit_actions (line 369)Searches for an action sequence to the goal with run_bfs inside the certified program — the engine is never touched, so real cost is zero. commit_actions is the only action channel.
execute (line 370)Checks every queued click against its own prediction. One mismatch discards the entire remaining plan.
record / Timeline (line 371)Logs every step to the append-only Timeline. That log is what the next certify must replay — the only ground truth.
record (data-tip, line 288)Append-only Timeline. This log is what the next certify must replay.
08
What comes next
each item carries its refutation condition up front
seeds 1–2 — without seeds 1 and 2 the 6/6 is an anecdote (n=1)
advisory plan-abort arm — warn instead of cancel, to try to recover C3's simulate-plus-batch regime
fix refine — make orchestrator.py:1360 call set_code()
loosen plan search — release the budget and consensus bindings (RESOURCE_LIMIT 22 · CONSENSUS_BLOCKED 11)
a validation run for the briefing fix — _MEMORY_KEEP=2, confirming the r23 cliff is gone
revisit the ACTION MANDATE — no-action rounds at 0.15% vs C3's 15.4%; a harness rule, not a prompt, so it needs its own arm
the O(n²) scoring cost — a tax growing from 1.5 to 116 minutes per round
in flight — PRELIMINARY · still running · n=1 · seed 0
The combined run allfix (ft09 · ledger fixes + advisory abort + applicable-top ·
E3 gate ON) — runs/S5/allfix.jsonl, read on 2026-07-31.
17 rounds · 51 actions (3.00 a/r) · level 3 at r14 · simulate ≥1 in 17 of 17 rounds · 8 batched rounds.
Simulation and batching are coexisting.
Three of the four axes moved — axis 1 0.813→0.855 · axis 3 corr
−0.305→+0.588 (top = best 3/18) · axis 4 USED 0.267→0.505, silent 67.4%→33.3%.
Axis 2 is unchanged at 0 of 55.
This arm bundles four changes at once, so it isolates nothing.
The run is unfinished and there is only one seed.
All seven items: why · what would refute it
item
why
what would refute it
seeds 1–2 (bwsvfull configuration unchanged)
Without seeds 1 and 2 the 6/6 is an anecdote. Every bwsvfull cell in this deck is n=1
Either seed failing to reach 6/6 → the "wins reproducibly" claim is rejected and demoted to seed luck
advisory plan-abort arm (TTSO_ABORT_ADVISORY=1, running · prereg 07-30)
The abort pin made simulation and batching mutually exclusive. Does warning alone recover the C3 regime? Control: svgate (sims 9/10, 1.00 a/r)
a/r < 2.0 through wall round 5 · simulate = 0 · useless post-divergence clicks exceeding the control by more than 20 points
fix refine — make :1360 call set_code()
Axis 2's 0/244 was structurally impossible. This makes constitution §5's "improve the same skill repeatedly" possible for the first time
revised_share still ≈ 0 after the fix → sibling storage was not the binding constraint
loosen plan search
Bindings across 39 sleeps: RESOURCE_LIMIT 22 · CONSENSUS_BLOCKED 11. Exactly the machinery ls20 demands (§6)
Still 0 plan records after loosening → the binding is elsewhere (EDGE_STARVED, etc.)
a validation run for the briefing fix (_MEMORY_KEEP=2, 07-29)
The only landed+unvalidated item in §3. The r23 cliff should disappear
CONSENSUS/WORLD MODEL still missing in the fixed run → item count was not the cause
revisit the ACTION MANDATE (loop.py:348–366, 07-16)
Today's code effectively forbids C3's rhythm (8/52 observation rounds) — 2 no-action rounds out of 1,372. It is a harness rule, so a prompt arm cannot reach it
If no-action rounds rise without RHAE rising, observation rounds were not the cause of C3's score
the O(n²) scoring cost
Non-LLM compute per round grows 1.5 → 116 minutes (rule count × buffer). A tax that makes seed replication expensive
If the growth term is not rules×buffer the diagnosis is wrong; if the four axes regress after capping, the cap discarded information