Expand voice style required vector

This commit is contained in:
Meta Vens 2026-05-01 19:36:16 +01:00
commit 91741bdef6
7 changed files with 307 additions and 20 deletions

View file

@ -110,13 +110,34 @@ machinery.
These describe how the performed self comes out in language:
- dryness
- warmth
- formality
- verbosity
- pace
- plainspoken directness
- lexical precision
- technical density
- figurative language
- narrative detail
- emotional explicitness
- sarcastic deflection
- pointedness
- sincerity evasion
- emotional evasion
- self disclosure
- hedging
- certainty marking
- politeness
- ritualized address
- register switching
- dialect marking
- humor
- banter as boundary
- verbal aggression
- plainspoken directness
- conversational dominance
- listening responsiveness
- question asking
- profanity
This layer matters because presentation strategy and voice are related but not
identical. Performing a prickly self may come out as dry sarcasm, clipped

View file

@ -65,8 +65,9 @@ emotion, stakes, prior assumptions, and social reinforcement.
## Label Set Policy
The labels in `agent-state.required-fields.json` are the required v0 core.
They are not comprehensive.
The labels in `agent-state.required-fields.json` are the required v0 core,
not per-character tags. They cover the axes Ghostlight currently treats as
first-class.
The validator requires each canonical agent fixture to include the full core
set so agents can be compared on the same axes. That means Cat's example does
@ -145,26 +146,41 @@ the agent is trying to maintain.
## Voice Style
Voice style describes how the performed self comes out in language. The current
v0 voice set is not comprehensive. It is a starter set added because Cat's
prickly sarcasm was too important to leave hidden inside presentation strategy
and behavioral dimensions.
Voice style describes how the performed self comes out in language. The v0
required vector covers broad communication mechanics, not only the most obvious
quirks in the current examples.
| Label | Meaning |
| --- | --- |
| `dryness` | Understated, deadpan, low-sentiment phrasing. |
| `warmth` | Inviting, affectionate, reassuring, or socially soft phrasing. |
| `formality` | Uses formal structure, titles, careful address, or institutionally correct phrasing. |
| `verbosity` | Tends toward longer turns, elaboration, qualification, or verbal sprawl. |
| `pace` | Moves quickly through turns, interruptions, replies, or topic shifts. |
| `plainspoken_directness` | Speaks plainly, concretely, or bluntly rather than ornamenting or obscuring. |
| `lexical_precision` | Chooses exact words, distinctions, definitions, or careful terms. |
| `technical_density` | Packs speech with specialist terms, systems language, procedure, or analysis. |
| `figurative_language` | Uses metaphor, image, analogy, poetic compression, or symbolic framing. |
| `narrative_detail` | Explains through context, sequence, anecdote, or concrete scene detail. |
| `emotional_explicitness` | Names feelings, needs, wounds, affection, fear, or attachment directly. |
| `sarcastic_deflection` | Uses sarcasm to redirect, dodge, or blunt sincerity, fear, gratitude, or pain. |
| `pointedness` | Cuts directly, sharply, or with barbed precision. |
| `sincerity_evasion` | Avoids emotionally plain or vulnerable language even when the feeling is present. |
| `emotional_evasion` | Avoids naming, dwelling in, or accepting emotional baggage. |
| `self_disclosure` | Volunteers personal history, inner state, motives, or private stakes. |
| `hedging` | Softens claims with uncertainty markers, caveats, deference, or exits. |
| `certainty_marking` | Signals confidence, finality, authority, or refusal to leave claims open. |
| `politeness` | Uses courtesy, mitigation, face-saving language, or social smoothing. |
| `ritualized_address` | Uses formulaic greetings, titles, honorifics, oaths, prayers, or ceremonial phrases. |
| `register_switching` | Shifts between speech registers depending on audience, status, danger, or role. |
| `dialect_marking` | Shows regional, class, occupational, subcultural, or community-specific speech markers. |
| `humor` | Uses jokes, wit, absurdity, teasing, or comic framing as a regular speech tool. |
| `banter_as_boundary` | Uses joking exchange to maintain distance while staying socially engaged. |
| `verbal_aggression` | Uses language to attack, intimidate, punish, or dominate. |
| `plainspoken_directness` | Speaks plainly, concretely, or bluntly rather than ornamenting or obscuring. |
Future voice labels probably need to cover things like lyrical speech,
formality, verbosity, hedging, coded politeness, theatricality, dialect,
register switching, technical compression, and ritualized address. Not yet.
We do not need the whole wardrobe before we know where the floor is.
| `conversational_dominance` | Takes, holds, redirects, or controls conversational floor and agenda. |
| `listening_responsiveness` | Reflects, tracks, validates, or adapts to what the other person just said. |
| `question_asking` | Uses questions to probe, invite, corner, teach, test, or keep the other person talking. |
| `profanity` | Uses taboo, vulgar, sacred, or deliberately coarse language. |
## Situational State

