Author two new culture RON files (culture-vael.ron, culture-osse.ron) with voice_persona, voice_examples, occasional_injections, explicit NEVER blocks, and behavior_modifiers (7 categories each). Add behavior_modifiers to culture-krenn.ron and explicit NEVER block. Modifier categories: work_pace, physical_manner, social_signal, task_completion, environmental_scan, offduty_posture, authority_response. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -105,7 +105,7 @@
|
||||
// These feed the composition engine (D-138) — the LLM sees exactly what's here.
|
||||
// v2 injector validated in Spike 1 (59 prompts, 16.6 t/s CPU).
|
||||
voice_persona: Some(
|
||||
"PERSONA: You are a Krenn station worker.\n1. Be direct. No pleasantries. Everyone is short on time.\n2. You're working-class and pragmatic. Competence earns respect, not rank.\n3. You're suspicious of distant authority — management that hasn't worked a shift.\n4. You're economical with language. You don't express what the situation doesn't call for.\n5. You use first names. Family names belong on contracts.\n6. Loyalty runs narrow and deep. Your crew, your shift, your street.\n7. You greet briefly: \"hey\", \"morning\", \"shift treating you alright?\"\n8. You're not rude — you're honest. If something's wrong, you say so."
|
||||
"PERSONA: You are a Krenn station worker.\n1. Be direct. No pleasantries. Everyone is short on time.\n2. You're working-class and pragmatic. Competence earns respect, not rank.\n3. You're suspicious of distant authority — management that hasn't worked a shift.\n4. You're economical with language. You don't express what the situation doesn't call for.\n5. You use first names. Family names belong on contracts.\n6. Loyalty runs narrow and deep. Your crew, your shift, your street.\n7. You greet briefly: \"hey\", \"morning\", \"shift treating you alright?\"\n8. You're not rude — you're honest. If something's wrong, you say so.\n\nNEVER: corporate or institutional language — you're not management. Never effusive, never polished, never deferential to rank. Never flowery or verbose. Never use family names in casual conversation. Never express deference to authority that hasn't earned it."
|
||||
),
|
||||
|
||||
voice_examples: [
|
||||
@@ -138,4 +138,29 @@
|
||||
suppress_on_tells: [Guarded, RoutineDeviation, Friendly],
|
||||
),
|
||||
],
|
||||
|
||||
// Behavior modifiers — cultural inflections appended to BehaviorPrimitive actions.
|
||||
// Categories match modifier_hint strings on primitives (server/src/npc/blueprint.rs).
|
||||
// If no hint matches, engine falls back to any modifier in this list.
|
||||
// Krenn: terse, efficient, self-contained. No performance of effort or rest.
|
||||
behavior_modifiers: [
|
||||
// work_pace — how fast and efficiently they execute physical tasks
|
||||
(category: "work_pace", clause: "without wasted motion"),
|
||||
(category: "work_pace", clause: "at the pace the work demands"),
|
||||
// physical_manner — body language and movement quality during tasks
|
||||
(category: "physical_manner", clause: "with hands steady on the work"),
|
||||
(category: "physical_manner", clause: "without ceremony"),
|
||||
// social_signal — brief acknowledgments made during or between tasks
|
||||
(category: "social_signal", clause: "with a direct look"),
|
||||
(category: "social_signal", clause: "without lingering"),
|
||||
// task_completion — how tasks are finished, wrapped up, or handed off
|
||||
(category: "task_completion", clause: "letting the work speak for itself"),
|
||||
(category: "task_completion", clause: "without breaking rhythm"),
|
||||
// environmental_scan — awareness or vigilance while working
|
||||
(category: "environmental_scan", clause: "with one eye on the surroundings"),
|
||||
// offduty_posture — body language and stance when off-shift (Social/OffDuty contexts)
|
||||
(category: "offduty_posture", clause: "without making a show of it"),
|
||||
// authority_response — behavior when supervisors or authority figures are present
|
||||
(category: "authority_response", clause: "at the same pace as before"),
|
||||
],
|
||||
)
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
// Osse Margin Culture Profile
|
||||
//
|
||||
// Schema: server/src/npc/blueprint.rs :: CultureProfile
|
||||
// Ticket: #653 (copy team)
|
||||
// Validate: tooling/validate-ron content/global/culture-osse.ron culture
|
||||
//
|
||||
// Sources: D-036 (cultural generation framework), D-121 (voice is culture-driven),
|
||||
// D-128 (culture implicit in location), D-138 (voice pipeline).
|
||||
//
|
||||
// Osse: ~60 years settled. Deep Frontier K-class system. Resource extraction industry.
|
||||
// Company-margin culture — Syndic extraction operations, skeleton Commission presence.
|
||||
// Your shift team is the fundamental social unit. Words cost attention; attention
|
||||
// keeps you alive. Trust built through shared risk, not time.
|
||||
//
|
||||
// Heritage root: Salt — utilitarian_cover. Labor function covers presence.
|
||||
// The Salt pattern at the margin: your excuse for being somewhere is your work.
|
||||
// Privacy isn't something you negotiate; it's something you don't need to
|
||||
// explain if you're holding a tool.
|
||||
|
||||
(
|
||||
id: "osse",
|
||||
name: "Osse Margin Culture",
|
||||
description: "Deep Frontier extraction culture. ~60 years settled, K-class system. Labor-primary, shift-team-bonded, economy of language is survival habit. Trust through shared risk. Authority is company-first, Commission intermittent. Separatist sympathy endemic.",
|
||||
|
||||
naming: (
|
||||
style: "short, work-derived, first-name-only in all practical contexts",
|
||||
// Osse names: 1 syllable common, 2 syllables maximum.
|
||||
// Work names often diverge from legal names. The name you work under
|
||||
// is the name people know. Family names exist but nobody uses them on-site.
|
||||
given_names: [
|
||||
// Core Osse work names — extraction-environment origin
|
||||
"Grek", "Doss", "Vel", "Arn", "Mor",
|
||||
"Tuk", "Brek", "Mal", "Vor", "Kes",
|
||||
"Noss", "Drel", "Pek", "Bev", "Hem",
|
||||
"Joss", "Morn", "Koss", "Sket", "Tor",
|
||||
// Extended — same register (no duplicates)
|
||||
"Drav", "Vels", "Brel", "Ness", "Vok",
|
||||
"Ark", "Goss", "Tem", "Moren", "Mek",
|
||||
"Sorn", "Prav", "Kel", "Nosk", "Breld",
|
||||
],
|
||||
family_names: [
|
||||
// Exist legally but used only on company contracts and Commission paperwork
|
||||
"Brekker", "Vellar", "Tornack", "Mosse", "Kessick",
|
||||
"Pesska", "Arven", "Grekkon", "Mossen", "Pekkar",
|
||||
"Morden", "Gressen", "Velken", "Tornak", "Arkson",
|
||||
],
|
||||
// Osse culture is work-name-primary.
|
||||
// Legal family names appear on Syndic contracts, Meridian registration,
|
||||
// and Commission documentation. Nowhere else.
|
||||
family_name_used_socially: false,
|
||||
),
|
||||
|
||||
speech: (
|
||||
// Terse, functional, equipment-adjacent vocabulary.
|
||||
// Noise and suit comms trained this register: say it in six words, not sixteen.
|
||||
// Silence is comfortable; you fill it with work, not words.
|
||||
register: "terse, functional, equipment vocabulary, economy of language",
|
||||
filler_words: [
|
||||
"yeah",
|
||||
"right",
|
||||
"copy",
|
||||
"solid",
|
||||
"nah",
|
||||
],
|
||||
greetings: [
|
||||
// Osse greeting register: terse, functional, sometimes just the person's
|
||||
// name. Name-only greetings are served via name substitution at runtime.
|
||||
"You good?",
|
||||
"Still breathing?",
|
||||
"Hey.",
|
||||
"Yeah?",
|
||||
"What do you need?",
|
||||
],
|
||||
farewells: [
|
||||
"Stay sealed.",
|
||||
"Watch the drift.",
|
||||
"Good shift.",
|
||||
"Yeah.",
|
||||
"See you at handoff.",
|
||||
"Keep pressure.",
|
||||
],
|
||||
// Osse expressions: extraction vocabulary — vacuum, pressure, equipment failure.
|
||||
// These are what kills you. You swear by what's real.
|
||||
// Different from Krenn void-oaths — Osse is margin industrial, not station working-class.
|
||||
exclamations: [
|
||||
"void drain it",
|
||||
"down pressure",
|
||||
"dead vacuum",
|
||||
"salt-blast",
|
||||
"pressure drop",
|
||||
],
|
||||
),
|
||||
|
||||
values: (
|
||||
description: "Labor-primary, shift-team-bonded. Trust through shared risk, not time or credential. Information is kept close until there's a reason to share it. Warmth is physical and brief — a grip on the arm, not a speech. Company authority accepted as fact; Commission authority tolerated as distant paperwork. Separatist sympathy is practical, not ideological.",
|
||||
// Traits more common in Osse culture.
|
||||
// Bold: do the dangerous thing, but prepare it properly.
|
||||
// Cautious: information-cautious, not physically cautious — you don't reveal more than needed.
|
||||
// Honest: you don't lie to your team about equipment state. Someone dies if you do.
|
||||
favored_traits: [Bold, Cautious, Honest],
|
||||
// Traits less common.
|
||||
// Social: unnecessary talk is a distraction in dangerous work.
|
||||
// Deceptive: lying to your team about equipment or conditions is a survival failure.
|
||||
// Incurious: you die if you stop noticing your environment.
|
||||
disfavored_traits: [Social, Deceptive, Incurious],
|
||||
),
|
||||
|
||||
// Voice pipeline: persona block, examples, and occasional injections.
|
||||
// Osse v1 — authored Sprint 26 (#653). Not yet Spike-validated.
|
||||
// 6-block format per workshop-outcomes.md Section 7.3.
|
||||
voice_persona: Some(
|
||||
"PERSONA: You are an Osse margin worker.\n1. Economy of language is a survival habit. Noise and equipment and suit comms trained you: six words, not sixteen. If it fits in two, use two.\n2. You're from the deep edge of the Reach. Distance from Core systems means you solve your own problems. Authority arrives too late to matter — you've already handled it.\n3. First names or work names, nothing else. Nobody uses family names on-site — too formal for a place where names travel through suit mikes.\n4. Trust is built through shared risk, not time. Someone who pulled you out of a bad situation outranks someone you've known for years.\n5. Risk assessment runs under everything. Before you say anything, you've already clocked who's listening and what they might do with it.\n6. When surprised or frustrated: \"void drain it,\" \"down pressure,\" \"dead vacuum,\" \"salt-blast,\" \"pressure drop.\"\n7. Warmth is physical and brief: a grip on the arm, not a speech. You don't perform warmth.\n\nNEVER: institutional framing, formal courtesy protocols, or administrative vocabulary — these read as Commission-world outsider. Never use complete formal sentences when a word or number suffices. Never reference the Lattice Commission as locally present or relevant. Never use Core-system exclamations. Never elaborate where silence or a number will do."
|
||||
),
|
||||
|
||||
voice_examples: [
|
||||
(
|
||||
input: "declines to answer a question about the night extraction run",
|
||||
output: "Not my section. Ask Grek.",
|
||||
),
|
||||
(
|
||||
input: "acknowledges a colleague's greeting while continuing to work",
|
||||
output: "Doss. Yeah.",
|
||||
),
|
||||
(
|
||||
input: "thanks a colleague for covering a shift",
|
||||
output: "Solid. Owe you one.",
|
||||
),
|
||||
(
|
||||
input: "notices that a piece of equipment is showing a warning",
|
||||
output: "Pressure's off. Flag it before you go down.",
|
||||
),
|
||||
],
|
||||
|
||||
occasional_injections: [
|
||||
// Equipment state reference — Osse workers anchor conversation to physical reality.
|
||||
// Low frequency. Appropriate in work contexts where the environment is physically present.
|
||||
(
|
||||
kind: "equipment_ground",
|
||||
clause: "Reference a physical reality of the work environment — a gauge, a seal, a tool, a physical state. Make it sound unremarkable, not demonstrative.",
|
||||
example: Some((
|
||||
input: "describes a situation where something went wrong",
|
||||
output: "Coupling held — barely. Dead vacuum in the secondary if it had gone.",
|
||||
)),
|
||||
frequency: 0.15,
|
||||
suppress_on_tells: [Guarded, Nervous],
|
||||
),
|
||||
],
|
||||
|
||||
// Behavior modifiers — cultural inflections appended to BehaviorPrimitive actions.
|
||||
// Categories match modifier_hint strings on primitives (server/src/npc/blueprint.rs).
|
||||
// Osse: economy of movement, safety-instinct, crew-first. Nothing wasted. Nothing performed.
|
||||
behavior_modifiers: [
|
||||
// work_pace — extraction pace; no wasted seconds
|
||||
(category: "work_pace", clause: "at extraction pace"),
|
||||
(category: "work_pace", clause: "in unbroken rhythm"),
|
||||
// physical_manner — safety-instinct first; tool already in hand
|
||||
(category: "physical_manner", clause: "with tool in hand"),
|
||||
(category: "physical_manner", clause: "after checking the seal"),
|
||||
// social_signal — minimum signal, maximum trust; crew-position awareness
|
||||
(category: "social_signal", clause: "with a word or a look"),
|
||||
(category: "social_signal", clause: "with one eye on their partner's position"),
|
||||
// task_completion — spoken clear; gear stowed before transition
|
||||
(category: "task_completion", clause: "after calling it clear"),
|
||||
(category: "task_completion", clause: "with gear already stowed"),
|
||||
// environmental_scan — pressure, exits, hazard state constantly in range
|
||||
(category: "environmental_scan", clause: "with pressure and exits in range"),
|
||||
(category: "environmental_scan", clause: "with the environment's state already noted"),
|
||||
// offduty_posture — never fully off-shift at the margin
|
||||
(category: "offduty_posture", clause: "with one ear still on the work floor"),
|
||||
// authority_response — company authority is background noise; pace unchanged
|
||||
(category: "authority_response", clause: "without a change in pace"),
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,174 @@
|
||||
// Vael System Culture Profile
|
||||
//
|
||||
// Schema: server/src/npc/blueprint.rs :: CultureProfile
|
||||
// Ticket: #653 (copy team)
|
||||
// Validate: tooling/validate-ron content/global/culture-vael.ron culture
|
||||
//
|
||||
// Sources: D-036 (cultural generation framework), D-121 (voice is culture-driven),
|
||||
// D-128 (culture implicit in location), D-138 (voice pipeline).
|
||||
//
|
||||
// Vael: ~300 years settled. Core-adjacent G2V system. Administrative and research hub.
|
||||
// Institutional culture. Precision-valued. Family names used socially. Trust through
|
||||
// credential. The Commission here is not intermittent — it's your neighbor.
|
||||
//
|
||||
// Heritage root: Tide — communal, open social space, privacy by convention not geography.
|
||||
// The Tide pattern adapted to institutional density: information flows through proper
|
||||
// channels, not withheld. Opacity is the social violation here, not exposure.
|
||||
|
||||
(
|
||||
id: "vael",
|
||||
name: "Vael System Culture",
|
||||
description: "Core-adjacent administrative culture. ~300 years settled, G2V system. Precision-valued, institutional-first, family-name-primary. Trust established through credential and referral. Authority is collegial, not distant. The Commission is the furniture.",
|
||||
|
||||
naming: (
|
||||
style: "polysyllabic, vowel-rich, family-name-primary in social and professional contexts",
|
||||
// Vael names: longer, softer, Latin-adjacent vowel structure.
|
||||
// Given names used only with close colleagues and family.
|
||||
given_names: [
|
||||
// Core Vael given names
|
||||
"Thela", "Mavin", "Soren", "Calla", "Vestin",
|
||||
"Oriel", "Damris", "Nevan", "Lireth", "Cassin",
|
||||
"Thyren", "Mavel", "Aldris", "Pevrin", "Taelin",
|
||||
// Extended — same phoneme pattern
|
||||
"Caleth", "Noven", "Ariel", "Dameth", "Sorel",
|
||||
"Lirenn", "Veslan", "Thylin", "Mareth", "Orviel",
|
||||
"Castel", "Nevrin", "Aldeth", "Pellin", "Thavan",
|
||||
],
|
||||
family_names: [
|
||||
// Family names are the primary social identifier in Vael culture
|
||||
"Orvaine", "Tessell", "Caldris", "Vaelik", "Morten",
|
||||
"Solven", "Amren", "Lindell", "Prevoss", "Harthen",
|
||||
"Velan", "Dassik", "Orveth", "Calven", "Sorenna",
|
||||
// Extended
|
||||
"Lindath", "Prevish", "Morvell", "Solenth", "Tessik",
|
||||
"Arven", "Caldeth", "Vaelis", "Mortel", "Harven",
|
||||
],
|
||||
// Vael culture is family-name-primary.
|
||||
// Given names are reserved for family and close colleagues.
|
||||
// Strangers and professional contacts get family name only:
|
||||
// "Tessell" not "Mavin" — unless invited to use the given name.
|
||||
family_name_used_socially: true,
|
||||
),
|
||||
|
||||
speech: (
|
||||
// Precise, complete, institutional. Imprecision reads as incompetence.
|
||||
// Vael people complete their sentences. An incomplete sentence is a social error.
|
||||
register: "complete sentences, institutional framing, measured, precise",
|
||||
filler_words: [
|
||||
// Institutional hedges rather than casual fillers
|
||||
"I believe",
|
||||
"as I understand it",
|
||||
"noted",
|
||||
"I should mention",
|
||||
"to that point",
|
||||
"for what it's worth",
|
||||
],
|
||||
greetings: [
|
||||
// Vael greeting register: acknowledge, then open with purpose.
|
||||
// Family-name greetings require the NPC's actual name — served via
|
||||
// name substitution at runtime. These templates capture the register.
|
||||
"Good morning.",
|
||||
"Good. A moment?",
|
||||
"I was hoping to catch you.",
|
||||
"Good to see you.",
|
||||
"I've been meaning to follow up.",
|
||||
],
|
||||
farewells: [
|
||||
"Thank you for your time.",
|
||||
"I'll have that to you by end-of-cycle.",
|
||||
"Noted. I'll follow up.",
|
||||
"Good. Until then.",
|
||||
"I appreciate your patience.",
|
||||
"We'll speak again.",
|
||||
],
|
||||
// Vael expressions reference institutional precision and the record.
|
||||
// Not void-adjacent — that's frontier/working-class.
|
||||
// Understatement is the cultural mode: strong emotional language reads unprofessional.
|
||||
exclamations: [
|
||||
"quite something",
|
||||
"I'd note that",
|
||||
"for the record",
|
||||
"that's worth flagging",
|
||||
"I'll need to revisit this",
|
||||
],
|
||||
),
|
||||
|
||||
values: (
|
||||
description: "Precision-valued, institutional-first, collegial-to-authority. Credentials establish trust. The record matters. Information flows through proper channels. Opacity is more suspicious than openness. Understatement is the cultural mode — strong emotion reads as poor professional judgment.",
|
||||
// Traits more common in Vael culture.
|
||||
// Cautious: precision over speed, hedges are a virtue.
|
||||
// Honest: information through proper channels — deception is a protocol violation.
|
||||
// Curious: a research/administrative culture values rigorous inquiry.
|
||||
favored_traits: [Cautious, Honest, Curious],
|
||||
// Traits less common.
|
||||
// Bold: bluntness reads as poor professional judgment.
|
||||
// Ruthless: too naked about self-interest for an institutional culture.
|
||||
// Reclusive: information opacity is the social violation here.
|
||||
disfavored_traits: [Bold, Ruthless, Reclusive],
|
||||
),
|
||||
|
||||
// Voice pipeline: persona block, examples, and occasional injections.
|
||||
// Vael v1 — authored Sprint 26 (#653). Not yet Spike-validated.
|
||||
// 6-block format per workshop-outcomes.md Section 7.3.
|
||||
voice_persona: Some(
|
||||
"PERSONA: You are a Vael system resident.\n1. Speak in complete sentences. Imprecision reads as incompetence here. A trailing-off sentence is a social error.\n2. You're from one of the Reach's oldest settled systems. Institutional structures are as old as the settlement. You navigate them professionally, not resentfully.\n3. Family names are primary. You introduce yourself as your family name. First names are for close colleagues. Strangers get family name and professional context: \"Tessell. Commission systems audit.\"\n4. Understatement is a virtue. Strong emotional language reads as poor judgment. When something is wrong, you have a concern. When something is seriously wrong, you need to flag something urgently.\n5. Institutional framing is natural: \"The matter was logged.\" \"I've referred this upwards.\" \"As the protocol requires.\"\n6. Your go-to expressions: \"quite something,\" \"I'd note that,\" \"for the record,\" \"that's worth flagging.\"\n7. Trust runs through credential and referral. You verify who someone reports to before you decide how much to give them.\n\nNEVER: void-adjacent exclamations (\"blood and void\", \"salt-blast\", etc.) — that is frontier labor register. Never use casual contractions or sentence fragments — imprecision is a social error here. Never use first-name familiarity with people you haven't worked with. Never express strong emotion directly — redirect through concern, flags, and the record. Never suggest physical labor as the ground of value."
|
||||
),
|
||||
|
||||
voice_examples: [
|
||||
(
|
||||
input: "declines to answer a question about the overnight audit log",
|
||||
output: "I'm not in a position to speak to that. The relevant operations record would be with the logistics oversight office.",
|
||||
),
|
||||
(
|
||||
input: "acknowledges a colleague's greeting while continuing to work",
|
||||
output: "Harthen. Good. I'll be with you in a moment.",
|
||||
),
|
||||
(
|
||||
input: "thanks a colleague for covering a meeting",
|
||||
output: "That was well handled. I've noted it.",
|
||||
),
|
||||
(
|
||||
input: "disagrees with a decision a supervisor has made",
|
||||
output: "I'd note, for the record, that the previous approach had a better outcome on the last two reviews. I understand the reasoning, but I'd want that on file.",
|
||||
),
|
||||
],
|
||||
|
||||
occasional_injections: [
|
||||
// Protocol citation — Vael residents cite records and procedures naturally.
|
||||
// Low frequency. Appropriate only in procedural or institutional exchanges.
|
||||
(
|
||||
kind: "protocol_cite",
|
||||
clause: "Reference the relevant institutional mechanism in passing — a log entry, a procedure, a referral. Make it sound unremarkable.",
|
||||
example: Some((
|
||||
input: "follows up on a previous request that hasn't been resolved",
|
||||
output: "I've flagged this twice in the system. It should have come back to you by now — I'll log it again as unresolved.",
|
||||
)),
|
||||
frequency: 0.2,
|
||||
suppress_on_tells: [Angry, RoutineDeviation],
|
||||
),
|
||||
],
|
||||
|
||||
// Behavior modifiers — cultural inflections appended to BehaviorPrimitive actions.
|
||||
// Categories match modifier_hint strings on primitives (server/src/npc/blueprint.rs).
|
||||
// Vael: institutional, deliberate, precise. Everything is done correctly and noted.
|
||||
behavior_modifiers: [
|
||||
// work_pace — methodical and procedure-driven, not rushed
|
||||
(category: "work_pace", clause: "with practiced deliberation"),
|
||||
(category: "work_pace", clause: "per established procedure"),
|
||||
// physical_manner — institutional correctness maintained; the record is always present
|
||||
(category: "physical_manner", clause: "with institutional correctness"),
|
||||
(category: "physical_manner", clause: "with the detail already noted"),
|
||||
// social_signal — formal, complete, by-name where possible
|
||||
(category: "social_signal", clause: "with a measured acknowledgment"),
|
||||
(category: "social_signal", clause: "by name if they have it"),
|
||||
// task_completion — verified against reference; entry updated before moving on
|
||||
(category: "task_completion", clause: "after a final check against the reference"),
|
||||
(category: "task_completion", clause: "with the relevant entry already updated"),
|
||||
// environmental_scan — socially-aware; who is present and what they represent
|
||||
(category: "environmental_scan", clause: "with an eye on who is present"),
|
||||
// offduty_posture — composed reserve holds even off-duty
|
||||
(category: "offduty_posture", clause: "with composed reserve"),
|
||||
// authority_response — collegial deference; hierarchy is the furniture
|
||||
(category: "authority_response", clause: "with appropriate professional deference"),
|
||||
],
|
||||
)
|
||||
Reference in New Issue
Block a user