feat(engine): retire D-078 overheard conversation system (#848)

Per R-012: delete conversation.rs, both overheard content files, and
remove all 6 wire-up points (social_plugin, bridge/types, monologue,
voice/integration). Protocol version 22 → 23. Scope confirmed by
#842 audit — npc/ and content/global/ untouched. Surviving NPC
components (NpcName, NpcColorIndex, NpcConversation) migrated to
simulation/npc_components.rs for use by D-080 knowledge propagation.
Also applies pre-existing cargo fmt debt (names.rs and 4 others).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-19 14:08:26 +02:00
co-authored by Claude Sonnet 4.6
parent e11a9c308a
commit e86e53ec06
29 changed files with 645 additions and 1818 deletions
+72 -35
View File
@@ -279,18 +279,14 @@ fn corp_eligible(corp: &Corp, template_scale: &str, template_corridor: &str) ->
// Match sector to corridor
let sector = corp.geographic_sector.as_deref().unwrap_or("core");
let corridor_matches_sector = match template_corridor {
match template_corridor {
"north_reach" | "north_reach/compact" => sector == "north_reach",
"south_reach" => sector == "south_reach",
"west_reach" | "west_reach/compact" => sector == "west_reach",
"east_reach" | "inner_corridor/east_reach" => {
sector == "east_reach" || sector == "core"
}
"east_reach" | "inner_corridor/east_reach" => sector == "east_reach" || sector == "core",
"frontier" => sector == "deep_frontier",
_ => false,
};
corridor_matches_sector
}
}
// ---------------------------------------------------------------------------
@@ -308,13 +304,7 @@ fn scale_abbrev(scale_tier: &str) -> &'static str {
fn to_slug(s: &str) -> String {
s.chars()
.map(|c| {
if c.is_ascii_alphanumeric() {
c
} else {
'-'
}
})
.map(|c| if c.is_ascii_alphanumeric() { c } else { '-' })
.collect::<String>()
.split('-')
.filter(|p| !p.is_empty())
@@ -371,8 +361,16 @@ fn generate_pair(
valid_commodities: &BTreeSet<String>,
) -> Option<GeneratedPair> {
let corridor = parse_template_corridor(&template.naming_pattern);
let halo_bid = halo_id(&corp.corp_id, &template.archetype_group, &template.scale_tier);
let vol_bid = volume_id(&corp.corp_id, &template.archetype_group, &template.scale_tier);
let halo_bid = halo_id(
&corp.corp_id,
&template.archetype_group,
&template.scale_tier,
);
let vol_bid = volume_id(
&corp.corp_id,
&template.archetype_group,
&template.scale_tier,
);
let halo_name = names::generate_halo_name(rng, corridor, &template.brand_category);
let vol_name = names::generate_volume_name(rng, corridor, &template.brand_category);
@@ -493,16 +491,16 @@ fn round2(v: f64) -> f64 {
// Output serialization
// ---------------------------------------------------------------------------
fn write_output(
path: &PathBuf,
products: &[BrandProduct],
inputs: &[BrandInput],
) {
fn write_output(path: &PathBuf, products: &[BrandProduct], inputs: &[BrandInput]) {
let mut out = String::new();
out.push_str("# Generated Minor Brand Products — The Settled Reach\n");
out.push_str("# Auto-generated by generate_brands binary. Do not hand-edit.\n");
out.push_str("# Re-run: tooling/generate-brands\n");
out.push_str(&format!("# Total: {} brand_products, {} brand_inputs\n\n", products.len(), inputs.len()));
out.push_str(&format!(
"# Total: {} brand_products, {} brand_inputs\n\n",
products.len(),
inputs.len()
));
for p in products {
out.push_str("[[brand_products]]\n");
@@ -524,7 +522,10 @@ fn write_output(
out.push_str(&format!("origin_system = {:?}\n", sys));
}
out.push_str(&format!("terroir_locked = {}\n", p.terroir_locked));
out.push_str(&format!("currency_denomination = {:?}\n", p.currency_denomination));
out.push_str(&format!(
"currency_denomination = {:?}\n",
p.currency_denomination
));
out.push_str(&format!("shadow_viable = {}\n", p.shadow_viable));
out.push_str(&format!("brand_tier = {:?}\n", p.brand_tier));
if let Some(ref hid) = p.halo_brand_id {
@@ -578,7 +579,10 @@ fn print_coverage(products: &[BrandProduct]) {
let min_per_corp = by_corp.values().min().copied().unwrap_or(0);
let max_per_corp = by_corp.values().max().copied().unwrap_or(0);
println!(" Corps covered: {}", by_corp.len());
println!(" Brands per corp: min={} max={}", min_per_corp, max_per_corp);
println!(
" Brands per corp: min={} max={}",
min_per_corp, max_per_corp
);
}
// ---------------------------------------------------------------------------
@@ -628,7 +632,11 @@ fn main() {
println!(" [2/5] Loading corporations and commodities...");
let corps = load_corps(&conn);
let valid_commodities = load_valid_commodity_ids(&conn);
println!(" {} corps, {} valid commodities", corps.len(), valid_commodities.len());
println!(
" {} corps, {} valid commodities",
corps.len(),
valid_commodities.len()
);
// Generate brand pairs
println!(" [3/5] Generating brand pairs...");
@@ -640,12 +648,24 @@ fn main() {
for (template_key, template) in &templates {
for corp in &corps {
if !corp_eligible(corp, &template.scale_tier, parse_template_corridor(&template.naming_pattern)) {
if !corp_eligible(
corp,
&template.scale_tier,
parse_template_corridor(&template.naming_pattern),
) {
continue;
}
let halo_bid = halo_id(&corp.corp_id, &template.archetype_group, &template.scale_tier);
let vol_bid = volume_id(&corp.corp_id, &template.archetype_group, &template.scale_tier);
let halo_bid = halo_id(
&corp.corp_id,
&template.archetype_group,
&template.scale_tier,
);
let vol_bid = volume_id(
&corp.corp_id,
&template.archetype_group,
&template.scale_tier,
);
// Skip if IDs already generated (name-collision guard)
if seen_ids.contains(&halo_bid) || seen_ids.contains(&vol_bid) {
@@ -653,7 +673,9 @@ fn main() {
continue;
}
if let Some(pair) = generate_pair(&mut rng, corp, template_key, template, &valid_commodities) {
if let Some(pair) =
generate_pair(&mut rng, corp, template_key, template, &valid_commodities)
{
seen_ids.insert(halo_bid);
seen_ids.insert(vol_bid);
products.push(pair.halo);
@@ -664,7 +686,11 @@ fn main() {
}
}
println!(" {} brand_products generated ({} skipped)", products.len(), skipped);
println!(
" {} brand_products generated ({} skipped)",
products.len(),
skipped
);
// Gap-fill: if under target, add more by re-applying reach_wide templates
// with a counter suffix to avoid ID collisions.
@@ -679,7 +705,8 @@ fn main() {
let mut template_idx = 0usize;
while products.len() < cli.min_brands && !reach_wide_templates.is_empty() {
let (template_key, template) = reach_wide_templates[template_idx % reach_wide_templates.len()];
let (template_key, template) =
reach_wide_templates[template_idx % reach_wide_templates.len()];
let corp = &corps[counter % corps.len()];
counter += 1;
@@ -704,7 +731,9 @@ fn main() {
continue;
}
if let Some(pair) = generate_pair(&mut rng, corp, template_key, template, &valid_commodities) {
if let Some(pair) =
generate_pair(&mut rng, corp, template_key, template, &valid_commodities)
{
let mut halo = pair.halo;
let mut volume = pair.volume;
halo.brand_product_id = halo_bid.clone();
@@ -713,8 +742,12 @@ fn main() {
let mut inputs_halo = pair.inputs_halo;
let mut inputs_volume = pair.inputs_volume;
for i in &mut inputs_halo { i.brand_product_id = halo_bid.clone(); }
for i in &mut inputs_volume { i.brand_product_id = vol_bid.clone(); }
for i in &mut inputs_halo {
i.brand_product_id = halo_bid.clone();
}
for i in &mut inputs_volume {
i.brand_product_id = vol_bid.clone();
}
seen_ids.insert(halo_bid);
seen_ids.insert(vol_bid);
@@ -741,7 +774,11 @@ fn main() {
// Write output
println!("\n [5/5] Writing output...");
write_output(&output_path, &products, &inputs);
println!(" {} brand_products, {} brand_inputs", products.len(), inputs.len());
println!(
" {} brand_products, {} brand_inputs",
products.len(),
inputs.len()
);
println!(" Output: {}", output_path.display());
println!(" Done.\n");
}
+454 -70
View File
@@ -13,60 +13,321 @@ use rand_chacha::ChaCha8Rng;
// ---------------------------------------------------------------------------
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",
"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",
];
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",
"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",
];
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",
"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",
];
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",
"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",
];
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",
"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",
];
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",
"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",
];
fn names_for_corridor(corridor: &str) -> &'static [&'static str] {
@@ -85,83 +346,206 @@ fn names_for_corridor(corridor: &str) -> &'static [&'static str] {
// ---------------------------------------------------------------------------
const TERROIR_HALO: &[&str] = &[
"Reserve", "Single", "Estate", "Vintage", "Heritage", "Grand", "Limited", "Prestige",
"Signature", "Cellar", "Select", "Cru", "Premier", "Old", "Aged",
"Reserve",
"Single",
"Estate",
"Vintage",
"Heritage",
"Grand",
"Limited",
"Prestige",
"Signature",
"Cellar",
"Select",
"Cru",
"Premier",
"Old",
"Aged",
];
const TERROIR_VOLUME: &[&str] = &[
"Standard", "Export", "Blend", "Classic", "Field", "Ordinary", "Running", "Table",
"Regular", "Common", "House", "Station", "Corridor", "Transit",
"Standard", "Export", "Blend", "Classic", "Field", "Ordinary", "Running", "Table", "Regular",
"Common", "House", "Station", "Corridor", "Transit",
];
const HERITAGE_CRAFT_HALO: &[&str] = &[
"Heritage", "Limited", "Artisan", "Master", "Guild", "Prestige", "Premium", "Classic",
"Signature", "Original", "Bespoke", "Traditional", "First",
"Heritage",
"Limited",
"Artisan",
"Master",
"Guild",
"Prestige",
"Premium",
"Classic",
"Signature",
"Original",
"Bespoke",
"Traditional",
"First",
];
const HERITAGE_CRAFT_VOLUME: &[&str] = &[
"Standard", "Classic", "Working", "Everyday", "Regular", "Plain", "Field", "Grade",
"Basic", "Workshop", "Studio", "Common",
"Standard", "Classic", "Working", "Everyday", "Regular", "Plain", "Field", "Grade", "Basic",
"Workshop", "Studio", "Common",
];
const TECH_PREMIUM_HALO: &[&str] = &[
"Elite", "Pro", "Advanced", "Precision", "Superior", "Grand", "Signature", "First",
"Prime", "Expert", "Master", "Apex", "Summit",
"Elite",
"Pro",
"Advanced",
"Precision",
"Superior",
"Grand",
"Signature",
"First",
"Prime",
"Expert",
"Master",
"Apex",
"Summit",
];
const TECH_PREMIUM_VOLUME: &[&str] = &[
"Standard", "Series", "Base", "Classic", "Regular", "Field", "Grade", "Value",
"Essential", "Core", "Basic",
"Standard",
"Series",
"Base",
"Classic",
"Regular",
"Field",
"Grade",
"Value",
"Essential",
"Core",
"Basic",
];
const CULTURAL_HALO: &[&str] = &[
"Archive", "Heritage", "Classic", "Definitive", "Prestige", "Limited", "Master",
"Collected", "Curated", "Canonical", "Flagship", "Grand",
"Archive",
"Heritage",
"Classic",
"Definitive",
"Prestige",
"Limited",
"Master",
"Collected",
"Curated",
"Canonical",
"Flagship",
"Grand",
];
const CULTURAL_VOLUME: &[&str] = &[
"Standard", "Classic", "Essential", "Value", "Regular", "Base", "Field",
"Running", "Everyday", "Popular",
"Standard",
"Classic",
"Essential",
"Value",
"Regular",
"Base",
"Field",
"Running",
"Everyday",
"Popular",
];
const SERVICE_PREMIUM_HALO: &[&str] = &[
"Premier", "Elite", "Priority", "Signature", "Prestige", "Grand", "First", "Select",
"Platinum", "Gold", "Senior", "Executive",
"Premier",
"Elite",
"Priority",
"Signature",
"Prestige",
"Grand",
"First",
"Select",
"Platinum",
"Gold",
"Senior",
"Executive",
];
const SERVICE_PREMIUM_VOLUME: &[&str] = &[
"Standard", "Basic", "Classic", "Regular", "Field", "Value", "General", "Common",
"Ordinary", "Essential",
"Standard",
"Basic",
"Classic",
"Regular",
"Field",
"Value",
"General",
"Common",
"Ordinary",
"Essential",
];
const COMMODITY_BRANDED_HALO: &[&str] = &[
"Original", "Select", "Premium", "Reserve", "Classic", "Heritage", "Signature",
"Superior", "First", "Grade", "Certified",
"Original",
"Select",
"Premium",
"Reserve",
"Classic",
"Heritage",
"Signature",
"Superior",
"First",
"Grade",
"Certified",
];
const COMMODITY_BRANDED_VOLUME: &[&str] = &[
"Standard", "Basic", "Regular", "Field", "Value", "Economy", "Bulk", "Run",
"Common", "Grade", "Plain",
"Standard", "Basic", "Regular", "Field", "Value", "Economy", "Bulk", "Run", "Common", "Grade",
"Plain",
];
const DESIGN_HERITAGE_HALO: &[&str] = &[
"Heritage", "Limited", "Prestige", "Grand", "Signature", "Edition", "Series",
"Classic", "Archive", "Collector", "Retrospective",
"Heritage",
"Limited",
"Prestige",
"Grand",
"Signature",
"Edition",
"Series",
"Classic",
"Archive",
"Collector",
"Retrospective",
];
const DESIGN_HERITAGE_VOLUME: &[&str] = &[
"Standard", "Classic", "Regular", "Field", "Value", "Base", "Essential",
"Running", "Contemporary", "Current",
"Standard",
"Classic",
"Regular",
"Field",
"Value",
"Base",
"Essential",
"Running",
"Contemporary",
"Current",
];
const PLATFORM_CATALOGUE_HALO: &[&str] = &[
"Premium", "Pro", "Plus", "Elite", "Advanced", "Signature", "Select", "Grand",
"Unlimited", "Complete", "Full",
"Premium",
"Pro",
"Plus",
"Elite",
"Advanced",
"Signature",
"Select",
"Grand",
"Unlimited",
"Complete",
"Full",
];
const PLATFORM_CATALOGUE_VOLUME: &[&str] = &[
"Standard", "Basic", "Classic", "Regular", "Field", "Value", "Entry", "Lite",
"Essential", "Free",
"Standard",
"Basic",
"Classic",
"Regular",
"Field",
"Value",
"Entry",
"Lite",
"Essential",
"Free",
];
fn halo_descriptors(brand_category: &str) -> &'static [&'static str] {