diff --git a/.project/objectives/g2-05-tectonics-lithology.md b/.project/objectives/g2-05-tectonics-lithology.md index 48894cde..92b43bd8 100644 --- a/.project/objectives/g2-05-tectonics-lithology.md +++ b/.project/objectives/g2-05-tectonics-lithology.md @@ -2,12 +2,17 @@ id: g2-05 title: Tectonics + lithology — extend the existing prepass/terrain-evolution into a lithology axis priority: p2 -status: missing +status: partial scope: game1 -updated_at: 2026-06-06 +updated_at: 2026-06-08 +evidence: + - "src/simulator/crates/mc-mapgen/src/lithology.rs: Lithology enum (granite/basalt/limestone/sandstone/volcanic/metamorphic) + PlateType::derive (cratonic/passive_margin/active_margin/volcanic_arc/rift/hotspot, derived from plate_kind+boundary_kind+coast_proximity) + derive_lithology pure fn + assign_lithology grid pass; 9 unit tests green incl. assign_lithology_is_deterministic" + - "src/simulator/crates/mc-core/src/grid/mod.rs: TileState.lithology u8 field, #[serde(default)] (old saves -> 0/Unassigned)" + - "src/simulator/crates/mc-mapgen/src/lib.rs: assign_lithology wired into both worldgen pipelines as Stage 14, after tectonics+erosion" + - "Determinism met by construction: lithology is a pure fn of prepass fields, draws no RNG, so no SeedDomain appended and cross_build_determinism DERIVE_GOLDEN stays frozen-green. Serialization exposure verified: mc-save 262 + mc-turn fifty_turn_golden_byte_identical + mc-state + mc-worldsim twenty_turn_determinism all byte-identical green on apricot release build" + - "public/games/age-of-dwarves/docs/terrain/TECTONICS.md §10a Lithology axis documents PlateType + Lithology derivation tables. HANDOFFS (keep partial): deposits.rs lithology filtering + deposit JSON tagging (game-data), lab Tier-0 sliders + lithology-overlay proof screenshot (renderer/UI)" blocked_by: [p2-80] --- - ## Summary The geological substrate of the worldsim is **partly built**: diff --git a/src/simulator/crates/mc-turn/src/victory.rs b/src/simulator/crates/mc-turn/src/victory.rs index e44da2df..9a0e116f 100644 --- a/src/simulator/crates/mc-turn/src/victory.rs +++ b/src/simulator/crates/mc-turn/src/victory.rs @@ -203,11 +203,11 @@ impl Default for VictoryConfig { gold_threshold: DEFAULT_GOLD_THRESHOLD, culture_threshold: DEFAULT_CULTURE_THRESHOLD, science_techs_required: vec![ - "mysticism".to_string(), - "arcane_lore".to_string(), - "elemental_theory".to_string(), - "planar_studies".to_string(), - "astral_projection".to_string(), + "natural_philosophy".to_string(), + "geophysics".to_string(), + "oceanography".to_string(), + "climatology".to_string(), + "world_theory".to_string(), ], science_cost_base: DEFAULT_SCIENCE_COST_BASE, domination_requires_all_capitals: true, diff --git a/src/simulator/crates/mc-turn/tests/victory_json.rs b/src/simulator/crates/mc-turn/tests/victory_json.rs index ee0d97f6..0a44054e 100644 --- a/src/simulator/crates/mc-turn/tests/victory_json.rs +++ b/src/simulator/crates/mc-turn/tests/victory_json.rs @@ -103,13 +103,17 @@ fn test_victory_json_loads_with_all_six_conditions() { assert!(cfg.domination_requires_all_capitals); assert_eq!(cfg.min_domination_turn, 0); - // Science tech chain — all 5 required techs present in order. + // Science tech chain — all 5 required Game-1 (mundane) techs present in + // order. The chain is the natural-science research line; a previous + // iteration used Game-2/3 magic techs (mysticism/arcane_lore/…) which do + // not exist in the Age-of-Dwarves tech manifest and made science victory + // unwinnable (p1-41d scope fix). let expected_techs = [ - "mysticism", - "arcane_lore", - "elemental_theory", - "planar_studies", - "astral_projection", + "natural_philosophy", + "geophysics", + "oceanography", + "climatology", + "world_theory", ]; assert_eq!(cfg.science_techs_required.len(), 5, "must have exactly 5 science techs"); for (i, id) in expected_techs.iter().enumerate() {