Sync progression_design.md with implemented action items

Prune completed action items 1-4 and 8 (scrap-from-threat, schematic
upgrade and ship level removal, balancing tool cleanup, unlock
prerequisites), renumber the remaining three, and update stale
cross-references: cite REQ-LOCK-PREREQ and unlock_requires, reflect
that REQ-THREAT-SCRAP is now the 1/scrap_per_threat constant, and
drop the obsolete level-up wording from the artifact rule.

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 09:44:53 +02:00
parent 730cd3bdf3
commit 4098e40c8c

View File

@@ -153,7 +153,7 @@ supporting different fleet doctrines feel structurally different to build.
- **All time scaling lives in the threat rate** — waves get bigger, ships - **All time scaling lives in the threat rate** — waves get bigger, ships
of a given schematic never get individually stronger. There is no ship of a given schematic never get individually stronger. There is no ship
level dimension: stat formulas are plain values, and per-ship level level dimension: stat formulas are plain values, and per-ship level
scaling (`ship_level_formula`) does not exist (see Action items). Push scaling does not exist. Push
scaling on enemy defence stations is the separate, player-triggered scaling on enemy defence stations is the separate, player-triggered
difficulty axis and keeps its level formulas. difficulty axis and keeps its level formulas.
@@ -169,9 +169,10 @@ supporting different fleet doctrines feel structurally different to build.
its materials need can be unlocked alongside it. its materials need can be unlocked alongside it.
- **Schematics can require other schematics.** Beyond the station-level - **Schematics can require other schematics.** Beyond the station-level
gate, a schematic (ship, module, or assembler recipe) may list gate, a schematic (ship, module, or assembler recipe) may list
prerequisite schematics that must already be unlocked before it enters prerequisite schematics (`unlock_requires`, REQ-LOCK-PREREQ) that must
the drop pool — e.g. the medium laser requires the small laser; a already be unlocked before it enters the drop pool — e.g. the medium
future Mk2 requires its base version. Station level gates the earliest laser requires the small laser; a future Mk2 requires its base version.
Station level gates the earliest
*when*; prerequisites gate the *order*, keeping drop offers coherent *when*; prerequisites gate the *order*, keeping drop offers coherent
with what the player already owns. with what the player already owns.
- **No duplicate drops.** Ship and module schematics leave the drop pool - **No duplicate drops.** Ship and module schematics leave the drop pool
@@ -184,8 +185,8 @@ supporting different fleet doctrines feel structurally different to build.
tasks), never as free level-ups. tasks), never as free level-ups.
- **Artifacts trade power for progress.** Artifact options compete with - **Artifacts trade power for progress.** Artifact options compete with
schematic picks in the same choice dialog; the artifact chance must be schematic picks in the same choice dialog; the artifact chance must be
tuned so that taking one is a real decision (giving up a level-up or tuned so that taking one is a real decision (giving up an unlock), not
unlock), not automatic in either direction. automatic in either direction.
## Scrap & reprocessing economy ## Scrap & reprocessing economy
@@ -206,8 +207,8 @@ supporting different fleet doctrines feel structurally different to build.
the exception: they keep authored `scrap_drop_formula`s, because pushing the exception: they keep authored `scrap_drop_formula`s, because pushing
rewards are tuned independently of ship production costs. rewards are tuned independently of ship production costs.
- Consequence: the threat value of scrap is the constant - Consequence: the threat value of scrap is the constant
`1 / scrap_per_threat`. The min-`scrap_drop` schematic derivation `1 / scrap_per_threat` (REQ-THREAT-SCRAP). The former min-`scrap_drop`
(REQ-THREAT-SCRAP) and its potential circularity disappear. schematic derivation and its potential circularity are gone.
- **Rule:** the late-game input's income rate meaningfully gates capital - **Rule:** the late-game input's income rate meaningfully gates capital
production — unlocking a capital hull must not mean spamming it; the production — unlocking a capital hull must not mean spamming it; the
input trickles in slowly enough that every capital ship is a noticeable input trickles in slowly enough that every capital ship is a noticeable
@@ -272,47 +273,22 @@ Constraints that every recipe must respect, independent of tuning:
## Action items — changes beyond this document ## Action items — changes beyond this document
Agreed changes that require edits to `requirements.md`, the code, and the Agreed changes that require edits to `requirements.md`, the code, and the
configs: configs. Completed items are removed from this list (their outcomes live
in `requirements.md` and the git history). Still open:
1. **Derive ship scrap from threat.** Add `scrap_per_threat` to 1. **Fill unfillable schematic slots with artifacts.** With duplicates
`world.toml`; remove `[ship.loot].scrap_drop` from `ships.toml`; update
REQ-RES-SCRAP-DROP; replace REQ-THREAT-SCRAP with the constant
`1 / scrap_per_threat`. Station `scrap_drop_formula`s stay.
2. **Remove schematic upgrades.** Owned ship/module schematics leave the
drop pool (REQ-DEF-SCHEMATIC-DROP); drop the new-unlock/level-up
annotation from the choice dialog; remove `player_production_level`
from `ships.toml`, `modules.toml`, and the code paths that increment
and evaluate it (REQ-BLD-SHIPYARD, REQ-MOD-CONFIG).
3. **Remove ship levels entirely.** Delete `ship_level_formula`
(REQ-WAV-SHIP-LEVEL); replace all stat formulas in `ships.toml` and
`modules.toml` with plain values (REQ-SHP-STATS, REQ-MOD-CONFIG,
REQ-MOD-STAT-CALC evaluation rules). Enemy defence stations keep their
station-level formulas — push scaling is unaffected.
4. **Balancing tool follow-up.** Remove the per-ship-entry `level` from
`balancing.toml` and the `L<level>` display format (REQ-BAL-TEAM,
REQ-BAL-CONFIG-GAME, REQ-BAL-UI-WIDGET, REQ-BAL-UI-INSPECT-WINDOW);
station entries keep their level. Ship stats panels no longer evaluate
at a level (REQ-MOD-UI-STATS-PANEL, REQ-UI-SHIP-STATS-PANEL).
5. **Fill unfillable schematic slots with artifacts.** With duplicates
removed, the schematic drop pool can run dry — previously unreachable. removed, the schematic drop pool can run dry — previously unreachable.
Decision: every slot in the choice dialog that cannot be filled with a Decision: every slot in the choice dialog that cannot be filled with a
schematic because the eligible pool is exhausted is filled with an schematic because the eligible pool is exhausted is filled with an
artifact option instead (in addition to any artifact option granted by artifact option instead (in addition to any artifact option granted by
the regular artifact roll). A push therefore always awards a full the regular artifact roll). A push therefore always awards a full
dialog. Update REQ-DEF-SCHEMATIC-DROP. dialog. Update REQ-DEF-SCHEMATIC-DROP.
6. **Confirm wave scaling carries alone.** With per-ship level scaling 2. **Confirm wave scaling carries alone.** With per-ship level scaling
gone, `threat_rate_formula` is the only time-scaling axis; verify the removed, `threat_rate_formula` is the only time-scaling axis; verify
current `world.toml` values still produce the intended difficulty the current `world.toml` values still produce the intended difficulty
curve (the config reportedly already runs with a flat ship level, so curve (likely a review, not a retune, since the config already ran
this is likely a review, not a retune). with a flat ship level before the removal).
7. **Gate shortcut-recipe drops on their inputs.** Extend the assembler 3. **Gate shortcut-recipe drops on their inputs.** Extend the assembler
recipe schematic pool eligibility in REQ-DEF-SCHEMATIC-DROP: in recipe schematic pool eligibility in REQ-DEF-SCHEMATIC-DROP: in
addition to the existing station-level and output-item checks, all of addition to the existing station-level and output-item checks, all of
the recipe's input item types must be implicitly unlocked as well. the recipe's input item types must be implicitly unlocked as well.
8. **Schematic prerequisites.** Add an optional prerequisite list to
ship, module, and assembler recipe schematic entries (e.g.
`unlock_requires = ["laser_cannon_s"]`): a schematic enters the drop
pool only when every listed schematic is already unlocked, in addition
to the station-level check. Update REQ-DEF-SCHEMATIC-DROP and
REQ-LOCK-EXPLICIT. This is also the mechanism the future Mk2 design
builds on (`*_mk2` requires the base schematic).