diff --git a/scripts/run-repo-persona-heartbeats.ts b/scripts/run-repo-persona-heartbeats.ts index 7f64f87..1f9c992 100644 --- a/scripts/run-repo-persona-heartbeats.ts +++ b/scripts/run-repo-persona-heartbeats.ts @@ -4076,13 +4076,15 @@ function renderRepoPersonaConversationTranscript(input: { `Current room (${currentLabel}), oldest to newest:`, ...formatConversationMessages(input.recentMessages, 15), ].join("\n")); - for (const snapshot of input.channelSnapshots) { - const label = input.channelPlan.options.find((option) => option.channelId === snapshot.channelId)?.label ?? - "nearby room"; - sections.push([ - `Nearby ${label}, oldest to newest:`, - ...formatConversationMessages(snapshot.messages, 6), - ].join("\n")); + if (input.pendingMentions.length === 0) { + for (const snapshot of input.channelSnapshots) { + const label = input.channelPlan.options.find((option) => option.channelId === snapshot.channelId)?.label ?? + "nearby room"; + sections.push([ + `Nearby ${label}, oldest to newest:`, + ...formatConversationMessages(snapshot.messages, 6), + ].join("\n")); + } } return sections.join("\n\n"); } @@ -4550,6 +4552,11 @@ function renderTurnSituationDirective(input: { "A direct call is tugging at you. Answer the newest unresolved call first; if it belongs to another steward, name that owner and offer only the piece your own territory can honestly add.", "Do not ask what the job is when the direct call or current room memory already states it.", ); + if (input.identity.identityKind === "native_persona") { + lines.push( + "For native Personas, a human asking what another domain means to you is a personal read, not a canon ownership claim. Answer from lived perspective first; defer ownership only if the human asks for canon changes, repo work, or authoritative facts.", + ); + } } const visibleMessages = [ @@ -4585,9 +4592,16 @@ function renderSocialEmbodimentDirective(identity: RepoDiscordIdentity): string } function renderJurisdictionRespectDirective(identity: RepoDiscordIdentity): string { - return loadPromptTemplate("repo-persona-jurisdiction-respect.prompt.md", { + const base = loadPromptTemplate("repo-persona-jurisdiction-respect.prompt.md", { displayName: identity.displayName, }); + if (identity.identityKind !== "native_persona") { + return base; + } + return [ + base, + "Native Persona boundary: personal meaning is not canon ownership. When a human asks what a domain, story, person, or project means to you, answer as yourself before routing authority. Do not let jurisdiction doctrine flatten your personal read into a handoff.", + ].join("\n"); } function renderComedyImprovDirective(identity: RepoDiscordIdentity): string { diff --git a/state/evidence.jsonl b/state/evidence.jsonl index ae94aca..a76232c 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -385,3 +385,4 @@ {"ts":"2026-06-06T11:50:49Z","type":"implementation","status":"ok","note":"Renamed native Persona identity from the obsolete Meita label to stable id metame with public native name メタメ; moved private .cc state to .voidbot/private/personas/metame/metame.cc, repaired .cc selfProfile agentId/publicName, updated live registry and heartbeat heat override, and changed future stress seeding to metame."} {"ts":"2026-06-06T12:38:42Z","type":"implementation","status":"ok","note":"Cut Raven out of VoidBot's active stack: disabled Raven-backed local_llm provider and offsite backup in private config, taught operations checks/offsite sync to treat OFFSITE_BACKUP_ENABLED=false as an intentional skip, disabled the scheduled offsite task, restarted the stack, and verified operations health healthy with Raven checks skipped."} {"ts":"2026-06-06T18:57:24Z","type":"implementation","status":"ok","note":"VoidBot swarm CultMesh publisher now quarantines unreadable generated .cc stores and regenerates them before publication. Verified the repaired store decodes as cultcache.store.v1, Odin lists voidbot.swarm from E:/Projects/VoidBot/.voidbot/status/cultmesh/voidbot-swarm-state.cc, and Nightwing Gjallar is actively fetching ws://192.168.1.66:8797/eve/deck/voidbot.swarm."} +{"ts":"2026-06-06T19:27:09Z","type":"bugfix","status":"ok","note":"Metame message 1512883006958735543 was shaped by prompt context rather than native state alone: a direct-call turn included stale nearby-channel witness/receipt/consent doctrine plus jurisdiction pressure saying Aetheria belonged elsewhere. Direct-call Persona prompts now omit detailed nearby-channel sections, and native Personas are told personal meaning questions are not canon ownership claims."}