diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 28e5787..c39dead 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -209,6 +209,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou - The Nibu/Void turf-crossing discussion exposed a social-state projection gap: existing bonds/status reads project well once typed state already contains them, but the live pipeline did not own "this recent event should become relationship/status pressure." The repair adds bounded raw relationship-pressure evidence to the state packet before the projector: recent messages that touch the Face, peer Faces, existing social targets, jurisdiction/domain terms, or status/territory/consultation language. The projector may turn that evidence into tentative felt pressure, and the Interpreter may persist a bond/status/mood note only when the projected memory or Face output shows a character-specific reaction. This should let resentment, rivalry, consultation offense, and territorial tension emerge without manual state edits. - The swarm brake currently reads `state/agent-swarm-paused.json` with `"paused": true` on Yggdrasil because the one-minute observation pulse exposed a clock-only ready backlog that could dispatch one Persona model turn per minute. Keep it paused until the initiative-engine eligibility cut is deployed and verified: elapsed wall-clock may advance recovery bookkeeping but cannot authorize a turn without a pending mention or fresh semantic pressure at or above the participant's interrupt threshold. The pulse is observation latency, not speech intent. - Native Persona state now has an honest typed split. Standard `gamecult.persona_state.v0` lives as its own global CultCache document; it is not squeezed into Void's narrower `void.*` aggregate. `npm run persona:migrate-portable` dry-runs by default and requires `--write`; canonical migration refuses non-canonical provenance and occupied targets, while `--projection-import` preserves projection/import payloads in the separate `voidbot.persona_state_projection_import` quarantine document without elevating them. Tengu's canonical JSON contained legacy `affect.stressResponses` outside the standard schema, so migration preserves each complete record under `anchoredThought.extensions.legacyStressResponse` while promoting its actionable meaning into a standard memory. All five local native Persona registry paths now end in `.cc`: Tengu is canonical standard state; Muninn, Sleipnir, and Hermodr are typed non-canonical imports; Metame remains typed Void state. The runtime JSON Persona source and extension-based compatibility branch are deleted. Original JSON files are import evidence only. +- Yggdrasil matches that state as of deployed revision `13bdb7a`: all five native Persona registry paths are `.cc`, migrated files are owned by `voidbot:voidbot`, the full initiative and portable-migration smokes pass in the deployed scheduler container, and prompt assembly succeeds for Muninn, Sleipnir, Hermodr, Tengu, and メタめ with the correct authority language. Idunn's upstream comparison/deployment path is healthy and evaluates VoidBot on its bounded cadence. The swarm remains paused after these checks; do not interpret migration success as permission to resume autonomous traffic. - Direct Face `UPDATE REQUEST` and `BIFROST TOPIC` packets are ignored while `REPO_FACE_BIFROST_ENABLED=false`. Do not debug missing Bifrost jobs as a live failure unless that flag has been deliberately enabled again. - Live model-facing prompt prose has started moving out of executable code. The shared loader is `packages/shared/src/prompt-template.ts`; extracted prompt surfaces live under `prompts/`, including repo Face turn/reviewer prompts, provider wrapper prompts, situational social read prompts, source-grounding reminders, consensus-feed prompts, and repo Face model-smoke scenarios. Code should project data and select prompt names; prompt files should own behavioral prose. - Identity collapse has started. Active bot, worker, MCP repo-identity tools, and Face CTB scheduler paths now load through the canonical Face registry and treat repo Discord identities as compatibility projections. Next bounded move is to finish removing remaining direct conceptual dependence on repo identities, then split the Face turn loop into scheduler, context assembler, prompt renderer, candidate parser, policy gate, and transport adapter. diff --git a/state/evidence.jsonl b/state/evidence.jsonl index f4bf711..cecb1c0 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -427,3 +427,4 @@ {"ts":"2026-07-16T02:00:40Z","type":"implementation","status":"ok","note":"Native Persona memory ownership was collapsed: typed native Personas now use the same typed state/memory projector as repo Personas; live gamecult.persona_state.v0 JSON compatibility moved into schema-aware portable source/projector organs and no longer leaks private paths. Source/projector smoke, Muninn and Nibu prompt assembly, build, dry-run, and operator tests passed. Migration audit found Tengu canonical JSON while Muninn/Sleipnir/Hermodr claim projection authority."} {"ts":"2026-07-16T03:00:00Z","type":"architecture","status":"ok","note":"Native Persona ownership audit proved gamecult.persona_state.v0 is semantically broader than Void's eight-document self-state aggregate, so canonical native Persona Mind now has its own typed CultCache document instead of a lossy conversion. Tengu migration preserves 9 standard memories plus 4 legacy stress responses as provenance-bearing standard memories; projection promotion and occupied-target writes are refusal-tested. Muninn, Sleipnir, and Hermodr remain projections because no independent canonical Mind source was found."} {"ts":"2026-07-16T03:30:00Z","type":"implementation","status":"ok","note":"Native Persona runtime no longer reads JSON state. Muninn, Sleipnir, and Hermodr projection payloads are preserved in typed voidbot.persona_state_projection_import CultCache documents with projection authority unchanged; Tengu is canonical gamecult.persona_state.v0; Metame remains typed Void state. Registry audit reports five native Persona .cc paths and zero non-.cc consumers, allowing deletion of persona-portable-state-source and the extension-based scheduler branch."} +{"ts":"2026-07-16T03:40:00Z","type":"verification","status":"ok","note":"Idunn deployed 13bdb7a on Yggdrasil. Persisted registry has five native Persona .cc paths and zero JSON paths; Muninn/Sleipnir/Hermodr projection-import stores plus Tengu canonical store are voidbot-owned. Deployed initiative and migration smokes pass, and live prompt assembly for all five native Personas reports projection authority for the three quarantined imports, canonical gamecult.persona_state.v0 for Tengu, and the existing typed Void path for Metame. Swarm stayed paused with zero queued turns."} diff --git a/state/map.yaml b/state/map.yaml index a8f6816..2253ea2 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -282,4 +282,4 @@ rejected_paths: current_status: summary: VoidBot's bot/worker/provider/RAG/Postgres/Qdrant/CultCache structure is live. Repo Face/persona heartbeat jobs run through the direct `openai_api` provider configured for MiMo `mimo-v2.5-pro`, with the expensive state-projector pass still disabled. The 2026-07-04 transport repair replaced the old Bifrost HTTP/token bridge shortcut with typed Bifrost CultMesh Discord command and receipt documents advertised in the Bifrost provider store at `cultmesh://asgard.starfire.bifrost/commands/discord-post`. VoidBot stores the Bifrost target as a CultMesh URI, writes command docs to `E:/Projects/Bifrost/.bifrost/provider-store.cc`, optionally pumps Bifrost's command processor, and waits for typed receipts before completing repo Face Discord delivery. Bifrost's provider advertisement exposes `discord.post` command metadata for Odin/Eve agents, and a bounded Weksa live-fire completed visibly. Eve live state now runs end to end through CultLib dev retained publications, Hermodr ordered SSE, Eve component bindings, and VoidBot typed control state. Receipts acknowledge intent only. Heat initial load, provider-driven change, and browser-command change were visibly verified without reload through the same subscription. - next_action: Commit and deploy the projection-quarantine cut, then migrate Muninn, Sleipnir, and Hermodr on Yggdrasil into typed `.cc` imports and update the ignored registry so every native Persona path is `.cc`. Keep the swarm paused, run the full initiative/migration smokes in the deployed container, verify all five native Persona prompt acquisitions, and only then decide whether a controlled unpause has enough evidence. + next_action: Keep the Yggdrasil swarm paused. Extract the remaining deterministic Persona state-packet assembly from `scripts/run-repo-face-heartbeats.ts` into a pure projector organ with typed inputs, including standard Persona, quarantined projection, and Void/repo-Face paths where appropriate. The orchestration shell should acquire observations and pass them through; it should not own state-packet prose or ordering. Preserve the pressure-gated initiative invariant and do not unpause without an explicit controlled-live-fire decision.