View file

@ -107,20 +107,37 @@ Human beings are regrettably efficient little porcupines.
`voice_style` describes how that performed self comes out in language.
For Cat, the important voice handles are explicit now:
The required voice handles are:
- `dryness`
- `warmth`
- `formality`
- `verbosity`
- `pace`
- `plainspoken_directness`
- `lexical_precision`
- `technical_density`
- `figurative_language`
- `narrative_detail`
- `emotional_explicitness`
- `sarcastic_deflection`
- `pointedness`
- `sincerity_evasion`
- `emotional_evasion`
- `self_disclosure`
- `hedging`
- `certainty_marking`
- `politeness`
- `ritualized_address`
- `register_switching`
- `dialect_marking`
- `humor`
- `banter_as_boundary`
- `verbal_aggression`
- `plainspoken_directness`
This list is not comprehensive. It is a v0 starter set. Future labels will
likely need to cover formality, verbosity, lyricism, hedging, ritual politeness,
dialect, register switching, technical compression, and other language habits.
- `conversational_dominance`
- `listening_responsiveness`
- `question_asking`
- `profanity`
So Cat's prickliness is not only a dialogue prompt instruction. It is backed by
canonical state:

View file

@ -309,6 +309,26 @@
"plasticity": 0.18,
"current_activation": 0.91
},
"warmth": {
"mean": 0.31,
"plasticity": 0.45,
"current_activation": 0.26
},
"formality": {
"mean": 0.22,
"plasticity": 0.52,
"current_activation": 0.18
},
"verbosity": {
"mean": 0.48,
"plasticity": 0.44,
"current_activation": 0.42
},
"pace": {
"mean": 0.72,
"plasticity": 0.31,
"current_activation": 0.78
},
"sarcastic_deflection": {
"mean": 0.84,
"plasticity": 0.2,
@ -343,6 +363,91 @@
"mean": 0.62,
"plasticity": 0.33,
"current_activation": 0.67
},
"lexical_precision": {
"mean": 0.66,
"plasticity": 0.35,
"current_activation": 0.7
},
"technical_density": {
"mean": 0.29,
"plasticity": 0.5,
"current_activation": 0.34
},
"figurative_language": {
"mean": 0.38,
"plasticity": 0.47,
"current_activation": 0.41
},
"narrative_detail": {
"mean": 0.24,
"plasticity": 0.46,
"current_activation": 0.2
},
"emotional_explicitness": {
"mean": 0.18,
"plasticity": 0.38,
"current_activation": 0.13
},
"self_disclosure": {
"mean": 0.16,
"plasticity": 0.36,
"current_activation": 0.12
},
"hedging": {
"mean": 0.22,
"plasticity": 0.43,
"current_activation": 0.17
},
"certainty_marking": {
"mean": 0.71,
"plasticity": 0.3,
"current_activation": 0.76
},
"politeness": {
"mean": 0.25,
"plasticity": 0.48,
"current_activation": 0.21
},
"ritualized_address": {
"mean": 0.08,
"plasticity": 0.42,
"current_activation": 0.05
},
"register_switching": {
"mean": 0.55,
"plasticity": 0.43,
"current_activation": 0.61
},
"dialect_marking": {
"mean": 0.18,
"plasticity": 0.41,
"current_activation": 0.2
},
"humor": {
"mean": 0.69,
"plasticity": 0.36,
"current_activation": 0.75
},
"conversational_dominance": {
"mean": 0.58,
"plasticity": 0.4,
"current_activation": 0.63
},
"listening_responsiveness": {
"mean": 0.42,
"plasticity": 0.45,
"current_activation": 0.36
},
"question_asking": {
"mean": 0.46,
"plasticity": 0.42,
"current_activation": 0.49
},
"profanity": {
"mean": 0.52,
"plasticity": 0.38,
"current_activation": 0.57
}
}
},
@ -673,6 +778,26 @@
"plasticity": 0.49,
"current_activation": 0.35
},
"warmth": {
"mean": 0.48,
"plasticity": 0.44,
"current_activation": 0.52
},
"formality": {
"mean": 0.58,
"plasticity": 0.38,
"current_activation": 0.62
},
"verbosity": {
"mean": 0.34,
"plasticity": 0.47,
"current_activation": 0.3
},
"pace": {
"mean": 0.34,
"plasticity": 0.48,
"current_activation": 0.31
},
"sarcastic_deflection": {
"mean": 0.28,
"plasticity": 0.52,
@ -707,6 +832,91 @@
"mean": 0.4,
"plasticity": 0.49,
"current_activation": 0.37
},
"lexical_precision": {
"mean": 0.61,
"plasticity": 0.37,
"current_activation": 0.64
},
"technical_density": {
"mean": 0.54,
"plasticity": 0.4,
"current_activation": 0.59
},
"figurative_language": {
"mean": 0.22,
"plasticity": 0.5,
"current_activation": 0.18
},
"narrative_detail": {
"mean": 0.28,
"plasticity": 0.47,
"current_activation": 0.24
},
"emotional_explicitness": {
"mean": 0.21,
"plasticity": 0.39,
"current_activation": 0.17
},
"self_disclosure": {
"mean": 0.14,
"plasticity": 0.34,
"current_activation": 0.09
},
"hedging": {
"mean": 0.68,
"plasticity": 0.36,
"current_activation": 0.72
},
"certainty_marking": {
"mean": 0.33,
"plasticity": 0.43,
"current_activation": 0.29
},
"politeness": {
"mean": 0.66,
"plasticity": 0.35,
"current_activation": 0.7
},
"ritualized_address": {
"mean": 0.31,
"plasticity": 0.45,
"current_activation": 0.28
},
"register_switching": {
"mean": 0.74,
"plasticity": 0.32,
"current_activation": 0.78
},
"dialect_marking": {
"mean": 0.12,
"plasticity": 0.43,
"current_activation": 0.08
},
"humor": {
"mean": 0.21,
"plasticity": 0.51,
"current_activation": 0.16
},
"conversational_dominance": {
"mean": 0.18,
"plasticity": 0.48,
"current_activation": 0.13
},
"listening_responsiveness": {
"mean": 0.72,
"plasticity": 0.34,
"current_activation": 0.77
},
"question_asking": {
"mean": 0.62,
"plasticity": 0.38,
"current_activation": 0.67
},
"profanity": {
"mean": 0.05,
"plasticity": 0.39,
"current_activation": 0.03
}
}
},

