Chapter 15

A fifth confirmation for the brightness shortcut, a false alarm that wasn't one, and a 144-point riddle still unanswered

Prerequisites: Chapters 1 to 14.

Beginner track

Where we left off

Chapter 14 ended on a decision: the heaviest option on Chapter 11's menu (building a second,

slower world model whose job is to "find a forest" — an idea nicknamed H-JEPA) was now

justified by real evidence rather than by a merely plausible argument, because even the most

direct and most careful retraining of the existing model had failed to cleanly fix the brightness

shortcut. Before starting that expensive piece of work, this chapter covers three things that

happened just before and just after that decision: a re-reading that avoided building a useless

tool, one last cheap test that closed the door for good, and two separate findings from re-running

a Chapter 13 mechanism at larger scale.

A re-reading before building anything

One idea, already floated but never tested, was to hand-build a small vision tool that would spot

tree foliage by its distinctive colouring (the greens and browns typical of a trunk and its

leaves) instead of using the project's broken compass. Before spending time building it, someone

calmly re-read everything the previous chapters had already established. The reasoning: CLIP, in

Chapter 14, is a giant model trained specifically to resist lighting changes across hundreds of

millions of photos — and it still hit the same shortcut. A home-made tool, far simpler, was

therefore very likely to do nothing but repeat the same lesson a fifth time, at a real cost in

work, without producing new information. Recommendation: do not build it, and invest instead in

the only two project mechanisms that have already produced real results without relying on a

direct visual judgement — the memory of visited places (Chapter 12) and longer execution of a

good plan (Chapter 8).

One last cheap test, all the same

A narrower and far less expensive idea was nonetheless tested directly, because it reused a tool

already built and already validated: the small drowning detector from Chapter 13 works by

comparing colour ratios (blue against red and green) rather than raw values — which is

precisely what lets it spot a drowning as well by day as by night. Could that same trick, applied

no longer to the whole screen but to each small patch of the image taken separately, spot tree

foliage in the same way, independently of how bright the scene is?

The test reused exactly the same 251 frames already used in every previous diagnostic

(Chapters 11 and 14), with the same hand-placed labels ("tree close" or "no tree").

The result: half good, and worse than ever on the other half

The first half of the test passes: this patch-by-patch calculation does separate frames with a

nearby tree from frames without one — a genuinely correct directional result, within the expected

range.

But the second half — checking that this score is not just a roundabout way of measuring

brightness — fails almost as badly as the worst result seen so far, CLIP's in Chapter 14. On the

small hand-labelled set, the correlation with brightness is nearly as strong, in the opposite

direction. And crucially, this time the problem is not confined to the small test set: it shows up

broadly, across all 251 frames, on the original tree-chopping environment as much as on the

crafting one.

The clearest explanation of the whole investigation

The colour-ratio trick works for water because the water's tint covers the entire screen in

the same way — exactly the kind of global shift that dividing colours by one another cancels out.

But the problem here is not a global shift: it is that, in this game as in reality, dense

forests are by nature darker scenes, and open meadows brighter ones. That is not an artefact of

one particular calculation, it is a feature of the world the game imitates. No colour calculation,

however clever — learned, off-the-shelf, or hand-built to resist lighting changes — can

disentangle "this is dark" from "this is a forest" when, in the available data, the two are

almost the same thing.

This result closes, this time for good, the entire "maybe a cleverer colour calculation would fix

it" line. Five different ways of attacking it — a small learned module, that same module retrained

on other examples, an artificial variation of brightness during training, a giant off-the-shelf

model, and now this patch-by-patch calculation — have all hit the same wall. Fixing the compass

