From 91741bdef6e3821e01148504574e27fbd5eb802e Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 1 May 2026 19:36:16 +0100 Subject: [PATCH] Expand voice style required vector --- ...ate-distributions-and-prompt-projection.md | 23 +- .../agent-state-variable-glossary.md | 40 +++- .../canonical-agent-state-schema.md | 29 ++- examples/agent-state.call-of-the-void.json | 210 ++++++++++++++++++ schemas/agent-state.required-fields.json | 23 +- state/evidence.jsonl | 1 + state/map.yaml | 1 + 7 files changed, 307 insertions(+), 20 deletions(-) diff --git a/docs/architecture/agent-state-distributions-and-prompt-projection.md b/docs/architecture/agent-state-distributions-and-prompt-projection.md index 2f7539b..404a5fc 100644 --- a/docs/architecture/agent-state-distributions-and-prompt-projection.md +++ b/docs/architecture/agent-state-distributions-and-prompt-projection.md @@ -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 diff --git a/docs/architecture/agent-state-variable-glossary.md b/docs/architecture/agent-state-variable-glossary.md index ec20db4..fb45e17 100644 --- a/docs/architecture/agent-state-variable-glossary.md +++ b/docs/architecture/agent-state-variable-glossary.md @@ -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 diff --git a/docs/architecture/canonical-agent-state-schema.md b/docs/architecture/canonical-agent-state-schema.md index a6b6ff3..5d6c7aa 100644 --- a/docs/architecture/canonical-agent-state-schema.md +++ b/docs/architecture/canonical-agent-state-schema.md @@ -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: diff --git a/examples/agent-state.call-of-the-void.json b/examples/agent-state.call-of-the-void.json index a551746..e4111d8 100644 --- a/examples/agent-state.call-of-the-void.json +++ b/examples/agent-state.call-of-the-void.json @@ -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 } } }, diff --git a/schemas/agent-state.required-fields.json b/schemas/agent-state.required-fields.json index 1a34b87..1c9da5a 100644 --- a/schemas/agent-state.required-fields.json +++ b/schemas/agent-state.required-fields.json @@ -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" ] } } diff --git a/state/evidence.jsonl b/state/evidence.jsonl index dc909c9..276eb3f 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -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."} diff --git a/state/map.yaml b/state/map.yaml index c1e0bdc..045dbf5 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -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.