chore(engine): server hygiene batch — workers tests, surname dedup, save pin (T-1063, T-1064)

- workers/pool.rs: 5 new tests; catch_unwind keeps worker threads alive on
  handler panic (in-flight request loss unchanged, pinned by test + #843
  docs); stubs.rs no longer falsely claims the pool is tested
- save/load: execute_save_load pinned .after(Storyteller) so the scheduler
  cannot legally save pre-Input state; exclusive-system exception recorded
  in tick_phases.rs rules
- surname corpus extracted to bin/shared/surname_corpus.rs (both economy
  generators import it; byte-identical output verified on 23.6MB+1.45MB
  TOMLs); all three stamp/watch registries updated
- generator_spike gated behind non-default 'generator-spike' feature
- economy.rs: 11 new D-181 signal-derivation tests on the new
  econ_sim Simulation::from_economy in-memory constructor
- perception exemption comments now state the consumer sort contract;
  unused bytemuck removed; rayon comment corrected; the 22 allow(dead_code)
  documented as serde schema enforcement

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 16:22:28 +02:00
co-authored by Claude Fable 5
parent c64231e8ee
commit 0bd895fcac
19 changed files with 903 additions and 673 deletions
+339
View File
@@ -0,0 +1,339 @@
//! Shared surname corpus for the economy generator binaries (T-1064).
//!
//! Single source of truth for the corridor/sector surname pools used by both
//! `generate_brands` (product names) and `generate_corporations` (business
//! names). The pools were previously duplicated in each binary's `names.rs`;
//! they are extracted here so the corpora cannot drift apart.
//!
//! Included via `#[path = "../shared/surname_corpus.rs"]` from each binary's
//! `main.rs` — this directory is not a cargo bin target (no `main.rs`).
//!
//! NOTE: both binaries feed the systems.db meta stamp — this file is part of
//! the `import_economics` source set in `tooling/check-systems-db-stamp`
//! (GENERATOR_SOURCES). Changing any pool requires `make regen-db`.
//! Pool contents are surname data drawn from founding cultures in wiki canon;
//! ordering is load-bearing (index-based RNG draws), so never reorder.
/// Core systems: cosmopolitan mix — the Reach's center of gravity.
pub const CORE_NAMES: &[&str] = &[
"Alvarez",
"Benoit",
"Carvalho",
"Durand",
"Eriksen",
"Fournier",
"Gao",
"Hartmann",
"Ishida",
"Johansson",
"Kirchner",
"Lemaire",
"Moreau",
"Nakamura",
"Olsson",
"Pelletier",
"Richter",
"Saito",
"Torres",
"Ueda",
"Vasquez",
"Werner",
"Xu",
"Yamada",
"Zhou",
"Andersen",
"Beaumont",
"Costa",
"Delacroix",
"Engel",
"Fujita",
"Gutierrez",
"Hayashi",
"Ibarra",
"Jensen",
"Klein",
"Laurent",
"Mercier",
"Novak",
"Ortiz",
"Park",
"Reuter",
"Suzuki",
"Takahashi",
"Ulrich",
"Valentin",
"Wagner",
"Xie",
"Yilmaz",
"Zhang",
];
/// North reach: Nordic, Scottish, northern European — Calloway heritage.
pub const NORTH_REACH_NAMES: &[&str] = &[
"Andersson",
"Bjornsson",
"Calloway",
"Dalsgaard",
"Eklund",
"Falk",
"Grimstad",
"Hedlund",
"Ivarsson",
"Jonasson",
"Kirkpatrick",
"Lindqvist",
"MacLeod",
"Nordstrom",
"Olafsson",
"Pettersson",
"Rehn",
"Strandberg",
"Thorsen",
"Ulvskog",
"Vikstrom",
"Wahlberg",
"Aberg",
"Berglund",
"Carlsen",
"Dalgaard",
"Engstrom",
"Forsell",
"Gustafsson",
"Halvorsen",
"Ingvarsson",
"Jansson",
"Knudsen",
"Lundin",
"MacPherson",
"Nylund",
"Ostergaard",
"Palsson",
"Rasmussen",
"Sjoberg",
"Toft",
"Ulfsson",
"Vestergaard",
"Wiklund",
"Aasen",
"Brannstrom",
"Dahl",
"Eide",
"Friberg",
"Gren",
];
/// South reach: Eastern European, East Asian industrial — Stalownia corridor.
pub const SOUTH_REACH_NAMES: &[&str] = &[
"Adamski",
"Baranov",
"Chernov",
"Dubois",
"Egorov",
"Filipov",
"Gromov",
"Horvat",
"Ivanova",
"Jankovic",
"Kowalski",
"Lazarev",
"Morozov",
"Novikov",
"Ostrowski",
"Petrov",
"Reznik",
"Sokolov",
"Tkachenko",
"Uvarov",
"Volkov",
"Wojcik",
"Yakimov",
"Zheng",
"Babic",
"Chernyshev",
"Dragunov",
"Fedorov",
"Grushevsky",
"Havel",
"Ito",
"Jovanovic",
"Katsaros",
"Lebedev",
"Mazur",
"Nemec",
"Ochoa",
"Popov",
"Radic",
"Smirnov",
"Tanaka",
"Urasawa",
"Vasiliev",
"Watanabe",
"Xiang",
"Yegorov",
"Zaytsev",
"Borysko",
"Chen",
"Dimitrov",
];
/// West reach: German, Central European — Compact territory, Westphalian influence.
pub const WEST_REACH_NAMES: &[&str] = &[
"Albrecht",
"Baumann",
"Christensen",
"Dietrich",
"Eisenberg",
"Fischer",
"Gruber",
"Hoffmann",
"Ingolstadt",
"Jaeger",
"Kessler",
"Lehmann",
"Mueller",
"Neumann",
"Obermann",
"Pfeiffer",
"Quandt",
"Roth",
"Schaefer",
"Thiel",
"Urban",
"Vogt",
"Weidenfeld",
"Ziegler",
"Becker",
"Claussen",
"Dorfmann",
"Eberhardt",
"Fleischer",
"Gerstner",
"Haber",
"Imhof",
"Jung",
"Kraemer",
"Linden",
"Metzger",
"Niedermann",
"Opitz",
"Preuss",
"Raabe",
"Steinbach",
"Trautmann",
"Unger",
"Vollmer",
"Winterberg",
"Zahn",
"Auerbach",
"Bruckner",
"Dahlem",
"Eckhardt",
];
/// East reach: Filipino, Korean, maritime Asian — distinctive identity.
pub const EAST_REACH_NAMES: &[&str] = &[
"Aquino",
"Bautista",
"Cruz",
"Dalisay",
"Espiritu",
"Flores",
"Garcia",
"Hernandez",
"Ilagan",
"Jeon",
"Kim",
"Lim",
"Magalang",
"Navarro",
"Ocampo",
"Park",
"Quijano",
"Reyes",
"Santos",
"Tan",
"Uy",
"Villanueva",
"Wong",
"Yoo",
"Aguilar",
"Buenaventura",
"Castillo",
"Dizon",
"Enriquez",
"Fernandez",
"Gonzales",
"Hwang",
"Ignacio",
"Jeong",
"Kwon",
"Lee",
"Marasigan",
"Nakamura",
"Oh",
"Perez",
"Ramos",
"Son",
"Tolentino",
"Umali",
"Valdez",
"Yun",
"Zamora",
"Baek",
"Choi",
"Dela Cruz",
];
/// Deep frontier: mixed backgrounds from all settler waves — no dominant culture.
pub const FRONTIER_NAMES: &[&str] = &[
"Adeyemi",
"Bergstrom",
"Chandra",
"Duval",
"Emeka",
"Fonseca",
"Gupta",
"Hassan",
"Ibrahim",
"Jansson",
"Kovac",
"Liu",
"Martinez",
"Nkosi",
"Okafor",
"Patel",
"Quinn",
"Rodriguez",
"Sousa",
"Thorne",
"Uddin",
"Varga",
"Wu",
"Xiong",
"Yoshida",
"Zhao",
"Abara",
"Beaumont",
"Cardenas",
"Doyle",
"Ekwueme",
"Ferreira",
"Gomes",
"Henriksen",
"Idris",
"Juma",
"Kato",
"Larsen",
"Morales",
"Ndlovu",
"Osei",
"Petrov",
"Ruiz",
"Singh",
"Tavares",
"Uchida",
"Volkov",
"Wang",
"Yang",
"Zaman",
];