refactor(data): rename Krenn to Van Maanen's Star

System S-057 assigned to real star GJ 35 (Van Maanen's Star, DG white
dwarf at 13.9 ly). Renamed across all content, server code, docs,
decisions, wiki lore, and config files. 224 files updated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 00:23:26 +01:00
co-authored by Claude Opus 4.6
parent 983d8037d1
commit e8263e209e
529 changed files with 1514 additions and 40873 deletions
+7 -7
View File
@@ -56,8 +56,8 @@ struct Args {
#[arg(long)]
seed: u64,
/// Culture to use (default: "krenn").
#[arg(long, default_value = "krenn")]
/// Culture to use (default: "van-maanens-star").
#[arg(long, default_value = "van-maanens-star")]
culture: String,
/// Phase 2: load zone spec and culture from RON files on disk.
@@ -226,10 +226,10 @@ fn hardcoded_industrial_zone() -> ZoneSpec {
// Phase 1: hardcoded culture stub
// ---------------------------------------------------------------------------
fn hardcoded_krenn_culture() -> CultureProfile {
fn hardcoded_van_maanens_star_culture() -> CultureProfile {
CultureProfile {
id: "krenn".into(),
name: "Krenn System Culture".into(),
id: "van-maanens-star".into(),
name: "Van Maanen's Star Culture".into(),
description: "Working-class pragmatic culture. ~180 years settled. Community-oriented, suspicious of distant authority, values competence and reliability.".into(),
naming: NamingConventions {
style: "compact, consonant-heavy, first-name-primary".into(),
@@ -1007,9 +1007,9 @@ fn main() {
}
};
let culture = match args.culture.as_str() {
"krenn" => hardcoded_krenn_culture(),
"van-maanens-star" => hardcoded_van_maanens_star_culture(),
other => {
eprintln!("Unknown culture: '{}'. Use 'krenn'.", other);
eprintln!("Unknown culture: '{}'. Use 'van-maanens-star'.", other);
eprintln!("(Phase 2 with --from-files loads culture RON from disk)");
process::exit(1);
}
+1 -1
View File
@@ -9,7 +9,7 @@
//! ```sh
//! # Via wrapper script (recommended):
//! tooling/validate-ron content/global/zone-identity-spec.example.ron zone
//! tooling/validate-ron content/global/culture-krenn.example.ron culture
//! tooling/validate-ron content/global/culture-van-maanens-star.example.ron culture
//!
//! # Direct:
//! cargo run --bin validate_ron -- <file.ron> <zone|culture>
+7 -7
View File
@@ -12,7 +12,7 @@
//!
//! The Rust structs ARE the schema. Copy team fills RON files to match these structs:
//! - Zone identity spec: ticket #609
//! - Culture profile (Krenn): ticket #610
//! - Culture profile (Van Maanen's Star): ticket #610
//!
//! ## Format
//!
@@ -106,7 +106,7 @@ pub struct SocialSiteSpec {
/// Example:
/// action_text: "moves freight containers"
/// context: OnShift
/// → assembled with Krenn modifier "with mechanical efficiency"
/// → assembled with Van Maanen's Star modifier "with mechanical efficiency"
/// → "moves freight containers with mechanical efficiency"
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BehaviorPrimitive {
@@ -231,7 +231,7 @@ pub fn assemble_behaviors(
/// they have, what values shape their personality distribution.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CultureProfile {
/// Culture identifier (e.g. "krenn").
/// Culture identifier (e.g. "van-maanens-star").
pub id: String,
/// Human-readable culture name.
pub name: String,
@@ -501,8 +501,8 @@ mod tests {
#[test]
fn culture_profile_round_trips_through_ron() {
let profile = CultureProfile {
id: "krenn".into(),
name: "Krenn System Culture".into(),
id: "van-maanens-star".into(),
name: "Van Maanen's Star Culture".into(),
description: "Working-class pragmatic culture".into(),
naming: NamingConventions {
style: "compact, consonant-heavy".into(),
@@ -531,7 +531,7 @@ mod tests {
let ron_str =
ron::ser::to_string_pretty(&profile, ron::ser::PrettyConfig::default()).unwrap();
let deserialized: CultureProfile = ron::from_str(&ron_str).unwrap();
assert_eq!(deserialized.id, "krenn");
assert_eq!(deserialized.id, "van-maanens-star");
assert_eq!(deserialized.naming.given_names.len(), 2);
assert_eq!(deserialized.values.favored_traits.len(), 2);
}
@@ -570,7 +570,7 @@ mod tests {
let output = SpikeOutput {
zone_type: "rural".into(),
seed: 42,
culture: "krenn".into(),
culture: "van-maanens-star".into(),
npcs: vec![],
};
+5 -5
View File
@@ -249,7 +249,7 @@ mod tests {
fn zone_cache_store_and_lookup() {
let mut cache = ZoneVoiceCache::new("v1".into(), "i1".into());
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Dialogue,
content_index: 0,
@@ -263,7 +263,7 @@ mod tests {
fn zone_cache_miss_returns_none() {
let cache = ZoneVoiceCache::new("v1".into(), "i1".into());
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Dialogue,
content_index: 0,
@@ -276,7 +276,7 @@ mod tests {
fn zone_cache_round_trips_through_msgpack() {
let mut cache = ZoneVoiceCache::new("v1".into(), "i1".into());
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Behavior,
content_index: 3,
@@ -297,7 +297,7 @@ mod tests {
let mut store = VoiceCacheStore::new(dir.clone(), 12345, "v1".into(), "i1".into());
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 1,
content_type: ContentType::Dialogue,
content_index: 0,
@@ -320,7 +320,7 @@ mod tests {
let mut store = VoiceCacheStore::new(dir.clone(), 42, "v1".into(), "i1".into());
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 1,
content_type: ContentType::Dialogue,
content_index: 0,
+7 -7
View File
@@ -87,7 +87,7 @@ mod tests {
fn cache_hit_returns_voiced_text() {
let cache = test_cache();
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Behavior,
content_index: 0,
@@ -96,7 +96,7 @@ mod tests {
cache.lock().unwrap().store(100, key, "Voiced line.".into());
let result = voiced_behavior(
&cache, 100, "krenn", 42, ContentType::Behavior, 0, None,
&cache, 100, "van-maanens-star", 42, ContentType::Behavior, 0, None,
"Base line.", false,
);
assert_eq!(result, "Voiced line.");
@@ -106,7 +106,7 @@ mod tests {
fn cache_miss_returns_base_text() {
let cache = test_cache();
let result = voiced_behavior(
&cache, 100, "krenn", 42, ContentType::Behavior, 0, None,
&cache, 100, "van-maanens-star", 42, ContentType::Behavior, 0, None,
"Base line.", false,
);
assert_eq!(result, "Base line.");
@@ -117,7 +117,7 @@ mod tests {
let cache = test_cache();
// Store a voiced version under the Factual key — it must never be returned.
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Factual,
content_index: 0,
@@ -131,7 +131,7 @@ mod tests {
let result = voiced_behavior(
&cache,
100,
"krenn",
"van-maanens-star",
42,
ContentType::Factual,
0,
@@ -147,7 +147,7 @@ mod tests {
let cache = test_cache();
// Even if cache has a voiced version, tell behaviors return base text
let key = CacheKey {
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
npc_stable_id: 42,
content_type: ContentType::Behavior,
content_index: 0,
@@ -156,7 +156,7 @@ mod tests {
cache.lock().unwrap().store(100, key, "Voiced tell.".into());
let result = voiced_behavior(
&cache, 100, "krenn", 42, ContentType::Behavior, 0,
&cache, 100, "van-maanens-star", 42, ContentType::Behavior, 0,
Some(TellCategory::Angry), "Base tell.", true,
);
assert_eq!(result, "Base tell.");
+10 -10
View File
@@ -372,10 +372,10 @@ mod tests {
};
use crate::npc::PersonalityTrait;
fn krenn_culture() -> CultureProfile {
fn van_maanens_star_culture() -> CultureProfile {
CultureProfile {
id: "krenn".into(),
name: "Krenn System Culture".into(),
id: "van-maanens-star".into(),
name: "Van Maanen's Star Culture".into(),
description: "Working-class pragmatic".into(),
naming: NamingConventions {
style: "compact".into(),
@@ -396,7 +396,7 @@ mod tests {
disfavored_traits: vec![PersonalityTrait::Reclusive],
},
voice_persona: Some(
"PERSONA: You are a Krenn station worker.\n\
"PERSONA: You are a Van Maanen's Star station worker.\n\
1. Be direct. No pleasantries.\n\
2. You're working-class and pragmatic."
.into(),
@@ -465,9 +465,9 @@ mod tests {
#[test]
fn prompt_contains_persona_when_present() {
let culture = krenn_culture();
let culture = van_maanens_star_culture();
let result = build_prompt(&culture, "Hello.", ContentType::Dialogue, None, 42);
assert!(result.prompt.contains("PERSONA: You are a Krenn station worker"));
assert!(result.prompt.contains("PERSONA: You are a Van Maanen's Star station worker"));
}
#[test]
@@ -479,7 +479,7 @@ mod tests {
#[test]
fn prompt_contains_examples_when_present() {
let culture = krenn_culture();
let culture = van_maanens_star_culture();
let result = build_prompt(&culture, "Hello.", ContentType::Dialogue, None, 42);
assert!(result.prompt.contains("EXAMPLES:"));
assert!(result.prompt.contains("Look, that's not mine to say."));
@@ -536,7 +536,7 @@ mod tests {
#[test]
fn guarded_tell_suppresses_oath_injection() {
let culture = krenn_culture();
let culture = van_maanens_star_culture();
// Run many seeds — none should fire oath with Guarded tell
for seed in 0..100 {
let result = build_prompt(
@@ -556,7 +556,7 @@ mod tests {
#[test]
fn neutral_tell_allows_oath_injection() {
let culture = krenn_culture();
let culture = van_maanens_star_culture();
// With enough seeds, at least one should fire (frequency 0.25)
let fired_count = (0..100)
.filter(|&seed| {
@@ -583,7 +583,7 @@ mod tests {
#[test]
fn deterministic_injection_for_same_seed() {
let culture = krenn_culture();
let culture = van_maanens_star_culture();
let result1 = build_prompt(&culture, "Test.", ContentType::Dialogue, None, 42);
let result2 = build_prompt(&culture, "Test.", ContentType::Dialogue, None, 42);
assert_eq!(result1.prompt, result2.prompt);
+1 -1
View File
@@ -242,7 +242,7 @@ mod tests {
priority,
npc_stable_id: 1,
zone_id: 100,
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
base_text: text.into(),
content_type: ContentType::Dialogue,
content_index: 0,
+2 -2
View File
@@ -482,7 +482,7 @@ mod tests {
priority: crate::voice::queue::Priority::High,
npc_stable_id: 42,
zone_id: 100,
culture_id: "krenn".into(),
culture_id: "van-maanens-star".into(),
base_text: "Test.".into(),
content_type: crate::voice::prompt_builder::ContentType::Dialogue,
content_index: 5,
@@ -490,7 +490,7 @@ mod tests {
seed: 99,
};
let key = cache_key_from_request(&request);
assert_eq!(key.culture_id, "krenn");
assert_eq!(key.culture_id, "van-maanens-star");
assert_eq!(key.npc_stable_id, 42);
assert_eq!(key.content_index, 5);
}