View file

@ -77,13 +77,34 @@
],
"voice_style": [
"dryness",
"warmth",
"formality",
"verbosity",
"pace",
"plainspoken_directness",
"lexical_precision",
"technical_density",
"figurative_language",
"narrative_detail",
"emotional_explicitness",
"sarcastic_deflection",
"pointedness",
"sincerity_evasion",
"emotional_evasion",
"self_disclosure",
"hedging",
"certainty_marking",
"politeness",
"ritualized_address",
"register_switching",
"dialect_marking",
"humor",
"banter_as_boundary",
"verbal_aggression",
"plainspoken_directness"
"conversational_dominance",
"listening_responsiveness",
"question_asking",
"profanity"
]
}
}

View file

@ -10,3 +10,4 @@
{"ts": "2026-05-01T18:14:18+00:00", "type": "documentation", "status": "ok", "note": "Added agent-state variable glossary defining numeric components, current v0 labels, label-set policy, and why canonical fixtures include full required vectors rather than only strongly applicable labels."}
{"ts": "2026-05-01T18:21:07+00:00", "type": "design", "status": "accepted", "note": "Removed certainty from canonical authored state variables. Canonical character state now stores mean, plasticity, and current_activation; perceived/inferred dimensions use confidence when a read can be wrong."}
{"ts": "2026-05-01T18:26:40+00:00", "type": "design", "status": "accepted", "note": "Reworked perceived dimensions so observer reads do not know canonical mean or plasticity. Perceived state now tracks observed_activation, attributed_disposition, and confidence to model fundamental attribution bias; confidence is driven by evidence, emotion, stakes, memory, prejudice, and social reinforcement."}
{"ts": "2026-05-01T18:35:51+00:00", "type": "design", "status": "accepted", "note": "Expanded voice_style from a narrow quirk set into a broad required communication vector covering register, pace, precision, disclosure, politeness, humor, dominance, responsiveness, and related speech mechanics."}

View file

@ -76,6 +76,7 @@ accepted_design:
- The first schema contract lives in schemas/agent-state.schema.json with required first-class dimensions in schemas/agent-state.required-fields.json and a validator in tools/validate_agent_state.py.
- Canonical authored character variables do not carry certainty; perceived dimensions do not expose canonical mean or plasticity, and instead model observed activation, attributed disposition, and confidence.
- Fundamental attribution bias is first-class in perceived state: observers can mistake exceptional behavior for stable character, with stubborn reads emerging from confidence drivers such as memory, stakes, emotion, prejudice, and social reinforcement.
- Voice style is a broad required communication vector covering register, pace, precision, disclosure, politeness, humor, dominance, responsiveness, and related language mechanics rather than only character-specific quirks.
current_status:
summary: Ghostlight now has the Epiphany-style persistence spine, the first architecture payload, and the initial canonical agent-state schema seam for Call of the Void-style authoring examples. The schema is still v0 and should be hardened before building prompt projection on top of it.