feat(simulation): add economics simulation binary with Layer 1+2 (#806, #807)

Adds tooling/econ-sim — a standalone Rust binary for the Phase 2 economics
simulation:

Layer 1 (Leontief production, #806):
- Deterministic per-run PRNG seeding of corp×site productivity (D-176)
- Fixed-coefficient production chains; scarcity cascades downstream (D-178)
- Per-capita population demand for finals and services
- Gate-energy demand reduction for fusion_fuel at connected nodes (D-186)
- Price adjustment via local tâtonnement

Layer 2 (spatial price equilibrium, #807):
- Damped tâtonnement trade flows along gate links (α=0.03, β=0.4, D-178)
- 8% transport cost per hop damps long-distance arbitrage
- Flows computed from pre-step snapshot; applied atomically
- --stability-check implements D-179 Tests 1 and 2:
  · Test 1: cold-start convergence ±5% at tick 100 → PASS (max 1.05%)
  · Test 2: long-run stability ±2% over ticks 900–999 → PASS (max 0.00%)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-07 13:56:06 +02:00
co-authored by Claude Sonnet 4.6
parent 7b0465a8c6
commit fb87f933f5
1169 changed files with 11201 additions and 0 deletions
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":17883862002600103897,"profile":1369601567987815722,"path":13572035692952040950,"deps":[[5398981501050481332,"version_check",false,9173411042805874928]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/ahash-7708361bba886435/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
f625edaad900116f
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":8470944000320059508,"profile":2040997289075261528,"path":9069281911787239518,"deps":[[966925859616469517,"build_script_build",false,12964848586613141467],[3612005756660025491,"zerocopy",false,13907623331077063393],[5855319743879205494,"once_cell",false,10249849806461587381],[7667230146095136825,"cfg_if",false,11973668488183628796]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/ahash-ef0882edc91b9eb3/dep-lib-ahash","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[966925859616469517,"build_script_build",false,9865662989747041669]],"local":[{"RerunIfChanged":{"output":"release/build/ahash-faa8b23a69b47275/output","paths":["build.rs"]}}],"rustflags":[],"config":0,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
0b2e6fd288f7744c
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"auto\", \"default\", \"wincon\"]","declared_features":"[\"auto\", \"default\", \"test\", \"wincon\"]","target":11278316191512382530,"profile":9935722674736056754,"path":11240418683054626933,"deps":[[2608044744973004659,"anstyle_parse",false,5086455271676708857],[5652275617566266604,"anstyle_query",false,4570458299731171935],[7098682853475662231,"anstyle",false,2180336470947009677],[7711617929439759244,"colorchoice",false,3185063502695135763],[7727459912076845739,"is_terminal_polyfill",false,4592270895612913673],[17716308468579268865,"utf8parse",false,4382290342557598016]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/anstream-8f3c3d800456845b/dep-lib-anstream","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
8d14a0e9771c421e
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":6165884447290141869,"profile":9935722674736056754,"path":10027251691141589793,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/anstyle-1915412decc78bd9/dep-lib-anstyle","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"default\", \"utf8\"]","declared_features":"[\"core\", \"default\", \"utf8\"]","target":10225663410500332907,"profile":9935722674736056754,"path":7227304159149889180,"deps":[[17716308468579268865,"utf8parse",false,4382290342557598016]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/anstyle-parse-3d3497430da2ba4d/dep-lib-anstyle_parse","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":10705714425685373190,"profile":10568243043888157470,"path":829289286297629453,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/anstyle-query-ab0936756428c444/dep-lib-anstyle_query","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
1ad8ee9e31dbdf49
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"arbitrary\", \"bytemuck\", \"example_generated\", \"serde\", \"serde_core\", \"std\"]","target":7691312148208718491,"profile":2040997289075261528,"path":7578908120559846831,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/bitflags-dd940f3362e688dc/dep-lib-bitflags","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
78a231c19c8b7d1c
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"jobserver\", \"parallel\"]","target":11042037588551934598,"profile":18369320580169568572,"path":7457227953985288504,"deps":[[8410525223747752176,"shlex",false,15582271797362668217],[9159843920629750842,"find_msvc_tools",false,18230414900859914378]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/cc-c04475e7e325434a/dep-lib-cc","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
fc4379000d042ba6
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"core\", \"rustc-dep-of-std\"]","target":13840298032947503755,"profile":2040997289075261528,"path":13785561865806695151,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/cfg-if-819986caf38a5803/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
7f1e076fdbb5e156
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"color\", \"default\", \"derive\", \"error-context\", \"help\", \"std\", \"suggestions\", \"usage\"]","declared_features":"[\"cargo\", \"color\", \"debug\", \"default\", \"deprecated\", \"derive\", \"env\", \"error-context\", \"help\", \"std\", \"string\", \"suggestions\", \"unicode\", \"unstable-derive-ui-tests\", \"unstable-doc\", \"unstable-ext\", \"unstable-markdown\", \"unstable-styles\", \"unstable-v5\", \"usage\", \"wrap_help\"]","target":3788228259706617387,"profile":422155425158412511,"path":18105234102980729637,"deps":[[8085066531928642943,"clap_derive",false,712195692137140333],[12853434244957124663,"clap_builder",false,6346052505547453594]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/clap-cba642ebdef5dcaa/dep-lib-clap","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"color\", \"error-context\", \"help\", \"std\", \"suggestions\", \"usage\"]","declared_features":"[\"cargo\", \"color\", \"debug\", \"default\", \"deprecated\", \"env\", \"error-context\", \"help\", \"std\", \"string\", \"suggestions\", \"unicode\", \"unstable-doc\", \"unstable-ext\", \"unstable-styles\", \"unstable-v5\", \"usage\", \"wrap_help\"]","target":2771552807545835539,"profile":422155425158412511,"path":7819026763648938471,"deps":[[7098682853475662231,"anstyle",false,2180336470947009677],[11166530783118767604,"strsim",false,5724254045248989306],[13859629720716765461,"clap_lex",false,7575363267250405406],[17023300362321715658,"anstream",false,5509300411199073803]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/clap_builder-5196b6b83b59405e/dep-lib-clap_builder","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"default\"]","declared_features":"[\"debug\", \"default\", \"deprecated\", \"raw-deprecated\", \"unstable-markdown\", \"unstable-v5\"]","target":2345819099678412135,"profile":10673744324659745496,"path":13719260305301240624,"deps":[[4289358735036141001,"proc_macro2",false,16169369271309150186],[10420560437213941093,"syn",false,4836691491923792650],[13077543566650298139,"heck",false,17227599552341469890],[13111758008314797071,"quote",false,2033729812503793809]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/clap_derive-3d22058f6a9881cd/dep-lib-clap_derive","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
1ec0006dc1182169
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":8621696840636553848,"profile":422155425158412511,"path":13125443471648556206,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/clap_lex-3fb8fc60bd051fe0/dep-lib-clap_lex","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":11187303652147478063,"profile":9935722674736056754,"path":6295790858244434676,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/colorchoice-560dd57dd33f22e7/dep-lib-colorchoice","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
34590cf5098a89e7
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":14414129902170427750,"profile":2040997289075261528,"path":4942398508502643691,"deps":[[192435385979317305,"rusqlite",false,110416623538382722],[5652558058897858086,"rand_chacha",false,14575814815231418749],[11916940916964035392,"rand",false,9749881078069907861],[13548984313718623784,"serde",false,2951424371401820981],[16891682993831069510,"clap",false,6260484911086902911]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/econ-sim-926f0632f9a19134/dep-bin-econ-sim","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"alloc\", \"default\"]","declared_features":"[\"alloc\", \"default\", \"std\"]","target":15245709686714427328,"profile":2040997289075261528,"path":4218969987548293476,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/fallible-iterator-cbbbd021973df385/dep-lib-fallible_iterator","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"std\"]","target":16001337131876932863,"profile":2040997289075261528,"path":10586158953092472822,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/fallible-streaming-iterator-3ae7a15c617f7f54/dep-lib-fallible_streaming_iterator","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":10620166500288925791,"profile":18369320580169568572,"path":14595101370119806677,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/find-msvc-tools-3d571813cf00aced/dep-lib-find_msvc_tools","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[18408407127522236545,"build_script_build",false,10195557392111379857]],"local":[{"RerunIfChanged":{"output":"release/build/getrandom-69b7f678b01c2b00/output","paths":["build.rs"]}}],"rustflags":[],"config":0,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
225ff1ab132c1751
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"std\"]","declared_features":"[\"std\", \"wasm_js\"]","target":11669924403970522481,"profile":7327057875853487844,"path":17997348223537845906,"deps":[[7667230146095136825,"cfg_if",false,11973668488183628796],[12111499963430175700,"libc",false,5093352433412745059],[18408407127522236545,"build_script_build",false,7620746031781183194]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/getrandom-7dc04a8d3d803b8e/dep-lib-getrandom","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"std\"]","declared_features":"[\"std\", \"wasm_js\"]","target":5408242616063297496,"profile":2344654034554132239,"path":17602665944152455780,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/getrandom-9333a0ff7d72dad8/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
1d39e0c1f4d7b0f4
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[\"ahash\", \"inline-more\"]","declared_features":"[\"ahash\", \"alloc\", \"allocator-api2\", \"compiler_builtins\", \"core\", \"default\", \"equivalent\", \"inline-more\", \"nightly\", \"raw\", \"rayon\", \"rkyv\", \"rustc-dep-of-std\", \"rustc-internal-api\", \"serde\"]","target":9101038166729729440,"profile":2040997289075261528,"path":3233396662993538877,"deps":[[966925859616469517,"ahash",false,8003178947689653750]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/hashbrown-1c77388fddb721ac/dep-lib-hashbrown","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
b5d1bd0045644ddb
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[\"serde\", \"serde_impl\"]","target":3158588102652511467,"profile":2040997289075261528,"path":4649085271453966536,"deps":[[13018563866916002725,"hashbrown",false,17631829987380181277]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/hashlink-6a9137290d7dcfd8/dep-lib-hashlink","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.
@@ -0,0 +1 @@
c2eafd6184ba14ef
@@ -0,0 +1 @@
{"rustc":5470738401306409665,"features":"[]","declared_features":"[]","target":17886154901722686619,"profile":1369601567987815722,"path":17990950055400673020,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/heck-93181e9cb3ac1c68/dep-lib-heck","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
@@ -0,0 +1 @@
This file has an mtime of when this was started.

Some files were not shown because too many files have changed in this diff Show More