diff --git a/game.py b/game.py
index aec884b..fee2573 100644
--- a/game.py
+++ b/game.py
@@ -3525,11 +3525,14 @@ def post_order(world: dict, player: dict, kind: str, item: str, qty, provide, re
return "Not enough gold"
provided = {}
if kind == "craft":
- runs = _batches(action, item, qty)
+ # The pool holds what a run takes right now: a lit fire's share stays with the fire.
+ runs, inputs = _batches(action, item, qty), fire_inputs(world, action)
for input_item in provide or []:
if input_item not in action["inputs"]:
return "That isn't in the recipe"
- need = action["inputs"][input_item] * runs
+ if input_item not in inputs:
+ return f"The {FIRES[action['fire']]['name'].lower()} pays that"
+ need = inputs[input_item] * runs
if player["bank"].get(input_item, 0) < need:
return f"Not enough {ITEMS[input_item]['name'].lower()}"
provided[input_item] = need
@@ -3559,7 +3562,10 @@ def provide_reagent(world: dict, player: dict, order_id, item: str) -> str | Non
action = ACTION_BY_ID[order["action"]]
if item not in action["inputs"]:
return "That isn't in the recipe"
- need = action["inputs"][item] * _batches(action, order["item"], order["qty"] - order["delivered"])
+ inputs = fire_inputs(world, action)
+ if item not in inputs:
+ return f"The {FIRES[action['fire']]['name'].lower()} pays that"
+ need = inputs[item] * _batches(action, order["item"], order["qty"] - order["delivered"])
short = need - order["provided"].get(item, 0)
if short <= 0:
return "Already provided"
@@ -5986,6 +5992,8 @@ PATCH_NOTES = [
"and Aimed Shot 25% faster."),
("fix", "Work orders on phones: the item picker and reagent slots show names, and picking an item scrolls to "
"the amount, price and Post."),
+ ("fix", "Work orders show what a lit fire pays: its log is struck through instead of asked for, and the forge "
+ "pays a coal. Orders never needed that log from the crafter, they just asked for it."),
]},
{"date": "2026-10-24", "title": "A dungeon in every area", "notes": [
("new", "Six more dungeons for 2–4, seven pulls each with two mini-bosses and a final boss: Goblin Warren "
diff --git a/static/app.js b/static/app.js
index 7c0b13d..9bb50cd 100644
--- a/static/app.js
+++ b/static/app.js
@@ -1829,20 +1829,31 @@ function orderNews(state) {
earnedSeen = Object.fromEntries(orders.map((o) => [o.id, (o.earned || {})[uid] || 0]));
}
+// What one run of a recipe takes right now: a lit fire pays its log (the forge a coal too).
+const runInputs = (a) => S.me.fuelled?.[a.id] || a.inputs;
+const firePays = (a, id, qty) => `the ${C.fires[a.fire].name.toLowerCase()} pays ${fmt(qty)}`;
+
+// A reagent the fire pays outright: struck through, nothing to put in.
+function paidSlot(a, id, qty) {
+ return `