Decision Tier

Case study Part 4 of 4 · how it learned

Push-downs: how the cascade learned

The rule that makes a cascade get cheaper over time: every escalation ends with a change in a lower tier, so the same situation is routine next time. Over six days the Melvor agent logged 65 resolved escalations, each with what happened and what changed. This page shows who caught each kind of problem, where the fix landed, and the case studies behind most of the code.

Updated October 14, 2026. The sixth day added 14 push-downs, from Township and Farming support and the long Fletching and Ranged grinds. They are in the totals and in the cards marked new. No tick crossed 0.7 that day (221 ticks): every catch came from Claude's audits or the owner's questions.

Code guards, planner, policies Jev decision model LLM Claude Human the owner Environment browser and window

One push-down, start to finish (new)

A real case from October 14: a category nobody had planned for. Nothing scored badly, so nothing escalated on its own. Claude noticed the wake rate, looked under the decisions, and the fix landed in code twice: once to add the category and once to tune it. Time runs down the page.

Who caught it

Of the 65 resolved escalations, here is which tier first noticed the problem:

Caught byCountWhat it looked like
LLM Claude's own audit48Claude read the plan's stated reasons, the outcome or the efficiency and found a gap; Jev's doubt was usually low
Jev a check above 0.74Doubt 0.74, 0.78, 0.84; novelty 0.71
Jev the watch band1Novelty 0.62 and doubt 0.58, rising across a restock; logged as its own kind of catch
Code a watcher or milestone trigger4Stale snapshots (twice) and a finished chapter (twice)
Human the owner's questions8"What should we be using money for?", "Why am I not wearing a Mithril Helmet?", "Is melee better for farming drops?", approving a death-risk policy, asking for Farming, Township and Agility support, "be super smart about it", "did farming not work out?", and "a dull butterknife? Do the math?"

Watch-band readings also show up inside Claude's audits: doubt rising to 0.64 in a buying loop, doubt flat at 0.60–0.63 on one pick, doubt 0.61 on a weak training recipe. Day six added doubt 0.68 on a 72,765-gold bow sale and 0.50 on cutting Maple for shafts with Mahogany banked. In all, sub-threshold Jev readings were part of the evidence in at least 5 of the 48 audit catches.

Where the fix landed

FixCountExamples
Code planner rules, policies, guards, verify, watcher57Batch sizing, restock sizing, risk guard, gear audit, measured target choice, weapon choice by seconds per kill, Township build plan
Jev's context playbook lines or milestones only7"Older arrow tiers are surplus once the better tier is worn"; a new milestone chapter
Human documentation and a request1Keep the game window visible

Two of the day-six code fixes also added a playbook line: one context change and one code change for the same escalation.

The decision model judges the options it is given. Most problems were in the options, so most fixes were in code.

When Jev caught it

Jev doubt 0.79→LLM→Code

The 2% bow

The planner's first source for an Oak Shortbow was a monster that drops it once in about 50 kills. Doubt vetoed it. Fix: drops at 10% or more per kill count as a source; rarer drops come only after buying and level training.

Jev doubt 0.78→LLM→Code

Selling what you're making

The surplus-gear policy wanted to sell Leather Chaps every tick while Crafting was making them for XP. Fix: surplus sales need a nearly full bank and skip whatever the current action produces.

Jev doubt 0.84→LLM→Code

A ring with a rare input

Crafting training picked the Gold Ruby Ring as the best XP per material, but its only gold source was a rare drop. Fix: rare-drop steps are tagged, and training skips recipes that need one. The next pick scored doubt 0.41 with no escalation.

Jev novelty 0.71→LLM→Playbook

First time an ammo tier retired

After moving to Steel Arrows, Jev chose to sell 203 Bronze Arrows and old boots, and flagged it as new. Approved, and the playbook gained "older tiers are surplus once the better tier is worn". Retiring old armor later: novelty 0.35, no escalation.

Jev doubt 0.74→LLM→Playbook

A large, correct sale

Selling 247 Leather Chaps made for XP at a nearly full bank. It was fine, and approved for 18,525 gold. One playbook line ("XP-crafted gear stacks are surplus") brought the next similar sale to 0.35.

When the watch band pointed at it

doubt 0.60–0.63 ×3→LLM→Playbook

A playbook that contradicted itself

