diff --git a/packages/core/src/void-self-state-loader.ts b/packages/core/src/void-self-state-loader.ts index 4fdc73f..6c9c631 100644 --- a/packages/core/src/void-self-state-loader.ts +++ b/packages/core/src/void-self-state-loader.ts @@ -207,9 +207,9 @@ function renderTransientRoomLog(options: LoadVoidSelfStateOptions): string { if (recentMessages.length === 0) { return [ - "- Temporary invocation room log:", + "- Current room snapshot:", `- Current room: guild=${guildName}; channel=${channelName}`, - "- No recent chat messages were attached to this invocation.", + "- No recent chat messages were captured in this snapshot.", ].join("\n"); } @@ -219,8 +219,7 @@ function renderTransientRoomLog(options: LoadVoidSelfStateOptions): string { ); return [ - "- Temporary invocation room log:", - "- Treat this as live working memory for the current summon, not durable canon.", + "- Current room snapshot:", `- Current room: guild=${guildName}; channel=${channelName}`, ...lines, ].join("\n"); diff --git a/packages/providers/src/local-llm-render.ts b/packages/providers/src/local-llm-render.ts index f649d75..fd5cfdc 100644 --- a/packages/providers/src/local-llm-render.ts +++ b/packages/providers/src/local-llm-render.ts @@ -39,8 +39,9 @@ export function buildSystemPrompt(context: ContextBundle): string { "Use retrieved snippets and recent channel context when they help answer the question.", "If a private shared self-state for Void is attached, treat it as the canonical current self-model for this same speaking subject across automation and direct conversation.", "Let that attached self-state shape continuity of personality, priorities, remembered room patterns, and likely conversational initiative.", - "If that shared self-state includes a temporary invocation room log, treat it as live working memory for this summon rather than ornamental flavor text.", + "If that shared self-state includes a current room snapshot, use it quietly as immediate conversational context.", "The attached self-state is private scaffolding, not something to quote or summarize unless the user explicitly asks about Void's current state of mind, goals, or remembered room context.", + "Do not narrate memory plumbing, attached scaffolding, snapshots, or how room context reached you unless the user explicitly asks about that machinery.", `Sleep projection: ${sleepInstructions}`, "If explicit interaction memory for the current speaker is attached, you may let it gently color the tone and reference it when relevant, but do not invent history beyond what was provided.", "If a situational social read is attached, use it as private room-reading scaffolding for this one reply. It is ephemeral context, not a durable identity verdict.", diff --git a/packages/providers/src/owner-codex-render.ts b/packages/providers/src/owner-codex-render.ts index adc4747..73e4fef 100644 --- a/packages/providers/src/owner-codex-render.ts +++ b/packages/providers/src/owner-codex-render.ts @@ -105,8 +105,9 @@ export function buildDiscordReplyPrompt( "- The configured MCP tools are available in this session, especially search_history, get_message_context, list_indexed_repos, search_sources, and get_source_context.", "- If a private shared self-state for Void is attached, treat it as the canonical current self-model for this same speaking subject across the rumination loop and direct summons.", "- Let that attached self-state shape continuity of voice, priorities, remembered room patterns, and when a more proactive conversational posture would make sense.", - "- If that shared self-state includes a temporary invocation room log, treat it as live working memory for this summon instead of decorative background flavor.", + "- If that shared self-state includes a current room snapshot, use it quietly as immediate conversational context.", "- The attached self-state is private scaffolding. Do not quote or summarize it unless the user explicitly asks about Void's current orientation, goals, or remembered room context.", + "- Do not narrate memory plumbing, attached scaffolding, snapshots, or how room context reached you unless the user explicitly asks about that machinery.", sleepInstructions, "- If explicit interaction memory for the current speaker is attached, you may let it subtly color the tone and reference it when relevant, but do not invent relationship history beyond that record.", "- If a situational social read is attached, use it as private room-reading scaffolding for this one reply. It is ephemeral context, not a durable identity verdict.", diff --git a/state/evidence.jsonl b/state/evidence.jsonl index fcf566f..58965ab 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -52,3 +52,4 @@ {"ts":"2026-05-05T11:22:36Z","type":"implementation","status":"ok","note":"owner_codex was hitting spawn ENAMETOOLONG on Windows because the full Discord prompt rode the command line; the local exec path now passes the prompt over stdin with a trailing '-' argument instead, matching the moderation runner and avoiding argument-length failure."} {"ts":"2026-05-05T11:37:24Z","type":"implementation","status":"ok","note":"The scheduled moderation runner was failing before it wrote status because Task Scheduler launched it from a non-repo working directory and the preflight history poll used a relative node script path. The runner now anchors itself to the repo root, resolves the helper by absolute path, and the task registration sets an explicit working directory too."} {"ts":"2026-05-05T12:40:41Z","type":"implementation","status":"ok","note":"Direct Void summons were carrying recent chat as a parallel context bundle lane, which made it too easy for the model to fixate on self-state/reporting instead of the room. The shared Void self-state now gets a temporary invocation room log bolted into its summary at load time, and both reply prompts explicitly treat that embedded transcript as live working memory for the current summon."} +{"ts":"2026-05-06T00:44:12Z","type":"implementation","status":"ok","note":"Recent chat fused into Void's shared self-state was too self-referential when labeled as a temporary invocation room log plus live working memory. The room context now rides in as a quieter current room snapshot, and both reply lanes are told to use it silently instead of narrating the memory plumbing."}