Add Cold Wake story lab experiment

This commit is contained in:
Meta Vens 2026-05-01 22:17:15 +01:00
commit 2414db6e97
17 changed files with 4457 additions and 43 deletions

View file

@ -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.

View file

@ -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?

View file

@ -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.