Tighten agent state schema from evaluation
This commit is contained in:
parent
6251726e07
commit
5f4e7c6bb2
14 changed files with 615 additions and 48 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# Agent State Distributions And Prompt Projection
|
||||
# Agent State Distributions And Prompt Projection
|
||||
|
||||
This note describes how personality, culture, memory, and social context should
|
||||
be represented in structured state, and how that state should be projected into
|
||||
|
|
@ -69,7 +69,7 @@ These are relatively persistent tendencies:
|
|||
These are first-class, not optional garnish. They belong in the rebuild from
|
||||
the start:
|
||||
|
||||
- warmth
|
||||
- interpersonal warmth
|
||||
- drive
|
||||
- grandiosity
|
||||
- validation-seeking
|
||||
|
|
@ -110,7 +110,7 @@ machinery.
|
|||
These describe how the performed self comes out in language:
|
||||
|
||||
- dryness
|
||||
- warmth
|
||||
- verbal warmth
|
||||
- formality
|
||||
- verbosity
|
||||
- pace
|
||||
|
|
|
|||
|
|
@ -63,6 +63,11 @@ activated toward distance under exceptional pressure." Correcting that
|
|||
impression takes work because the observer's confidence is supported by memory,
|
||||
emotion, stakes, prior assumptions, and social reinforcement.
|
||||
|
||||
Perceived overlays may use structured belief metadata such as subject, claim
|
||||
type, evidence events, visibility, and emotional charge. That metadata is not
|
||||
canonical certainty. It describes why a specific observer trusts a specific
|
||||
read.
|
||||
|
||||
## Label Set Policy
|
||||
|
||||
The labels in `agent-state.required-fields.json` are the required v0 core,
|
||||
|
|
@ -110,7 +115,7 @@ schema becomes a junk drawer with a badge.
|
|||
|
||||
| Label | Meaning |
|
||||
| --- | --- |
|
||||
| `warmth` | Tendency to express care, friendliness, affection, or social welcome. |
|
||||
| `interpersonal_warmth` | Tendency to express care, friendliness, affection, or social welcome. |
|
||||
| `drive` | Goal pressure, persistence, ambition, and forward force. |
|
||||
| `grandiosity` | Inflated self-importance, entitlement, exceptionalism, or self-mythologizing. |
|
||||
| `validation_seeking` | Need for reassurance, approval, recognition, or confirmation of worth. |
|
||||
|
|
@ -153,7 +158,7 @@ quirks in the current examples.
|
|||
| Label | Meaning |
|
||||
| --- | --- |
|
||||
| `dryness` | Understated, deadpan, low-sentiment phrasing. |
|
||||
| `warmth` | Inviting, affectionate, reassuring, or socially soft phrasing. |
|
||||
| `verbal_warmth` | Inviting, affectionate, reassuring, or socially soft phrasing. |
|
||||
| `formality` | Uses formal structure, titles, careful address, or institutionally correct phrasing. |
|
||||
| `verbosity` | Tends toward longer turns, elaboration, qualification, or verbal sprawl. |
|
||||
| `pace` | Moves quickly through turns, interruptions, replies, or topic shifts. |
|
||||
|
|
@ -251,3 +256,18 @@ That is deliberate for v0:
|
|||
Later, Ghostlight may support sparse authoring overlays for convenience. The
|
||||
canonical fixture should remain explicit until we have enough tooling to avoid
|
||||
silent defaults becoming accidental canon.
|
||||
|
||||
## Event Interpretation
|
||||
|
||||
Events may carry three optional interpretation layers:
|
||||
|
||||
| Field | Meaning |
|
||||
| --- | --- |
|
||||
| `observed_exchange` | What was externally observable: who acted or spoke, what they seemed to do, and the visible cues. |
|
||||
| `private_interpretations` | How each participant appraised the event from their own partial state. |
|
||||
| `event_effects` | The proposed consequences: state deltas, new beliefs, or memory updates caused by the event. |
|
||||
|
||||
These fields are immediate scaffolding for projection. They do not yet define a
|
||||
complete transition engine. For now, they make important scene history legible
|
||||
enough that a prompt projector can explain why a later line bends toward trust,
|
||||
evasion, curiosity, fear, or repair.
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ Human beings are regrettably efficient little porcupines.
|
|||
The required voice handles are:
|
||||
|
||||
- `dryness`
|
||||
- `warmth`
|
||||
- `verbal_warmth`
|
||||
- `formality`
|
||||
- `verbosity`
|
||||
- `pace`
|
||||
|
|
@ -138,6 +138,13 @@ The required voice handles are:
|
|||
- `question_asking`
|
||||
- `profanity`
|
||||
|
||||
Behavioral warmth and verbal warmth are intentionally separate:
|
||||
|
||||
- `behavioral_dimensions.interpersonal_warmth` is the tendency to offer care,
|
||||
welcome, or affiliation.
|
||||
- `voice_style.verbal_warmth` is the language surface that can sound soft,
|
||||
reassuring, affectionate, or socially inviting.
|
||||
|
||||
So Cat's prickliness is not only a dialogue prompt instruction. It is backed by
|
||||
canonical state:
|
||||
|
||||
|
|
@ -171,15 +178,27 @@ An overlay records:
|
|||
- distortions
|
||||
|
||||
This is where misunderstanding lives. Suspicious agents can overread threat.
|
||||
Attachment-hungry agents can overread warmth. Avoidant agents can underread
|
||||
care. Fundamental attribution bias also lives here: an observer can mistake
|
||||
exceptional behavior for stable character. None of that requires corrupting the
|
||||
canonical state.
|
||||
Attachment-hungry agents can overread interpersonal warmth. Avoidant agents can
|
||||
underread care. Fundamental attribution bias also lives here: an observer can
|
||||
mistake exceptional behavior for stable character. None of that requires
|
||||
corrupting the canonical state.
|
||||
|
||||
Relationship stance is directional. If Cat has a relationship record toward Oz,
|
||||
Oz needs a separate record toward Cat. Mutual presence does not imply symmetric
|
||||
trust, fear, obligation, dependence, or expectation of betrayal.
|
||||
|
||||
## Event Interpretation
|
||||
|
||||
Events can include optional interpretation scaffolding:
|
||||
|
||||
- `observed_exchange` for externally visible action or dialogue
|
||||
- `private_interpretations` for each participant's appraisal of what happened
|
||||
- `event_effects` for proposed state deltas, belief creation, and memory updates
|
||||
|
||||
This is not a full social transition engine yet. It is enough structure for the
|
||||
projection layer to know what an event changed without asking later prompts to
|
||||
infer everything from a one-line summary and a bad attitude.
|
||||
|
||||
## Dialogue Context Packs
|
||||
|
||||
Scenes contain `dialogue_context_packs`.
|
||||
|
|
|
|||
|
|
@ -156,8 +156,9 @@ person behind the drone while pretending she is only annoyed about the repair.
|
|||
If Oz gets too close to her fear of dependency, Cat is likely to answer the
|
||||
practical issue and make the emotional issue sound stupid.
|
||||
|
||||
Voice for this turn: dry, quick, pointed, plainspoken, low warmth, low emotional
|
||||
explicitness, some profanity. Humor can appear as a boundary, not as friendliness.
|
||||
Voice for this turn: dry, quick, pointed, plainspoken, low verbal warmth, low
|
||||
emotional explicitness, some profanity. Humor can appear as a boundary, not as
|
||||
friendliness.
|
||||
```
|
||||
|
||||
Possible generated behavior:
|
||||
|
|
@ -191,8 +192,8 @@ redirect toward the immediate repair or answer in a way that preserves the mask
|
|||
without making the evasion look like panic.
|
||||
|
||||
Voice for this turn: controlled, concise, technically precise, gently polite,
|
||||
low emotional explicitness, careful warmth, frequent hedging when the subject
|
||||
approaches the operator.
|
||||
low emotional explicitness, careful verbal warmth, frequent hedging when the
|
||||
subject approaches the operator.
|
||||
```
|
||||
|
||||
Possible generated behavior:
|
||||
|
|
|
|||
147
docs/architecture/schema-future-mechanisms.md
Normal file
147
docs/architecture/schema-future-mechanisms.md
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
# Future Schema Mechanisms
|
||||
|
||||
This note parks the useful pressure from `notes/evaluation.md` without treating
|
||||
that critique as doctrine. The current v0 schema is still a character-state and
|
||||
prompt-projection seam. The future runtime needs mechanisms that turn state into
|
||||
changing social behavior.
|
||||
|
||||
## Current Boundary
|
||||
|
||||
The v0 agent-state schema should stay focused on:
|
||||
|
||||
- canonical character state
|
||||
- directional relationship stance
|
||||
- observer-local perceived overlays
|
||||
- memories, goals, values, and scene-local dialogue packs
|
||||
- enough event interpretation to support prompt projection
|
||||
|
||||
Do not inflate `schemas/agent-state.schema.json` into the whole simulator before
|
||||
the projection examples prove what the runtime actually needs.
|
||||
|
||||
## Mechanisms To Preserve For Later
|
||||
|
||||
### Event Appraisal
|
||||
|
||||
Each participant needs a private read of the same event. A single exchange can
|
||||
be betrayal to one agent, exposure risk to another, and flirting-with-knives to
|
||||
a third. The current schema now allows `private_interpretations` on events as a
|
||||
lightweight bridge.
|
||||
|
||||
Future work should make appraisal reusable enough to drive state updates,
|
||||
memory retrieval, and action affordances.
|
||||
|
||||
### State Transitions And Consequences
|
||||
|
||||
`mean`, `plasticity`, and `current_activation` describe state. They do not yet
|
||||
define how state changes. Future transition machinery needs:
|
||||
|
||||
- activation decay
|
||||
- event-driven deltas
|
||||
- sensitization or habituation
|
||||
- effects on related variables
|
||||
- rules for when `mean` changes versus only `current_activation`
|
||||
|
||||
The current `event_effects` field is a projection-facing placeholder, not the
|
||||
final transition engine.
|
||||
|
||||
### Structured Beliefs And Secrets
|
||||
|
||||
String beliefs are useful for authoring, but simulation needs structure:
|
||||
|
||||
- holder
|
||||
- subject
|
||||
- claim type
|
||||
- confidence
|
||||
- evidence
|
||||
- visibility
|
||||
- emotional charge
|
||||
- whether the belief is private, shared, public, rumor, false, or contested
|
||||
|
||||
Secrets need similar structure: owner, known-by, suspected-by, exposure cost,
|
||||
protective strategies, and what can leak through action.
|
||||
|
||||
### Action Affordances
|
||||
|
||||
The system needs to choose among possible moves instead of jumping from state to
|
||||
dialogue. Future projection examples should expose candidate affordances such
|
||||
as probing, evading, bargaining, softening, escalating, repairing, threatening,
|
||||
or walking away.
|
||||
|
||||
The important rule: affordances should be justified by goals, appraisals,
|
||||
capabilities, costs, relationship stance, and scene pressure.
|
||||
|
||||
### Conversation State
|
||||
|
||||
Dialogue needs explicit continuity:
|
||||
|
||||
- active topic
|
||||
- open questions
|
||||
- evasions
|
||||
- accusations
|
||||
- face-threats
|
||||
- commitments
|
||||
- promises, refusals, and ruptures
|
||||
- who has the floor
|
||||
|
||||
This belongs close to projection because it changes turn shape immediately.
|
||||
|
||||
### Resources And Capabilities
|
||||
|
||||
Cat's debt, taxi condition, mobility, and institutional exposure are not just
|
||||
backstory. Oz's drone integrity, signal secrecy, anonymity, and physical safety
|
||||
are not just flavor. Future schemas need concrete resource and capability
|
||||
fields so desire does not masquerade as ability.
|
||||
|
||||
### Dyads And Shared Relationship History
|
||||
|
||||
Directional relationship stance should remain. A separate dyadic layer may also
|
||||
be needed for shared history:
|
||||
|
||||
- relationship type
|
||||
- phase
|
||||
- shared events
|
||||
- shared secrets
|
||||
- unresolved ruptures
|
||||
- rituals
|
||||
- dependency structure
|
||||
- communication pattern
|
||||
|
||||
Do not collapse this into one symmetric relationship object. People are not
|
||||
that tidy unless the author is lying to save RAM.
|
||||
|
||||
### Social Knowledge, Reputation, And Institutions
|
||||
|
||||
The Aetheria setting needs institutions with teeth: sanctions, authority,
|
||||
surveillance, reputation effects, access control, role expectations, and public
|
||||
knowledge. Future work should distinguish private belief, shared belief, public
|
||||
fact, rumor, common knowledge, and institutional record.
|
||||
|
||||
### Memory Retrieval
|
||||
|
||||
Memories need more than salience and confidence once the runtime starts moving:
|
||||
|
||||
- recency
|
||||
- emotional charge
|
||||
- retrieval triggers
|
||||
- decay
|
||||
- reconsolidation
|
||||
- intrusive, avoided, cherished, rehearsed, or distorted status
|
||||
- schema effects
|
||||
- whether another agent knows the memory
|
||||
|
||||
The current memory bundle is enough for the first projection seam. It is not yet
|
||||
the memory engine.
|
||||
|
||||
### Embodiment And Nonverbal Channels
|
||||
|
||||
Oz proves this one immediately. The operator, drone body, observable channels,
|
||||
leakage risks, and physical affordances are separate facts. Future projection
|
||||
needs embodiment because social meaning leaks through movement, timing,
|
||||
silence, distance, posture, and constrained bodies.
|
||||
|
||||
## Promotion Rule
|
||||
|
||||
Promote a future mechanism into the main schema only after it has survived at
|
||||
least one reviewed projection example or runtime slice where it clearly changes
|
||||
the output. Until then, document it here, test it in examples, and do not let
|
||||
the ontology grow antlers for sport.
|
||||
|
|
@ -120,11 +120,6 @@
|
|||
}
|
||||
},
|
||||
"behavioral_dimensions": {
|
||||
"warmth": {
|
||||
"mean": 0.54,
|
||||
"plasticity": 0.42,
|
||||
"current_activation": 0.46
|
||||
},
|
||||
"drive": {
|
||||
"mean": 0.76,
|
||||
"plasticity": 0.21,
|
||||
|
|
@ -184,6 +179,11 @@
|
|||
"mean": 0.69,
|
||||
"plasticity": 0.34,
|
||||
"current_activation": 0.78
|
||||
},
|
||||
"interpersonal_warmth": {
|
||||
"mean": 0.54,
|
||||
"plasticity": 0.42,
|
||||
"current_activation": 0.46
|
||||
}
|
||||
},
|
||||
"presentation_strategy": {
|
||||
|
|
@ -309,11 +309,6 @@
|
|||
"plasticity": 0.18,
|
||||
"current_activation": 0.91
|
||||
},
|
||||
"warmth": {
|
||||
"mean": 0.31,
|
||||
"plasticity": 0.45,
|
||||
"current_activation": 0.26
|
||||
},
|
||||
"formality": {
|
||||
"mean": 0.22,
|
||||
"plasticity": 0.52,
|
||||
|
|
@ -443,6 +438,11 @@
|
|||
"mean": 0.52,
|
||||
"plasticity": 0.38,
|
||||
"current_activation": 0.57
|
||||
},
|
||||
"verbal_warmth": {
|
||||
"mean": 0.31,
|
||||
"plasticity": 0.45,
|
||||
"current_activation": 0.26
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -480,9 +480,70 @@
|
|||
"linked_event_ids": []
|
||||
}
|
||||
],
|
||||
"relationship_summaries": []
|
||||
"relationship_summaries": [
|
||||
{
|
||||
"memory_id": "memory-rel-cat-oz-current-read",
|
||||
"summary": "Oz is useful, evasive, and probably a mask for someone more vulnerable than the drone.",
|
||||
"salience": 0.74,
|
||||
"confidence": 0.61,
|
||||
"linked_event_ids": [
|
||||
"event-drone-lie"
|
||||
],
|
||||
"linked_relationship_id": "rel-cat-oz"
|
||||
}
|
||||
]
|
||||
},
|
||||
"perceived_state_overlays": []
|
||||
"perceived_state_overlays": [
|
||||
{
|
||||
"observer_agent_id": "cat_marrigan",
|
||||
"target_agent_id": "oz_operator",
|
||||
"perceived_dimensions": {
|
||||
"strategic_opacity": {
|
||||
"observed_activation": 0.86,
|
||||
"attributed_disposition": 0.72,
|
||||
"confidence": 0.64,
|
||||
"evidence": [
|
||||
"event-drone-lie"
|
||||
]
|
||||
},
|
||||
"cultivated_harmlessness": {
|
||||
"observed_activation": 0.78,
|
||||
"attributed_disposition": 0.51,
|
||||
"confidence": 0.48,
|
||||
"evidence": [
|
||||
"event-drone-lie"
|
||||
]
|
||||
},
|
||||
"interpersonal_warmth": {
|
||||
"observed_activation": 0.52,
|
||||
"attributed_disposition": 0.39,
|
||||
"confidence": 0.35,
|
||||
"evidence": [
|
||||
"event-drone-lie"
|
||||
]
|
||||
}
|
||||
},
|
||||
"beliefs": [
|
||||
{
|
||||
"belief_id": "belief-cat-oz-is-a-mask",
|
||||
"subject_id": "oz_operator",
|
||||
"claim_type": "identity_inference",
|
||||
"claim": "Oz is probably a mask for someone or something more vulnerable than the drone.",
|
||||
"confidence": 0.57,
|
||||
"evidence_event_ids": [
|
||||
"event-drone-lie"
|
||||
],
|
||||
"visibility": "private",
|
||||
"emotional_charge": 0.71
|
||||
}
|
||||
],
|
||||
"distortions": [
|
||||
"threat_amplification",
|
||||
"institutional_suspicion_transfer",
|
||||
"mask_overfocus"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"agent_id": "oz_operator",
|
||||
|
|
@ -584,11 +645,6 @@
|
|||
}
|
||||
},
|
||||
"behavioral_dimensions": {
|
||||
"warmth": {
|
||||
"mean": 0.67,
|
||||
"plasticity": 0.4,
|
||||
"current_activation": 0.74
|
||||
},
|
||||
"drive": {
|
||||
"mean": 0.52,
|
||||
"plasticity": 0.45,
|
||||
|
|
@ -648,6 +704,11 @@
|
|||
"mean": 0.64,
|
||||
"plasticity": 0.44,
|
||||
"current_activation": 0.72
|
||||
},
|
||||
"interpersonal_warmth": {
|
||||
"mean": 0.67,
|
||||
"plasticity": 0.4,
|
||||
"current_activation": 0.74
|
||||
}
|
||||
},
|
||||
"presentation_strategy": {
|
||||
|
|
@ -773,11 +834,6 @@
|
|||
"plasticity": 0.49,
|
||||
"current_activation": 0.35
|
||||
},
|
||||
"warmth": {
|
||||
"mean": 0.48,
|
||||
"plasticity": 0.44,
|
||||
"current_activation": 0.52
|
||||
},
|
||||
"formality": {
|
||||
"mean": 0.58,
|
||||
"plasticity": 0.38,
|
||||
|
|
@ -907,6 +963,11 @@
|
|||
"mean": 0.05,
|
||||
"plasticity": 0.39,
|
||||
"current_activation": 0.03
|
||||
},
|
||||
"verbal_warmth": {
|
||||
"mean": 0.48,
|
||||
"plasticity": 0.44,
|
||||
"current_activation": 0.52
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -936,22 +997,33 @@
|
|||
"linked_event_ids": []
|
||||
}
|
||||
],
|
||||
"relationship_summaries": []
|
||||
"relationship_summaries": [
|
||||
{
|
||||
"memory_id": "memory-rel-oz-cat-current-read",
|
||||
"summary": "Cat is suspicious enough to be dangerous and principled enough that the danger may have rules.",
|
||||
"salience": 0.76,
|
||||
"confidence": 0.58,
|
||||
"linked_event_ids": [
|
||||
"event-drone-lie"
|
||||
],
|
||||
"linked_relationship_id": "rel-oz-cat"
|
||||
}
|
||||
]
|
||||
},
|
||||
"perceived_state_overlays": [
|
||||
{
|
||||
"observer_agent_id": "oz_operator",
|
||||
"target_agent_id": "cat_marrigan",
|
||||
"perceived_dimensions": {
|
||||
"warmth": {
|
||||
"observed_activation": 0.4,
|
||||
"attributed_disposition": 0.44,
|
||||
"confidence": 0.34
|
||||
},
|
||||
"suspicion": {
|
||||
"observed_activation": 0.9,
|
||||
"attributed_disposition": 0.83,
|
||||
"confidence": 0.71
|
||||
},
|
||||
"interpersonal_warmth": {
|
||||
"observed_activation": 0.4,
|
||||
"attributed_disposition": 0.44,
|
||||
"confidence": 0.34
|
||||
}
|
||||
},
|
||||
"beliefs": [
|
||||
|
|
@ -1116,7 +1188,7 @@
|
|||
{
|
||||
"event_id": "event-drone-lie",
|
||||
"kind": "dialogue",
|
||||
"summary": "Oz dodged Cat's question about who was controlling the drone.",
|
||||
"summary": "Cat asked who was controlling the drone; Oz redirected toward the repair instead of answering the identity question.",
|
||||
"participants": [
|
||||
"cat_marrigan",
|
||||
"oz_operator"
|
||||
|
|
@ -1125,6 +1197,104 @@
|
|||
"mask",
|
||||
"privacy",
|
||||
"suspicion"
|
||||
],
|
||||
"observed_exchange": [
|
||||
{
|
||||
"speaker_id": "cat_marrigan",
|
||||
"utterance_summary": "Cat pressed on whether Oz was really autonomous or a mask for someone remote.",
|
||||
"dialogue_function": "probe_identity",
|
||||
"observable_cues": [
|
||||
"pointed humor",
|
||||
"feigned casualness",
|
||||
"attention on drone hesitation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"speaker_id": "oz_operator",
|
||||
"utterance_summary": "Oz answered the practical repair issue and avoided naming the operator behind the drone.",
|
||||
"dialogue_function": "evasive_redirect",
|
||||
"observable_cues": [
|
||||
"technical compression",
|
||||
"polite deflection",
|
||||
"too-human timing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"private_interpretations": [
|
||||
{
|
||||
"agent_id": "cat_marrigan",
|
||||
"interpretation": "Oz is hiding a person-shaped vulnerability behind the drone body.",
|
||||
"attributed_motive": "Protect the operator by keeping Cat focused on the broken taxi instead of the mask.",
|
||||
"appraisal_tags": [
|
||||
"trust_violation",
|
||||
"curiosity",
|
||||
"useful_secret",
|
||||
"possible_leverage"
|
||||
],
|
||||
"confidence": 0.62
|
||||
},
|
||||
{
|
||||
"agent_id": "oz_operator",
|
||||
"interpretation": "Cat noticed the mask and is testing whether Oz will panic or confess.",
|
||||
"attributed_motive": "Find out what Oz is without making her own dependence on the repair visible.",
|
||||
"appraisal_tags": [
|
||||
"exposure_risk",
|
||||
"status_threat",
|
||||
"possible_care",
|
||||
"conversation_hazard"
|
||||
],
|
||||
"confidence": 0.68
|
||||
}
|
||||
],
|
||||
"event_effects": [
|
||||
{
|
||||
"agent_id": "cat_marrigan",
|
||||
"summary": "Cat trusts Oz less, becomes more fascinated, and stores the drone as a mask rather than a personless tool.",
|
||||
"state_deltas": [
|
||||
{
|
||||
"path": "relationships.rel-cat-oz.stance.trust.current_activation",
|
||||
"delta": -0.07
|
||||
},
|
||||
{
|
||||
"path": "relationships.rel-cat-oz.stance.fascination.current_activation",
|
||||
"delta": 0.13
|
||||
},
|
||||
{
|
||||
"path": "canonical_state.behavioral_dimensions.suspicion.current_activation",
|
||||
"delta": 0.11
|
||||
}
|
||||
],
|
||||
"new_belief_ids": [
|
||||
"belief-cat-oz-is-a-mask"
|
||||
],
|
||||
"memory_update_ids": [
|
||||
"memory-rel-cat-oz-current-read"
|
||||
]
|
||||
},
|
||||
{
|
||||
"agent_id": "oz_operator",
|
||||
"summary": "Oz reads Cat as sharper and riskier, but not automatically cruel.",
|
||||
"state_deltas": [
|
||||
{
|
||||
"path": "relationships.rel-oz-cat.stance.fear.current_activation",
|
||||
"delta": 0.08
|
||||
},
|
||||
{
|
||||
"path": "relationships.rel-oz-cat.stance.respect.current_activation",
|
||||
"delta": 0.07
|
||||
},
|
||||
{
|
||||
"path": "canonical_state.presentation_strategy.strategic_opacity.current_activation",
|
||||
"delta": 0.06
|
||||
}
|
||||
],
|
||||
"new_belief_ids": [
|
||||
"belief-cat-will-pry"
|
||||
],
|
||||
"memory_update_ids": [
|
||||
"memory-rel-oz-cat-current-read"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1195,7 +1365,7 @@
|
|||
"presentation_constraints": [
|
||||
"Be helpful, a little funny, and evasive.",
|
||||
"Let the drone seem more autonomous than it is.",
|
||||
"Use warmth carefully; Cat may treat open sincerity as bait.",
|
||||
"Use verbal warmth carefully; Cat may treat open sincerity as bait.",
|
||||
"Keep the operator location private unless scene pressure explicitly breaks the mask."
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ Ghostlight now has the persistence spine plus the first architecture payload:
|
|||
- prompt projection and distillation docs:
|
||||
- `docs/architecture/prompt-projection-contract.md`
|
||||
- `docs/architecture/projection-distillation-plan.md`
|
||||
- evaluation follow-up docs:
|
||||
- `docs/architecture/schema-future-mechanisms.md`
|
||||
- visitor-facing README refreshed to explain Ghostlight's goals
|
||||
|
||||
There is still no full runtime yet. The live machine is design, state
|
||||
|
|
@ -62,6 +64,15 @@ state unless explicitly revived.
|
|||
Define the projection example schema and create the first reviewed Cat/Oz
|
||||
projection artifacts from the Call of the Void fixture.
|
||||
|
||||
The evaluation follow-up fixed the immediate v0 schema issues:
|
||||
|
||||
- `behavioral_dimensions.warmth` became `interpersonal_warmth`
|
||||
- `voice_style.warmth` became `verbal_warmth`
|
||||
- Cat now has a perceived-state overlay for Oz
|
||||
- Cat and Oz now have relationship summary memories
|
||||
- `event-drone-lie` now includes observed exchange, private interpretations,
|
||||
and event effects
|
||||
|
||||
The projection path is:
|
||||
|
||||
- build a deterministic speaker-local input slicer
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ 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/architecture/schema-future-mechanisms.md`
|
||||
- parking lot for appraisal, transition, belief, action, conversation,
|
||||
resource, dyad, institution, memory, and embodiment mechanisms not yet
|
||||
promoted into the v0 schema
|
||||
- `schemas/agent-state.schema.json`
|
||||
- v0 canonical agent-state contract for agents, relationships, events,
|
||||
scenes, perceived overlays, and dialogue context packs
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@
|
|||
3. Build the prompt projection layer for authoring.
|
||||
- Use `docs/architecture/prompt-projection-contract.md` as the first
|
||||
renderer contract.
|
||||
- Use `docs/architecture/schema-future-mechanisms.md` to keep appraisal,
|
||||
transition, belief, action, conversation, resource, dyad, institution,
|
||||
memory, and embodiment needs visible without prematurely bloating the v0
|
||||
agent-state schema.
|
||||
- Render scene and dialogue scaffolds from structured state, relevant
|
||||
memories, scene pressure, cultural defaults, and perceived state.
|
||||
- Keep the prompt renderer a projection surface instead of a second brain.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
"ideological_rigidity"
|
||||
],
|
||||
"behavioral_dimensions": [
|
||||
"warmth",
|
||||
"interpersonal_warmth",
|
||||
"drive",
|
||||
"grandiosity",
|
||||
"validation_seeking",
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
],
|
||||
"voice_style": [
|
||||
"dryness",
|
||||
"warmth",
|
||||
"verbal_warmth",
|
||||
"formality",
|
||||
"verbosity",
|
||||
"pace",
|
||||
|
|
|
|||
|
|
@ -374,6 +374,9 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"linked_relationship_id": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -413,7 +416,11 @@
|
|||
"underread_threat",
|
||||
"false_mask_detection",
|
||||
"missed_mask_detection",
|
||||
"status_injury"
|
||||
"status_injury",
|
||||
"threat_amplification",
|
||||
"institutional_suspicion_transfer",
|
||||
"care_underread",
|
||||
"mask_overfocus"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -438,6 +445,39 @@
|
|||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
},
|
||||
"subject_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"claim_type": {
|
||||
"enum": [
|
||||
"fact",
|
||||
"identity_inference",
|
||||
"motive_inference",
|
||||
"prediction",
|
||||
"norm",
|
||||
"value_read",
|
||||
"relationship_read"
|
||||
]
|
||||
},
|
||||
"evidence_event_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"visibility": {
|
||||
"enum": [
|
||||
"private",
|
||||
"shared",
|
||||
"public",
|
||||
"rumor"
|
||||
]
|
||||
},
|
||||
"emotional_charge": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -513,6 +553,24 @@
|
|||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"observed_exchange": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/event_exchange_turn"
|
||||
}
|
||||
},
|
||||
"private_interpretations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/event_private_interpretation"
|
||||
}
|
||||
},
|
||||
"event_effects": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/event_effect"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -673,6 +731,115 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"event_exchange_turn": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"speaker_id",
|
||||
"utterance_summary",
|
||||
"dialogue_function"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"speaker_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"utterance_summary": {
|
||||
"type": "string"
|
||||
},
|
||||
"dialogue_function": {
|
||||
"type": "string"
|
||||
},
|
||||
"observable_cues": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"event_private_interpretation": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"agent_id",
|
||||
"interpretation",
|
||||
"confidence"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"agent_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"interpretation": {
|
||||
"type": "string"
|
||||
},
|
||||
"attributed_motive": {
|
||||
"type": "string"
|
||||
},
|
||||
"appraisal_tags": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"confidence": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"event_effect": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"agent_id",
|
||||
"summary"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"agent_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"summary": {
|
||||
"type": "string"
|
||||
},
|
||||
"state_deltas": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/state_delta"
|
||||
}
|
||||
},
|
||||
"new_belief_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"memory_update_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"state_delta": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"path",
|
||||
"delta"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"delta": {
|
||||
"type": "number",
|
||||
"minimum": -1,
|
||||
"maximum": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,3 +19,4 @@
|
|||
{"ts": "2026-05-01T19:13:15+00:00", "type": "design", "status": "accepted", "note": "Relationship stance is directional. Added Oz->Cat alongside Cat->Oz in the Call of the Void fixture and taught the validator to require reciprocal relationship edges for represented agent pairs."}
|
||||
{"ts": "2026-05-01T19:18:05+00:00", "type": "design", "status": "accepted", "note": "Defined prompt projection as a six-stage contract: select speaker-local inputs, compute active pressure, detect tensions, derive response affordances, render compact prompt sections, then evaluate whether target verbal behaviors emerge from state interactions."}
|
||||
{"ts": "2026-05-01T19:26:23+00:00", "type": "design", "status": "accepted", "note": "Persisted projection distillation plan: use a frontier teacher to generate reviewed projection artifacts, collect accepted and rejected examples, then train a smaller student projector only after the projection schema, input slicer, and evaluator stabilize."}
|
||||
{"ts": "2026-05-01T19:57:04+00:00", "type": "design", "status": "accepted", "note": "Evaluation follow-up accepted immediate schema fixes: split interpersonal_warmth from verbal_warmth, add Cat perception of Oz, populate Cat/Oz relationship summaries, enrich event-drone-lie with observed exchange, private interpretations, and event effects, and park broader social-simulation mechanisms in docs/architecture/schema-future-mechanisms.md."}
|
||||
|
|
|
|||
|
|
@ -83,7 +83,10 @@ accepted_design:
|
|||
- 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 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.
|
||||
- Future social-simulation mechanisms should be documented and tested through projection artifacts before promotion into the canonical schema.
|
||||
|
||||
current_status:
|
||||
summary: Ghostlight now has the Epiphany-style persistence spine, the first architecture payload, the v0 canonical agent-state schema seam, a prompt projection contract, and a documented teacher/student distillation path for projection.
|
||||
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, and a documented teacher/student distillation path for projection.
|
||||
next_action: Define the projection example schema and create the first reviewed Cat/Oz projection artifacts from the Call of the Void fixture.
|
||||
|
|
|
|||
|
|
@ -145,6 +145,8 @@ def validate_agent(agent: dict[str, Any], required: dict[str, list[str]]) -> Non
|
|||
belief_path = f"{overlay_path}.beliefs[{belief_index}]"
|
||||
require_keys(belief, ["belief_id", "claim", "confidence"], belief_path)
|
||||
require_0_1(belief["confidence"], f"{belief_path}.confidence")
|
||||
if "emotional_charge" in belief:
|
||||
require_0_1(belief["emotional_charge"], f"{belief_path}.emotional_charge")
|
||||
|
||||
|
||||
def validate_document(document: dict[str, Any], required: dict[str, list[str]], source: Path) -> None:
|
||||
|
|
@ -184,6 +186,24 @@ def validate_document(document: dict[str, Any], required: dict[str, list[str]],
|
|||
require_keys(event, ["event_id", "kind", "summary", "participants", "pressure_tags"], path)
|
||||
for participant_id in event["participants"]:
|
||||
require(participant_id in agent_id_set, f"{path}.participants references unknown agent: {participant_id}")
|
||||
for turn_index, turn in enumerate(event.get("observed_exchange", [])):
|
||||
turn_path = f"{path}.observed_exchange[{turn_index}]"
|
||||
require_keys(turn, ["speaker_id", "utterance_summary", "dialogue_function"], turn_path)
|
||||
require(turn["speaker_id"] in agent_id_set, f"{turn_path}.speaker_id references unknown agent")
|
||||
for interpretation_index, interpretation in enumerate(event.get("private_interpretations", [])):
|
||||
interpretation_path = f"{path}.private_interpretations[{interpretation_index}]"
|
||||
require_keys(interpretation, ["agent_id", "interpretation", "confidence"], interpretation_path)
|
||||
require(interpretation["agent_id"] in agent_id_set, f"{interpretation_path}.agent_id references unknown agent")
|
||||
require_0_1(interpretation["confidence"], f"{interpretation_path}.confidence")
|
||||
for effect_index, effect in enumerate(event.get("event_effects", [])):
|
||||
effect_path = f"{path}.event_effects[{effect_index}]"
|
||||
require_keys(effect, ["agent_id", "summary"], effect_path)
|
||||
require(effect["agent_id"] in agent_id_set, f"{effect_path}.agent_id references unknown agent")
|
||||
for delta_index, delta in enumerate(effect.get("state_deltas", [])):
|
||||
delta_path = f"{effect_path}.state_deltas[{delta_index}]"
|
||||
require_keys(delta, ["path", "delta"], delta_path)
|
||||
require(isinstance(delta["delta"], (int, float)), f"{delta_path}.delta must be numeric")
|
||||
require(-1 <= delta["delta"] <= 1, f"{delta_path}.delta must be between -1 and 1")
|
||||
|
||||
for index, scene in enumerate(document["scenes"]):
|
||||
path = f"scenes[{index}]"
|
||||
|
|
|
|||
Loading…
Reference in a new issue