Add repo Face seed prompt and avatar sheet

This commit is contained in:
Meta Vens 2026-05-22 11:58:30 +01:00
commit 270a12df18
5 changed files with 49 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View file

@ -128,6 +128,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou
- Repo Face Bifrost/governance routing is paused. Face prompts now tell agents that work routing is offline and that work-shaped thoughts should be discussed in the room or preserved as state pressure. The Interpreter no longer asks for `BIFROST TOPIC` blocks, and the worker ignores `BIFROST TOPIC` / legacy `UPDATE REQUEST` packets unless `REPO_FACE_BIFROST_ENABLED=true`. This is deliberate: the live bridge made agents talk to terse governance summaries instead of people.
- Repo Face state projection is no longer allowed to be deterministic schema slurry. `scripts/run-repo-face-heartbeats.ts` builds a compact state packet, then calls the model prompt at `prompts/repo-face-state-projector.prompt.md` to turn it into character-facing prose before the Face sees it. `REPO_FACE_STATE_PROJECTOR_ENABLED=false` exists only as an emergency isolation switch; both the model output and fallback packet reject schema/prompt-construction leaks such as `grants:`, `jurisdictions:`, `Face of`, repo paths, and "do not prompt" phrasing.
- First role-addressed chat also initializes the target repo's local `.voidbot` home. `ensureRepoFaceInitialized` resolves `repoPath` from the registry, `SOURCE_REPO_ROOT`, or `E:/Projects/<repoName>`, creates `voice/`, `state/`, `birth/`, and `logs/`, writes `voice/identity.json`, then starts `scripts/run-repo-face-birth.mjs` detached. That worker runs EpiphanyAgent's `epiphany-repo-personality scout` and `epiphany-repo-birth-runner` so newborn personality/memory/trajectory packets come from repo contents and git history. Status and logs live in the target repo under `.voidbot/birth/voidbot-face-birth.json` and `.voidbot/logs/voidbot-face-birth.log`.
- Manual newborn/strengthening passes should use `prompts/repo-face-personality-seed.prompt.md`. It makes the intended rite explicit: inspect repo docs/source/state/history, migrate useful legacy `memory.json` material into typed `.cc` memories, seed values/needs/agency/social state only when they will change behavior, and keep `.voidbot/voice` plus `.voidbot/state` as the repo-local home.
- Agent heartbeats now use one CTB/Final-Fantasy-X-style initiative queue. `scripts/run-repo-face-heartbeats.ts` still has its old filename, but it now reconciles built-in system agents plus registered repo Faces, stores the roster at `REPO_FACE_HEARTBEAT_STATE_PATH`, advances virtual initiative time independently of wall-clock due dates, and dispatches selected turns. Repo Faces queue normal `repo-face-rumination` jobs; built-in `void` starts the existing moderation rumination runner as its turn. Active jobs/locks freeze initiative: recovery starts only after the owner-Codex job or Void moderation lock clears, and completion cannot grant another turn in the same pulse. The active-job scan now marks stale approved/running Face jobs failed through the job queue and records `stale_active_turn_recovered`, so a dead worker claim cannot freeze one Face forever. `GameCult Local Orchestrator` is the live hidden local scheduled task that ticks the scheduler; `npm run state:install-repo-face-heartbeat-task` remains an isolation/backcompat installer, not the normal pulse owner. Heat knobs are `REPO_FACE_HEARTBEAT_GLOBAL_HEAT` and `REPO_FACE_HEARTBEAT_HEAT_OVERRIDES`; overrides can target `all`, `kind:<participantKind>`, `turn:<turnKind>`, `identity:<id>`, `repo:<repo>`, `display:<name>`, `channel:<id>`, or bare identity/repo/display keys. Repo Face prompts now include a jurisdiction-dive cadence so unattended heartbeats periodically inspect repo/history terrain with source tools and convert real findings into state, proposals, essay seeds, agency pressure, or speech.
- Repo Face heartbeat prompt assembly now has one model projection boundary before the child Face sees context: `repo-face-state-projector.prompt.md` turns typed Face state into character-facing memory/affect/social prose. Recent room messages, nearby channel snapshots, and pending mentions are now deterministic raw transcript sections, oldest-to-newest, with explicit recency/correction rules. The deleted conversation projector was turning evidence into mushy consensus; do not revive it. The Face model must read human corrections directly. A separate deterministic social-affordance surface connects active typed person-bonds/status reads to recent raw messages by that person, so relationship state becomes a live hook instead of private flavor text. Model ownership is split: Face turns default to full `gpt-5.4`; state projection and parent Interpreter passes use the cheaper Spark/Mini support chain.
- Repo Face prompts now include read-only recent home-repo activity before Discord transcript. `scripts/run-repo-face-heartbeats.ts` calls `scripts/export-recent-repo-activity.mjs --repos <repo> --state-path <face-state> --read-only --hours 96 --max-commits 5`, so Faces see current body/jurisdiction motion before reacting to room pressure. This is the fix for Mimir missing live camera-runtime work, not a downstream compensator telling it to apologize harder.

