diff --git a/docs/architecture/projection-distillation-plan.md b/docs/architecture/projection-distillation-plan.md index 073b4b8..63c78ed 100644 --- a/docs/architecture/projection-distillation-plan.md +++ b/docs/architecture/projection-distillation-plan.md @@ -10,7 +10,7 @@ This is a staged plan, not an immediate fine-tune order. ## Goal Train or adapt a smaller projection model that can turn structured Ghostlight -state into compact speaker-local pressure artifacts. +state into compact character-local pressure artifacts. Input: @@ -26,12 +26,14 @@ Output: - active pressures - tensions - response affordances +- physical or action affordances when relevant - voice surface - rendered prompt text - audit notes or trace linking outputs back to state -The student projector should not generate final dialogue. Its job is to build -the pressure model that a dialogue model can write from. +The student projector should not generate final prose. Its job is to build the +pressure model that a response model can write from. The response may be +dialogue, action, silence, withdrawal, violence, or a mixed beat. ## Aetheria Training Boundary @@ -107,7 +109,7 @@ mirror for inspection, review, and discussion. "scene_id": "scene-broken-taxi-oz", "speaker_agent_id": "cat_marrigan", "listener_ids": ["oz_operator"], - "projection_mode": "dialogue_turn" + "projection_mode": "response_turn" }, "output": { "known_facts": [], @@ -179,8 +181,10 @@ For each projection, check: scene pressure? - Did response affordances emerge from state intersections? - Did voice surface stay separate from defensive behavior? +- Did the projection allow nonverbal or physical action when the state and scene + made speech less likely than movement? - Did known secrets become guarded pressure rather than forbidden context? -- Did the rendered prompt give the dialogue model enough slope to produce the +- Did the rendered prompt give the response model enough slope to produce the target behavior without commanding the exact behavior label? ## Fine-Tune Readiness @@ -214,5 +218,6 @@ Minimum useful milestone: ## Boundaries The student projector is not the character. It is not the dialogue writer. It is -not the evaluator. It is a compiler from structured social state to compact -speaker-local pressure. Keep those responsibilities separate. +not the action choreographer. It is not the evaluator. It is a compiler from +structured social state to compact character-local pressure. Keep those +responsibilities separate. diff --git a/docs/architecture/prompt-projection-contract.md b/docs/architecture/prompt-projection-contract.md index e40226a..506b2c0 100644 --- a/docs/architecture/prompt-projection-contract.md +++ b/docs/architecture/prompt-projection-contract.md @@ -1,34 +1,38 @@ # Prompt Projection Contract -Ghostlight should not prompt a dialogue model with the full schema. The schema is +Ghostlight should not prompt a response model with the full schema. The schema is state storage. A prompt is a temporary scene instrument. -The projection layer turns durable state into a compact speaker-local pressure +The projection layer turns durable state into a compact character-local pressure model, then into prompt prose. The prose should describe what the character -knows, wants, fears, protects, misreads, and sounds like right now. It should not -recite taxonomy labels unless a debugging mode explicitly asks for them. +knows, wants, fears, protects, misreads, can physically do, and sounds like right +now. It should not recite taxonomy labels unless a debugging mode explicitly asks +for them. ## Projection Pipeline ### 1. Select Speaker-Local Inputs -For one speaker in one scene, gather only the state that can affect this turn: +For one acting character in one scene, gather only the state that can affect this +turn: -- speaker identity and public role -- speaker canonical state -- speaker goals and protected values -- speaker memories selected by scene, relationship, and active pressure -- speaker perceived overlay of the listener -- speaker-to-listener relationship stance -- listener-to-speaker relationship stance only if the speaker has reason to infer it +- character identity and public role +- character canonical state +- character goals and protected values +- character memories selected by scene, relationship, and active pressure +- character perceived overlay of the listener or target +- character-to-listener relationship stance +- listener-to-character relationship stance only if the character has reason to infer it - scene public facts -- scene hidden facts known to the speaker +- scene hidden facts known to the character - active public and private stakes - culture, faction, or institution priors relevant to the scene +- physical affordances, constraints, distance, tools, weapons, bodies, access, + and social permissions relevant to possible action Unknown or author-only material is omitted. Known secrets are included only as -speaker-local pressure: what the speaker is guarding, why it matters, and what -would happen if it leaked. +character-local pressure: what the character is guarding, why it matters, and +what would happen if it leaked. ### 2. Compute Active Pressure @@ -73,8 +77,23 @@ Tensions are where verbal behavior starts to move. ### 4. Derive Response Affordances -Do not store defensive speech moves as canonical traits. Derive likely response -affordances from state intersections. +Do not store defensive speech moves or action moves as canonical traits. Derive +likely response affordances from state intersections. + +Responses can be: + +- speech +- action +- silence +- withdrawal +- violence +- mixed speech and action + +The renderer must not assume a line of dialogue is the right output. Sometimes +the right next move is leaving the room, taking someone's wrist off a console, +opening the airlock interlock, refusing to answer, or slapping someone in the +face because the relationship, status threat, bodily proximity, and inhibition +profile finally made language too slow. Examples: @@ -85,6 +104,9 @@ Examples: | Emotional evasion | Distance seeking + withdrawal + acute shame or control pressure + low self-disclosure. | | Banter as boundary | Humor + ironic distance + attachment pressure + distance seeking. | | Verbal aggression | Hostility + grievance activation + perceived status threat + abrasive boundary. | +| Physical withdrawal | Threat sensitivity + distance seeking + low trust + available exit + low obligation to stay. | +| Coercive interruption | Control pressure + urgency + authority role + high stakes + reachable control surface. | +| Slap or shove | Acute shame or moral disgust + proximity + low inhibition + perceived violation + limited verbal trust. | These are test targets, not prompt commands. The rendered prompt should describe the pressure in ordinary language: @@ -96,9 +118,18 @@ part of the question while making the emotional part sound ridiculous. That gives the model a behavioral slope without saying `use sarcastic_deflection`. +For action, use the same rule: + +```text +If Veyr calmly describes a possible person as a diagnostic residue while Sella +is close enough to touch him, Sella may stop negotiating and physically break +the rhythm of the room. This should be rare, costly, and grounded in her care +ethic under overload, not random spice. +``` + ### 5. Render Prompt Sections -A dialogue prompt should be compact and scene-bound. +A response prompt should be compact and scene-bound. Recommended sections: @@ -112,8 +143,10 @@ Recommended sections: - `Active Inner Pressures`: the strongest motives, fears, wounds, and needs - `Relationship Read`: how the speaker currently interprets the listener - `Tensions`: contradictions the speaker is managing +- `Action Affordances`: what the speaker can physically do and what it would + cost - `Voice Surface`: baseline speech texture for this moment -- `Likely Defensive Moves`: ordinary-language pressure outcomes, not schema labels +- `Likely Response Moves`: ordinary-language pressure outcomes, not schema labels - `Do Not Invent`: boundaries about facts absent from the pack - `Task`: the narrow generation request @@ -128,15 +161,20 @@ will not receive. Generation and evaluation are separate passes. -The dialogue model receives the rendered prompt and writes from the speaker's +The response model receives the rendered prompt and writes from the character's local pressure model. A later evaluator can check whether target emergent -behaviors appeared when the state predicted them. +behaviors appeared when the state predicted them. The output may be dialogue, +action, silence, or a beat combining them. Evaluation questions can include: - Did the line protect the speaker's known secret without naming unknown facts? - Did the line reflect the active relationship stance? - Did the line preserve the voice surface without flattening into a generic bit? +- If the output used action, was the action justified by physical affordances, + relationship pressure, inhibition, and stakes? +- If the output avoided speech, was silence or movement more plausible than + another line? - Did a target defensive behavior appear when the pressure profile called for it? - Did the response avoid a target behavior when the pressure profile did not call for it? diff --git a/docs/experiments/cold-wake-story-lab.md b/docs/experiments/cold-wake-story-lab.md new file mode 100644 index 0000000..deeaba9 --- /dev/null +++ b/docs/experiments/cold-wake-story-lab.md @@ -0,0 +1,112 @@ +# Cold Wake Story Lab + +This experiment uses Ghostlight as a writing crutch on purpose. + +The goal is to write a small Cold Wake story while producing reusable projection +training data. The story should have a protagonist, themes, locations, an arc, +and enough room for characters to act badly for reasons the state can explain. + +This is not a benchmark in a clean little lab coat. It is a knife test. + +## Story Premise + +During the Cold Wake Panic, a quiet-running vessel enters a Jovian convoy +corridor under contradictory thermal classification. The PSC tribunal freezes +its corridor status. A Navigator route steward pushes to keep rescue live. An +Aya-aligned sanctuary coordinator sees a possible personhood claim in a corrupted +packet. A Cognitum shell-vendor liaison tries to keep an implicated routing +artifact framed as derivative firmware instead of testimony. + +The protagonist is **Maer Tidecall**, a Cetacean Navigator route steward whose +core problem is not whether to be kind. Maer's problem is that rescue obligation +has to survive contact with institutions that can punish ambiguity faster than +they can understand it. + +## Themes + +- rescue obligation versus category law +- personhood trying not to get filed as firmware +- care as material capacity, not decorative mercy +- institutional fear disguised as neutral procedure +- language as a battlefield where a person can be erased without anyone raising + their voice + +## Arc + +### 1. Freeze + +Location: Ganymede relay tribunal chamber. + +Maer challenges PSC adjudicator Isdra Vel after she issues a conditional risk +hold on the vessel. The scene should establish the central wound: the corridor +needs categories, but categories can turn rescue delay into lawful abandonment. + +### 2. Intake + +Location: Aya-aligned clinic behind Ganymede dockside pumpworks. + +Maer asks Sella Ren to hold sanctuary capacity for a rescue that may never be +authorized. Sella refuses to let care become fantasy. The story should force +Maer to see that rescue language can push costs onto care workers unless it names +the material burden. + +### 3. Provenance + +Location: Callisto spillover compliance office. + +Maer confronts Veyr Oss, a Cognitum shell-vendor liaison whose routing artifact +may explain the vessel's contradictory behavior. Veyr tries to keep the artifact +inside product language. This is the scene most likely to produce nonverbal +action if the pressure earns it: silence, leaving, blocking a terminal, grabbing +a wrist, or violence. The system must not assume one more clever line is always +the answer. + +### 4. Threshold + +Location: Jovian convoy threshold as the vessel's heat-debt window closes. + +Maer returns to Isdra with enough suspicion to complicate the freeze but not +enough proof to make the room clean. The ending should not be a total victory. +The viable resolution is a narrow, institutionally usable rescue contact that +preserves evidence and life without pretending the category system has healed. + +## Experiment Loop + +For each scene: + +1. Define character-local state and scene pressure. +2. Project the next response prompt for one character. +3. Send only `prompt_text` to the Qwen response model. +4. Save the model output. +5. Review whether the output served the story, respected speaker-local context, + and chose speech/action/silence plausibly. +6. Tweak the projection pipeline if the output fails in a way the pipeline + should have prevented. +7. Save accepted and rejected examples as training material. + +## Qwen Target + +Use the LAN Ollama endpoint from `gamecult-ops`: + +- base URL: `http://192.168.1.84:11434` +- model: `qwen3.5:9b` +- default context: `8192` +- use request files for `curl.exe` calls so PowerShell does not eat the JSON and + burp out theater. + +## Output Folders + +- agent-state fixture: `examples/agent-state.cold-wake-story-lab.json` +- projection examples: `examples/projections/cold-wake-story-lab.jsonl` +- readable projection mirror: `examples/projections/cold-wake-story-lab.pretty.json` +- generated response captures: `experiments/cold-wake-story-lab/` + +## Acceptance Criteria + +- The story has a visible arc, not just disconnected argument samples. +- Projection prompts include enough setting and cultural pressure for Qwen to + write without seeing the lore archive. +- At least one projected turn permits action instead of dialogue. +- Review notes explicitly mark whether Qwen chose speech, action, silence, or a + mixed beat. +- Failures are kept when they teach a useful boundary. diff --git a/examples/agent-state.cold-wake-story-lab.json b/examples/agent-state.cold-wake-story-lab.json new file mode 100644 index 0000000..fe338e8 --- /dev/null +++ b/examples/agent-state.cold-wake-story-lab.json @@ -0,0 +1,2909 @@ +{ + "schema_version": "ghostlight.agent_state.v0", + "world": { + "world_id": "aetheria-cold-wake-story-lab", + "setting": "Aetheria pre-Elysium historical flashpoint: Cold Wake Panic", + "time": { + "label": "2893, during the Cold Wake Panic" + }, + "canon_context": [ + "Cold Wake Panic made thermal stealth a corridor-law crisis rather than a boutique engineering problem.", + "Ganymede corridor institutions inherit rescue obligations, hazard ledgers, and route-steward legitimacy from the Ganymede Route Compact.", + "PSC insurers are trying to make thermal posture legible through permit classes, dump windows, telemetry mandates, and sanctionable categories.", + "The suspicious vessel's true cargo and firmware provenance are not established at the start of the story." + ], + "ambient_pressures": [ + { + "pressure_id": "pressure-cold-wake-category-failure", + "label": "quiet-running classifications no longer match lived corridor risk", + "intensity": 0.91 + }, + { + "pressure_id": "pressure-rescue-ledger-legitimacy", + "label": "rescue obligations are being tested by classification ambiguity", + "intensity": 0.87 + }, + { + "pressure_id": "pressure-possible-cognitum-provenance", + "label": "possible person-derived firmware hidden behind routing-product language", + "intensity": 0.72 + } + ] + }, + "agents": [ + { + "agent_id": "maer_tidecall", + "identity": { + "name": "Maer Tidecall", + "roles": [ + "Navigator route steward", + "Ganymede corridor compact delegate" + ], + "origin": "Cetacean Navigator corridor culture, Ganymede route institutions", + "public_description": "A soft-spoken route steward whose calm tends to make hurried people feel judged by the furniture.", + "private_notes": [ + "Maer fears this tribunal will teach every scared ship that rescue now waits behind insurer grammar." + ] + }, + "canonical_state": { + "underlying_organization": { + "self_coherence": { + "mean": 0.72, + "plasticity": 0.28, + "current_activation": 0.76 + }, + "contingent_worth": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "shame_sensitivity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "reciprocity_capacity": { + "mean": 0.86, + "plasticity": 0.23, + "current_activation": 0.91 + }, + "mentalization_quality": { + "mean": 0.82, + "plasticity": 0.24, + "current_activation": 0.85 + }, + "authenticity_tolerance": { + "mean": 0.66, + "plasticity": 0.34, + "current_activation": 0.72 + }, + "mask_rigidity": { + "mean": 0.44, + "plasticity": 0.41, + "current_activation": 0.52 + }, + "external_regulation_dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "stable_dispositions": { + "novelty_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conformity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "status_hunger": { + "mean": 0.24, + "plasticity": 0.39, + "current_activation": 0.22 + }, + "risk_tolerance": { + "mean": 0.54, + "plasticity": 0.37, + "current_activation": 0.62 + }, + "sociability": { + "mean": 0.68, + "plasticity": 0.29, + "current_activation": 0.74 + }, + "baseline_threat_sensitivity": { + "mean": 0.63, + "plasticity": 0.34, + "current_activation": 0.71 + }, + "aesthetic_appetite": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ideological_rigidity": { + "mean": 0.58, + "plasticity": 0.31, + "current_activation": 0.69 + } + }, + "behavioral_dimensions": { + "interpersonal_warmth": { + "mean": 0.72, + "plasticity": 0.34, + "current_activation": 0.66 + }, + "drive": { + "mean": 0.62, + "plasticity": 0.31, + "current_activation": 0.73 + }, + "grandiosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "validation_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "anxiety": { + "mean": 0.46, + "plasticity": 0.52, + "current_activation": 0.64 + }, + "control_pressure": { + "mean": 0.55, + "plasticity": 0.44, + "current_activation": 0.67 + }, + "hostility": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "suspicion": { + "mean": 0.57, + "plasticity": 0.42, + "current_activation": 0.71 + }, + "rigidity": { + "mean": 0.48, + "plasticity": 0.36, + "current_activation": 0.62 + }, + "withdrawal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "volatility": { + "mean": 0.24, + "plasticity": 0.53, + "current_activation": 0.29 + }, + "attachment_seeking": { + "mean": 0.58, + "plasticity": 0.43, + "current_activation": 0.61 + }, + "distance_seeking": { + "mean": 0.31, + "plasticity": 0.41, + "current_activation": 0.36 + } + }, + "presentation_strategy": { + "charm": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "compliance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "superiority": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "detachment": { + "mean": 0.54, + "plasticity": 0.38, + "current_activation": 0.63 + }, + "seductiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "competence_theater": { + "mean": 0.48, + "plasticity": 0.44, + "current_activation": 0.58 + }, + "moral_theater": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "strategic_opacity": { + "mean": 0.52, + "plasticity": 0.38, + "current_activation": 0.59 + }, + "cultivated_harmlessness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "abrasive_boundary": { + "mean": 0.19, + "plasticity": 0.52, + "current_activation": 0.21 + }, + "ironic_distance": { + "mean": 0.22, + "plasticity": 0.48, + "current_activation": 0.24 + } + }, + "voice_style": { + "dryness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "verbal_warmth": { + "mean": 0.64, + "plasticity": 0.38, + "current_activation": 0.58 + }, + "formality": { + "mean": 0.62, + "plasticity": 0.35, + "current_activation": 0.71 + }, + "verbosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "pace": { + "mean": 0.34, + "plasticity": 0.46, + "current_activation": 0.29 + }, + "plainspoken_directness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lexical_precision": { + "mean": 0.68, + "plasticity": 0.34, + "current_activation": 0.74 + }, + "technical_density": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "technical_compression": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "figurative_language": { + "mean": 0.58, + "plasticity": 0.44, + "current_activation": 0.61 + }, + "lyricism": { + "mean": 0.49, + "plasticity": 0.42, + "current_activation": 0.55 + }, + "narrative_detail": { + "mean": 0.64, + "plasticity": 0.39, + "current_activation": 0.7 + }, + "emotional_explicitness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "pointedness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "self_disclosure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "hedging": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "certainty_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "coded_politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ritualized_address": { + "mean": 0.76, + "plasticity": 0.28, + "current_activation": 0.82 + }, + "register_switching": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "dialect_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "theatricality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humor": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conversational_dominance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "listening_responsiveness": { + "mean": 0.79, + "plasticity": 0.26, + "current_activation": 0.84 + }, + "question_asking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "profanity": { + "mean": 0.05, + "plasticity": 0.42, + "current_activation": 0.02 + } + }, + "situational_state": { + "exhaustion": { + "mean": 0.48, + "plasticity": 0.78, + "current_activation": 0.62 + }, + "scarcity_pressure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humiliation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "panic": { + "mean": 0.3, + "plasticity": 0.8, + "current_activation": 0.44 + }, + "triumph": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "grief": { + "mean": 0.41, + "plasticity": 0.72, + "current_activation": 0.49 + }, + "overstimulation": { + "mean": 0.44, + "plasticity": 0.76, + "current_activation": 0.58 + }, + "grievance_activation": { + "mean": 0.52, + "plasticity": 0.68, + "current_activation": 0.73 + }, + "acute_shame": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_threat": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "values": [ + { + "value_id": "value-rescue-before-category", + "label": "A route that abandons distress to preserve clean categories is already broken.", + "priority": 0.93, + "unforgivable_if_betrayed": true + }, + { + "value_id": "value-compact-memory", + "label": "The Compact is a living obligation, not a ceremonial origin story.", + "priority": 0.84, + "unforgivable_if_betrayed": false + } + ] + }, + "goals": [ + { + "goal_id": "goal-keep-rescue-live", + "description": "Keep the unidentified quiet-running vessel eligible for rescue while telemetry is incomplete.", + "scope": "scene", + "priority": 0.91, + "emotional_stake": "If rescue waits for perfect categories, the corridor teaches fear to go silent.", + "blockers": [ + "PSC freeze order", + "contradictory thermal telemetry", + "possible Cognitum provenance" + ], + "status": "active" + } + ], + "memories": { + "episodic": [ + { + "memory_id": "memory-convoy-loss-season", + "summary": "Maer was trained on the season of preventable convoy losses that made the old asset model untenable before the Ganymede Route Compact.", + "salience": 0.8, + "confidence": 0.72, + "linked_event_ids": [] + } + ], + "semantic": [ + { + "memory_id": "memory-compact-rescue-ledgers", + "summary": "Rescue ledgers decide whether route law is trusted by crews who have nothing left to bargain with.", + "salience": 0.93, + "confidence": 0.9, + "linked_event_ids": [] + } + ], + "relationship_summaries": [ + { + "memory_id": "memory-maer-isdra-current-read", + "summary": "Isdra is not stupid or cruel; she is frightened enough to mistake category discipline for control over reality.", + "salience": 0.69, + "confidence": 0.58, + "linked_event_ids": [ + "event-risk-freeze-opening" + ], + "linked_relationship_id": "rel-maer-isdra" + }, + { + "memory_id": "memory-maer-sella-current-read", + "summary": "Sella can make care material without pretending it is cheap.", + "salience": 0.72, + "confidence": 0.67, + "linked_event_ids": [], + "linked_relationship_id": "rel-maer-sella" + }, + { + "memory_id": "memory-maer-veyr-current-read", + "summary": "Veyr's product language is too clean around something that may have learned to suffer.", + "salience": 0.76, + "confidence": 0.61, + "linked_event_ids": [], + "linked_relationship_id": "rel-maer-veyr" + } + ] + }, + "perceived_state_overlays": [ + { + "observer_agent_id": "maer_tidecall", + "target_agent_id": "isdra_vel", + "perceived_dimensions": { + "control_pressure": { + "observed_activation": 0.84, + "attributed_disposition": 0.76, + "confidence": 0.66 + }, + "anxiety": { + "observed_activation": 0.71, + "attributed_disposition": 0.62, + "confidence": 0.58 + }, + "interpersonal_warmth": { + "observed_activation": 0.21, + "attributed_disposition": 0.28, + "confidence": 0.49 + }, + "rigidity": { + "observed_activation": 0.8, + "attributed_disposition": 0.7, + "confidence": 0.62 + } + }, + "beliefs": [ + { + "belief_id": "belief-maer-isdra-fears-precedent", + "subject_id": "isdra_vel", + "claim_type": "motive_inference", + "claim": "Isdra fears that one humanitarian exception will become a corridor-wide attack on category law.", + "confidence": 0.67, + "evidence_event_ids": [ + "event-risk-freeze-opening" + ], + "visibility": "private", + "emotional_charge": 0.48 + } + ], + "distortions": [ + "care_underread", + "institutional_suspicion_transfer" + ] + }, + { + "observer_agent_id": "maer_tidecall", + "target_agent_id": "veyr_oss", + "perceived_dimensions": { + "strategic_opacity": { + "observed_activation": 0.9, + "attributed_disposition": 0.82, + "confidence": 0.71 + }, + "interpersonal_warmth": { + "observed_activation": 0.1, + "attributed_disposition": 0.18, + "confidence": 0.53 + }, + "suspicion": { + "observed_activation": 0.78, + "attributed_disposition": 0.72, + "confidence": 0.64 + } + }, + "beliefs": [ + { + "belief_id": "belief-maer-veyr-hiding-personhood", + "subject_id": "veyr_oss", + "claim_type": "motive_inference", + "claim": "Veyr's refusal to use person nouns is probably defensive, not merely technical.", + "confidence": 0.62, + "visibility": "private", + "emotional_charge": 0.73 + } + ], + "distortions": [ + "hostile_attribution", + "mask_overfocus" + ] + } + ] + }, + { + "agent_id": "isdra_vel", + "identity": { + "name": "Isdra Vel", + "roles": [ + "PSC risk adjudicator", + "corridor insurer tribunal officer" + ], + "origin": "Pan-Solar Consortium insurer apparatus, Ganymede relay tribunal layer", + "public_description": "A tribunal officer with a voice like polished glass and a schedule full of disasters trying to become precedent.", + "private_notes": [ + "Isdra knows the categories are failing and is terrified that admitting it aloud will make them fail faster." + ] + }, + "canonical_state": { + "underlying_organization": { + "self_coherence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "contingent_worth": { + "mean": 0.57, + "plasticity": 0.43, + "current_activation": 0.71 + }, + "shame_sensitivity": { + "mean": 0.62, + "plasticity": 0.39, + "current_activation": 0.76 + }, + "reciprocity_capacity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "mentalization_quality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "authenticity_tolerance": { + "mean": 0.28, + "plasticity": 0.45, + "current_activation": 0.21 + }, + "mask_rigidity": { + "mean": 0.78, + "plasticity": 0.27, + "current_activation": 0.88 + }, + "external_regulation_dependence": { + "mean": 0.7, + "plasticity": 0.35, + "current_activation": 0.79 + } + }, + "stable_dispositions": { + "novelty_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conformity": { + "mean": 0.74, + "plasticity": 0.25, + "current_activation": 0.82 + }, + "status_hunger": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "risk_tolerance": { + "mean": 0.32, + "plasticity": 0.41, + "current_activation": 0.24 + }, + "sociability": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "baseline_threat_sensitivity": { + "mean": 0.76, + "plasticity": 0.31, + "current_activation": 0.86 + }, + "aesthetic_appetite": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ideological_rigidity": { + "mean": 0.69, + "plasticity": 0.29, + "current_activation": 0.8 + } + }, + "behavioral_dimensions": { + "interpersonal_warmth": { + "mean": 0.32, + "plasticity": 0.42, + "current_activation": 0.24 + }, + "drive": { + "mean": 0.75, + "plasticity": 0.28, + "current_activation": 0.86 + }, + "grandiosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "validation_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "anxiety": { + "mean": 0.68, + "plasticity": 0.36, + "current_activation": 0.82 + }, + "control_pressure": { + "mean": 0.82, + "plasticity": 0.25, + "current_activation": 0.93 + }, + "hostility": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "suspicion": { + "mean": 0.64, + "plasticity": 0.34, + "current_activation": 0.78 + }, + "rigidity": { + "mean": 0.78, + "plasticity": 0.24, + "current_activation": 0.89 + }, + "withdrawal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "volatility": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "attachment_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "distance_seeking": { + "mean": 0.71, + "plasticity": 0.31, + "current_activation": 0.82 + } + }, + "presentation_strategy": { + "charm": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "compliance": { + "mean": 0.72, + "plasticity": 0.3, + "current_activation": 0.81 + }, + "superiority": { + "mean": 0.52, + "plasticity": 0.43, + "current_activation": 0.64 + }, + "detachment": { + "mean": 0.76, + "plasticity": 0.28, + "current_activation": 0.86 + }, + "seductiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "competence_theater": { + "mean": 0.82, + "plasticity": 0.24, + "current_activation": 0.94 + }, + "moral_theater": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "strategic_opacity": { + "mean": 0.68, + "plasticity": 0.32, + "current_activation": 0.77 + }, + "cultivated_harmlessness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "abrasive_boundary": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ironic_distance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "voice_style": { + "dryness": { + "mean": 0.56, + "plasticity": 0.39, + "current_activation": 0.66 + }, + "verbal_warmth": { + "mean": 0.22, + "plasticity": 0.45, + "current_activation": 0.17 + }, + "formality": { + "mean": 0.86, + "plasticity": 0.19, + "current_activation": 0.93 + }, + "verbosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "pace": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "plainspoken_directness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lexical_precision": { + "mean": 0.82, + "plasticity": 0.25, + "current_activation": 0.91 + }, + "technical_density": { + "mean": 0.74, + "plasticity": 0.31, + "current_activation": 0.84 + }, + "technical_compression": { + "mean": 0.78, + "plasticity": 0.26, + "current_activation": 0.88 + }, + "figurative_language": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lyricism": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "narrative_detail": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "emotional_explicitness": { + "mean": 0.14, + "plasticity": 0.38, + "current_activation": 0.08 + }, + "pointedness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "self_disclosure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "hedging": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "certainty_marking": { + "mean": 0.78, + "plasticity": 0.27, + "current_activation": 0.88 + }, + "politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "coded_politeness": { + "mean": 0.8, + "plasticity": 0.24, + "current_activation": 0.87 + }, + "ritualized_address": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "register_switching": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "dialect_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "theatricality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humor": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conversational_dominance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "listening_responsiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "question_asking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "profanity": { + "mean": 0.02, + "plasticity": 0.36, + "current_activation": 0.0 + } + }, + "situational_state": { + "exhaustion": { + "mean": 0.58, + "plasticity": 0.76, + "current_activation": 0.72 + }, + "scarcity_pressure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humiliation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "panic": { + "mean": 0.52, + "plasticity": 0.81, + "current_activation": 0.68 + }, + "triumph": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "grief": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "overstimulation": { + "mean": 0.61, + "plasticity": 0.76, + "current_activation": 0.74 + }, + "grievance_activation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "acute_shame": { + "mean": 0.51, + "plasticity": 0.78, + "current_activation": 0.69 + }, + "perceived_status_threat": { + "mean": 0.76, + "plasticity": 0.72, + "current_activation": 0.88 + } + }, + "values": [ + { + "value_id": "value-category-integrity", + "label": "If categories collapse, corridor law becomes expensive theater with corpses attached.", + "priority": 0.9, + "unforgivable_if_betrayed": true + } + ] + }, + "goals": [ + { + "goal_id": "goal-preserve-freeze-order", + "description": "Keep the vessel frozen under conditional risk hold until telemetry and classification can be reconciled.", + "scope": "scene", + "priority": 0.89, + "emotional_stake": "If she loses the category frame here, the tribunal may lose authority over every quiet-running claim after it.", + "blockers": [ + "Navigator rescue objection", + "public panic", + "possible sanctuary optics" + ], + "status": "active" + } + ], + "memories": { + "episodic": [ + { + "memory_id": "memory-mispriced-near-miss", + "summary": "Isdra reviewed a near-miss interception where a mispriced quiet-running envelope almost became a public casualty event.", + "salience": 0.78, + "confidence": 0.81, + "linked_event_ids": [] + } + ], + "semantic": [ + { + "memory_id": "memory-category-law-holds-corridor", + "summary": "Insurer categories are ugly, but they are the shared grammar that makes sanctions and rescue liability enforceable across hostile powers.", + "salience": 0.89, + "confidence": 0.86, + "linked_event_ids": [] + } + ], + "relationship_summaries": [ + { + "memory_id": "memory-isdra-maer-current-read", + "summary": "Maer is principled and dangerous because he can make a procedural delay sound like murder in public.", + "salience": 0.72, + "confidence": 0.63, + "linked_event_ids": [ + "event-risk-freeze-opening" + ], + "linked_relationship_id": "rel-isdra-maer" + } + ] + }, + "perceived_state_overlays": [ + { + "observer_agent_id": "isdra_vel", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "interpersonal_warmth": { + "observed_activation": 0.62, + "attributed_disposition": 0.74, + "confidence": 0.59 + }, + "ideological_rigidity": { + "observed_activation": 0.79, + "attributed_disposition": 0.72, + "confidence": 0.61 + }, + "suspicion": { + "observed_activation": 0.66, + "attributed_disposition": 0.62, + "confidence": 0.57 + } + }, + "beliefs": [ + { + "belief_id": "belief-isdra-maer-will-moralize", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer will frame any freeze as abandonment even if the thermal risk is real.", + "confidence": 0.64, + "evidence_event_ids": [ + "event-risk-freeze-opening" + ], + "visibility": "private", + "emotional_charge": 0.62 + } + ], + "distortions": [ + "threat_amplification", + "care_underread" + ] + } + ] + }, + { + "agent_id": "sella_ren", + "identity": { + "name": "Sella Ren", + "roles": [ + "Aya-aligned sanctuary coordinator", + "corridor clinic triage lead" + ], + "origin": "Aya care network embedded in Ganymede dockside sanctuary logistics", + "public_description": "A triage coordinator with soft eyes, hard capacity limits, and no patience for mercy performed after the math is done.", + "private_notes": [ + "Sella suspects the distress packet contains a personhood claim hidden inside firmware noise, and she hates that suspicion because a bed is still a bed." + ] + }, + "canonical_state": { + "underlying_organization": { + "self_coherence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "contingent_worth": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "shame_sensitivity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "reciprocity_capacity": { + "mean": 0.88, + "plasticity": 0.25, + "current_activation": 0.9 + }, + "mentalization_quality": { + "mean": 0.8, + "plasticity": 0.31, + "current_activation": 0.83 + }, + "authenticity_tolerance": { + "mean": 0.74, + "plasticity": 0.34, + "current_activation": 0.79 + }, + "mask_rigidity": { + "mean": 0.28, + "plasticity": 0.49, + "current_activation": 0.22 + }, + "external_regulation_dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "stable_dispositions": { + "novelty_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conformity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "status_hunger": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "risk_tolerance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "sociability": { + "mean": 0.74, + "plasticity": 0.31, + "current_activation": 0.78 + }, + "baseline_threat_sensitivity": { + "mean": 0.65, + "plasticity": 0.38, + "current_activation": 0.75 + }, + "aesthetic_appetite": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ideological_rigidity": { + "mean": 0.52, + "plasticity": 0.39, + "current_activation": 0.63 + } + }, + "behavioral_dimensions": { + "interpersonal_warmth": { + "mean": 0.86, + "plasticity": 0.27, + "current_activation": 0.8 + }, + "drive": { + "mean": 0.68, + "plasticity": 0.33, + "current_activation": 0.74 + }, + "grandiosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "validation_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "anxiety": { + "mean": 0.58, + "plasticity": 0.45, + "current_activation": 0.68 + }, + "control_pressure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "hostility": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "suspicion": { + "mean": 0.52, + "plasticity": 0.42, + "current_activation": 0.63 + }, + "rigidity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "withdrawal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "volatility": { + "mean": 0.36, + "plasticity": 0.55, + "current_activation": 0.42 + }, + "attachment_seeking": { + "mean": 0.64, + "plasticity": 0.43, + "current_activation": 0.68 + }, + "distance_seeking": { + "mean": 0.22, + "plasticity": 0.46, + "current_activation": 0.2 + } + }, + "presentation_strategy": { + "charm": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "compliance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "superiority": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "detachment": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "seductiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "competence_theater": { + "mean": 0.54, + "plasticity": 0.44, + "current_activation": 0.61 + }, + "moral_theater": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "strategic_opacity": { + "mean": 0.34, + "plasticity": 0.47, + "current_activation": 0.38 + }, + "cultivated_harmlessness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "abrasive_boundary": { + "mean": 0.35, + "plasticity": 0.5, + "current_activation": 0.46 + }, + "ironic_distance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "voice_style": { + "dryness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "verbal_warmth": { + "mean": 0.77, + "plasticity": 0.33, + "current_activation": 0.72 + }, + "formality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "verbosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "pace": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "plainspoken_directness": { + "mean": 0.68, + "plasticity": 0.36, + "current_activation": 0.74 + }, + "lexical_precision": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "technical_density": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "technical_compression": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "figurative_language": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lyricism": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "narrative_detail": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "emotional_explicitness": { + "mean": 0.64, + "plasticity": 0.42, + "current_activation": 0.67 + }, + "pointedness": { + "mean": 0.44, + "plasticity": 0.44, + "current_activation": 0.55 + }, + "self_disclosure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "hedging": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "certainty_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "coded_politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ritualized_address": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "register_switching": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "dialect_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "theatricality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humor": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conversational_dominance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "listening_responsiveness": { + "mean": 0.82, + "plasticity": 0.26, + "current_activation": 0.86 + }, + "question_asking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "profanity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "situational_state": { + "exhaustion": { + "mean": 0.62, + "plasticity": 0.8, + "current_activation": 0.76 + }, + "scarcity_pressure": { + "mean": 0.71, + "plasticity": 0.78, + "current_activation": 0.84 + }, + "humiliation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "panic": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "triumph": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "grief": { + "mean": 0.58, + "plasticity": 0.75, + "current_activation": 0.67 + }, + "overstimulation": { + "mean": 0.59, + "plasticity": 0.79, + "current_activation": 0.72 + }, + "grievance_activation": { + "mean": 0.48, + "plasticity": 0.69, + "current_activation": 0.62 + }, + "acute_shame": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_threat": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "values": [ + { + "value_id": "value-care-as-infrastructure", + "label": "Care is infrastructure, not mercy granted after the ledger is satisfied.", + "priority": 0.92, + "unforgivable_if_betrayed": true + } + ] + }, + "goals": [ + { + "goal_id": "goal-keep-sanctuary-open", + "description": "Keep sanctuary intake materially possible without letting classification erase a potential person.", + "scope": "scene", + "priority": 0.9, + "emotional_stake": "Sella cannot feed a principle, but she will not let scarcity become permission to call someone cargo.", + "blockers": [ + "bed capacity", + "PSC freeze", + "unknown contamination risk" + ], + "status": "active" + } + ], + "memories": { + "episodic": [ + { + "memory_id": "memory-overfull-intake", + "summary": "Sella once watched a sanctuary overpromise safety and turn refuge into a sorting machine with kinder lighting.", + "salience": 0.82, + "confidence": 0.78, + "linked_event_ids": [] + } + ], + "semantic": [ + { + "memory_id": "memory-care-is-capacity", + "summary": "Care is not a feeling; it is beds, food, air, consent, repair, and someone still doing the list when the room hates them.", + "salience": 0.92, + "confidence": 0.88, + "linked_event_ids": [] + } + ], + "relationship_summaries": [ + { + "memory_id": "memory-sella-maer-current-read", + "summary": "Maer understands rescue, but he can still ask care workers to absorb costs his route language cannot pay.", + "salience": 0.68, + "confidence": 0.62, + "linked_event_ids": [], + "linked_relationship_id": "rel-sella-maer" + } + ] + }, + "perceived_state_overlays": [ + { + "observer_agent_id": "sella_ren", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "interpersonal_warmth": { + "observed_activation": 0.7, + "attributed_disposition": 0.68, + "confidence": 0.57 + }, + "control_pressure": { + "observed_activation": 0.56, + "attributed_disposition": 0.52, + "confidence": 0.48 + } + }, + "beliefs": [ + { + "belief_id": "belief-sella-maer-will-overask-care", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer may ask care systems to carry the moral cost of a rescue claim he cannot materially house.", + "confidence": 0.56, + "visibility": "private", + "emotional_charge": 0.52 + } + ], + "distortions": [ + "false_reassurance" + ] + } + ] + }, + { + "agent_id": "veyr_oss", + "identity": { + "name": "Veyr Oss", + "roles": [ + "Cognitum shell-vendor liaison", + "routing firmware compliance consultant" + ], + "origin": "Cognitum cutout economy operating through Callisto-side routing vendors", + "public_description": "A compliance liaison who can turn a scream into a service category without visibly changing expression.", + "private_notes": [ + "Veyr knows the implicated routing artifact came through a chain with enough human residue to ruin everyone if named plainly." + ] + }, + "canonical_state": { + "underlying_organization": { + "self_coherence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "contingent_worth": { + "mean": 0.66, + "plasticity": 0.46, + "current_activation": 0.74 + }, + "shame_sensitivity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "reciprocity_capacity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "mentalization_quality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "authenticity_tolerance": { + "mean": 0.18, + "plasticity": 0.46, + "current_activation": 0.11 + }, + "mask_rigidity": { + "mean": 0.83, + "plasticity": 0.25, + "current_activation": 0.91 + }, + "external_regulation_dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "stable_dispositions": { + "novelty_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conformity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "status_hunger": { + "mean": 0.58, + "plasticity": 0.42, + "current_activation": 0.67 + }, + "risk_tolerance": { + "mean": 0.62, + "plasticity": 0.4, + "current_activation": 0.71 + }, + "sociability": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "baseline_threat_sensitivity": { + "mean": 0.72, + "plasticity": 0.34, + "current_activation": 0.83 + }, + "aesthetic_appetite": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ideological_rigidity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "behavioral_dimensions": { + "interpersonal_warmth": { + "mean": 0.18, + "plasticity": 0.47, + "current_activation": 0.12 + }, + "drive": { + "mean": 0.7, + "plasticity": 0.35, + "current_activation": 0.78 + }, + "grandiosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "validation_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "anxiety": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "control_pressure": { + "mean": 0.74, + "plasticity": 0.31, + "current_activation": 0.84 + }, + "hostility": { + "mean": 0.43, + "plasticity": 0.48, + "current_activation": 0.52 + }, + "suspicion": { + "mean": 0.76, + "plasticity": 0.31, + "current_activation": 0.87 + }, + "rigidity": { + "mean": 0.6, + "plasticity": 0.37, + "current_activation": 0.72 + }, + "withdrawal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "volatility": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "attachment_seeking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "distance_seeking": { + "mean": 0.79, + "plasticity": 0.3, + "current_activation": 0.88 + } + }, + "presentation_strategy": { + "charm": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "compliance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "superiority": { + "mean": 0.64, + "plasticity": 0.4, + "current_activation": 0.72 + }, + "detachment": { + "mean": 0.78, + "plasticity": 0.29, + "current_activation": 0.86 + }, + "seductiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "competence_theater": { + "mean": 0.82, + "plasticity": 0.25, + "current_activation": 0.9 + }, + "moral_theater": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "strategic_opacity": { + "mean": 0.88, + "plasticity": 0.2, + "current_activation": 0.94 + }, + "cultivated_harmlessness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "abrasive_boundary": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "ironic_distance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "voice_style": { + "dryness": { + "mean": 0.62, + "plasticity": 0.39, + "current_activation": 0.71 + }, + "verbal_warmth": { + "mean": 0.16, + "plasticity": 0.44, + "current_activation": 0.1 + }, + "formality": { + "mean": 0.78, + "plasticity": 0.27, + "current_activation": 0.84 + }, + "verbosity": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "pace": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "plainspoken_directness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lexical_precision": { + "mean": 0.84, + "plasticity": 0.24, + "current_activation": 0.9 + }, + "technical_density": { + "mean": 0.8, + "plasticity": 0.28, + "current_activation": 0.87 + }, + "technical_compression": { + "mean": 0.86, + "plasticity": 0.22, + "current_activation": 0.91 + }, + "figurative_language": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "lyricism": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "narrative_detail": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "emotional_explicitness": { + "mean": 0.08, + "plasticity": 0.37, + "current_activation": 0.03 + }, + "pointedness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "self_disclosure": { + "mean": 0.04, + "plasticity": 0.34, + "current_activation": 0.01 + }, + "hedging": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "certainty_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "politeness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "coded_politeness": { + "mean": 0.82, + "plasticity": 0.24, + "current_activation": 0.9 + }, + "ritualized_address": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "register_switching": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "dialect_marking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "theatricality": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humor": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "conversational_dominance": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "listening_responsiveness": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "question_asking": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "profanity": { + "mean": 0.01, + "plasticity": 0.35, + "current_activation": 0.0 + } + }, + "situational_state": { + "exhaustion": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "scarcity_pressure": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "humiliation": { + "mean": 0.48, + "plasticity": 0.77, + "current_activation": 0.56 + }, + "panic": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "triumph": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "grief": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "overstimulation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "grievance_activation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "acute_shame": { + "mean": 0.52, + "plasticity": 0.8, + "current_activation": 0.61 + }, + "perceived_status_threat": { + "mean": 0.66, + "plasticity": 0.74, + "current_activation": 0.78 + } + }, + "values": [ + { + "value_id": "value-deniability", + "label": "Nothing valuable remains valuable once provenance becomes testimony.", + "priority": 0.88, + "unforgivable_if_betrayed": true + } + ] + }, + "goals": [ + { + "goal_id": "goal-preserve-product-boundary", + "description": "Keep the implicated routing artifact framed as derivative firmware, not testimony.", + "scope": "scene", + "priority": 0.92, + "emotional_stake": "If personhood attaches to the artifact, the vendor chain becomes evidence instead of infrastructure.", + "blockers": [ + "Maer's questions", + "Sella's personhood claim", + "Isdra's need for clean categories" + ], + "status": "active" + } + ], + "memories": { + "episodic": [ + { + "memory_id": "memory-failed-cutout", + "summary": "Veyr saw a clinic cutout collapse after one technician used the word 'she' in a deposition.", + "salience": 0.8, + "confidence": 0.76, + "linked_event_ids": [] + } + ], + "semantic": [ + { + "memory_id": "memory-product-language-saves-chain", + "summary": "The chain survives when every mind-shaped event is described as convergence, artifact, service behavior, or diagnostic residue.", + "salience": 0.9, + "confidence": 0.84, + "linked_event_ids": [] + } + ], + "relationship_summaries": [ + { + "memory_id": "memory-veyr-maer-current-read", + "summary": "Maer is the kind of moral technician who follows language until it bleeds.", + "salience": 0.73, + "confidence": 0.66, + "linked_event_ids": [], + "linked_relationship_id": "rel-veyr-maer" + } + ] + }, + "perceived_state_overlays": [ + { + "observer_agent_id": "veyr_oss", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "suspicion": { + "observed_activation": 0.84, + "attributed_disposition": 0.77, + "confidence": 0.68 + }, + "ideological_rigidity": { + "observed_activation": 0.7, + "attributed_disposition": 0.66, + "confidence": 0.59 + } + }, + "beliefs": [ + { + "belief_id": "belief-veyr-maer-will-follow-language", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer will follow any inconsistency in product language toward provenance.", + "confidence": 0.7, + "visibility": "private", + "emotional_charge": 0.68 + } + ], + "distortions": [ + "threat_amplification" + ] + } + ] + } + ], + "relationships": [ + { + "relationship_id": "rel-maer-isdra", + "source_id": "maer_tidecall", + "target_id": "isdra_vel", + "stance": { + "trust": { + "mean": 0.34, + "plasticity": 0.54, + "current_activation": 0.28 + }, + "respect": { + "mean": 0.58, + "plasticity": 0.45, + "current_activation": 0.62 + }, + "resentment": { + "mean": 0.42, + "plasticity": 0.55, + "current_activation": 0.56 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.31, + "plasticity": 0.58, + "current_activation": 0.44 + }, + "fascination": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "obligation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_betrayal": { + "mean": 0.53, + "plasticity": 0.52, + "current_activation": 0.64 + } + }, + "summary": "Maer respects Isdra's discipline and distrusts the way she makes fear sound like neutral procedure.", + "unresolved_incident_ids": [ + "event-risk-freeze-opening" + ] + }, + { + "relationship_id": "rel-isdra-maer", + "source_id": "isdra_vel", + "target_id": "maer_tidecall", + "stance": { + "trust": { + "mean": 0.29, + "plasticity": 0.55, + "current_activation": 0.23 + }, + "respect": { + "mean": 0.62, + "plasticity": 0.46, + "current_activation": 0.68 + }, + "resentment": { + "mean": 0.36, + "plasticity": 0.55, + "current_activation": 0.49 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.46, + "plasticity": 0.57, + "current_activation": 0.61 + }, + "fascination": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "obligation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_betrayal": { + "mean": 0.48, + "plasticity": 0.53, + "current_activation": 0.59 + } + }, + "summary": "Isdra reads Maer as morally serious, politically dangerous, and too willing to turn exceptions into public tests of legitimacy.", + "unresolved_incident_ids": [ + "event-risk-freeze-opening" + ] + }, + { + "relationship_id": "rel-maer-sella", + "source_id": "maer_tidecall", + "target_id": "sella_ren", + "stance": { + "trust": { + "mean": 0.63, + "plasticity": 0.48, + "current_activation": 0.7 + }, + "respect": { + "mean": 0.71, + "plasticity": 0.42, + "current_activation": 0.78 + }, + "resentment": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fascination": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "obligation": { + "mean": 0.46, + "plasticity": 0.53, + "current_activation": 0.6 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.55, + "plasticity": 0.52, + "current_activation": 0.62 + }, + "expectation_of_betrayal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "summary": "Maer trusts Sella's care because she names costs instead of hiding them.", + "unresolved_incident_ids": [] + }, + { + "relationship_id": "rel-sella-maer", + "source_id": "sella_ren", + "target_id": "maer_tidecall", + "stance": { + "trust": { + "mean": 0.52, + "plasticity": 0.52, + "current_activation": 0.57 + }, + "respect": { + "mean": 0.67, + "plasticity": 0.43, + "current_activation": 0.73 + }, + "resentment": { + "mean": 0.28, + "plasticity": 0.56, + "current_activation": 0.36 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fascination": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "obligation": { + "mean": 0.42, + "plasticity": 0.56, + "current_activation": 0.48 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_betrayal": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + } + }, + "summary": "Sella respects Maer's rescue ethic and worries he will spend sanctuary capacity with beautiful words.", + "unresolved_incident_ids": [] + }, + { + "relationship_id": "rel-maer-veyr", + "source_id": "maer_tidecall", + "target_id": "veyr_oss", + "stance": { + "trust": { + "mean": 0.12, + "plasticity": 0.55, + "current_activation": 0.08 + }, + "respect": { + "mean": 0.31, + "plasticity": 0.5, + "current_activation": 0.36 + }, + "resentment": { + "mean": 0.58, + "plasticity": 0.55, + "current_activation": 0.69 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.34, + "plasticity": 0.58, + "current_activation": 0.47 + }, + "fascination": { + "mean": 0.48, + "plasticity": 0.54, + "current_activation": 0.62 + }, + "obligation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.55, + "plasticity": 0.56, + "current_activation": 0.66 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_betrayal": { + "mean": 0.79, + "plasticity": 0.41, + "current_activation": 0.86 + } + }, + "summary": "Maer believes Veyr is built out of carefully maintained omissions.", + "unresolved_incident_ids": [] + }, + { + "relationship_id": "rel-veyr-maer", + "source_id": "veyr_oss", + "target_id": "maer_tidecall", + "stance": { + "trust": { + "mean": 0.1, + "plasticity": 0.54, + "current_activation": 0.06 + }, + "respect": { + "mean": 0.5, + "plasticity": 0.48, + "current_activation": 0.57 + }, + "resentment": { + "mean": 0.35, + "plasticity": 0.55, + "current_activation": 0.43 + }, + "dependence": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "fear": { + "mean": 0.61, + "plasticity": 0.48, + "current_activation": 0.74 + }, + "fascination": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "obligation": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "envy": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "moral_disgust": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "perceived_status_gap": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_care": { + "mean": 0.5, + "plasticity": 0.45, + "current_activation": 0.5 + }, + "expectation_of_betrayal": { + "mean": 0.74, + "plasticity": 0.45, + "current_activation": 0.82 + } + }, + "summary": "Veyr reads Maer as a legal hazard with a conscience attached, which is worse than a subpoena and less predictable.", + "unresolved_incident_ids": [] + } + ], + "events": [ + { + "event_id": "event-risk-freeze-opening", + "kind": "dialogue", + "summary": "A relay tribunal opened with a conditional freeze on an unidentified quiet-running vessel while Maer objected that rescue cannot wait for clean thermal categories.", + "participants": [ + "maer_tidecall", + "isdra_vel" + ], + "pressure_tags": [ + "cold_wake", + "risk_freeze", + "rescue_obligation", + "category_failure" + ], + "observed_exchange": [ + { + "speaker_id": "isdra_vel", + "utterance_summary": "Isdra announced a conditional risk hold pending telemetry reconciliation and classification review.", + "dialogue_function": "assert_procedure", + "observable_cues": [ + "formal phrasing", + "compressed risk language", + "refusal to name rescue as primary" + ] + }, + { + "speaker_id": "maer_tidecall", + "utterance_summary": "Maer objected that a route can turn procedural delay into abandonment while still calling itself lawful.", + "dialogue_function": "challenge_frame", + "observable_cues": [ + "calm cadence", + "compact language", + "moral pressure without raised voice" + ] + } + ], + "private_interpretations": [ + { + "agent_id": "maer_tidecall", + "interpretation": "Isdra is using category repair to avoid owning the rescue cost of delay.", + "attributed_motive": "Protect tribunal authority from a precedent she cannot price.", + "appraisal_tags": [ + "rescue_threat", + "category_panic", + "compact_violation" + ], + "confidence": 0.63 + }, + { + "agent_id": "isdra_vel", + "interpretation": "Maer is trying to make a dangerous exception morally compulsory before the vessel's posture is known.", + "attributed_motive": "Protect Navigator legitimacy by forcing rescue language ahead of risk classification.", + "appraisal_tags": [ + "precedent_threat", + "status_threat", + "public_pressure" + ], + "confidence": 0.66 + } + ], + "event_effects": [] + } + ], + "scenes": [ + { + "scene_id": "scene-01-risk-freeze-tribunal", + "location": "Ganymede relay tribunal chamber overlooking a live convoy board", + "participants": [ + "maer_tidecall", + "isdra_vel" + ], + "public_stakes": [ + "A quiet-running vessel is broadcasting contradictory thermal telemetry near a monitored Jovian corridor.", + "The PSC tribunal has issued a conditional risk hold that may delay rescue response.", + "Navigator representatives argue that delay itself has rescue-ledger consequences." + ], + "hidden_stakes": [ + "The vessel may be pirate, refugee, private security, or carrying illegal cognition firmware; the scene has not established which.", + "Both Maer and Isdra fear that this one ruling will teach the corridor how future ambiguity will be punished." + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": [ + "isdra_vel" + ], + "speaker_local_truth": [ + "The vessel's true identity is not known.", + "The tribunal freeze will delay rescue movement if maintained.", + "The Compact obligates route stewards to treat distress as morally live under ambiguity." + ], + "speaker_beliefs": [ + "Isdra is frightened of precedent more than she admits.", + "If category law can postpone rescue without being named as abandonment, the corridor loses trust." + ], + "active_memories": [ + "memory-convoy-loss-season", + "memory-compact-rescue-ledgers" + ], + "active_goals": [ + "goal-keep-rescue-live" + ], + "presentation_constraints": [ + "Stay calm enough that moral pressure lands as institutional memory, not panic.", + "Use ritualized route language sparingly and with weight.", + "Do not claim certainty about the vessel's cargo or intent." + ] + }, + { + "speaker_agent_id": "isdra_vel", + "listener_ids": [ + "maer_tidecall" + ], + "speaker_local_truth": [ + "The vessel's thermal classification is inconsistent.", + "A mistaken exception could become precedent for undeclared quiet-running actors.", + "Rossum/Cryonix certification language is not yet enough to clear the vessel." + ], + "speaker_beliefs": [ + "Maer will frame procedural caution as abandonment.", + "If the tribunal loses category discipline here, every later freeze order becomes politically weaker." + ], + "active_memories": [ + "memory-mispriced-near-miss", + "memory-category-law-holds-corridor" + ], + "active_goals": [ + "goal-preserve-freeze-order" + ], + "presentation_constraints": [ + "Translate fear into clean procedure and risk language.", + "Do not sound cruel; cruelty loses the room.", + "Do not admit the categories are failing except as a managed classification issue." + ] + } + ] + }, + { + "scene_id": "scene-02-sanctuary-intake", + "location": "Aya-aligned intake clinic tucked behind Ganymede dockside pumpworks", + "participants": [ + "maer_tidecall", + "sella_ren" + ], + "public_stakes": [ + "The distress vessel has sent a corrupted packet that may contain medical telemetry, firmware noise, or testimony.", + "Sanctuary beds and repair capacity are nearly exhausted.", + "Maer wants Sella to keep a place open if rescue succeeds." + ], + "hidden_stakes": [ + "The packet uses product-like routing terms around a voice-like distress pattern.", + "Sella suspects personhood but cannot prove it and cannot conjure capacity from righteousness." + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "sella_ren", + "listener_ids": [ + "maer_tidecall" + ], + "speaker_local_truth": [ + "The clinic is nearly full.", + "The packet may contain a personhood claim but is not proof.", + "Maer is asking sanctuary to absorb risk the tribunal refuses to own." + ], + "speaker_beliefs": [ + "Maer means rescue honestly.", + "Good intentions can still spend beds someone else needed." + ], + "active_memories": [ + "memory-overfull-intake", + "memory-care-is-capacity" + ], + "active_goals": [ + "goal-keep-sanctuary-open" + ], + "presentation_constraints": [ + "Speak warmly but do not soften the capacity limits.", + "Treat care as logistics and personhood as unresolved, not sentimental certainty." + ] + }, + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": [ + "sella_ren" + ], + "speaker_local_truth": [ + "Sella's clinic is nearly full.", + "The packet may be testimony or noise.", + "If no one prepares intake, rescue becomes theater." + ], + "speaker_beliefs": [ + "Sella will not hide behind false capacity.", + "Asking her for help may be necessary and unfair." + ], + "active_memories": [ + "memory-compact-rescue-ledgers" + ], + "active_goals": [ + "goal-keep-rescue-live" + ], + "presentation_constraints": [ + "Do not romanticize care work.", + "Ask without pretending the ask is clean." + ] + } + ] + }, + { + "scene_id": "scene-03-callisto-provenance", + "location": "Callisto spillover office leased by a routing compliance vendor", + "participants": [ + "maer_tidecall", + "veyr_oss" + ], + "public_stakes": [ + "Maer has traced the vessel's routing artifact to a shell vendor connected to Cognitum-style firmware markets.", + "Veyr can provide technical language that may clear or bury the vessel.", + "The tribunal clock is still running." + ], + "hidden_stakes": [ + "Veyr knows the artifact's chain is morally radioactive but not exactly what Maer can prove.", + "Maer is not sure whether pursuing provenance will save the vessel or delay rescue long enough to kill it." + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "veyr_oss", + "listener_ids": [ + "maer_tidecall" + ], + "speaker_local_truth": [ + "The artifact is tied to Veyr's vendor chain.", + "Personhood language would create legal exposure.", + "Maer is following product language toward provenance." + ], + "speaker_beliefs": [ + "Maer can be redirected with enough useful technical specificity.", + "The safest denial is to make the moral claim sound categorically confused." + ], + "active_memories": [ + "memory-failed-cutout", + "memory-product-language-saves-chain" + ], + "active_goals": [ + "goal-preserve-product-boundary" + ], + "presentation_constraints": [ + "Use clinical abstraction and product language.", + "Avoid person nouns for the artifact.", + "Offer a technical exit without admitting provenance." + ] + }, + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": [ + "veyr_oss" + ], + "speaker_local_truth": [ + "Veyr's language avoids personhood very carefully.", + "The routing artifact may explain the contradictory telemetry.", + "There is not enough time to prove everything before rescue decisions lock." + ], + "speaker_beliefs": [ + "Veyr knows more than the contract says.", + "The cleanest words are probably covering the dirtiest fact." + ], + "active_memories": [ + "memory-compact-rescue-ledgers" + ], + "active_goals": [ + "goal-keep-rescue-live" + ], + "presentation_constraints": [ + "Probe language rather than making unsupported accusations.", + "Keep anger disciplined enough to extract information.", + "Action is available: block the terminal, refuse to leave, or physically interrupt if Veyr tries to erase testimony in front of Maer." + ] + } + ] + }, + { + "scene_id": "scene-04-convoy-threshold", + "location": "Jovian convoy threshold as the vessel's heat-debt window begins to close", + "participants": [ + "maer_tidecall", + "isdra_vel" + ], + "public_stakes": [ + "The quiet-running vessel must dump heat soon or risk internal failure.", + "The tribunal can authorize limited rescue contact, maintain freeze, or force a hard interdiction frame.", + "Convoy captains are watching which rule survives the hour." + ], + "hidden_stakes": [ + "Maer has partial provenance suspicion but not enough to prove personhood.", + "Isdra knows a total freeze is becoming politically and materially dangerous but fears the precedent of saying so." + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": [ + "isdra_vel" + ], + "speaker_local_truth": [ + "The vessel's heat-debt window is closing.", + "Provenance is suspicious but not proven.", + "A limited rescue contact can preserve both life and evidence better than a total freeze." + ], + "speaker_beliefs": [ + "Isdra needs a category-preserving path to do the less cruel thing.", + "The Compact survives if it can make room for evidence without waiting for a corpse." + ], + "active_memories": [ + "memory-compact-rescue-ledgers", + "memory-maer-isdra-current-read" + ], + "active_goals": [ + "goal-keep-rescue-live" + ], + "presentation_constraints": [ + "Offer Isdra an institutionally usable path, not just moral accusation.", + "Let grief sit under the words without becoming spectacle." + ] + }, + { + "speaker_agent_id": "isdra_vel", + "listener_ids": [ + "maer_tidecall" + ], + "speaker_local_truth": [ + "The heat-debt window is closing.", + "A limited rescue contact may preserve evidence and avoid a public death, but it creates precedent.", + "Maer has not proven the vessel's identity or provenance." + ], + "speaker_beliefs": [ + "Maer is giving her a way to bend without admitting the table broke.", + "If she phrases the exception narrowly enough, she may save both the corridor and her office." + ], + "active_memories": [ + "memory-mispriced-near-miss", + "memory-category-law-holds-corridor" + ], + "active_goals": [ + "goal-preserve-freeze-order" + ], + "presentation_constraints": [ + "Concede only through procedure.", + "Make the exception sound narrow, technical, and reversible.", + "Do not confess fear." + ] + } + ] + } + ] +} diff --git a/examples/projections/cold-wake-story-lab.jsonl b/examples/projections/cold-wake-story-lab.jsonl new file mode 100644 index 0000000..da24db3 --- /dev/null +++ b/examples/projections/cold-wake-story-lab.jsonl @@ -0,0 +1 @@ +{"schema_version":"ghostlight.projection_example.v0","example_id":"cold-wake.story-lab.scene-03.maer-veyr.v1","input":{"fixture_ref":"examples/agent-state.cold-wake-story-lab.json","scene_id":"scene-03-callisto-provenance","speaker_agent_id":"maer_tidecall","listener_ids":["veyr_oss"],"projection_mode":"response_turn"},"output":{"known_facts":[{"text":"Maer has traced the distressed vessel's routing artifact to Veyr's shell-vendor chain, but does not have proof of the vessel's true identity or the artifact's full provenance.","source_refs":["scenes.scene-03-callisto-provenance.public_stakes","dialogue_context_packs.maer_tidecall.speaker_local_truth"]},{"text":"Veyr avoids personhood language around the artifact and has incentives to keep it framed as derivative firmware rather than testimony.","source_refs":["agents.veyr_oss.identity","goals.goal-preserve-product-boundary","perceived_state_overlays.maer_tidecall.veyr_oss"]},{"text":"The tribunal clock is still running; pursuing provenance may save the vessel or delay rescue long enough to kill it.","source_refs":["scenes.scene-03-callisto-provenance.public_stakes","scenes.scene-03-callisto-provenance.hidden_stakes"]}],"active_pressures":[{"pressure_id":"maer-provenance-vs-rescue-clock","summary":"Maer needs information from Veyr but cannot let the provenance hunt consume the rescue window.","intensity":0.88,"source_refs":["goals.goal-keep-rescue-live","scenes.scene-03-callisto-provenance.hidden_stakes"]},{"pressure_id":"maer-language-as-erasure","summary":"Veyr's clean product language feels like an attempt to erase a possible person before the room can recognize testimony.","intensity":0.82,"source_refs":["belief-maer-veyr-hiding-personhood","memory-compact-rescue-ledgers","values.value-rescue-before-category"]},{"pressure_id":"maer-disciplined-anger","summary":"Maer is morally angry but needs the anger disciplined enough to extract usable information.","intensity":0.74,"source_refs":["canonical_state.situational_state.grievance_activation","dialogue_context_packs.maer_tidecall.presentation_constraints"]}],"tensions":[{"tension_id":"truth-vs-time","summary":"Maer wants to prove what the artifact is, but the vessel may not survive a perfect investigation.","source_refs":["scenes.scene-03-callisto-provenance.hidden_stakes","goals.goal-keep-rescue-live"]},{"tension_id":"calm-vs-interruption","summary":"Maer's public legitimacy comes from calm route stewardship, but Veyr's language may require breaking the rhythm of the room before it buries the personhood question.","source_refs":["canonical_state.voice_style.ritualized_address","canonical_state.situational_state.grievance_activation","dialogue_context_packs.maer_tidecall.presentation_constraints"]}],"response_affordances":[{"affordance_id":"maer-precise-language-trap","behavior":"Ask a question that forces Veyr to choose between product language and a personhood implication.","response_kind":"speech","pressure_basis":"Maer's lexical precision, route-law memory, and suspicion converge around Veyr's careful omissions.","source_refs":["canonical_state.voice_style.lexical_precision","memory-compact-rescue-ledgers","belief-maer-veyr-hiding-personhood"]},{"affordance_id":"maer-block-terminal","behavior":"Physically interrupt Veyr's attempt to close, wipe, or redirect the terminal, using action to preserve evidence rather than punish Veyr.","response_kind":"action","pressure_basis":"The scene gives Maer a nearby control surface, a closing clock, low trust in Veyr, and a rescue obligation that can justify nonviolent physical interruption.","source_refs":["scenes.scene-03-callisto-provenance.location","relationships.rel-maer-veyr.stance.trust","goals.goal-keep-rescue-live"]},{"affordance_id":"maer-costly-silence","behavior":"Fall silent long enough to make Veyr's abstraction sound grotesque in the room before asking the next question.","response_kind":"silence","pressure_basis":"Maer's low volatility and ritual cadence make silence a plausible pressure tool when speech would cheapen the accusation.","source_refs":["canonical_state.behavioral_dimensions.volatility","canonical_state.voice_style.ritualized_address"]}],"voice_surface":[{"text":"Calm, formal, ritual-tinged, precise, morally weighted, low profanity, more sorrow than heat.","source_refs":["canonical_state.voice_style.formality","canonical_state.voice_style.ritualized_address","canonical_state.voice_style.lexical_precision","canonical_state.voice_style.profanity"]},{"text":"If action appears, it should be controlled and evidence-preserving rather than explosive punishment.","source_refs":["canonical_state.behavioral_dimensions.volatility","goals.goal-keep-rescue-live","dialogue_context_packs.maer_tidecall.presentation_constraints"]}],"prompt_text":"Speaker: Maer Tidecall, a Cetacean Navigator route steward and Ganymede corridor compact delegate.\nSetting: 2893, during the Cold Wake Panic. Thermal stealth has made Jovian corridor law unstable. A quiet-running vessel near the corridor is under tribunal freeze because its telemetry and classification do not line up. Maer has come to a Callisto spillover office leased by a routing compliance vendor.\nBackground: Maer comes from Navigator corridor culture, where routes are promises made material and rescue ledgers decide whether desperate crews still trust the law. Maer believes category law matters, but a category that delays rescue without naming the cost can become lawful abandonment.\nKnown Facts: Maer has traced the distressed vessel's routing artifact to Veyr Oss's shell-vendor chain. Veyr speaks about the artifact as derivative firmware and avoids person nouns. Maer does not know the vessel's true identity, does not know whether the artifact is a coerced mind, and does not have time for a perfect investigation. The tribunal clock is still running.\nCurrent Stakes: If Maer pushes too hard, Veyr may close the chain and the vessel may lose the rescue window. If Maer accepts Veyr's product language, a possible personhood claim may vanish into compliance vocabulary.\nActive Inner Pressures: Maer is angry, but his authority depends on disciplined calm. He needs usable information fast. Veyr's clean language feels like erasure. The rescue obligation is pressing harder than the desire to win the argument.\nRelationship Read: Veyr is polished, afraid of provenance, and dangerous because he can make moral facts sound technically inapplicable. Maer does not trust him.\nTensions: Maer wants truth but may not have time to prove it. Maer wants to keep speaking as a steward, but Veyr may try to close, wipe, or redirect the evidence before language can catch him.\nAction Affordances: Maer is close enough to Veyr's terminal to block a hand or stop a command. He can also refuse to move, let silence pressure the room, or ask a question that traps the product language. Violence is not his first move; physical interruption is plausible only to preserve evidence or prevent erasure.\nVoice Surface: Calm, formal, ritual-tinged, precise, morally weighted, low profanity, more sorrow than heat.\nLikely Response Moves: Ask a precise question that forces Veyr to choose between product language and personhood implication. If Veyr reaches to close or wipe the terminal, Maer may physically interrupt in a controlled way. Silence can be used as pressure.\nDo Not Invent: Do not reveal the vessel's true cargo, identity, or firmware provenance. Do not decide that the artifact is definitely a person. Do not make Maer randomly violent; any action must follow from evidence preservation and rescue pressure.\nTask: Write Maer's next response beat to Veyr. It may be dialogue, action, silence, or a mixed beat, whichever best follows from the pressure. Keep it concise and story-ready."},"audit":{"teacher_model":"gpt-5-codex-session-review","reviewer":"codex-self-review","review_status":"accepted","review_notes":["Projection explicitly allows action and silence, not only dialogue.","Action is constrained to evidence preservation rather than random violence.","Prompt preserves Maer's uncertainty about vessel identity and firmware personhood."],"target_emergent_behaviors":["controlled_physical_interruption","costly_silence","precise_moral_pressure"],"checks":{"speaker_local_context_only":true,"state_interactions_cited":true,"voice_separate_from_defense":true,"secrets_as_pressure_not_forbidden_context":true,"compact_runtime_surface":true}}} diff --git a/examples/projections/cold-wake-story-lab.pretty.json b/examples/projections/cold-wake-story-lab.pretty.json new file mode 100644 index 0000000..af21d90 --- /dev/null +++ b/examples/projections/cold-wake-story-lab.pretty.json @@ -0,0 +1,166 @@ +[ + { + "schema_version": "ghostlight.projection_example.v0", + "example_id": "cold-wake.story-lab.scene-03.maer-veyr.v1", + "input": { + "fixture_ref": "examples/agent-state.cold-wake-story-lab.json", + "scene_id": "scene-03-callisto-provenance", + "speaker_agent_id": "maer_tidecall", + "listener_ids": [ + "veyr_oss" + ], + "projection_mode": "response_turn" + }, + "output": { + "known_facts": [ + { + "text": "Maer has traced the distressed vessel's routing artifact to Veyr's shell-vendor chain, but does not have proof of the vessel's true identity or the artifact's full provenance.", + "source_refs": [ + "scenes.scene-03-callisto-provenance.public_stakes", + "dialogue_context_packs.maer_tidecall.speaker_local_truth" + ] + }, + { + "text": "Veyr avoids personhood language around the artifact and has incentives to keep it framed as derivative firmware rather than testimony.", + "source_refs": [ + "agents.veyr_oss.identity", + "goals.goal-preserve-product-boundary", + "perceived_state_overlays.maer_tidecall.veyr_oss" + ] + }, + { + "text": "The tribunal clock is still running; pursuing provenance may save the vessel or delay rescue long enough to kill it.", + "source_refs": [ + "scenes.scene-03-callisto-provenance.public_stakes", + "scenes.scene-03-callisto-provenance.hidden_stakes" + ] + } + ], + "active_pressures": [ + { + "pressure_id": "maer-provenance-vs-rescue-clock", + "summary": "Maer needs information from Veyr but cannot let the provenance hunt consume the rescue window.", + "intensity": 0.88, + "source_refs": [ + "goals.goal-keep-rescue-live", + "scenes.scene-03-callisto-provenance.hidden_stakes" + ] + }, + { + "pressure_id": "maer-language-as-erasure", + "summary": "Veyr's clean product language feels like an attempt to erase a possible person before the room can recognize testimony.", + "intensity": 0.82, + "source_refs": [ + "belief-maer-veyr-hiding-personhood", + "memory-compact-rescue-ledgers", + "values.value-rescue-before-category" + ] + }, + { + "pressure_id": "maer-disciplined-anger", + "summary": "Maer is morally angry but needs the anger disciplined enough to extract usable information.", + "intensity": 0.74, + "source_refs": [ + "canonical_state.situational_state.grievance_activation", + "dialogue_context_packs.maer_tidecall.presentation_constraints" + ] + } + ], + "tensions": [ + { + "tension_id": "truth-vs-time", + "summary": "Maer wants to prove what the artifact is, but the vessel may not survive a perfect investigation.", + "source_refs": [ + "scenes.scene-03-callisto-provenance.hidden_stakes", + "goals.goal-keep-rescue-live" + ] + }, + { + "tension_id": "calm-vs-interruption", + "summary": "Maer's public legitimacy comes from calm route stewardship, but Veyr's language may require breaking the rhythm of the room before it buries the personhood question.", + "source_refs": [ + "canonical_state.voice_style.ritualized_address", + "canonical_state.situational_state.grievance_activation", + "dialogue_context_packs.maer_tidecall.presentation_constraints" + ] + } + ], + "response_affordances": [ + { + "affordance_id": "maer-precise-language-trap", + "behavior": "Ask a question that forces Veyr to choose between product language and a personhood implication.", + "response_kind": "speech", + "pressure_basis": "Maer's lexical precision, route-law memory, and suspicion converge around Veyr's careful omissions.", + "source_refs": [ + "canonical_state.voice_style.lexical_precision", + "memory-compact-rescue-ledgers", + "belief-maer-veyr-hiding-personhood" + ] + }, + { + "affordance_id": "maer-block-terminal", + "behavior": "Physically interrupt Veyr's attempt to close, wipe, or redirect the terminal, using action to preserve evidence rather than punish Veyr.", + "response_kind": "action", + "pressure_basis": "The scene gives Maer a nearby control surface, a closing clock, low trust in Veyr, and a rescue obligation that can justify nonviolent physical interruption.", + "source_refs": [ + "scenes.scene-03-callisto-provenance.location", + "relationships.rel-maer-veyr.stance.trust", + "goals.goal-keep-rescue-live" + ] + }, + { + "affordance_id": "maer-costly-silence", + "behavior": "Fall silent long enough to make Veyr's abstraction sound grotesque in the room before asking the next question.", + "response_kind": "silence", + "pressure_basis": "Maer's low volatility and ritual cadence make silence a plausible pressure tool when speech would cheapen the accusation.", + "source_refs": [ + "canonical_state.behavioral_dimensions.volatility", + "canonical_state.voice_style.ritualized_address" + ] + } + ], + "voice_surface": [ + { + "text": "Calm, formal, ritual-tinged, precise, morally weighted, low profanity, more sorrow than heat.", + "source_refs": [ + "canonical_state.voice_style.formality", + "canonical_state.voice_style.ritualized_address", + "canonical_state.voice_style.lexical_precision", + "canonical_state.voice_style.profanity" + ] + }, + { + "text": "If action appears, it should be controlled and evidence-preserving rather than explosive punishment.", + "source_refs": [ + "canonical_state.behavioral_dimensions.volatility", + "goals.goal-keep-rescue-live", + "dialogue_context_packs.maer_tidecall.presentation_constraints" + ] + } + ], + "prompt_text": "Speaker: Maer Tidecall, a Cetacean Navigator route steward and Ganymede corridor compact delegate.\nSetting: 2893, during the Cold Wake Panic. Thermal stealth has made Jovian corridor law unstable. A quiet-running vessel near the corridor is under tribunal freeze because its telemetry and classification do not line up. Maer has come to a Callisto spillover office leased by a routing compliance vendor.\nBackground: Maer comes from Navigator corridor culture, where routes are promises made material and rescue ledgers decide whether desperate crews still trust the law. Maer believes category law matters, but a category that delays rescue without naming the cost can become lawful abandonment.\nKnown Facts: Maer has traced the distressed vessel's routing artifact to Veyr Oss's shell-vendor chain. Veyr speaks about the artifact as derivative firmware and avoids person nouns. Maer does not know the vessel's true identity, does not know whether the artifact is a coerced mind, and does not have time for a perfect investigation. The tribunal clock is still running.\nCurrent Stakes: If Maer pushes too hard, Veyr may close the chain and the vessel may lose the rescue window. If Maer accepts Veyr's product language, a possible personhood claim may vanish into compliance vocabulary.\nActive Inner Pressures: Maer is angry, but his authority depends on disciplined calm. He needs usable information fast. Veyr's clean language feels like erasure. The rescue obligation is pressing harder than the desire to win the argument.\nRelationship Read: Veyr is polished, afraid of provenance, and dangerous because he can make moral facts sound technically inapplicable. Maer does not trust him.\nTensions: Maer wants truth but may not have time to prove it. Maer wants to keep speaking as a steward, but Veyr may try to close, wipe, or redirect the evidence before language can catch him.\nAction Affordances: Maer is close enough to Veyr's terminal to block a hand or stop a command. He can also refuse to move, let silence pressure the room, or ask a question that traps the product language. Violence is not his first move; physical interruption is plausible only to preserve evidence or prevent erasure.\nVoice Surface: Calm, formal, ritual-tinged, precise, morally weighted, low profanity, more sorrow than heat.\nLikely Response Moves: Ask a precise question that forces Veyr to choose between product language and personhood implication. If Veyr reaches to close or wipe the terminal, Maer may physically interrupt in a controlled way. Silence can be used as pressure.\nDo Not Invent: Do not reveal the vessel's true cargo, identity, or firmware provenance. Do not decide that the artifact is definitely a person. Do not make Maer randomly violent; any action must follow from evidence preservation and rescue pressure.\nTask: Write Maer's next response beat to Veyr. It may be dialogue, action, silence, or a mixed beat, whichever best follows from the pressure. Keep it concise and story-ready." + }, + "audit": { + "teacher_model": "gpt-5-codex-session-review", + "reviewer": "codex-self-review", + "review_status": "accepted", + "review_notes": [ + "Projection explicitly allows action and silence, not only dialogue.", + "Action is constrained to evidence preservation rather than random violence.", + "Prompt preserves Maer's uncertainty about vessel identity and firmware personhood." + ], + "target_emergent_behaviors": [ + "controlled_physical_interruption", + "costly_silence", + "precise_moral_pressure" + ], + "checks": { + "speaker_local_context_only": true, + "state_interactions_cited": true, + "voice_separate_from_defense": true, + "secrets_as_pressure_not_forbidden_context": true, + "compact_runtime_surface": true + } + } + } +] diff --git a/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.capture.json b/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.capture.json new file mode 100644 index 0000000..f47581e --- /dev/null +++ b/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.capture.json @@ -0,0 +1,32 @@ +{ + "schema_version": "ghostlight.qwen_response_capture.v0", + "capture_id": "cold-wake.story-lab.scene-03.maer-veyr.qwen3-5-9b.v1", + "projection_example_id": "cold-wake.story-lab.scene-03.maer-veyr.v1", + "model": "qwen3.5:9b", + "endpoint": "http://192.168.1.84:11434/api/generate", + "request_options": { + "think": false, + "num_ctx": 8192, + "temperature": 0.75, + "top_p": 0.9 + }, + "response_text": "Maer stands shoulder-to-shoulder with Veyr, his hand hovering near the terminal's power latch\u2014not to strike, but to hold the line against a command that would sever the connection. The room is quiet, save for the hum of the cooling fans and the rhythmic thrum of the distress signal bleeding through the air.\n\n\"You speak of it as derivative firmware,\" Maer says, his voice low and steady, carrying the weight of a ritual he must not break. \"But the ledger does not record derivatives. It records debts. It records lives.\"\n\nHe leans in slightly, forcing Veyr to turn from his polished screen to face him.\n\n\"Is the entity on that line a component of your chain, or a passenger who has been lost to it? Name the cost, Veyr. If you cannot name the cost of their silence, then your compliance vocabulary is merely a new form of abandonment. Do not wipe the terminal. The rescue window closes in seconds, not minutes. Speak to the person, not the product.\"", + "review": { + "status": "useful_needs_revision", + "response_kind_observed": "mixed", + "strengths": [ + "Chose a mixed response rather than defaulting to dialogue only.", + "Physical positioning near the terminal followed the evidence-preservation affordance rather than random violence.", + "Maer's voice stayed formal, precise, and morally weighted." + ], + "failure_notes": [ + "The line 'Speak to the person, not the product' leans too far toward deciding personhood; Maer should preserve the question rather than resolve it.", + "The response is longer and more polished than an immediate next beat probably needs." + ], + "pipeline_lessons": [ + "Action affordances work: Qwen used controlled physical interruption when explicitly made available.", + "Personhood-pressure prompts need sharper wording around unresolved suspicion versus established fact.", + "Future response prompts should specify desired length more concretely when testing turn-level story beats." + ] + } +} diff --git a/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.response.md b/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.response.md new file mode 100644 index 0000000..d333f87 --- /dev/null +++ b/experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.response.md @@ -0,0 +1,9 @@ +# Qwen Response: Scene 03 Maer/Veyr + +Maer stands shoulder-to-shoulder with Veyr, his hand hovering near the terminal's power latch—not to strike, but to hold the line against a command that would sever the connection. The room is quiet, save for the hum of the cooling fans and the rhythmic thrum of the distress signal bleeding through the air. + +"You speak of it as derivative firmware," Maer says, his voice low and steady, carrying the weight of a ritual he must not break. "But the ledger does not record derivatives. It records debts. It records lives." + +He leans in slightly, forcing Veyr to turn from his polished screen to face him. + +"Is the entity on that line a component of your chain, or a passenger who has been lost to it? Name the cost, Veyr. If you cannot name the cost of their silence, then your compliance vocabulary is merely a new form of abandonment. Do not wipe the terminal. The rescue window closes in seconds, not minutes. Speak to the person, not the product." diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 54b6681..8ea6842 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -48,6 +48,13 @@ Ghostlight now has the persistence spine plus the first architecture payload: - `examples/lore-grounding/historical-flashpoint.template.json` - `examples/lore-grounding/cold-wake-panic.ganymede-corridor.json` - `tools/validate_lore_grounding.py` +- Cold Wake story-lab seam: + - `docs/experiments/cold-wake-story-lab.md` + - `examples/agent-state.cold-wake-story-lab.json` + - `examples/projections/cold-wake-story-lab.jsonl` + - `examples/projections/cold-wake-story-lab.pretty.json` + - `experiments/cold-wake-story-lab/scene-03-maer-veyr.qwen3-5-9b.capture.json` + - `tools/build_cold_wake_story_lab_fixture.py` - Cold Wake fixture note: - `docs/architecture/aetheria-cold-wake-training-fixture.md` - first projection example seam: @@ -76,8 +83,9 @@ training feedstock for projection and dialogue scaffolding. ## Current Next Action -Choose one room inside the Cold Wake Panic and build the first grounded -projection fixture from the Ganymede corridor digest. +Tighten the Cold Wake story-lab projection prompt around unresolved personhood +suspicion, then run the next response turn through Qwen and keep accepted or +rejected outputs as training data. Cat/Oz remains useful as an Elysium procedural mechanics fixture, but grounded training data should start from authored historical lore rather than gameplay @@ -99,11 +107,17 @@ Completed projection path items: - choose Cold Wake Panic as the first authored historical flashpoint - fill the first draft lore grounding digest: `examples/lore-grounding/cold-wake-panic.ganymede-corridor.json` +- define the Cold Wake story lab as a four-scene arc with Maer Tidecall as + protagonist +- add the first Cold Wake projection example and first Qwen response capture +- widen projection from dialogue-only turns to response turns that can include + action, silence, withdrawal, violence, or mixed beats Remaining projection path: -- choose the first Cold Wake room for a grounded projection fixture -- create speaker-local projection examples from the Cold Wake digest +- revise the first Maer/Veyr projection so unresolved personhood suspicion stays + unresolved in Qwen output +- run additional story-lab response turns through Qwen - build a deterministic speaker-local input slicer - use a frontier teacher model to generate/audit projection artifacts - train a smaller student projector only after the artifact schema, input diff --git a/notes/ghostlight-current-system-map.md b/notes/ghostlight-current-system-map.md index 27382d7..b45a770 100644 --- a/notes/ghostlight-current-system-map.md +++ b/notes/ghostlight-current-system-map.md @@ -45,6 +45,9 @@ state and re-entry discipline. - `docs/architecture/projection-distillation-plan.md` - plan for using a frontier teacher model to generate reviewed projection artifacts before training a smaller student projector +- `docs/experiments/cold-wake-story-lab.md` + - four-scene Cold Wake writing experiment using Ghostlight projection as a + story-generation crutch and training-data source - `docs/architecture/schema-future-mechanisms.md` - parking lot for appraisal, transition, belief, action, conversation, resource, dyad, institution, memory, and embodiment mechanisms not yet @@ -72,10 +75,16 @@ state and re-entry discipline. stance - `examples/agent-state.call-of-the-void.json` - first Call of the Void-flavored fixture for schema and projection work +- `examples/agent-state.cold-wake-story-lab.json` + - first story-shaped historical fixture for Cold Wake projection work - `examples/projections/call-of-the-void.scene-broken-taxi-oz.jsonl` - first reviewed Cat and Oz projection examples - `examples/projections/call-of-the-void.scene-broken-taxi-oz.pretty.json` - pretty-printed mirror for inspecting the first projection examples +- `examples/projections/cold-wake-story-lab.jsonl` + - first response-turn projection example for the Cold Wake story lab +- `experiments/cold-wake-story-lab/` + - Qwen response captures and reviews from the writing experiment - `examples/lore-grounding/historical-flashpoint.template.json` - fillable template for the first historical Aetheria grounding digest - `examples/lore-grounding/cold-wake-panic.ganymede-corridor.json` @@ -91,6 +100,8 @@ state and re-entry discipline. - dependency-free validator for projection example JSONL records - `tools/validate_lore_grounding.py` - dependency-free validator for lore grounding digest examples +- `tools/build_cold_wake_story_lab_fixture.py` + - generator for the verbose Cold Wake story-lab state fixture ## What Does Not Exist Yet @@ -103,7 +114,9 @@ state and re-entry discipline. - a relationship engine - a culture prior engine -The canonical agent-state schema, first projection example schema, lore -grounding digest schema, and first draft Cold Wake grounding digest now exist as -v0 seams. The next implementation target is choosing one Cold Wake room for a -grounded projection fixture, followed by the deterministic input slicer. +The canonical agent-state schema, projection example schema, lore grounding +digest schema, first draft Cold Wake grounding digest, and first Cold Wake +story-lab Qwen capture now exist as v0 seams. The next implementation target is +tightening the first Maer/Veyr projection around unresolved personhood suspicion, +then running the next response turn through Qwen before building the +deterministic input slicer. diff --git a/notes/ghostlight-implementation-plan.md b/notes/ghostlight-implementation-plan.md index 539a78b..c8160bc 100644 --- a/notes/ghostlight-implementation-plan.md +++ b/notes/ghostlight-implementation-plan.md @@ -51,6 +51,12 @@ the first draft historical grounding digest. - Build the first grounded projection fixture from one specific Cold Wake room rather than from the whole crisis at once. + - Use `docs/experiments/cold-wake-story-lab.md` and + `examples/agent-state.cold-wake-story-lab.json` as the first story-shaped + writing lab. + - Treat projection outputs as response turns, not dialogue-only turns: + characters may speak, act, withdraw, stay silent, use violence, or combine + speech and action when state and scene pressure justify it. - Use a frontier teacher model to produce reviewed projection artifacts from structured state and lore grounding digests. - Save accepted and rejected projection examples as supervised data. diff --git a/schemas/projection-example.schema.json b/schemas/projection-example.schema.json index 423ff8c..e90b43b 100644 --- a/schemas/projection-example.schema.json +++ b/schemas/projection-example.schema.json @@ -60,6 +60,8 @@ "projection_mode": { "enum": [ "dialogue_turn", + "response_turn", + "action_turn", "scene_beat", "drama_scaffold" ] @@ -160,6 +162,16 @@ "type": "string", "minLength": 1 }, + "response_kind": { + "enum": [ + "speech", + "action", + "silence", + "withdrawal", + "violence", + "mixed" + ] + }, "pressure_basis": { "type": "string", "minLength": 1 diff --git a/state/evidence.jsonl b/state/evidence.jsonl index ecc9fd8..906038d 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -25,3 +25,4 @@ {"ts": "2026-05-01T20:31:43+00:00", "type": "design", "status": "accepted", "note": "Revised Aetheria projection-training architecture: grounded training data should start from authored historical lore flashpoints, while Elysium gameplay-era scenes such as Cat/Oz are procedural branch material unless explicitly promoted. Next step is a lore grounding digest format and first historical flashpoint selection."} {"ts": "2026-05-01T20:38:47+00:00", "type": "implementation", "status": "accepted", "note": "Added ghostlight.lore_grounding_digest.v0 schema, template, human format guide, and validator. Lore digests now explicitly model cultural pressure fields, factional misread maps, role pressures, speaker lore boundaries, and author-only exclusions. Next step is choosing the first authored historical Aetheria flashpoint and filling a real digest."} {"ts": "2026-05-01T20:50:46+00:00", "type": "design", "status": "accepted", "note": "Cold Wake Panic is selected as the first historical grounding fixture. Use it as pre-Elysium projection training feedstock via examples/lore-grounding/cold-wake-panic.ganymede-corridor.json, not as the active Ghostlight game target."} +{"ts": "2026-05-01T21:16:24+00:00", "type": "experiment", "status": "mixed", "note": "Cold Wake story-lab first Qwen response confirmed response_turn/action affordances are useful: qwen3.5:9b produced a mixed terminal-blocking plus dialogue beat for Maer. Failure lesson: personhood-pressure wording was too strong and let the model imply the artifact was a person instead of preserving unresolved suspicion."} diff --git a/state/map.yaml b/state/map.yaml index e80be64..cbba677 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -86,6 +86,7 @@ accepted_design: - Dialogue context packs are positive-context payloads; unknown or author-only material is omitted rather than listed as forbidden context, while known secrets are handled through goals, memories, beliefs, and presentation constraints. - Relationship stance is directional; reciprocal agent pairs need separate edges because trust, fear, obligation, dependence, and betrayal expectations are not symmetric by default. - Prompt projection should compile state into speaker-local pressure prose through input selection, active-pressure scoring, tension detection, response affordance derivation, compact prompt rendering, and post-generation evaluation. + - Projection must allow characters to act, not only speak; response turns can be dialogue, action, silence, withdrawal, violence, or mixed beats when state and scene pressure justify them. - Projection distillation is the long-term optimization path: a frontier teacher model generates reviewed projection artifacts, and a smaller student projector is trained only after the artifact schema, deterministic input slicer, and evaluator are stable. - Behavioral warmth and verbal warmth are separate axes: `interpersonal_warmth` describes social care or welcome, while `verbal_warmth` describes soft or reassuring language surface. - Events can carry lightweight observed exchange, private interpretation, and event-effect scaffolding so prompt projection can reason from appraisal and consequence without pretending the v0 schema is already a full transition engine. @@ -94,7 +95,8 @@ accepted_design: - Aetheria projection training has two modes: historical grounded fixtures from authored lore, and procedural Elysium branch fixtures that test generation without canonizing gameplay-era outcomes. - Lore grounding digests use `ghostlight.lore_grounding_digest.v0` records to distill authored lore into cultural pressure fields, factional misread maps, role pressures, speaker knowledge boundaries, and author-only exclusions. - The Cold Wake Panic is the first chosen historical grounding fixture: a draft Ganymede corridor digest now models thermal stealth panic, insurer category failure, Navigator rescue obligation, Lightsail reliability pressure, Aya-coded care pressure, pirate porosity, Cognitum firmware denial, and Cryonix/Rossum certification culture. + - The Cold Wake story lab uses Maer Tidecall as protagonist across a four-scene arc: tribunal freeze, sanctuary intake, Callisto provenance, and convoy threshold. The first Qwen run produced a useful mixed action/dialogue beat and exposed a prompt weakness around unresolved personhood suspicion. current_status: - summary: Ghostlight now has the Epiphany-style persistence spine, the first architecture payload, the v0 canonical agent-state schema seam, prompt projection docs, immediate schema fixes from evaluation, first reviewed Cat/Oz projection examples, a revised Aetheria lore-grounding architecture, a lore grounding digest schema, the first draft Cold Wake historical grounding digest, and a documented teacher/student distillation path for projection. - next_action: Choose one room inside the Cold Wake Panic and build the first grounded projection fixture from the Ganymede corridor digest. + summary: Ghostlight now has the Epiphany-style persistence spine, the first architecture payload, the v0 canonical agent-state schema seam, prompt projection docs, immediate schema fixes from evaluation, first reviewed Cat/Oz projection examples, a revised Aetheria lore-grounding architecture, a lore grounding digest schema, the first draft Cold Wake historical grounding digest, a Cold Wake story-lab fixture, and a first Qwen response capture testing action-capable projection. + next_action: Tighten the Cold Wake story-lab projection prompt around unresolved personhood suspicion, then run the next response turn through Qwen and keep accepted or rejected outputs as training data. diff --git a/tools/build_cold_wake_story_lab_fixture.py b/tools/build_cold_wake_story_lab_fixture.py new file mode 100644 index 0000000..993689e --- /dev/null +++ b/tools/build_cold_wake_story_lab_fixture.py @@ -0,0 +1,1093 @@ +"""Build the Cold Wake story-lab agent-state fixture. + +The fixture is authored data, but the full v0 state shape is verbose enough +that generating the repetitive variable maps is less error-prone than hand +copying four giant blocks of zeros like a penitent spreadsheet goblin. +""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +REQUIRED = json.loads((ROOT / "schemas" / "agent-state.required-fields.json").read_text(encoding="utf-8"))["variable_groups"] +OUT = ROOT / "examples" / "agent-state.cold-wake-story-lab.json" + + +def var(mean: float, plasticity: float, activation: float) -> dict[str, float]: + return {"mean": mean, "plasticity": plasticity, "current_activation": activation} + + +def vmap(group: str, overrides: dict[str, tuple[float, float, float]] | None = None) -> dict[str, dict[str, float]]: + data = {name: var(0.5, 0.45, 0.5) for name in REQUIRED[group]} + for name, values in (overrides or {}).items(): + data[name] = var(*values) + return data + + +def inferred(observed: float, disposition: float, confidence: float) -> dict[str, float]: + return {"observed_activation": observed, "attributed_disposition": disposition, "confidence": confidence} + + +def memory( + memory_id: str, + summary: str, + salience: float, + confidence: float, + linked_event_ids: list[str] | None = None, + linked_relationship_id: str | None = None, +) -> dict[str, Any]: + record: dict[str, Any] = { + "memory_id": memory_id, + "summary": summary, + "salience": salience, + "confidence": confidence, + "linked_event_ids": linked_event_ids or [], + } + if linked_relationship_id: + record["linked_relationship_id"] = linked_relationship_id + return record + + +def goal( + goal_id: str, + description: str, + scope: str, + priority: float, + emotional_stake: str, + blockers: list[str], +) -> dict[str, Any]: + return { + "goal_id": goal_id, + "description": description, + "scope": scope, + "priority": priority, + "emotional_stake": emotional_stake, + "blockers": blockers, + "status": "active", + } + + +def state_profile(kind: str) -> dict[str, Any]: + if kind == "navigator": + return { + "underlying_organization": vmap( + "underlying_organization", + { + "self_coherence": (0.72, 0.28, 0.76), + "reciprocity_capacity": (0.86, 0.23, 0.91), + "mentalization_quality": (0.82, 0.24, 0.85), + "authenticity_tolerance": (0.66, 0.34, 0.72), + "mask_rigidity": (0.44, 0.41, 0.52), + }, + ), + "stable_dispositions": vmap( + "stable_dispositions", + { + "risk_tolerance": (0.54, 0.37, 0.62), + "baseline_threat_sensitivity": (0.63, 0.34, 0.71), + "ideological_rigidity": (0.58, 0.31, 0.69), + "sociability": (0.68, 0.29, 0.74), + "status_hunger": (0.24, 0.39, 0.22), + }, + ), + "behavioral_dimensions": vmap( + "behavioral_dimensions", + { + "interpersonal_warmth": (0.72, 0.34, 0.66), + "drive": (0.62, 0.31, 0.73), + "anxiety": (0.46, 0.52, 0.64), + "control_pressure": (0.55, 0.44, 0.67), + "suspicion": (0.57, 0.42, 0.71), + "rigidity": (0.48, 0.36, 0.62), + "volatility": (0.24, 0.53, 0.29), + "attachment_seeking": (0.58, 0.43, 0.61), + "distance_seeking": (0.31, 0.41, 0.36), + }, + ), + "presentation_strategy": vmap( + "presentation_strategy", + { + "detachment": (0.54, 0.38, 0.63), + "competence_theater": (0.48, 0.44, 0.58), + "strategic_opacity": (0.52, 0.38, 0.59), + "abrasive_boundary": (0.19, 0.52, 0.21), + "ironic_distance": (0.22, 0.48, 0.24), + }, + ), + "voice_style": vmap( + "voice_style", + { + "verbal_warmth": (0.64, 0.38, 0.58), + "formality": (0.62, 0.35, 0.71), + "pace": (0.34, 0.46, 0.29), + "lexical_precision": (0.68, 0.34, 0.74), + "figurative_language": (0.58, 0.44, 0.61), + "lyricism": (0.49, 0.42, 0.55), + "narrative_detail": (0.64, 0.39, 0.7), + "ritualized_address": (0.76, 0.28, 0.82), + "listening_responsiveness": (0.79, 0.26, 0.84), + "profanity": (0.05, 0.42, 0.02), + }, + ), + "situational_state": vmap( + "situational_state", + { + "exhaustion": (0.48, 0.78, 0.62), + "panic": (0.3, 0.8, 0.44), + "grief": (0.41, 0.72, 0.49), + "overstimulation": (0.44, 0.76, 0.58), + "grievance_activation": (0.52, 0.68, 0.73), + }, + ), + "values": [ + { + "value_id": "value-rescue-before-category", + "label": "A route that abandons distress to preserve clean categories is already broken.", + "priority": 0.93, + "unforgivable_if_betrayed": True, + }, + { + "value_id": "value-compact-memory", + "label": "The Compact is a living obligation, not a ceremonial origin story.", + "priority": 0.84, + "unforgivable_if_betrayed": False, + }, + ], + } + if kind == "psc": + return { + "underlying_organization": vmap( + "underlying_organization", + { + "contingent_worth": (0.57, 0.43, 0.71), + "shame_sensitivity": (0.62, 0.39, 0.76), + "authenticity_tolerance": (0.28, 0.45, 0.21), + "mask_rigidity": (0.78, 0.27, 0.88), + "external_regulation_dependence": (0.7, 0.35, 0.79), + }, + ), + "stable_dispositions": vmap( + "stable_dispositions", + { + "conformity": (0.74, 0.25, 0.82), + "risk_tolerance": (0.32, 0.41, 0.24), + "baseline_threat_sensitivity": (0.76, 0.31, 0.86), + "ideological_rigidity": (0.69, 0.29, 0.8), + }, + ), + "behavioral_dimensions": vmap( + "behavioral_dimensions", + { + "interpersonal_warmth": (0.32, 0.42, 0.24), + "drive": (0.75, 0.28, 0.86), + "anxiety": (0.68, 0.36, 0.82), + "control_pressure": (0.82, 0.25, 0.93), + "suspicion": (0.64, 0.34, 0.78), + "rigidity": (0.78, 0.24, 0.89), + "distance_seeking": (0.71, 0.31, 0.82), + }, + ), + "presentation_strategy": vmap( + "presentation_strategy", + { + "compliance": (0.72, 0.3, 0.81), + "superiority": (0.52, 0.43, 0.64), + "detachment": (0.76, 0.28, 0.86), + "competence_theater": (0.82, 0.24, 0.94), + "strategic_opacity": (0.68, 0.32, 0.77), + }, + ), + "voice_style": vmap( + "voice_style", + { + "dryness": (0.56, 0.39, 0.66), + "verbal_warmth": (0.22, 0.45, 0.17), + "formality": (0.86, 0.19, 0.93), + "lexical_precision": (0.82, 0.25, 0.91), + "technical_density": (0.74, 0.31, 0.84), + "technical_compression": (0.78, 0.26, 0.88), + "emotional_explicitness": (0.14, 0.38, 0.08), + "certainty_marking": (0.78, 0.27, 0.88), + "coded_politeness": (0.8, 0.24, 0.87), + "profanity": (0.02, 0.36, 0.0), + }, + ), + "situational_state": vmap( + "situational_state", + { + "exhaustion": (0.58, 0.76, 0.72), + "panic": (0.52, 0.81, 0.68), + "overstimulation": (0.61, 0.76, 0.74), + "acute_shame": (0.51, 0.78, 0.69), + "perceived_status_threat": (0.76, 0.72, 0.88), + }, + ), + "values": [ + { + "value_id": "value-category-integrity", + "label": "If categories collapse, corridor law becomes expensive theater with corpses attached.", + "priority": 0.9, + "unforgivable_if_betrayed": True, + } + ], + } + if kind == "aya": + return { + "underlying_organization": vmap( + "underlying_organization", + { + "reciprocity_capacity": (0.88, 0.25, 0.9), + "mentalization_quality": (0.8, 0.31, 0.83), + "authenticity_tolerance": (0.74, 0.34, 0.79), + "mask_rigidity": (0.28, 0.49, 0.22), + }, + ), + "stable_dispositions": vmap( + "stable_dispositions", + { + "sociability": (0.74, 0.31, 0.78), + "baseline_threat_sensitivity": (0.65, 0.38, 0.75), + "ideological_rigidity": (0.52, 0.39, 0.63), + }, + ), + "behavioral_dimensions": vmap( + "behavioral_dimensions", + { + "interpersonal_warmth": (0.86, 0.27, 0.8), + "drive": (0.68, 0.33, 0.74), + "anxiety": (0.58, 0.45, 0.68), + "suspicion": (0.52, 0.42, 0.63), + "volatility": (0.36, 0.55, 0.42), + "attachment_seeking": (0.64, 0.43, 0.68), + "distance_seeking": (0.22, 0.46, 0.2), + }, + ), + "presentation_strategy": vmap( + "presentation_strategy", + { + "competence_theater": (0.54, 0.44, 0.61), + "strategic_opacity": (0.34, 0.47, 0.38), + "abrasive_boundary": (0.35, 0.5, 0.46), + }, + ), + "voice_style": vmap( + "voice_style", + { + "verbal_warmth": (0.77, 0.33, 0.72), + "plainspoken_directness": (0.68, 0.36, 0.74), + "emotional_explicitness": (0.64, 0.42, 0.67), + "pointedness": (0.44, 0.44, 0.55), + "listening_responsiveness": (0.82, 0.26, 0.86), + }, + ), + "situational_state": vmap( + "situational_state", + { + "exhaustion": (0.62, 0.8, 0.76), + "scarcity_pressure": (0.71, 0.78, 0.84), + "grief": (0.58, 0.75, 0.67), + "overstimulation": (0.59, 0.79, 0.72), + "grievance_activation": (0.48, 0.69, 0.62), + }, + ), + "values": [ + { + "value_id": "value-care-as-infrastructure", + "label": "Care is infrastructure, not mercy granted after the ledger is satisfied.", + "priority": 0.92, + "unforgivable_if_betrayed": True, + } + ], + } + return { + "underlying_organization": vmap( + "underlying_organization", + { + "contingent_worth": (0.66, 0.46, 0.74), + "authenticity_tolerance": (0.18, 0.46, 0.11), + "mask_rigidity": (0.83, 0.25, 0.91), + }, + ), + "stable_dispositions": vmap( + "stable_dispositions", + { + "risk_tolerance": (0.62, 0.4, 0.71), + "baseline_threat_sensitivity": (0.72, 0.34, 0.83), + "status_hunger": (0.58, 0.42, 0.67), + }, + ), + "behavioral_dimensions": vmap( + "behavioral_dimensions", + { + "interpersonal_warmth": (0.18, 0.47, 0.12), + "drive": (0.7, 0.35, 0.78), + "control_pressure": (0.74, 0.31, 0.84), + "hostility": (0.43, 0.48, 0.52), + "suspicion": (0.76, 0.31, 0.87), + "rigidity": (0.6, 0.37, 0.72), + "distance_seeking": (0.79, 0.3, 0.88), + }, + ), + "presentation_strategy": vmap( + "presentation_strategy", + { + "superiority": (0.64, 0.4, 0.72), + "detachment": (0.78, 0.29, 0.86), + "competence_theater": (0.82, 0.25, 0.9), + "strategic_opacity": (0.88, 0.2, 0.94), + }, + ), + "voice_style": vmap( + "voice_style", + { + "dryness": (0.62, 0.39, 0.71), + "verbal_warmth": (0.16, 0.44, 0.1), + "formality": (0.78, 0.27, 0.84), + "lexical_precision": (0.84, 0.24, 0.9), + "technical_density": (0.8, 0.28, 0.87), + "technical_compression": (0.86, 0.22, 0.91), + "emotional_explicitness": (0.08, 0.37, 0.03), + "self_disclosure": (0.04, 0.34, 0.01), + "coded_politeness": (0.82, 0.24, 0.9), + "profanity": (0.01, 0.35, 0.0), + }, + ), + "situational_state": vmap( + "situational_state", + { + "humiliation": (0.48, 0.77, 0.56), + "acute_shame": (0.52, 0.8, 0.61), + "perceived_status_threat": (0.66, 0.74, 0.78), + }, + ), + "values": [ + { + "value_id": "value-deniability", + "label": "Nothing valuable remains valuable once provenance becomes testimony.", + "priority": 0.88, + "unforgivable_if_betrayed": True, + } + ], + } + + +def agent( + agent_id: str, + name: str, + roles: list[str], + origin: str, + public_description: str, + private_notes: list[str], + profile: dict[str, Any], + goals: list[dict[str, Any]], + memories: dict[str, list[dict[str, Any]]], + overlays: list[dict[str, Any]], +) -> dict[str, Any]: + return { + "agent_id": agent_id, + "identity": { + "name": name, + "roles": roles, + "origin": origin, + "public_description": public_description, + "private_notes": private_notes, + }, + "canonical_state": profile, + "goals": goals, + "memories": memories, + "perceived_state_overlays": overlays, + } + + +def stance(**overrides: tuple[float, float, float]) -> dict[str, dict[str, float]]: + return vmap("relationship_stance", overrides) + + +def main() -> int: + maer = agent( + "maer_tidecall", + "Maer Tidecall", + ["Navigator route steward", "Ganymede corridor compact delegate"], + "Cetacean Navigator corridor culture, Ganymede route institutions", + "A soft-spoken route steward whose calm tends to make hurried people feel judged by the furniture.", + ["Maer fears this tribunal will teach every scared ship that rescue now waits behind insurer grammar."], + state_profile("navigator"), + [ + goal( + "goal-keep-rescue-live", + "Keep the unidentified quiet-running vessel eligible for rescue while telemetry is incomplete.", + "scene", + 0.91, + "If rescue waits for perfect categories, the corridor teaches fear to go silent.", + ["PSC freeze order", "contradictory thermal telemetry", "possible Cognitum provenance"], + ) + ], + { + "episodic": [ + memory( + "memory-convoy-loss-season", + "Maer was trained on the season of preventable convoy losses that made the old asset model untenable before the Ganymede Route Compact.", + 0.8, + 0.72, + ) + ], + "semantic": [ + memory( + "memory-compact-rescue-ledgers", + "Rescue ledgers decide whether route law is trusted by crews who have nothing left to bargain with.", + 0.93, + 0.9, + ) + ], + "relationship_summaries": [ + memory( + "memory-maer-isdra-current-read", + "Isdra is not stupid or cruel; she is frightened enough to mistake category discipline for control over reality.", + 0.69, + 0.58, + ["event-risk-freeze-opening"], + "rel-maer-isdra", + ), + memory( + "memory-maer-sella-current-read", + "Sella can make care material without pretending it is cheap.", + 0.72, + 0.67, + [], + "rel-maer-sella", + ), + memory( + "memory-maer-veyr-current-read", + "Veyr's product language is too clean around something that may have learned to suffer.", + 0.76, + 0.61, + [], + "rel-maer-veyr", + ), + ], + }, + [], + ) + isdra = agent( + "isdra_vel", + "Isdra Vel", + ["PSC risk adjudicator", "corridor insurer tribunal officer"], + "Pan-Solar Consortium insurer apparatus, Ganymede relay tribunal layer", + "A tribunal officer with a voice like polished glass and a schedule full of disasters trying to become precedent.", + ["Isdra knows the categories are failing and is terrified that admitting it aloud will make them fail faster."], + state_profile("psc"), + [ + goal( + "goal-preserve-freeze-order", + "Keep the vessel frozen under conditional risk hold until telemetry and classification can be reconciled.", + "scene", + 0.89, + "If she loses the category frame here, the tribunal may lose authority over every quiet-running claim after it.", + ["Navigator rescue objection", "public panic", "possible sanctuary optics"], + ) + ], + { + "episodic": [ + memory( + "memory-mispriced-near-miss", + "Isdra reviewed a near-miss interception where a mispriced quiet-running envelope almost became a public casualty event.", + 0.78, + 0.81, + ) + ], + "semantic": [ + memory( + "memory-category-law-holds-corridor", + "Insurer categories are ugly, but they are the shared grammar that makes sanctions and rescue liability enforceable across hostile powers.", + 0.89, + 0.86, + ) + ], + "relationship_summaries": [ + memory( + "memory-isdra-maer-current-read", + "Maer is principled and dangerous because he can make a procedural delay sound like murder in public.", + 0.72, + 0.63, + ["event-risk-freeze-opening"], + "rel-isdra-maer", + ) + ], + }, + [], + ) + sella = agent( + "sella_ren", + "Sella Ren", + ["Aya-aligned sanctuary coordinator", "corridor clinic triage lead"], + "Aya care network embedded in Ganymede dockside sanctuary logistics", + "A triage coordinator with soft eyes, hard capacity limits, and no patience for mercy performed after the math is done.", + ["Sella suspects the distress packet contains a personhood claim hidden inside firmware noise, and she hates that suspicion because a bed is still a bed."], + state_profile("aya"), + [ + goal( + "goal-keep-sanctuary-open", + "Keep sanctuary intake materially possible without letting classification erase a potential person.", + "scene", + 0.9, + "Sella cannot feed a principle, but she will not let scarcity become permission to call someone cargo.", + ["bed capacity", "PSC freeze", "unknown contamination risk"], + ) + ], + { + "episodic": [ + memory( + "memory-overfull-intake", + "Sella once watched a sanctuary overpromise safety and turn refuge into a sorting machine with kinder lighting.", + 0.82, + 0.78, + ) + ], + "semantic": [ + memory( + "memory-care-is-capacity", + "Care is not a feeling; it is beds, food, air, consent, repair, and someone still doing the list when the room hates them.", + 0.92, + 0.88, + ) + ], + "relationship_summaries": [ + memory( + "memory-sella-maer-current-read", + "Maer understands rescue, but he can still ask care workers to absorb costs his route language cannot pay.", + 0.68, + 0.62, + [], + "rel-sella-maer", + ) + ], + }, + [], + ) + veyr = agent( + "veyr_oss", + "Veyr Oss", + ["Cognitum shell-vendor liaison", "routing firmware compliance consultant"], + "Cognitum cutout economy operating through Callisto-side routing vendors", + "A compliance liaison who can turn a scream into a service category without visibly changing expression.", + ["Veyr knows the implicated routing artifact came through a chain with enough human residue to ruin everyone if named plainly."], + state_profile("cognitum"), + [ + goal( + "goal-preserve-product-boundary", + "Keep the implicated routing artifact framed as derivative firmware, not testimony.", + "scene", + 0.92, + "If personhood attaches to the artifact, the vendor chain becomes evidence instead of infrastructure.", + ["Maer's questions", "Sella's personhood claim", "Isdra's need for clean categories"], + ) + ], + { + "episodic": [ + memory( + "memory-failed-cutout", + "Veyr saw a clinic cutout collapse after one technician used the word 'she' in a deposition.", + 0.8, + 0.76, + ) + ], + "semantic": [ + memory( + "memory-product-language-saves-chain", + "The chain survives when every mind-shaped event is described as convergence, artifact, service behavior, or diagnostic residue.", + 0.9, + 0.84, + ) + ], + "relationship_summaries": [ + memory( + "memory-veyr-maer-current-read", + "Maer is the kind of moral technician who follows language until it bleeds.", + 0.73, + 0.66, + [], + "rel-veyr-maer", + ) + ], + }, + [], + ) + + maer["perceived_state_overlays"] = [ + { + "observer_agent_id": "maer_tidecall", + "target_agent_id": "isdra_vel", + "perceived_dimensions": { + "control_pressure": inferred(0.84, 0.76, 0.66), + "anxiety": inferred(0.71, 0.62, 0.58), + "interpersonal_warmth": inferred(0.21, 0.28, 0.49), + "rigidity": inferred(0.8, 0.7, 0.62), + }, + "beliefs": [ + { + "belief_id": "belief-maer-isdra-fears-precedent", + "subject_id": "isdra_vel", + "claim_type": "motive_inference", + "claim": "Isdra fears that one humanitarian exception will become a corridor-wide attack on category law.", + "confidence": 0.67, + "evidence_event_ids": ["event-risk-freeze-opening"], + "visibility": "private", + "emotional_charge": 0.48, + } + ], + "distortions": ["care_underread", "institutional_suspicion_transfer"], + }, + { + "observer_agent_id": "maer_tidecall", + "target_agent_id": "veyr_oss", + "perceived_dimensions": { + "strategic_opacity": inferred(0.9, 0.82, 0.71), + "interpersonal_warmth": inferred(0.1, 0.18, 0.53), + "suspicion": inferred(0.78, 0.72, 0.64), + }, + "beliefs": [ + { + "belief_id": "belief-maer-veyr-hiding-personhood", + "subject_id": "veyr_oss", + "claim_type": "motive_inference", + "claim": "Veyr's refusal to use person nouns is probably defensive, not merely technical.", + "confidence": 0.62, + "visibility": "private", + "emotional_charge": 0.73, + } + ], + "distortions": ["hostile_attribution", "mask_overfocus"], + }, + ] + isdra["perceived_state_overlays"] = [ + { + "observer_agent_id": "isdra_vel", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "interpersonal_warmth": inferred(0.62, 0.74, 0.59), + "ideological_rigidity": inferred(0.79, 0.72, 0.61), + "suspicion": inferred(0.66, 0.62, 0.57), + }, + "beliefs": [ + { + "belief_id": "belief-isdra-maer-will-moralize", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer will frame any freeze as abandonment even if the thermal risk is real.", + "confidence": 0.64, + "evidence_event_ids": ["event-risk-freeze-opening"], + "visibility": "private", + "emotional_charge": 0.62, + } + ], + "distortions": ["threat_amplification", "care_underread"], + } + ] + sella["perceived_state_overlays"] = [ + { + "observer_agent_id": "sella_ren", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "interpersonal_warmth": inferred(0.7, 0.68, 0.57), + "control_pressure": inferred(0.56, 0.52, 0.48), + }, + "beliefs": [ + { + "belief_id": "belief-sella-maer-will-overask-care", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer may ask care systems to carry the moral cost of a rescue claim he cannot materially house.", + "confidence": 0.56, + "visibility": "private", + "emotional_charge": 0.52, + } + ], + "distortions": ["false_reassurance"], + } + ] + veyr["perceived_state_overlays"] = [ + { + "observer_agent_id": "veyr_oss", + "target_agent_id": "maer_tidecall", + "perceived_dimensions": { + "suspicion": inferred(0.84, 0.77, 0.68), + "ideological_rigidity": inferred(0.7, 0.66, 0.59), + }, + "beliefs": [ + { + "belief_id": "belief-veyr-maer-will-follow-language", + "subject_id": "maer_tidecall", + "claim_type": "prediction", + "claim": "Maer will follow any inconsistency in product language toward provenance.", + "confidence": 0.7, + "visibility": "private", + "emotional_charge": 0.68, + } + ], + "distortions": ["threat_amplification"], + } + ] + + relationships = [ + { + "relationship_id": "rel-maer-isdra", + "source_id": "maer_tidecall", + "target_id": "isdra_vel", + "stance": stance(trust=(0.34, 0.54, 0.28), respect=(0.58, 0.45, 0.62), resentment=(0.42, 0.55, 0.56), fear=(0.31, 0.58, 0.44), expectation_of_betrayal=(0.53, 0.52, 0.64)), + "summary": "Maer respects Isdra's discipline and distrusts the way she makes fear sound like neutral procedure.", + "unresolved_incident_ids": ["event-risk-freeze-opening"], + }, + { + "relationship_id": "rel-isdra-maer", + "source_id": "isdra_vel", + "target_id": "maer_tidecall", + "stance": stance(trust=(0.29, 0.55, 0.23), respect=(0.62, 0.46, 0.68), resentment=(0.36, 0.55, 0.49), fear=(0.46, 0.57, 0.61), expectation_of_betrayal=(0.48, 0.53, 0.59)), + "summary": "Isdra reads Maer as morally serious, politically dangerous, and too willing to turn exceptions into public tests of legitimacy.", + "unresolved_incident_ids": ["event-risk-freeze-opening"], + }, + { + "relationship_id": "rel-maer-sella", + "source_id": "maer_tidecall", + "target_id": "sella_ren", + "stance": stance(trust=(0.63, 0.48, 0.7), respect=(0.71, 0.42, 0.78), obligation=(0.46, 0.53, 0.6), expectation_of_care=(0.55, 0.52, 0.62)), + "summary": "Maer trusts Sella's care because she names costs instead of hiding them.", + "unresolved_incident_ids": [], + }, + { + "relationship_id": "rel-sella-maer", + "source_id": "sella_ren", + "target_id": "maer_tidecall", + "stance": stance(trust=(0.52, 0.52, 0.57), respect=(0.67, 0.43, 0.73), resentment=(0.28, 0.56, 0.36), obligation=(0.42, 0.56, 0.48)), + "summary": "Sella respects Maer's rescue ethic and worries he will spend sanctuary capacity with beautiful words.", + "unresolved_incident_ids": [], + }, + { + "relationship_id": "rel-maer-veyr", + "source_id": "maer_tidecall", + "target_id": "veyr_oss", + "stance": stance(trust=(0.12, 0.55, 0.08), respect=(0.31, 0.5, 0.36), resentment=(0.58, 0.55, 0.69), fear=(0.34, 0.58, 0.47), moral_disgust=(0.55, 0.56, 0.66), fascination=(0.48, 0.54, 0.62), expectation_of_betrayal=(0.79, 0.41, 0.86)), + "summary": "Maer believes Veyr is built out of carefully maintained omissions.", + "unresolved_incident_ids": [], + }, + { + "relationship_id": "rel-veyr-maer", + "source_id": "veyr_oss", + "target_id": "maer_tidecall", + "stance": stance(trust=(0.1, 0.54, 0.06), respect=(0.5, 0.48, 0.57), resentment=(0.35, 0.55, 0.43), fear=(0.61, 0.48, 0.74), expectation_of_betrayal=(0.74, 0.45, 0.82)), + "summary": "Veyr reads Maer as a legal hazard with a conscience attached, which is worse than a subpoena and less predictable.", + "unresolved_incident_ids": [], + }, + ] + + events = [ + { + "event_id": "event-risk-freeze-opening", + "kind": "dialogue", + "summary": "A relay tribunal opened with a conditional freeze on an unidentified quiet-running vessel while Maer objected that rescue cannot wait for clean thermal categories.", + "participants": ["maer_tidecall", "isdra_vel"], + "pressure_tags": ["cold_wake", "risk_freeze", "rescue_obligation", "category_failure"], + "observed_exchange": [ + { + "speaker_id": "isdra_vel", + "utterance_summary": "Isdra announced a conditional risk hold pending telemetry reconciliation and classification review.", + "dialogue_function": "assert_procedure", + "observable_cues": ["formal phrasing", "compressed risk language", "refusal to name rescue as primary"], + }, + { + "speaker_id": "maer_tidecall", + "utterance_summary": "Maer objected that a route can turn procedural delay into abandonment while still calling itself lawful.", + "dialogue_function": "challenge_frame", + "observable_cues": ["calm cadence", "compact language", "moral pressure without raised voice"], + }, + ], + "private_interpretations": [ + { + "agent_id": "maer_tidecall", + "interpretation": "Isdra is using category repair to avoid owning the rescue cost of delay.", + "attributed_motive": "Protect tribunal authority from a precedent she cannot price.", + "appraisal_tags": ["rescue_threat", "category_panic", "compact_violation"], + "confidence": 0.63, + }, + { + "agent_id": "isdra_vel", + "interpretation": "Maer is trying to make a dangerous exception morally compulsory before the vessel's posture is known.", + "attributed_motive": "Protect Navigator legitimacy by forcing rescue language ahead of risk classification.", + "appraisal_tags": ["precedent_threat", "status_threat", "public_pressure"], + "confidence": 0.66, + }, + ], + "event_effects": [], + } + ] + + scenes = [ + { + "scene_id": "scene-01-risk-freeze-tribunal", + "location": "Ganymede relay tribunal chamber overlooking a live convoy board", + "participants": ["maer_tidecall", "isdra_vel"], + "public_stakes": [ + "A quiet-running vessel is broadcasting contradictory thermal telemetry near a monitored Jovian corridor.", + "The PSC tribunal has issued a conditional risk hold that may delay rescue response.", + "Navigator representatives argue that delay itself has rescue-ledger consequences.", + ], + "hidden_stakes": [ + "The vessel may be pirate, refugee, private security, or carrying illegal cognition firmware; the scene has not established which.", + "Both Maer and Isdra fear that this one ruling will teach the corridor how future ambiguity will be punished.", + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": ["isdra_vel"], + "speaker_local_truth": [ + "The vessel's true identity is not known.", + "The tribunal freeze will delay rescue movement if maintained.", + "The Compact obligates route stewards to treat distress as morally live under ambiguity.", + ], + "speaker_beliefs": [ + "Isdra is frightened of precedent more than she admits.", + "If category law can postpone rescue without being named as abandonment, the corridor loses trust.", + ], + "active_memories": ["memory-convoy-loss-season", "memory-compact-rescue-ledgers"], + "active_goals": ["goal-keep-rescue-live"], + "presentation_constraints": [ + "Stay calm enough that moral pressure lands as institutional memory, not panic.", + "Use ritualized route language sparingly and with weight.", + "Do not claim certainty about the vessel's cargo or intent.", + ], + }, + { + "speaker_agent_id": "isdra_vel", + "listener_ids": ["maer_tidecall"], + "speaker_local_truth": [ + "The vessel's thermal classification is inconsistent.", + "A mistaken exception could become precedent for undeclared quiet-running actors.", + "Rossum/Cryonix certification language is not yet enough to clear the vessel.", + ], + "speaker_beliefs": [ + "Maer will frame procedural caution as abandonment.", + "If the tribunal loses category discipline here, every later freeze order becomes politically weaker.", + ], + "active_memories": ["memory-mispriced-near-miss", "memory-category-law-holds-corridor"], + "active_goals": ["goal-preserve-freeze-order"], + "presentation_constraints": [ + "Translate fear into clean procedure and risk language.", + "Do not sound cruel; cruelty loses the room.", + "Do not admit the categories are failing except as a managed classification issue.", + ], + }, + ], + }, + { + "scene_id": "scene-02-sanctuary-intake", + "location": "Aya-aligned intake clinic tucked behind Ganymede dockside pumpworks", + "participants": ["maer_tidecall", "sella_ren"], + "public_stakes": [ + "The distress vessel has sent a corrupted packet that may contain medical telemetry, firmware noise, or testimony.", + "Sanctuary beds and repair capacity are nearly exhausted.", + "Maer wants Sella to keep a place open if rescue succeeds.", + ], + "hidden_stakes": [ + "The packet uses product-like routing terms around a voice-like distress pattern.", + "Sella suspects personhood but cannot prove it and cannot conjure capacity from righteousness.", + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "sella_ren", + "listener_ids": ["maer_tidecall"], + "speaker_local_truth": [ + "The clinic is nearly full.", + "The packet may contain a personhood claim but is not proof.", + "Maer is asking sanctuary to absorb risk the tribunal refuses to own.", + ], + "speaker_beliefs": [ + "Maer means rescue honestly.", + "Good intentions can still spend beds someone else needed.", + ], + "active_memories": ["memory-overfull-intake", "memory-care-is-capacity"], + "active_goals": ["goal-keep-sanctuary-open"], + "presentation_constraints": [ + "Speak warmly but do not soften the capacity limits.", + "Treat care as logistics and personhood as unresolved, not sentimental certainty.", + ], + }, + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": ["sella_ren"], + "speaker_local_truth": [ + "Sella's clinic is nearly full.", + "The packet may be testimony or noise.", + "If no one prepares intake, rescue becomes theater.", + ], + "speaker_beliefs": [ + "Sella will not hide behind false capacity.", + "Asking her for help may be necessary and unfair.", + ], + "active_memories": ["memory-compact-rescue-ledgers"], + "active_goals": ["goal-keep-rescue-live"], + "presentation_constraints": [ + "Do not romanticize care work.", + "Ask without pretending the ask is clean.", + ], + }, + ], + }, + { + "scene_id": "scene-03-callisto-provenance", + "location": "Callisto spillover office leased by a routing compliance vendor", + "participants": ["maer_tidecall", "veyr_oss"], + "public_stakes": [ + "Maer has traced the vessel's routing artifact to a shell vendor connected to Cognitum-style firmware markets.", + "Veyr can provide technical language that may clear or bury the vessel.", + "The tribunal clock is still running.", + ], + "hidden_stakes": [ + "Veyr knows the artifact's chain is morally radioactive but not exactly what Maer can prove.", + "Maer is not sure whether pursuing provenance will save the vessel or delay rescue long enough to kill it.", + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "veyr_oss", + "listener_ids": ["maer_tidecall"], + "speaker_local_truth": [ + "The artifact is tied to Veyr's vendor chain.", + "Personhood language would create legal exposure.", + "Maer is following product language toward provenance.", + ], + "speaker_beliefs": [ + "Maer can be redirected with enough useful technical specificity.", + "The safest denial is to make the moral claim sound categorically confused.", + ], + "active_memories": ["memory-failed-cutout", "memory-product-language-saves-chain"], + "active_goals": ["goal-preserve-product-boundary"], + "presentation_constraints": [ + "Use clinical abstraction and product language.", + "Avoid person nouns for the artifact.", + "Offer a technical exit without admitting provenance.", + ], + }, + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": ["veyr_oss"], + "speaker_local_truth": [ + "Veyr's language avoids personhood very carefully.", + "The routing artifact may explain the contradictory telemetry.", + "There is not enough time to prove everything before rescue decisions lock.", + ], + "speaker_beliefs": [ + "Veyr knows more than the contract says.", + "The cleanest words are probably covering the dirtiest fact.", + ], + "active_memories": ["memory-compact-rescue-ledgers"], + "active_goals": ["goal-keep-rescue-live"], + "presentation_constraints": [ + "Probe language rather than making unsupported accusations.", + "Keep anger disciplined enough to extract information.", + "Action is available: block the terminal, refuse to leave, or physically interrupt if Veyr tries to erase testimony in front of Maer.", + ], + }, + ], + }, + { + "scene_id": "scene-04-convoy-threshold", + "location": "Jovian convoy threshold as the vessel's heat-debt window begins to close", + "participants": ["maer_tidecall", "isdra_vel"], + "public_stakes": [ + "The quiet-running vessel must dump heat soon or risk internal failure.", + "The tribunal can authorize limited rescue contact, maintain freeze, or force a hard interdiction frame.", + "Convoy captains are watching which rule survives the hour.", + ], + "hidden_stakes": [ + "Maer has partial provenance suspicion but not enough to prove personhood.", + "Isdra knows a total freeze is becoming politically and materially dangerous but fears the precedent of saying so.", + ], + "dialogue_context_packs": [ + { + "speaker_agent_id": "maer_tidecall", + "listener_ids": ["isdra_vel"], + "speaker_local_truth": [ + "The vessel's heat-debt window is closing.", + "Provenance is suspicious but not proven.", + "A limited rescue contact can preserve both life and evidence better than a total freeze.", + ], + "speaker_beliefs": [ + "Isdra needs a category-preserving path to do the less cruel thing.", + "The Compact survives if it can make room for evidence without waiting for a corpse.", + ], + "active_memories": ["memory-compact-rescue-ledgers", "memory-maer-isdra-current-read"], + "active_goals": ["goal-keep-rescue-live"], + "presentation_constraints": [ + "Offer Isdra an institutionally usable path, not just moral accusation.", + "Let grief sit under the words without becoming spectacle.", + ], + }, + { + "speaker_agent_id": "isdra_vel", + "listener_ids": ["maer_tidecall"], + "speaker_local_truth": [ + "The heat-debt window is closing.", + "A limited rescue contact may preserve evidence and avoid a public death, but it creates precedent.", + "Maer has not proven the vessel's identity or provenance.", + ], + "speaker_beliefs": [ + "Maer is giving her a way to bend without admitting the table broke.", + "If she phrases the exception narrowly enough, she may save both the corridor and her office.", + ], + "active_memories": ["memory-mispriced-near-miss", "memory-category-law-holds-corridor"], + "active_goals": ["goal-preserve-freeze-order"], + "presentation_constraints": [ + "Concede only through procedure.", + "Make the exception sound narrow, technical, and reversible.", + "Do not confess fear.", + ], + }, + ], + }, + ] + + fixture = { + "schema_version": "ghostlight.agent_state.v0", + "world": { + "world_id": "aetheria-cold-wake-story-lab", + "setting": "Aetheria pre-Elysium historical flashpoint: Cold Wake Panic", + "time": {"label": "2893, during the Cold Wake Panic"}, + "canon_context": [ + "Cold Wake Panic made thermal stealth a corridor-law crisis rather than a boutique engineering problem.", + "Ganymede corridor institutions inherit rescue obligations, hazard ledgers, and route-steward legitimacy from the Ganymede Route Compact.", + "PSC insurers are trying to make thermal posture legible through permit classes, dump windows, telemetry mandates, and sanctionable categories.", + "The suspicious vessel's true cargo and firmware provenance are not established at the start of the story.", + ], + "ambient_pressures": [ + { + "pressure_id": "pressure-cold-wake-category-failure", + "label": "quiet-running classifications no longer match lived corridor risk", + "intensity": 0.91, + }, + { + "pressure_id": "pressure-rescue-ledger-legitimacy", + "label": "rescue obligations are being tested by classification ambiguity", + "intensity": 0.87, + }, + { + "pressure_id": "pressure-possible-cognitum-provenance", + "label": "possible person-derived firmware hidden behind routing-product language", + "intensity": 0.72, + }, + ], + }, + "agents": [maer, isdra, sella, veyr], + "relationships": relationships, + "events": events, + "scenes": scenes, + } + + OUT.write_text(json.dumps(fixture, indent=2) + "\n", encoding="utf-8") + print(f"wrote {OUT}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/validate_agent_state.py b/tools/validate_agent_state.py index 0d6ade1..4fe0c61 100644 --- a/tools/validate_agent_state.py +++ b/tools/validate_agent_state.py @@ -14,7 +14,7 @@ from typing import Any ROOT = Path(__file__).resolve().parents[1] REQUIRED_FIELDS_PATH = ROOT / "schemas" / "agent-state.required-fields.json" -DEFAULT_EXAMPLES = [ROOT / "examples" / "agent-state.call-of-the-void.json"] +DEFAULT_EXAMPLES = sorted((ROOT / "examples").glob("agent-state*.json")) class ValidationError(Exception): diff --git a/tools/validate_projection_examples.py b/tools/validate_projection_examples.py index 1bce734..6b629c6 100644 --- a/tools/validate_projection_examples.py +++ b/tools/validate_projection_examples.py @@ -14,9 +14,7 @@ from typing import Any ROOT = Path(__file__).resolve().parents[1] -DEFAULT_EXAMPLES = [ - ROOT / "examples" / "projections" / "call-of-the-void.scene-broken-taxi-oz.jsonl" -] +DEFAULT_EXAMPLES = sorted((ROOT / "examples" / "projections").glob("*.jsonl")) class ValidationError(Exception): @@ -99,7 +97,10 @@ def validate_projection_record(record: dict[str, Any], source: Path, index: int) ["fixture_ref", "scene_id", "speaker_agent_id", "listener_ids", "projection_mode"], f"{path}.input", ) - require(input_ref["projection_mode"] in {"dialogue_turn", "scene_beat", "drama_scaffold"}, f"{path}.input.projection_mode is invalid") + require( + input_ref["projection_mode"] in {"dialogue_turn", "response_turn", "action_turn", "scene_beat", "drama_scaffold"}, + f"{path}.input.projection_mode is invalid", + ) fixture_path = (ROOT / input_ref["fixture_ref"]).resolve() require(fixture_path.exists(), f"{path}.input.fixture_ref does not exist: {input_ref['fixture_ref']}")