Jev kept picking Cows for Ranged training and doubting it each time, below the line. A playbook line said to prefer magic monsters, but none were safe. Adding the safety condition took doubt to 0.51, then 0.46.

doubt rising to 0.64→LLM→Code

A buying loop

An ammo bootstrap kept buying 300 Feathers whenever arrows were low, but the real block was Arrowtips; Headless Arrows piled up to 525. Fix: the bootstrap also requires few Headless Arrows.

novelty 0.62 · doubt 0.58→LLM→Code

A full restock for a small remainder

With 2,575 XP left to a milestone, the planner set out to make a standard 1,000 arrows. Both readings rose across the refill. Fix: when the milestone needs fewer arrows than the standard restock, make what it needs (at least 50).

LLM audit→Code · doubt 0.68→Playbook

Gold is a milestone input (new)

Gold sat flat at 35,482 for over four hours while 2,033 unstrung training bows filled a bank slot, because sales waited for a nearly full bank. The Township build floor and the next Agility obstacle both waited on gold. Fix: sell a training-bow stack worth 10,000+ once the run making it stops, never a bow a milestone needs. Jev doubted the first 72,765-gold sale at 0.68; one playbook line ("unstrung training bows are the ranger's income") took the same sale to 0.32.

When the answer was computable (new)

Jev 0.35 · 0.27→Playbook 0.62 · 0.51→Code

A trade worth computing

Township tasks are one-time trades: give items, get gold and items. Jev's "do it now?" scores sat at 0.35 (one 1-gold fish for 5,000 gold) and 0.27 (125 gems for 37,500 in rewards). A playbook line explaining the trades lifted them to 0.62 and 0.51, still under the bar. The worth of a trade is arithmetic, so code compares sell values: claim when the rewards are worth at least what is given. The gems sell for 70,500, so Jev's lower score was right all along.

Planner gaps Jev couldn't see

These reached Claude with doubt around 0.19–0.50. Jev picked the best of the options offered, but the option generator was wrong. Each was found by Claude reading the plan's reasons or the outcome, and each became a planner rule.

LLM audit→Code

Checked one craft, not the run

36 Feathers passed a "can make at least once" test, so the restock rule never ran. Fix: check inputs for the whole run and buy what's short first.

LLM audit→Code

Batch the chain

300 Headless Arrows but 90 Arrowtips would make 90 arrows, then a short fight. Fix: when a made input covers under half the run, make it first.

LLM audit→Code

One over the line

51 Feathers sat one above a "restock below 50" rule, which was enough for only 45 of the next 300 arrows. Fix: restock below one full batch.

LLM audit→Code Milestones

Batch sizes set the wake rate

A fixed batch of 120 meant about 12 rounds to Crafting 50; sizing it to the XP still needed (capped at 400) cut that to about 4. Raising the standing ammo goal from 300 to 1,000 cut about 16 refill cycles to about 5. Restocks now buy for the whole run, one purchase of 800 instead of three of 300.

LLM audit→Code

From hardcoded to measured targets

Ranged training was hardcoded to Cows, which wasted damage: max hit 118 against 80 HP. Fix: pick by damage per arrow. Then add the hit chance, because the model assumed every arrow hits. Finally, measured XP per arrow beats the model once both monsters have 50+ logged arrows. Measured 13.6 against 14.45 sent it back to the better monster.

LLM audit→Code

The wrong training metric

Smithing training offered Iron Daggers at 20 XP per bar while Mithril items paid 50, and one option counted XP per bar while ignoring the ore and coal behind each bar. Fix: rank by XP per unit still to be gathered, one recipe level down.

LLM audit→Code

Remembered recipe choices

Arrow Shafts can use any log; the panel kept the last choice (Willow) with 0 Willow Logs in the bank. Fix: read the game's per-recipe choice and pick the in-stock option. A related fix skips the category and recipe clicks when the recipe is already selected, which saved 2 of 4 steps on a restart.

LLM audit→Code

Verify that understands deliberate stops

Every Ranged round ended in a false failure, because the guard flees when the quiver is empty. Fix: guard and planner stops are recorded, and verify accepts them as success.

LLM audit→Code

Vanishing arrows

Crafts used their inputs and produced nothing: the bank was full, and the game discarded the output. Fix: a policy that buys bank slots before making anything when the bank is full. It later became "buy when two or fewer slots are free and gold is 2.5× the price".

