Map person-shaped rumination ownership

This commit is contained in:
Meta Vens 2026-07-16 05:30:45 +01:00
commit 21a230181c
3 changed files with 3 additions and 0 deletions

View file

@ -214,6 +214,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou
- Revision `21d12a3` adds the portable memory-maintenance organ behind that intent. It commits `void-memory-maintenance-attempt:<napStartedAt>` before its single bounded text-model call, validates the complete proposed operation batch, applies only the allowed memory/incubation/agency/candidate family, requires zero remaining short-term memory, and records `void-memory-maintenance:<napStartedAt>` only on success. Failure is visible and cannot retry until a different nap. Idunn/Ygg live promotion and receipt verification are the immediate deployment check.
- The one-minute Persona scheduler pulse is an observation clock, not an inference cadence. With the swarm brake present it returns before registry, Discord, embedding, storage, or dispatch work; current Ygg logs show `selected: []` and `queued: []`. Unprompted speech also has a separate global admission window. Do not cool token use by making observation blind; keep turn authorization at the initiative owner.
- 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.
- 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.
- Optional model-backed state projection now crosses `persona-text-projection-actuator.ts`. That actuator alone owns Codex args/process lifetime, ordered fallback models, timeout, output decoding, retry classification, and model-output JSONL telemetry. Focused smoke proves it chooses the last visible agent message, retries capacity/429 failures, and refuses to classify prompt-contract failures as model availability problems. The heartbeat shell lost another 182 lines and now only supplies the completed projection prompt plus runtime config.
- Final Persona turn composition now crosses `persona-turn-assembler.ts` for both queued turns and `--assemble-prompt` inspection. It owns conversation projection, jurisdiction-dive cadence, final prompt composition, and the deduplicated eight-image evidence budget. The shell acquires facts and the turn actuator queues the assembled result; neither may maintain a parallel opinion about the final prompt or evidence bundle.

View file

@ -446,3 +446,4 @@
{"ts":"2026-07-16T03:51:18Z","type":"implementation","status":"ok","note":"Portable Void memory maintenance is daemon-owned at 21d12a3: physiology emits typed nap intent; the organ pre-records one attempt per nap, bounds tool-free text inference, validates the full typed operation batch, requires zero short-term residue, and never automatically retries."}
{"ts":"2026-07-16T04:15:05Z","type":"implementation","status":"ok","note":"Portable moderation heartbeat at f97e67b separates evidence acquisition, exact review ledger and typed case application, guarded cursor commit, bounded per-window inference, and replay-safe Discord enforcement. Deployed fixture passed on Ygg; live rollout is log_only before sanctions."}
{"ts":"2026-07-16T04:21:02Z","type":"verification","status":"blocked","note":"Ygg live moderation rollout at 0629fc7 failed safely with one pre-receipted 401, zero cases, zero cursor movement, and zero sanctions. Both supported auth-header forms prove the mounted MiMo credential is stale. Cadence returned to disabled before the next window; deployed fixtures remain green."}
{"ts":"2026-07-16T04:30:45Z","type":"implementation","status":"ok","note":"Person-shaped rumination extracted at c0cf875 with stable pressure fingerprints, typed awake-operation policy, advocacy accountability, and no transport authority. Candidate delivery at 1527b29 deterministically lowers at most one targeted candidate through an injected Bifrost port and records a typed spoken receipt."}

View file

@ -78,6 +78,7 @@ active_subgoals:
- `void-physiology-organ.ts` is the daemon-owned policy boundary for Void sleep and speaking pressure. It reads typed state and moderation activity through injected ports, writes only typed runtime operations, and emits a memory-maintenance intent without performing memory policy or inference.
- `void-memory-maintenance-organ.ts` consumes that intent and owns one bounded maintenance transaction per nap: it records an attempt receipt before inference, projects bounded typed context, accepts only the explicit memory/incubation/agency/candidate operation family, validates the whole batch before application, requires short-term residue to reach zero, and then records success. A failed or malformed pass cannot retry during the same nap. `void-memory-text-actuator.ts` is the narrow OpenAI-compatible text port; it receives one complete prompt, exposes no tools, and caps completion output.
- Void moderation heartbeat is now a separate daemon organ family. `void-moderation-evidence-source.ts` owns cursor-bounded chronological archive acquisition. `void-moderation-heartbeat-projector.ts` requires one explicit decision envelope containing an exact review ledger, urgent-message subset, and typed case operations; the cursor cannot advance over omitted evidence or urgent evidence without an existing/proposed case. `void-moderation-heartbeat-organ.ts` pre-receipts one inference attempt per latest-message window, applies cases before the single cursor commit, and cannot speak or sanction. `void-moderation-enforcement-organ.ts` independently revisits typed pending debt, owns strike expiry/count policy, lowers only required bans through Discord, and closes a case only after sanction success. `bounded-text-completion-actuator.ts` is the shared tool-free completion boundary for daemon cognition organs.
- Person-shaped Void rumination is extracted but not yet resident-scheduled. `void-rumination-projector.ts` owns bounded Mind/evidence context, the awake-operation allow-list, strong advocacy accountability, and a stable pressure fingerprint that excludes wall-clock physiology churn. `void-rumination-organ.ts` pre-receipts one attempt per fingerprint, applies only typed Mind/candidate operations, and cannot deliver. A meaning-bearing state change may authorize one follow-up fingerprint; unchanged settled pressure skips forever rather than firing on a timer. `void-candidate-delivery-organ.ts` deterministically selects at most one targeted queued candidate, rejects already-receipted targets, lowers through an injected Bifrost port, and marks the candidate spoken only with a complete typed receipt. The concrete shared Bifrost command port remains the next extraction from the worker before daemon wiring.
- `initiative-engine.ts` is the only writer of scheduler state fields and history. Reconciliation, controls, pause/disabled skips, stale-turn recovery witnesses, semantic pressure, attention consumption, queue transitions, and tick finalization all cross named engine commit primitives. Queue/context actuators return results and cannot patch participants or history directly.
- `turn-actuator.ts` owns lowering an assembled Persona prompt and evidence bundle into the canonical worker `ContextBundle` and approved `repo-face-rumination` job. It owns the worker actor, command, request ID, approval defaults, and `createJob` call, then returns only a queue receipt. The orchestration shell chooses no queue mechanics and the actuator cannot read Persona or initiative state.
- `turn-routing.ts` owns deterministic Persona channel policy: newest pending-attention preference, default/threshold fallback, snapshot neighborhoods, low-threshold topic projection, and bounded channel-speed projection. Prompt renderers consume a `PersonaChannelPlan`; they do not recompute routing or scheduler speed.