Record live exact-source recovery
This commit is contained in:
parent
c88c71909d
commit
1f2f4f0c02
3 changed files with 3 additions and 2 deletions
|
|
@ -217,7 +217,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou
|
|||
- Revision `f97e67b` adds the portable moderation-heartbeat coordinator and enforcement organ behind a separate disabled-by-default 15-minute cadence. The model returns an exact review ledger plus urgent IDs and typed case operations; missing evidence or unaccounted urgent evidence blocks cursor advancement. The attempt is receipted by latest message before inference, so one unchanged archive window cannot burn tokens repeatedly. Case enforcement is separate, scans typed pending debt on every cadence, and resolves a case only after a required Discord ban succeeds. Ygg's first `log_only` window at `0629fc7` failed safely with one 401, zero cases, zero cursor movement, and zero sanctions; both supported auth-header shapes prove the mounted MiMo credential itself is stale. `VOID_MODERATION_DAEMON_ENABLED` is false again pending a refreshed provider credential or deliberate alternate model port.
|
||||
- The shared Bifrost Discord mouth now lives in `packages/core/src/bifrost-discord-command.ts`. Worker repo-Face speech and resident Void candidate delivery use the same stable-id typed command, provider-store write, optional Bifrost pump, and completed-receipt check. The candidate organ selects at most one targeted queued candidate and writes its speech receipt/`spoken` transition only after transport completes. Ygg mounts the Bifrost provider store and CultLib runtime into the scheduler; `VOID_CANDIDATE_DELIVERY_ENABLED` controls this transport-only organ independently from the disabled moderation/rumination model cadence.
|
||||
- Discord archive/source retrieval is a resident worker organ on Yggdrasil. `apps/worker/src/mcp-http-server.ts` publishes stateless streamable HTTP at `127.0.0.1:17875/mcp` and receives the worker's existing archive repositories, source ingester, and retrieval service by injection. The canonical workstation SSH tunnel maps the same Starfire loopback port to Ygg. Codex attaches to `scripts/serve-voidbot-mcp-bridge.mjs`, a task-lifetime stdio transport bridge with no retrieval authority; each tool request uses HTTP to the daemon, and a deployment/tunnel gap returns one MCP tool error without closing the outer transport. It starts no SSH, Docker, or remote Node process. `scripts/smoke-voidbot-mcp-bridge-recovery.mjs` proves one outer client succeeds before an endpoint outage, receives an error during it, and succeeds again after recovery.
|
||||
- Source retrieval now also exposes read-only `get_exact_source_document`. It resolves an exact source id through the canonical sharded archive and returns the complete archived document plus provenance fields, allowing Ghostlight and other consumers to hash and receipt the actual witness instead of treating a semantic chunk as the source. The in-memory MCP smoke proves full-content identity. The recovery Compose allow-list and Yggdrasil release still need the matching update before the live crossing offers this sixth tool.
|
||||
- Source retrieval now also exposes read-only `get_exact_source_document`. It resolves an exact source id through the canonical sharded archive and returns the complete archived document plus provenance fields, allowing Ghostlight and other consumers to hash and receipt the actual witness instead of treating a semantic chunk as the source. The in-memory MCP smoke proves full-content identity. Yggdrasil deployed immutable release `20260816T193315Z-c88c71909dbc`; a Starfire live call fetched all 10,363 characters of `AetheriaLore:Aetheria/index.md` and hashed them as `ccc26375ecbe638af1aa3ccdeff885dfcc85cf6e7f1c6867e2b42e3e8b374a6d`.
|
||||
- Resident person-shaped rumination is wired behind `VOID_RUMINATION_DAEMON_ENABLED` with its own bounded cadence, Discord evidence window, dedicated doctrine, rules, and voice inputs. The pressure fingerprint is receipted before the model attempt and unchanged pressure cannot retry on the observation clock. Ygg explicitly keeps this false while the MiMo credential is stale; candidate delivery may remain enabled because it performs no inference and the live queue was empty at rollout.
|
||||
- Revisions `c0cf875` and `1527b29` extract person-shaped rumination and candidate delivery without scheduling them. Rumination context, operation policy, advocacy accountability, tool-free text actuation, and coordinator are portable; the attempt key hashes meaning-bearing pressure/evidence and ignores elapsed clock, so unchanged state cannot create periodic thought. Candidate delivery is deterministic and parent-owned: one targeted queued candidate, duplicate-receipt refusal, injected Bifrost port, then one `mark_candidate_intervention_spoken` operation with the transport receipt. The next cut is extracting the worker's existing typed Bifrost Discord command path into a shared port rather than duplicating CultMesh mechanics.
|
||||
- Deterministic state-packet assembly now lives in `persona-state-packet-projector.ts`, which takes typed state, registry/room evidence, pronoun guidance, curiosity facts, and an explicit observation time. The shell no longer owns section ordering or social-context composition. The downstream regex vocabulary cleaner was deleted: it was a symptom compensator rewriting ordinary words such as `witness` and `canary` after projection. A smoke proves literal source language survives the projector unchanged.
|
||||
|
|
|
|||
|
|
@ -462,3 +462,4 @@
|
|||
{"ts":"2026-08-16T17:30:00Z","type":"recovery","status":"ok","note":"Big Yggdrasil was retired after an incomplete evacuation and its recycled 94.130.223.131 address is not trusted. Old Yggdrasil retained no VoidBot state, but Raven held a verified June 3 offsite archive (SHA-256 47572df766e63212012eb75762359113a11c8bbf149b497e120fc4fda7191dfc); the June 4 archive is corrupt. Recovery is intentionally bounded to a loopback read-only MCP over exact archives and VoidBot-owned vectors while lost Discord, Idunn, Odin, Epiphany, Persona, moderation, and delivery authority remains stopped."}
|
||||
{"ts":"2026-08-16T17:40:00Z","type":"architecture","status":"ok","note":"Read-only MCP recovery exposed that SerializedFileStore snapshots always created writer locks. Archive repositories now accept an explicit read-only mode: snapshots read without filesystem locks and every mutation method fails immediately. A Node 24 build and a nobody-user probe on a non-writable directory proved snapshot success plus mutation rejection; writable runtimes retain interprocess locking."}
|
||||
{"ts":"2026-08-16T19:29:57Z","type":"implementation","status":"ok","note":"Added read-only get_exact_source_document MCP tool backed by the canonical sharded source archive; full content is returned for consumer-owned hashing and receipts. Typecheck and in-memory MCP smoke pass."}
|
||||
{"ts":"2026-08-16T19:34:57Z","type":"verification","status":"ok","note":"Yggdrasil deployed immutable VoidBot recovery release 20260816T193315Z-c88c71909dbc. Starfire called get_exact_source_document through 127.0.0.1:17875 and received all 10,363 characters of AetheriaLore:Aetheria/index.md with SHA-256 ccc26375ecbe638af1aa3ccdeff885dfcc85cf6e7f1c6867e2b42e3e8b374a6d."}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ data_flow:
|
|||
- keep persistent state lean enough that re-entry sharpens the next turn instead of drowning it
|
||||
|
||||
active_subgoals:
|
||||
- Publish the read-only `get_exact_source_document` contract through the Yggdrasil recovery allow-list and immutable release, then verify a full Aetheria document over the restored Starfire loopback tunnel. The source archive remains the sole owner; consumers hash and receipt returned content.
|
||||
- Keep the deployed read-only `get_exact_source_document` contract inside the recovery allow-list. The source archive remains the sole owner; consumers hash and receipt returned content. Yggdrasil release `20260816T193315Z-c88c71909dbc` and the Starfire full-document witness prove the live path.
|
||||
- Treat `notes/agent-swarm-teardown-plan-2026-05-21.md` as the historical teardown authority and the restart checklist. The repo Face swarm is live again, but only because the scheduler, prompt, model-output logs, parent Interpreter, Bifrost routing, and worker side-effect rails now have explicit observable boundaries. Keep watching for prompt/parser/transport Jenga before adding new swarm features.
|
||||
- Make the new project-state surfaces the default continuity path for nontrivial VoidBot work.
|
||||
- Keep the rebuilt moderation/self-state foundation on canonical CultCache `.cc` typed operations, never an editable JSON working projection.
|
||||
|
|
|
|||
Loading…
Reference in a new issue