LLM audit→Code · doubt 0.19–0.21

The cap that hid the tasks (new)

Two ready Township tasks never reached Jev: eight standing equip options (old bows, spare arrow tiers) filled the eight-slot cap for one-off questions first. Fix: rank one-offs before the cap, rare kinds first and equip last.

LLM audit→Code · doubt 0.48

A stocked recipe that couldn't last (new)

Training for Fletching 65 picked Emerald Bolts (33 XP per material) as "stocked" over cutting Maple for bows (58 XP per log), because gathered options must win by 2×. Only 34 Emeralds were banked for a 400-craft batch: inputs were checked against 30 crafts, not the batch. Fix: every input must cover the whole batch, or it counts as missing.

LLM audit→Code · doubt 0.36

One-offs that reset the batch (new)

Two Township builds in the middle of a 400-log Yew cut cleared the planner's stop point, and the next tick switched to fletching at 214 logs. The list of one-offs that keep the running batch predated Township and Farming. Fix: every one-off kind keeps it.

LLM audit→Code · doubt 0.50

The first log in the list (new)

Arrow Shafts take any log. The planner used the first one the bank could pay for (19 Maple Logs) and ignored each log's yield multiplier, so it sent the ranger to cut Maple with 2,066 Mahogany Logs banked, at 90 shafts each. Fix: choose the alternative stock can make the most from, in the planner and in the UI.

LLM audit→Code · doubt 0.44

A level-up moved the line (new)

Ranged 56 raised combat level to 54, so the Frozen Archer (level 27) became "easy" (at most half our level). Easy monsters skipped the food discount only harder ones paid, and with a new bow the Archer won on raw damage. It eats 0.94 food per arrow, measured: the 88 equipped would have lasted about 94 arrows. Fix: every monster's value is divided by 1 + food per arrow.

LLM audit→Code

A plan step shouldn't spend another's stock (new)

The town plan skips a step it can't pay for. After 4 Carpenters, the last 360 Wood fell through to Wooden Huts, which the Carpenters needed. Later, a step waiting for a batch fell through the same way. Fixes: huts wait for 10 Carpenters, and a step that is only waiting for its batch holds the whole plan.

LLM audit→Code Milestones

Sizes set the wake rate, again (new)

Fletching 65 to 70 needed about 4,300 Yew logs, which meant 11 cut-and-fletch cycles at 400 a batch. Long grinds now split evenly into batches of at most 1,000, so 1,638 logs became 2 batches of 820. Ranged 55 to 60 needed about 6,150 arrows, so the standing ammo goal went from 1,000 to 2,000. Township builds wait for batches of 5 instead of one Carpenter per hourly update. Five Mastery Token stacks were claimed (bank 58/60 to 52/60), and later only when the bank is tight or a stack reaches 20. Smaller follow-ups, committed without log entries: compost in packs of 25, seed runs for 6 plantings, skipping the shop's quantity step when it is already set, and using Max when it builds exactly the wanted number.

When the environment broke

Environment→Code Human

Hidden tab, stalled game

The watcher reported stale snapshots four times. A per-second probe showed the tab going hidden for 32 seconds; the game paused, then ran an offline catch-up that ended fights. Fixes: status carries hidden, the watcher emits a hidden event, a resume guard restarts the fight, and the owner keeps the window visible.

Environment→Code

The wrong active tab

Opening a fresh browser window left a blank New Tab active, so clicks missed the game. Fix: a startup script closes blank tabs in the game's window and brings the game forward.

Environment→Code

The window shrank

At 844×476 the game folded its sidebar and switched to a mobile layout, so a sidebar button sat at x = −422. Fixes: locate returns the sidebar toggle when a target is off-screen, and takes the click tool's frame width so coordinates match after a resize.

Environment→Code

Saves that never happened

Force Save clicks missed for four hours unnoticed (stale coordinates, no check). Fixes: status reports minutes since the last cloud save, the watcher fires save-old at an hour, and every save is confirmed by the header resetting.

Environment→Code

The page moved under the cursor

Scroll anchoring shifted the page between locating a button and clicking it, so Loot All was missed by about 37 px. Fix: turn off scroll anchoring, and always locate a step right before clicking it.

When the human asked

Human→LLM→Code

"What should we be using money for?"

Answering it showed that no tool beyond Iron had ever been bought, though thousands of logs had been cut. No tier was comparing tools. Fix: a policy that buys the next axe, pickaxe or rod tier when it costs at most 25% of gold.

