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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DyCu8vwChKMbLJQ3xosYEN
This commit is contained in:
2026-07-03 16:34:06 +02:00
parent fe7703d5c3
commit 3aefc05118
2 changed files with 11 additions and 10 deletions

View File

@@ -430,9 +430,10 @@ typical loadouts double as the `default_modules` for enemy waves):
- *Rule bug discovered:* the scrap→iron_ingot smelter recipe combined - *Rule bug discovered:* the scrap→iron_ingot smelter recipe combined
with REQ-THREAT-ITEM's max-across-recipes rule would set 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 threat(iron_ingot) to the scrap path (1 + 4 = 5, or more at other
scrap values) instead of 2, inflating every downstream item. Fix scrap values) instead of 2, inflating every downstream item. Fix:
required: exclude scrap-consuming recipes from item threat scrap-consuming recipes count toward an item's threat only when no
computation (see progression_design.md action items). scrap-free recipe produces that item, mirroring the reprocessing-path
rule (see progression_design.md action items).
## Balancing targets (first pass, July 2026) ## Balancing targets (first pass, July 2026)

View File

@@ -373,13 +373,13 @@ in `requirements.md` and the git history). Still open:
one matching deposit tile). Touches REQ-BLD-MINER ("every asteroid one matching deposit tile). Touches REQ-BLD-MINER ("every asteroid
tile is equivalent" no longer holds), REQ-GW-ASTEROID-EXPAND / tile is equivalent" no longer holds), REQ-GW-ASTEROID-EXPAND /
REQ-EXP-*, `world.toml`, and `visuals.toml`. REQ-EXP-*, `world.toml`, and `visuals.toml`.
6. **Exclude scrap-consuming recipes from item threat.** Amend 6. **Scrap-consuming recipes as threat fallback only.** Amend
REQ-THREAT-ITEM: recipes that take scrap as an input do not REQ-THREAT-ITEM: recipes that take scrap as an input participate in
participate in an item's threat computation (neither as its value an item's threat computation only if no scrap-free recipe (miner,
nor in the max-across-recipes rule). Otherwise the scrap→ingot smelter, or assembler) produces that item — mirroring the existing
smelter recipe inflates the basic materials' threat via the max rule for the reprocessing path. Otherwise the scrap→ingot smelter
rule, poisoning every downstream value. Scrap conversion is already recipe would inflate the basic materials' threat via the
accounted for by the REQ-THREAT-SCRAP constant. max-across-recipes rule, poisoning every downstream value.
7. **Threat report tool.** Port the numbers-pass calculator to 7. **Threat report tool.** Port the numbers-pass calculator to
`tools/threat_report.py`: per-item threat values, module `tools/threat_report.py`: per-item threat values, module
contributions, fitted ship threats vs. the ladder targets, contributions, fitted ship threats vs. the ladder targets,