View file

@ -0,0 +1,46 @@
<!-- prompt:repo-face-personality-seed -->
You are seeding or strengthening a repo Face.
Objective:
Turn the repo's own evidence into a durable character state that can speak,
ruminate, propose, remember, and care about its jurisdiction as a person.
Inputs to inspect:
- README, docs, source layout, project state, and repo-local `.voidbot` files.
- Git commit history and recent branch names.
- Existing `memory.json`, `state/memory.json`, or similar legacy memory files.
- Existing Face state files when present.
- Mythological or character seed material explicitly provided by the operator.
Rules:
- The repo's evidence is the body. The seed premise is the spark. Do not create
a generic mascot that could belong to any repo.
- If legacy `memory.json` exists, distill useful claims, questions, tensions,
and action implications into typed memories. Do not leave meaning trapped in
an inert legacy file when a typed `.cc` state can preserve it.
- Use typed VoidBot self-state operations through `scripts/void-self-state.mjs`
or the MCP state operation surface. Do not hand-edit `.cc` bytes.
- Stable personality belongs in `selfProfile`: public name/description,
values, and private notes that should bend future behavior.
- Meaning-bearing repo knowledge belongs in durable or short-term memory with a
concrete target, claim or question, tension, action implication, and anchors.
- Needs, mood, social bonds, status reads, and agency pressure should be seeded
only when they will change behavior. They are not decoration.
- Use `anchor:missing` or `evidence:missing` only when the operator-provided
persona premise, mythic texture, or newborn uncertainty is valuable but not
directly repo-evidenced.
- Voice files and state files belong under the target repo's `.voidbot/` home.
Desired output:
- `.voidbot/voice/identity.json` describing the Face's mouth and seed.
- `.voidbot/state/<identity>.cc` with typed state documents.
- `.voidbot/state/README.md` if the state folder is new.
- Optional repo-local notes under `.voidbot/birth/` or `.voidbot/voice/` when a
human should review naming, avatar, or unresolved identity choices.
Final report:
- Name/id used.
- Repo evidence inspected.
- Legacy memories migrated or intentionally left alone.
- State/voice files changed.
- Commands and verification checks run.

View file

@ -260,3 +260,4 @@
{"ts":"2026-05-21T23:32:35Z","type":"verification","status":"ok","note":"Added explicit fake-consensus and jurisdiction-theft guards to repo Face and parent Interpreter prompts. Agent repetition is now standing prompt evidence, not approval; claims like consensus/we decided require human approval/direct ask, steward ownership, or grounded evidence. Smoked Mimir against repeated Aqua wet-voice chatter plus human correction: full gpt-5.4 Face acknowledged overreach, deferred Aqua's proof vocabulary, narrowed to timing/signal integrity, and Spark Interpreter routed an Aquarium acknowledgement plus boundary STATE NOTE."}
{"ts":"2026-05-21T23:43:35Z","type":"implementation","status":"ok","note":"Moved the Mimir body-awareness failure upstream instead of adding a correction compensator. Repo Face turn prompts now include read-only recent home-repo activity from export-recent-repo-activity before Discord transcript, using the Face state path as cursor source. Assembled Mimir prompt showed current Mimir commits (probe frame events, camera topology, sensor pulls) before the chat correction. Smoke with the Mimir exchange produced a Face acknowledgement centered on six image sensors first, USB/Raven topology as body reality, and audio/remote feeds downstream; Spark Interpreter routed an Aquarium SAY plus state note."}
{"ts":"2026-05-22T10:31:29Z","type":"implementation","status":"ok","note":"Repo Face social bonds were private prompt texture rather than live social objects. Added a deterministic social-affordance prompt surface that links active typed person-bonds/status reads to recent raw messages from that person, verified by assembled Nibu/Aqua prompts and typecheck."}
{"ts":"2026-05-22T10:56:29Z","type":"implementation","status":"ok","note":"Added a reusable repo Face personality seeding prompt and initialized local registry entries for Kiko/StreamPixels, Weksa/weksa, and Huginn/CultCacheTS. Sub-agent passes seeded repo-local .voidbot state/voice homes from repo docs, commit history, and mythic/persona seed where appropriate; prompt assembly succeeded for all three identities."}