Human→LLM→Code

"Why am I not wearing a Mithril Helmet?"

Milestones named gear by hand, so nothing compared owned armor. Fix: a gear audit that scores pieces for the attack style, plus defence weighted by how dangerous the current enemy is. Under that score the Hard Leather Cowl correctly beats the Mithril Helmet against weak hitters.

Human approves→Code guard

A death-risk policy

Harder monsters pay more XP per arrow but can kill. The owner approved a plan, and it became code: flee if one enemy hit can take 40% of max HP, log arrows, food and deaths per monster, and discount XP by food eaten. Trials: one monster paid 19.6 XP an arrow but ate 1.9 food an arrow, so it was excluded; another paid 16.3 at 0.94.

Human→LLM→Code

"Is melee better for farming drops?"

Arrows were the bottleneck at 3.4 arrows per Leather. Character decision: farm drops with a blade. Fight steps now carry the weapon they want, and the brain swaps weapons first.

Human→LLM→Code

"Let's explore farming as passive income"

Farming chores have computable answers, so they went straight to code: harvest grown plots, clear dead ones, plant the highest-level seed, and unlock plots while they're cheap compared with gold. They click inside each plot card to avoid the paid "all plots" buttons.

Human→LLM→Code

"Be super smart about it" (new)

A research pass on the game wiki turned into code. The town follows the wiki's beginner build order and spends gold only above a 60,000 floor; it pays no gold until much later, so it is an investment. Uncomposted crops grow only half the time, so plots are composted to 100% before planting. The town's one-way worship choice (50M gold to change) stayed with Claude: an in-game choice the owner had delegated.

Human→LLM→Code

"Did farming not work out?" (new)

Three unlocked plots had sat empty for about 8 hours. The only seed path was a standing goal, and Jev scored it 0.29 against the active milestone's 0.71 on every tick, so it never won. Doubt stayed at 0.3–0.4, because each pick was reasonable and the state didn't show the cost of idle plots. Fix: the state reports idle plots, and when a plot type has no seed to plant, its seed goal goes first. Follow-ups: a herb-seed goal, matched to the idle category, and a seed check that had passed silently on a misspelled category name now fails loudly.

Human→LLM→Code

"A dull butterknife? Do the math." (new)

The earlier blade decision (above) had gone stale. Measured: melee max hit 24 against ranged 223. Code now picks the weapon for drop farming by seconds per kill, with each arrow priced at about 2.5 seconds of making. Then the first run checked the model:

Junior Farmer, per killPredictedMeasured
Bow: seconds~7.56.7
Bow: arrows~1.41.17
Blade: seconds~19~17

What stays human

The runbook draws the human line in a few places, and nothing in six days moved it:

Lessons from the push-down log

  1. Audit plans, not just doubt. 48 of 65 catches came from the LLM reading plans and outcomes. Doubt can't see a bad option generator: day six's gaps read 0.19–0.50, and none crossed 0.7.
  2. Most fixes belong in code. 57 of 65 changed code. When a question has a computable answer, or Jev is wrong in a consistent direction, it moves down.
  3. Context fixes are cheap and measurable. One playbook line moved doubt from 0.74 to 0.35, or 0.63 to 0.46. Doubt works as a metric for context changes.
  4. Read the watch band. Flat mid-band doubt meant a context conflict, rising doubt meant a loop, and both stayed under 0.7.
  5. Sizes set the wake rate. Batches, restocks and standing goals sized to the real need cut LLM wakes by about a factor of three each time.
  6. The environment is its own failure class. Tabs, windows, layouts and saves each got a detector in code and a clear hand-off to a human.
  7. The owner's questions find what no tier sees. 8 of 65 catches. Idle plots and a stale weapon rule were invisible to every tier, because each choice looked reasonable on its own.
  8. Predict, then measure. The weapon model said about 7.5 s and 1.4 arrows per kill; the first run measured 6.7 s and 1.17. A logged measurement turns a model into evidence.
  9. Give every branch of a rule the same checks. Food cost was charged only on the "hard" branch, and the batch-keeping list named only the one-off kinds that existed when it was written. A level-up and new features walked through those gaps.

Back to the general pattern: The cascade and Novelty and doubt state these lessons without the game. Want to build one? Build your own.