(option 1 on Chapter 11's menu) stays closed, and this time for a stronger reason than before: it

is not that no attempt has yet found the right setting, it is that this kind of fix has

structurally no chance of working on this particular problem.

Separately: the anti-drowning rescue re-run at scale

Chapter 13 left the anti-drowning rescue move with an encouraging verdict, but tested on only 6

runs. A much larger batch — 20 runs, combining Chapter 12's memory of visited places with

Chapter 13's corrected anti-drowning rescue — has now been executed, with a precise goal: does

that rescue still hold at this scale, and — the question left open until now — does cutting down

the drownings finally let the agent chop wood?

Drowning really is fixed at scale: 3 runs out of 20 end in a drowning (15%), against 12 out

of 20 (60%) in the very first batch from Chapter 12. Runs that go all the way through without

being cut short rise from 8 out of 20 (40%) to 12 out of 20 (60%). The rescue therefore holds, not

just on the 6 runs where it was validated, but at a much larger scale.

But chopping wood stays at zero: 0 logs out of 20, 0 planks out of 20 — even though more runs

now get a genuinely fair chance to look for a tree. This is not a significant step backwards from

the previous chapter (1 success out of 20) — the difference between 0 and 1 out of 20 tries says

nothing reliable at that sample size — but it confirms, once more, what was already established:

surviving longer and knowing how to search and approach effectively are two separate problems.

Fixing one did not automatically fix the other.

A lesson in method: a false alarm is not a real stop

The report accompanying this batch of 20 runs originally claimed the test had been interrupted by

a "serious infrastructure failure" after only 4 episodes. An independent check showed this was

false: the program driving these runs launches a separate Minecraft process for each episode,

one at a time. A passing technical incident on a single episode therefore never stops the program

orchestrating the whole batch — it simply moves on to the next episode. The raw logs confirm that

all 20 episodes ran from start to finish, without any intervention. The lesson taken away: an

error affecting a single episode in this harness is not the same thing as a failure that halts the

whole batch — you have to verify that the orchestrating program really did continue before

declaring a full stop.

The reward=144 riddle

A curious detail was already sitting in the logs of that same batch of tests, without having been

dug into: one episode had shown, just once, a reward of 144 — a figure far higher than anything

ever seen elsewhere in this campaign (a normal success is worth a reward of 9). The game program

was given a new observation tool, switchable at will, which now displays the maximum reached for

every inventory item over an episode, not just the wood and planks tracked so far. A new batch

of 12 runs was launched with that tool enabled, on the same configuration: reward of 0.000 on all

12 episodes, and the only item ever to appear in an inventory across the whole batch was

ordinary dirt (between 1 and 30 units per episode, picked up unintentionally while walking or

attacking) — an item that earns strictly no reward in this game. The original episode that had

shown 144 had already ended before this tool existed, so its exact state at that precise moment

remains unrecoverable. That figure never recurred across these 12 new attempts and remains, for

now, an isolated and unexplained event — parked as a documented curiosity, with no effect on the

campaign's conclusions, rather than pursued without a much larger sample.

What happens next

This chapter closes a long line of investigation (score fixes based on colour or brightness) while

separately delivering one solid piece of good news at scale (the anti-drowning rescue) and one

unresolved riddle that changes nothing about the main diagnosis. As always in this project: good

results and disappointing results are reported with the same precision, and nothing is dressed up

to look better than it is.

Expert track

Context

Chapter 14 concluded that the condition set for committing to candidate direction 3 from

Chapter 11's menu (hierarchical H-JEPA) was met by empirical evidence, not merely by a plausible

argument: even direct fine-tuning of ebwm.pt with photometric augmentation had produced only a

mixed result. This chapter covers attempt #15 (CLAUDE.md#Phase 5+; no corresponding entry in

docs/10coldstartengineering.md to date — a documentation gap flagged explicitly in CLAUDE.md

itself): a reassessment of the H-JEPA proposal, a narrow offline test that followed from it, and an

N=20 confirmation batch combining the mechanisms of Chapters 12-13.

Reassessing the H-JEPA proposal, without code

An Explorer proposal for literal H-JEPA had been submitted. Before any development, a cold

reassessment noted that CLIP (Chapter 14) — a 400M-image model built specifically to resist

photometric variation — had already failed the same dual gate that a hand-built hue/edge heuristic

would face. Consequently, building that heuristic was judged very likely to produce nothing but a

5th confirmation, at a real engineering cost, without new information — recommendation not to

build it. Complementary recommendation: the campaign's only two working mechanisms that do not

rest on a visual judgement (FrontierTracker, commit_length) are the better next investment,

rather than grafting more visual content bias onto them.

Narrow offline test: chrominance ratios per spatial tile

A more targeted and cheaper idea arising from that reassessment was tested directly:

mine_jepa/ebwm/hazard.py uses lighting-invariant channel ratios (not raw values) — a choice

that works for water because the underwater tint is a global, uniform cast across the whole frame.

Does that same trick work for foliage, computed per spatial tile rather than whole-frame?

scripts/diagnosechromatile_generalization.py, on the same 251-frame set and the same manual

