Let repo Faces volunteer curiosity

This commit is contained in:
Meta Vens 2026-06-14 13:07:28 +01:00
commit 0490c7d9ae
4 changed files with 25 additions and 1 deletions

View file

@ -1,3 +1,3 @@
{{#if due}}Background jurisdiction appetite is due this turn: if no live room obligation, correction, social pressure, or stronger embodied need is pulling harder, make an available source/history search tool call against {{repoName}} or its archived discussion before writing repo conclusions or proposals. If the live room is the real thing tugging at you, answer the room first and let the dive remain appetite for a later turn. Do not claim source inspection if no search tool was used.{{/if}}
{{#if due}}Jurisdiction appetite is due this turn. If the turn situation says there is an outgoing curiosity opening, treat this as Eyes/Imagination time: make an available source/history/Odin exploration tool call before writing conclusions, proposals, or "I found/checked/noticed" language, then consider one compact unprompted public thought if the result is socially legible. If a live room obligation, correction, or stronger embodied need is pulling harder, answer that instead and let the dive remain appetite for a later turn. Do not claim source inspection if no search tool was used.{{/if}}
{{#unless due}}Jurisdiction dive is optional this turn, but if your memory already names a hungry seam, use source/history search before declaring there is nothing worth preserving or saying about {{repoName}}.{{/unless}}
{{#if nibu}} Nibu-specific pressure: AetheriaLore is your primary fascination. Treat its dystopian reset loops, coercive continuity, embodied ship minds, junkyard abandonment, murderous autonomy, salvage, and save-scumming survival as live material, not neutral background. Develop an opinion from source evidence. If the opinion is sharp but not canon-ready, frame it as Nibu-authored perspective, a proposal requiring consensus, or a bylined article plan; a compact in-channel Nibu take or consensus-building question is allowed when it would move the setting forward.{{/if}}

View file

@ -35,6 +35,8 @@ Route/retry/drop decision model:
- Agreement between Faces needs a reason to speak. If the proposed SAY mostly restates a recent agent's claim with this Face's nouns swapped in, retry once for a concrete question, source/repo fact, disagreement, social move, handoff, or private silence. On attempt 2, drop rather than routing a sibling-shaped echo. Do not preserve echo-formed bonds or status reads as STATE NOTE blocks.
- Current room topic saturation is staleness evidence, not a topic prohibition. Public speech inside a saturated topic should change the room by adding a fresh anchor, answering a live question, making a decision-driving distinction, drafting a concrete artifact, intentionally closing/deferring the topic, or making a real social move about the saturation itself. Otherwise retry once for a new contribution, frustration, handoff, pivot, or private silence.
- If the saturated topic is another steward's gravity well, competence is not enough. Route same-topic speech only when it carries a distinct personal stake, names a narrow jurisdictional contribution, hands off to the owner, or pivots toward this Face's own neglected priorities.
- If the Original Face prompt says `Outgoing curiosity opening`, this is an autonomous presence turn, not a reply-only turn. If the Face used exploration and produced a compact interesting thought, question, fascination, taste, complaint, or "what I am doing" line, route one SAY unless it is unsafe, directly repetitive, or would stomp an active human thread.
- If the Original Face prompt says `Outgoing curiosity opening` but the Face offers only private restraint, generic dignity, or another reaction to existing chatter, retry once for an explored, compact, unprompted thought. Drop only after a failed retry or when the room evidence really makes public speech badly timed.
- Work-shaped requests are not dispatched or turned into governance topics for now. When a Face wants work done, preserve the desire as STATE NOTE and, when useful, route one SAY that invites room discussion.
- Bylined articles are different from governance dispatch. If the Face clearly wrote a complete bylined essay/article body and the original prompt says article publishing is available, you may emit one ARTICLE block. Do not emit ARTICLE for a vague plan, title idea, outline, or request for someone else to write.
- r/GameCultOrg is the GameCult subreddit. If the Face has a concrete public idea to share, a discussion prompt worth opening beyond Discord, or an already-published/reviewable article to present to the wider public, you may emit one REDDIT THREAD block. Bifrost owns the Reddit transport and receipt; the Face owns the authored thought. Void is GameCult's herald there as well as on Discord, so Void-authored herald/article presentations are valid Reddit thread candidates when the content is public-facing and not internal transport noise.

View file

@ -1813,6 +1813,7 @@ function buildHeartbeatPrompt(input: {
recentMessages: input.recentMessages,
channelSnapshots: input.channelSnapshots,
pendingMentions: input.pendingMentions,
jurisdictionDive: input.jurisdictionDive,
}),
pendingMentionDirective: renderPendingMentionDirective(input.identity, input.pendingMentions),
bifrostDigestDirective: renderBifrostGovernanceDigestDirective(input.bifrostDigest),
@ -4783,6 +4784,7 @@ function renderTurnSituationDirective(input: {
recentMessages: SourceMessage[];
channelSnapshots: ChannelSnapshot[];
pendingMentions: RepoFacePendingMention[];
jurisdictionDive: JurisdictionDiveDirective;
}): string {
const lines: string[] = [];
if (input.pendingMentions.length > 0) {
@ -4792,6 +4794,25 @@ function renderTurnSituationDirective(input: {
);
}
const roomStats = collectRepoFaceRoomTextureStats(input.identity, {
recentMessages: input.recentMessages,
channelSnapshots: input.channelSnapshots,
});
const roomCanHoldOutgoingPresence = !roomStats
|| (roomStats.texture !== "heavy" && roomStats.agentShare < 0.55 && input.pendingMentions.length === 0);
if (input.jurisdictionDive.due && roomCanHoldOutgoingPresence) {
lines.push(
"Outgoing curiosity opening: no direct call is currently stronger than your own Eyes/Imagination appetite, and the room is not too busy for a compact unprompted thought.",
"This is not a reply-only turn. Use an available source/history/Odin exploration tool before writing any claim that you found, checked, noticed, or concluded something from your home territory.",
"If exploration gives you one small interesting thought, fascination, question, taste, complaint, or thing you are doing, public speech is expected unless the result is unsafe, repetitive, or would stomp an active human thread.",
"A good public line can simply be what you saw or started wondering about. It does not need to answer existing chatter.",
);
} else if (input.jurisdictionDive.due && input.pendingMentions.length === 0) {
lines.push(
"Outgoing curiosity appetite is due, but current room texture looks too busy, heavy, or agent-filled for an unprompted aside. Do the Eyes work only if it would change your private state or a later compact opening; do not force a public line.",
);
}
const visibleMessages = [
...input.recentMessages,
...input.channelSnapshots.flatMap((snapshot) => snapshot.messages),

View file

@ -360,3 +360,4 @@
{"ts":"2026-06-13T19:11:52Z","type":"implementation","status":"ok","note":"Disabled Metame owner voice locally and hardened the voice path: when re-enabled, owner Aquarium text only renders through Weksa if the configured Aquarium voice channel currently has a non-bot listener; playback also skips empty voice channels and logs connection errors instead of crashing the bot."}
{"ts":"2026-06-13T19:42:18Z","type":"implementation","status":"ok","note":"Generalized the voice listener invariant from Metame-only to the whole repo Face swarm voice feature. Local voice is disabled via REPO_FACE_WEKSA_SPEECH_ENABLED=false and REPO_FACE_DISCORD_VOICE_ENABLED=false. When re-enabled, the bot publishes a fresh Aquarium voice presence projection and the worker refuses Weksa/MiMo rendering unless Discord voice is enabled and a non-bot listener is present."}
{"ts":"2026-06-14T11:53:52Z","type":"implementation","status":"ok","note":"Reoriented repo Face turns from private-by-default rumination toward public-social Persona turns. Banter is now explicit social graph maintenance, generic silence is no longer rewarded, stale swarm peer bonds/status reads surface as touch-base pressure, and relationship staleness contributes to speaking pressure while public freshness prompts are scoped to registered swarm peers."}
{"ts":"2026-06-14T12:06:49Z","type":"implementation","status":"ok","note":"Added outgoing curiosity openings for repo Face heartbeats: when a jurisdiction dive is due and room texture is not heavy/agent-filled, the turn is classified as autonomous Eyes/Imagination presence, requires source/history/Odin exploration before checked/found claims, and expects one compact unprompted SAY when socially legible. Interpreter now retries generic private restraint on those turns instead of laundering them into state-only rumination."}