
jpmschweitzerandClaude Sonnet 4.6
5f4139bc9e
feat(simulation): implement economics integration sprint — #810 #821 #822 #823
Implements the full D-180/D-181 economics pipeline:
**#810 — Event input port (D-180)**
- Add EconEvent struct with Target/Effect/Duration/Visibility variants
- Implement EventPort as typed input queue for external disruptions
- Apply events in simulation step; D-179 Test 3 now uses real shock injection
**#821 — Integrate econ-sim into server tick loop**
- Extract econ-sim as library crate (lib.rs + sim.rs, Cargo.toml [lib] section)
- Add Simulation stateful runner; step() advances one economy tick
- Add EconSimResource, EconStateResource (7 D-181 signals), tick_economy_simulation
- Economy loads once at startup; graceful no-op when systems.db absent
- Server advances economy 1 tick per 10 game ticks (D-031)
**#822 — Expose economy state over IPC bridge**
- Protocol version 20 → 21
- Add EconomySnapshot, EconNodeSnapshot wire types
- Add EconStateQuery PlayerAction variant; response in economy_snapshot field
- Add EconQueryBuffer resource + serve_econ_state_query system
**#823 — Economics debug commands**
- Add InjectEconEvent, SetEconParam, GetEconState to DebugCommandKind
- Add EconDebugEffect, EconParamKind enums
- SetEconParam mutates α/β at runtime (α/β promoted to pub const + Simulation fields)
- ALPHA and BETA constants threaded through step_inner/trade_step signatures
All 1147 unit tests pass; zero warnings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 13:13:52 +02:00
..
2026-04-07 08:52:50 +02:00
2026-04-10 13:13:52 +02:00
2026-04-08 11:04:59 +02:00
2026-02-13 01:19:46 +01:00
2026-04-07 22:25:28 +02:00
2026-02-18 12:58:27 +01:00
2026-03-15 09:53:31 +01:00
2026-02-11 01:21:11 +01:00
2026-04-05 09:40:02 +02:00
2026-03-24 17:40:37 +01:00
2026-03-26 09:11:03 +01:00
2026-03-29 18:00:10 +02:00
2026-03-26 08:06:44 +01:00
2026-03-26 08:06:44 +01:00
2026-03-29 13:39:31 +02:00
2026-03-26 09:11:03 +01:00
2026-03-19 13:28:12 +01:00
2026-03-20 07:48:47 +01:00
2026-03-23 17:43:04 +01:00
2026-03-20 07:48:47 +01:00
2026-03-22 15:24:50 +01:00
2026-03-22 15:24:50 +01:00
2026-03-20 07:59:23 +01:00
2026-03-20 07:59:23 +01:00
2026-03-22 15:24:50 +01:00
2026-03-23 17:43:04 +01:00
2026-03-22 15:24:50 +01:00
2026-03-23 17:43:04 +01:00
2026-03-22 17:22:33 +01:00
2026-03-23 17:43:04 +01:00
2026-03-22 15:24:50 +01:00
2026-02-27 11:08:00 +01:00
2026-03-17 10:31:20 +01:00
2026-03-23 17:43:04 +01:00
2026-04-05 00:33:02 +02:00
2026-02-12 16:54:21 +01:00
2026-04-04 23:34:23 +02:00
2026-04-07 13:55:47 +02:00
2026-04-05 12:11:39 +02:00
2026-03-15 11:17:19 +01:00
2026-04-05 09:40:02 +02:00
2026-03-22 15:07:55 +01:00
2026-03-23 17:43:04 +01:00
2026-02-11 16:43:07 +01:00
2026-02-11 16:53:02 +01:00
2026-03-14 03:55:01 +01:00
2026-03-13 22:57:32 +01:00
2026-02-18 13:07:46 +01:00
2026-03-24 23:23:12 +01:00
2026-03-14 03:55:01 +01:00
2026-03-23 17:43:04 +01:00
2026-03-13 22:57:32 +01:00
2026-03-23 17:43:04 +01:00
2026-03-22 17:22:33 +01:00
2026-03-13 22:57:32 +01:00
2026-02-27 11:08:00 +01:00
2026-03-13 09:44:11 +01:00
2026-04-05 09:40:02 +02:00
2026-03-18 01:20:54 +01:00
2026-03-13 22:57:32 +01:00
2026-03-17 10:31:20 +01:00
2026-03-17 10:31:20 +01:00
2026-03-17 12:31:38 +01:00
2026-03-05 08:41:09 +01:00
2026-03-01 16:33:55 +01:00
2026-03-25 14:47:26 +01:00