labelling as every prior diagnostic (attempts #10, #14).

Result: MIXED, but the brightness gate fails almost as badly as CLIP's worst case.

  • Direction gate: PASSED (separation ratio 1.482, ≥ the 1.3 bar).
  • Brightness-independence gate: FAILED. r = -0.925 on the hand-labelled set (against -0.947

for CLIP — essentially tied for the campaign's worst, opposite sign); r = -0.585 across all 251

frames (treechop -0.748, obtainspawn -0.600, obtaincoverage -0.671) — a broad effect, not

confined to the small labelled set.

Interpretation, the sharpest of the campaign

Lesson: ratio normalisation removes GLOBAL brightness scaling exactly as designed (why it works

for water) — but it cannot remove a COMPOSITIONAL confound where the ground-truth labels

themselves correlate scene type with brightness (dark forests versus bright open fields is this

domain's actual scene composition, not an artefact of any one scoring mechanism). This means the

brightness confound is not fixable by ANY purely photometric single-frame feature — learned,

off-the-shelf, or hand-designed-invariant — without additional structure (multi-frame,

spatial/geometric, or a different modality entirely).

This definitively closes the "maybe a cleverer feature trick fixes it" line; candidate direction 1

from Chapter 11's menu stays closed, for a stronger reason than before.

N=20 confirmation batch: frontier + hazard combined, chop rate measured for the first time on this combination

configs/playcraftcommit4_hazard.yaml (Chapter 12's frontier search + attempt #13's corrected

anti-drowning rescue, Chapter 13) run at N=20.

Process note, corrected. The Tester dispatch's report claimed a "hard infrastructure failure"

halting the batch at episode 4 — false, independently verified: playminerlmulti.py launches

one Java/Malmo process per episode, so a transient Malmo state-machine error on a single episode

does not kill the orchestrator, which simply moves on to the next episode. The batch ran all 20

episodes end to end ("FINAL RESULTS — 20/20 episodes succeeded") without any intervention. Lesson:

a per-episode error in this harness is not the same as a batch-level failure — confirm the

orchestrator process itself before declaring a hard stop.

Drowning: 3/20 (15%), confirmed via real MineRLAgent0 drowned Malmo messages — down from

attempt #12's original baseline (12/20, 60%). Attempt #13's fix holds at N=20, not just at the N=6

where it was confirmed. Other early terminations (unrelated causes — fall, mob, and so on, outside

the scope of this fix): 5/20 (25%). Full-length ("fair-shot") episodes: 12/20 (60%), up from ~8/20

(40%) in attempt #12's original batch.

Chopping/crafting: 0/20 logs, 0/20 planks — despite more episodes getting a fair shot, no chops

this batch (against 1/20 for attempt #12). Not a significant regression at this N (a Fisher test

would not distinguish 0/20 from 1/20) — this campaign's usual small-N variance. Confirms the

standing diagnosis again: removing the drowning confound increases fair-shot episodes but does not

by itself convert into chopping — survival and search/approach effectiveness remain separate

problems.

The reward=144.000 anomaly — investigated, not reproduced, unresolved

playcraft.py gained an optional logging.fullinventory diagnostic (default off, bit-for-bit

unchanged when unset) that tracks and prints the maximum value reached for every inventory key

per episode, not just log/planks. A fresh N=12 batch with it enabled (same config) showed:

reward=0.000 on all 12 episodes, and the ONLY inventory item ever non-zero across the whole batch

was dirt (1-30 per episode, picked up incidentally while walking/attacking) — dirt is NOT in

the reward table (RewardForPossessingItem covers only log/planks/stick/crafting_table/

woodenpickaxe/cobblestone/furnace/stonepickaxe/ironore/ironingot/iron_pickaxe), so it earns

zero reward and is a red herring for the original mystery. The original episode's process had

already exited before this diagnostic existed, so its exact state is unrecoverable — the mechanism

that produced 144 did not recur across 12 fresh attempts and remains a one-off, uncharacterised

event. It affects no campaign conclusion (chop rate is what matters, and this is orthogonal to it)

— parked as a documented curiosity, not pursued absent a much larger sample.

Where this leaves the campaign

ebwm.pt and craftwmv4.pt remain untouched throughout this chapter: the per-tile chrominance

test is an offline diagnostic with no learned parameter; the N=20 confirmation batch and the

full_inventory diagnostic reuse already-trained/already-wired mechanisms without modifying any

main checkpoint.

References

This chapter rests on no new bibliographic reference: the per-tile chrominance test reuses the

colour heuristic already built and calibrated for attempt #13 (Chapter 13), with no underlying

published method; the N=20 confirmation batch and the reward=144 diagnostic are the project's own

empirical runs and instrumentation, not the application of an external reference.