From 3aefc0511880c2f72f68bd33e87cd9cdc9399252 Mon Sep 17 00:00:00 2001 From: Malte Langkabel Date: Fri, 3 Jul 2026 16:34:06 +0200 Subject: [PATCH] Scrap-consuming recipes as threat fallback, not excluded Refine the REQ-THREAT-ITEM fix per review: recipes taking scrap as input participate in an item threat computation only when no scrap-free recipe produces that item, mirroring the existing reprocessing-path rule instead of a blanket exclusion. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN --- docs/content_design.md | 7 ++++--- docs/progression_design.md | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/docs/content_design.md b/docs/content_design.md index 0364ff3..95cc893 100644 --- a/docs/content_design.md +++ b/docs/content_design.md @@ -430,9 +430,10 @@ typical loadouts double as the `default_modules` for enemy waves): - *Rule bug discovered:* the scrap→iron_ingot smelter recipe combined with REQ-THREAT-ITEM's max-across-recipes rule would set threat(iron_ingot) to the scrap path (1 + 4 = 5, or more at other - scrap values) instead of 2, inflating every downstream item. Fix - required: exclude scrap-consuming recipes from item threat - computation (see progression_design.md action items). + scrap values) instead of 2, inflating every downstream item. Fix: + scrap-consuming recipes count toward an item's threat only when no + scrap-free recipe produces that item, mirroring the reprocessing-path + rule (see progression_design.md action items). ## Balancing targets (first pass, July 2026) diff --git a/docs/progression_design.md b/docs/progression_design.md index 74ec2d2..c41bdee 100644 --- a/docs/progression_design.md +++ b/docs/progression_design.md @@ -373,13 +373,13 @@ in `requirements.md` and the git history). Still open: one matching deposit tile). Touches REQ-BLD-MINER ("every asteroid tile is equivalent" no longer holds), REQ-GW-ASTEROID-EXPAND / REQ-EXP-*, `world.toml`, and `visuals.toml`. -6. **Exclude scrap-consuming recipes from item threat.** Amend - REQ-THREAT-ITEM: recipes that take scrap as an input do not - participate in an item's threat computation (neither as its value - nor in the max-across-recipes rule). Otherwise the scrap→ingot - smelter recipe inflates the basic materials' threat via the max - rule, poisoning every downstream value. Scrap conversion is already - accounted for by the REQ-THREAT-SCRAP constant. +6. **Scrap-consuming recipes as threat fallback only.** Amend + REQ-THREAT-ITEM: recipes that take scrap as an input participate in + an item's threat computation only if no scrap-free recipe (miner, + smelter, or assembler) produces that item — mirroring the existing + rule for the reprocessing path. Otherwise the scrap→ingot smelter + recipe would inflate the basic materials' threat via the + max-across-recipes rule, poisoning every downstream value. 7. **Threat report tool.** Port the numbers-pass calculator to `tools/threat_report.py`: per-item threat values, module contributions, fitted ship threats vs. the ladder targets,