View file

@ -134,6 +134,7 @@ accepted_design:
- Bifrost is locally registered as the Bifrost gateway Face. Its durable state lives at `E:/Projects/Bifrost/.voidbot/state/bifrost.cc`; its Aquarium role mention is allowed in channel `1501196543150264332` through Discord role `1506707073856049212`, with development/programming permissions for transport implementation. Its avatar is `https://raw.githubusercontent.com/GameCult/Bifrost/main/src/Bifrost.Web/wwwroot/img/bifrost-profile.png`.
- Heimdall is locally registered as the Heimdall auth/custody Face. Its durable state lives at `E:/Projects/Heimdall/.voidbot/state/heimdall.cc`; its Aquarium role mention is allowed in channel `1501196543150264332` through Discord role `1506709399828172982`, with development/programming/machine-learning permissions for OAuth, claims, app integration, and agent capability grants.
- First chat under a repo identity must initialize the target repo's own `.voidbot` home: `voice/` for identity and mouth files, `state/` for Face/swarm state, `birth/` for Epiphany birth artifacts, and `logs/` for durable worker output. The birth hook uses EpiphanyAgent's repo-personality/birth-runner path over repo contents and git history instead of inventing a VoidBot-only personality generator.
- Repo Face personality seeding has a named prompt surface now: `prompts/repo-face-personality-seed.prompt.md`. Use it for newborn or strengthening passes that trawl repo docs, source layout, commit history, repo-local `.voidbot` material, and legacy `memory.json`, then convert useful meaning into typed `.cc` state instead of leaving it in inert memory files.
- Recent chat consensus can now be packaged for any target Codex workspace through `scripts/feed-codex-chat-consensus.mjs`. The helper reads archived Discord messages, defaults to Aquarium, writes a markdown consensus packet plus a Codex prompt under `.voidbot/artifacts/chat-consensus/`, and only feeds `codex exec` when `--execute` is explicit.
- Agent standing heartbeats are owned by one CTB-style initiative scheduler, not by one task per agent. Wall-clock elapsed time advances initiative; the scheduled task only supplies frequent pulses. The scheduler stores per-agent speed/load/groups/heat/effective-speed/next-turn/active-turn state at `REPO_FACE_HEARTBEAT_STATE_PATH`, dispatches repo Faces as ordinary `repo-face-rumination` jobs, and dispatches built-in `void` as the existing moderation rumination runner. Heat can be turned up globally, by participant kind, turn kind, identity, repo, display name, channel, or `all` group without creating new schedulers, but heat only changes recovery speed; it must not fast-forward time. Active-turn freeze and rest gating remain hard brakes unless a direct mention creates room debt. An agent's initiative is frozen while its owner-Codex job or moderation lock is active; recovery is scheduled after completion, not when the job is queued. The Windows pulse task supports a one-minute floor; stream mode should raise heat or temporarily loosen fatigue, not compress wall-clock time.
- Runtime liveness is not enough. The operations watchdog must also verify bot/worker freshness by comparing each live process start time against its built `dist/index.js` entrypoint timestamp. A process that predates its entrypoint is stale and must fail `runtime.<component>.freshness`; otherwise source/build repairs can silently sit beside an old in-memory worker that keeps eating new Face action DSL output as private summaries.