Move the Ghostlight pin off the dead cultcache-py submodule

Epiphany pinned ghostlight-persona-projection at 2228189
(2026-08-16), which still carries the vendor/cultcache-py submodule
pointing at https://github.com/GameCult/cultcache-py.git. That repo
was folded into CultLib's packages/cultcache-py and no longer exists,
so a fresh clone that recursively fetches Ghostlight submodules fails
cargo's `unable to update` step even though Epiphany's own tree is
otherwise clean.

Move the pin to 22937b7 (2026-09-13), the nearest Ghostlight revision
without a dead submodule: it replaces vendor/cultcache-py with the
published cultcache-py PyPI package and keeps only vendor/eve. Between
the two revisions the crate's public surface stayed source-compatible
for the three call sites Epiphany uses, with three additive/field
changes: ProjectorPrompt and PersonaPrompt gained a required
word_budget field (set to 180, matching Ghostlight's own
PERSONA_WORD_BUDGET convention for narrative Persona controllers), and
InterpreterPrompt's output_schema became Option<&str> (wrapped in
Some(..) to keep the always-supplied schema).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-22 17:18:05 +02:00
commit 4d1113ef0a
2 changed files with 4 additions and 2 deletions

View file

@ -20,7 +20,7 @@ cultnet-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "e171eca32
epiphany-model-adapter = { path = "../epiphany-model-adapter" }
epiphany-tool-adapter = { path = "../epiphany-tool-adapter" }
fs2 = "0.4"
ghostlight-persona-projection = { git = "https://github.com/GameCult/Ghostlight.git", rev = "22281891cbf9258db80c15a9fd465e6fa251e7dd", package = "ghostlight-persona-projection" }
ghostlight-persona-projection = { git = "https://github.com/GameCult/Ghostlight.git", rev = "22937b71f056d2000dd7ea1f6af0c45825de495f", package = "ghostlight-persona-projection" }
ed25519-dalek = "2"
ignore = "0.4.23"
rmp-serde = "1"

View file

@ -282,6 +282,7 @@ pub fn build_persona_projector_prompt_with_transcript(
typed_context: &typed_context,
visible_stimulus: &render_transcript(transcript),
domain_guidance: "Project personhood rather than a job label: values, mood, dignity, pressure, needs, fascinations, wounds, bonds, obligations, fatigue, and what repo-body motion feels like from inside. The dependency web may be felt but grants no organ authority. Mind alone admits durable state; Substrate Gate alone grants repo access.",
word_budget: 180,
},
)
}
@ -292,6 +293,7 @@ pub fn build_persona_turn_prompt(input: &PersonaTurnInput) -> String {
identity: &input.identity.display_name,
lived_stream: input.projected_state.trim(),
domain_guidance: "This is Epiphany Persona cognition. Speak, hold silence, wonder, disagree, or form a private thought naturally. A parent Interpreter may propose bounded memory, public speech, or silence; Mind and external gates retain all consequence authority.",
word_budget: 180,
},
)
}
@ -339,7 +341,7 @@ Pending addressed pressure:
typed_context: &typed_context,
lived_stream: input.persona_prompt.trim(),
persona_output: input.persona_output.trim(),
output_schema: &persona_interpreter_effect_set_json_schema(),
output_schema: Some(&persona_interpreter_effect_set_json_schema()),
domain_guidance: &domain_guidance,
},
)