From 4d1113ef0a4dbcead2e2c3cdc43aa13ef773dbb8 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 22 Sep 2026 17:18:05 +0200 Subject: [PATCH] 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 --- epiphany-core/Cargo.toml | 2 +- epiphany-core/src/persona_turn.rs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/epiphany-core/Cargo.toml b/epiphany-core/Cargo.toml index f081c14e..35a994c3 100644 --- a/epiphany-core/Cargo.toml +++ b/epiphany-core/Cargo.toml @@ -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" diff --git a/epiphany-core/src/persona_turn.rs b/epiphany-core/src/persona_turn.rs index a697e144..205f9797 100644 --- a/epiphany-core/src/persona_turn.rs +++ b/epiphany-core/src/persona_turn.rs @@ -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, }, )