From 010080be4b06db5f2e7523c8afab24e160e17d97 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 1 May 2026 19:49:42 +0100 Subject: [PATCH] Split verbal response strategy from voice style --- ...ate-distributions-and-prompt-projection.md | 32 +++--- .../agent-state-variable-glossary.md | 19 +++- .../canonical-agent-state-schema.md | 29 ++--- examples/agent-state.call-of-the-void.json | 104 +++++++++--------- schemas/agent-state.required-fields.json | 12 +- schemas/agent-state.schema.json | 4 + state/evidence.jsonl | 1 + state/map.yaml | 1 + tools/validate_agent_state.py | 2 + 9 files changed, 117 insertions(+), 87 deletions(-) diff --git a/docs/architecture/agent-state-distributions-and-prompt-projection.md b/docs/architecture/agent-state-distributions-and-prompt-projection.md index cd45199..adc7228 100644 --- a/docs/architecture/agent-state-distributions-and-prompt-projection.md +++ b/docs/architecture/agent-state-distributions-and-prompt-projection.md @@ -122,10 +122,7 @@ These describe how the performed self comes out in language: - lyricism - narrative detail - emotional explicitness -- sarcastic deflection - pointedness -- sincerity evasion -- emotional evasion - self disclosure - hedging - certainty marking @@ -136,21 +133,28 @@ These describe how the performed self comes out in language: - dialect marking - theatricality - humor -- banter as boundary -- verbal aggression - 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 -literalism, theatrical disdain, or a flat refusal to offer emotional handles. -If the schema only stores the performed self, the renderer has to guess the -voice. That is how everyone becomes the same quippy little goblin with -different hats. +### 6. Verbal Response Strategy -### 6. Situational State +These describe pressure-activated speech moves: + +- sarcastic deflection +- sincerity evasion +- emotional evasion +- banter as boundary +- verbal aggression + +This layer matters because presentation strategy, voice, and verbal response +are related but not identical. Performing a prickly self may come out as dry sarcasm, clipped +literalism, theatrical disdain, or a flat refusal to offer emotional handles. +If the schema only stores the performed self, the renderer has to infer voice +and stress response from the same field. + +### 7. Situational State These are transient activations: @@ -165,7 +169,7 @@ These are transient activations: - acute shame - perceived status threat -### 7. Relationship State +### 8. Relationship State Per target person, faction, group, product domain, or institution: @@ -181,7 +185,7 @@ Per target person, faction, group, product domain, or institution: - expectation of care - expectation of betrayal -### 8. Goals And Values +### 9. Goals And Values - active goals - protected values diff --git a/docs/architecture/agent-state-variable-glossary.md b/docs/architecture/agent-state-variable-glossary.md index 2fd7db7..01b4d9b 100644 --- a/docs/architecture/agent-state-variable-glossary.md +++ b/docs/architecture/agent-state-variable-glossary.md @@ -165,10 +165,7 @@ quirks in the current examples. | `lyricism` | Uses musical, poetic, sensuous, or rhythmically heightened language. | | `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. | @@ -179,13 +176,25 @@ quirks in the current examples. | `dialect_marking` | Shows regional, class, occupational, subcultural, or community-specific speech markers. | | `theatricality` | Performs speech with heightened drama, staging, persona, flourish, or rhetorical display. | | `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. | | `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. | +## Verbal Response Strategy + +Verbal response strategy describes pressure-activated speech moves. These are +not baseline voice texture; they are ways speech manages exposure, threat, +attachment pressure, shame, status, or control. + +| Label | Meaning | +| --- | --- | +| `sarcastic_deflection` | Uses sarcasm to redirect, dodge, or blunt sincerity, fear, gratitude, or pain. | +| `sincerity_evasion` | Avoids emotionally plain or vulnerable language even when the feeling is present. | +| `emotional_evasion` | Avoids naming, dwelling in, or accepting emotional baggage. | +| `banter_as_boundary` | Uses joking exchange to maintain distance while staying socially engaged. | +| `verbal_aggression` | Uses language to attack, intimidate, punish, or dominate. | + ## Situational State | Label | Meaning | diff --git a/docs/architecture/canonical-agent-state-schema.md b/docs/architecture/canonical-agent-state-schema.md index 475e1f1..2ae757d 100644 --- a/docs/architecture/canonical-agent-state-schema.md +++ b/docs/architecture/canonical-agent-state-schema.md @@ -49,6 +49,7 @@ Each agent has: - `behavioral_dimensions` - `presentation_strategy` - `voice_style` +- `verbal_response_strategy` - `situational_state` - `values` @@ -95,7 +96,7 @@ The behavioral dimensions include the known must-not-drop set: Those are not garnish. They are load-bearing social handles. -## Presentation Strategy Vs Voice Style +## Presentation, Voice, And Response `presentation_strategy` describes the self being performed. @@ -122,10 +123,7 @@ The required voice handles are: - `lyricism` - `narrative_detail` - `emotional_explicitness` -- `sarcastic_deflection` - `pointedness` -- `sincerity_evasion` -- `emotional_evasion` - `self_disclosure` - `hedging` - `certainty_marking` @@ -136,26 +134,31 @@ The required voice handles are: - `dialect_marking` - `theatricality` - `humor` -- `banter_as_boundary` -- `verbal_aggression` - `conversational_dominance` - `listening_responsiveness` - `question_asking` - `profanity` +`verbal_response_strategy` describes pressure-activated speech moves: + +- `sarcastic_deflection` +- `sincerity_evasion` +- `emotional_evasion` +- `banter_as_boundary` +- `verbal_aggression` + So Cat's prickliness is not only a dialogue prompt instruction. It is backed by canonical state: - high `presentation_strategy.abrasive_boundary` - high `presentation_strategy.ironic_distance` -- high `voice_style.sarcastic_deflection` -- high `voice_style.sincerity_evasion` -- high `voice_style.emotional_evasion` +- high `verbal_response_strategy.sarcastic_deflection` +- high `verbal_response_strategy.sincerity_evasion` +- high `verbal_response_strategy.emotional_evasion` -The renderer can then translate that state into lines that dodge sincerity with -pointed sarcasm without making her cruel at random. The goal is not "be snarky." -The goal is "protect the soft tissue by making the other person deal with the -spines first." +The renderer can then combine the performed self, baseline voice, active stress, +and response strategy into dialogue without treating every defensive move as a +permanent voice trait. ## Perceived State diff --git a/examples/agent-state.call-of-the-void.json b/examples/agent-state.call-of-the-void.json index e5a9ab9..b375520 100644 --- a/examples/agent-state.call-of-the-void.json +++ b/examples/agent-state.call-of-the-void.json @@ -329,36 +329,11 @@ "plasticity": 0.31, "current_activation": 0.78 }, - "sarcastic_deflection": { - "mean": 0.84, - "plasticity": 0.2, - "current_activation": 0.93 - }, "pointedness": { "mean": 0.77, "plasticity": 0.25, "current_activation": 0.82 }, - "sincerity_evasion": { - "mean": 0.8, - "plasticity": 0.24, - "current_activation": 0.87 - }, - "emotional_evasion": { - "mean": 0.78, - "plasticity": 0.27, - "current_activation": 0.85 - }, - "banter_as_boundary": { - "mean": 0.74, - "plasticity": 0.31, - "current_activation": 0.8 - }, - "verbal_aggression": { - "mean": 0.46, - "plasticity": 0.42, - "current_activation": 0.5 - }, "plainspoken_directness": { "mean": 0.62, "plasticity": 0.33, @@ -469,6 +444,33 @@ "plasticity": 0.38, "current_activation": 0.57 } + }, + "verbal_response_strategy": { + "sarcastic_deflection": { + "mean": 0.84, + "plasticity": 0.2, + "current_activation": 0.93 + }, + "sincerity_evasion": { + "mean": 0.8, + "plasticity": 0.24, + "current_activation": 0.87 + }, + "emotional_evasion": { + "mean": 0.78, + "plasticity": 0.27, + "current_activation": 0.85 + }, + "banter_as_boundary": { + "mean": 0.74, + "plasticity": 0.31, + "current_activation": 0.8 + }, + "verbal_aggression": { + "mean": 0.46, + "plasticity": 0.42, + "current_activation": 0.5 + } } }, "goals": [ @@ -818,36 +820,11 @@ "plasticity": 0.48, "current_activation": 0.31 }, - "sarcastic_deflection": { - "mean": 0.28, - "plasticity": 0.52, - "current_activation": 0.24 - }, "pointedness": { "mean": 0.24, "plasticity": 0.5, "current_activation": 0.22 }, - "sincerity_evasion": { - "mean": 0.62, - "plasticity": 0.42, - "current_activation": 0.69 - }, - "emotional_evasion": { - "mean": 0.72, - "plasticity": 0.36, - "current_activation": 0.78 - }, - "banter_as_boundary": { - "mean": 0.45, - "plasticity": 0.48, - "current_activation": 0.49 - }, - "verbal_aggression": { - "mean": 0.09, - "plasticity": 0.52, - "current_activation": 0.05 - }, "plainspoken_directness": { "mean": 0.4, "plasticity": 0.49, @@ -958,6 +935,33 @@ "plasticity": 0.39, "current_activation": 0.03 } + }, + "verbal_response_strategy": { + "sarcastic_deflection": { + "mean": 0.28, + "plasticity": 0.52, + "current_activation": 0.24 + }, + "sincerity_evasion": { + "mean": 0.62, + "plasticity": 0.42, + "current_activation": 0.69 + }, + "emotional_evasion": { + "mean": 0.72, + "plasticity": 0.36, + "current_activation": 0.78 + }, + "banter_as_boundary": { + "mean": 0.45, + "plasticity": 0.48, + "current_activation": 0.49 + }, + "verbal_aggression": { + "mean": 0.09, + "plasticity": 0.52, + "current_activation": 0.05 + } } }, "goals": [ diff --git a/schemas/agent-state.required-fields.json b/schemas/agent-state.required-fields.json index ab898a5..e0f2c21 100644 --- a/schemas/agent-state.required-fields.json +++ b/schemas/agent-state.required-fields.json @@ -89,10 +89,7 @@ "lyricism", "narrative_detail", "emotional_explicitness", - "sarcastic_deflection", "pointedness", - "sincerity_evasion", - "emotional_evasion", "self_disclosure", "hedging", "certainty_marking", @@ -103,12 +100,17 @@ "dialect_marking", "theatricality", "humor", - "banter_as_boundary", - "verbal_aggression", "conversational_dominance", "listening_responsiveness", "question_asking", "profanity" + ], + "verbal_response_strategy": [ + "sarcastic_deflection", + "sincerity_evasion", + "emotional_evasion", + "banter_as_boundary", + "verbal_aggression" ] } } diff --git a/schemas/agent-state.schema.json b/schemas/agent-state.schema.json index efec087..ec2b3c3 100644 --- a/schemas/agent-state.schema.json +++ b/schemas/agent-state.schema.json @@ -167,6 +167,7 @@ "behavioral_dimensions", "presentation_strategy", "voice_style", + "verbal_response_strategy", "situational_state", "values" ], @@ -195,6 +196,9 @@ }, "voice_style": { "$ref": "#/$defs/variable_map" + }, + "verbal_response_strategy": { + "$ref": "#/$defs/variable_map" } } }, diff --git a/state/evidence.jsonl b/state/evidence.jsonl index ff710d1..1e8d54d 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -12,3 +12,4 @@ {"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."} {"ts": "2026-05-01T18:42:59+00:00", "type": "design", "status": "accepted", "note": "Added explicit voice_style axes for lyricism, coded_politeness, theatricality, and technical_compression so the required vector preserves the intended speech examples rather than folding them into weaker adjacent labels."} +{"ts": "2026-05-01T18:49:11+00:00", "type": "design", "status": "accepted", "note": "Separated verbal_response_strategy from voice_style. Sarcastic deflection, sincerity evasion, emotional evasion, banter-as-boundary, and verbal aggression are pressure-activated speech defenses, not baseline voice texture."} diff --git a/state/map.yaml b/state/map.yaml index 88b137d..06b5719 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -77,6 +77,7 @@ accepted_design: - 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 lyrical speech, formality, verbosity, hedging, coded politeness, theatricality, dialect, register switching, technical compression, ritualized address, and related language mechanics. + - Verbal response strategy is separate from voice style; pressure-activated moves like sarcastic deflection, sincerity evasion, emotional evasion, banter-as-boundary, and verbal aggression model speech defenses rather than baseline voice texture. 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. diff --git a/tools/validate_agent_state.py b/tools/validate_agent_state.py index b2b2288..46682a8 100644 --- a/tools/validate_agent_state.py +++ b/tools/validate_agent_state.py @@ -101,6 +101,7 @@ def validate_agent(agent: dict[str, Any], required: dict[str, list[str]]) -> Non "behavioral_dimensions", "presentation_strategy", "voice_style", + "verbal_response_strategy", "situational_state", "values", ], @@ -112,6 +113,7 @@ def validate_agent(agent: dict[str, Any], required: dict[str, list[str]]) -> Non "behavioral_dimensions", "presentation_strategy", "voice_style", + "verbal_response_strategy", "situational_state", ]: validate_variable_map(canonical[group], required[group], f"{path}.canonical_state.{group}")