From bddd0fd51f3bdac20069e5c4a93ce12a0536bac4 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 16 Jul 2026 04:16:17 +0100 Subject: [PATCH] Extract inspection participant factory --- notes/fresh-workspace-handoff.md | 1 + state/evidence.jsonl | 1 + state/map.yaml | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index a685f69..c5e101d 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -219,6 +219,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou - Stored interaction-profile acquisition now enters through `readStoredPersonaHumanPronounGuidance` in `persona-social-context-source.ts`. The adapter owns opening the configured state provider and delegates visible-human selection, pronoun evidence precedence, and guaranteed close behavior to the existing source. The heartbeat shell no longer opens profile storage or manufactures a reader callback. - Repo-activity observation lowering now lives in pure `repo-activity-projector.ts`; `repo-activity-source.ts` retains exporter execution and parsing. Both live and inspection assembly use the same projector for `ok`, `unconfigured`, `unavailable`, and `malformed` evidence, and the shell's dead text helpers were deleted. - Inspection-only initiative synthesis now lives in pure `inspection-participant-factory.ts`, including explicit zero semantic pressure and empty evidence/receipt state. The prompt-inspection CLI no longer fabricates a partial participant inside the orchestration shell. +- The remaining-shell audit found the resident daemon still spawns `scripts/run-repo-face-heartbeats.ts` as a fresh child process every observation pulse. This keeps the script as hidden runtime authority and pays Node/TypeScript bootstrap cost once per minute even while inference is paused. The next rebuild must move one typed tick into the app runtime, call it directly from `apps/persona-scheduler/src/index.ts`, and demote the script to a CLI/inspection wrapper. - 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 1d258a9..9cb361c 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -437,3 +437,4 @@ {"ts":"2026-07-16T05:15:00Z","type":"implementation","status":"ok","note":"Configured interaction-profile acquisition moved into persona-social-context-source.ts as readStoredPersonaHumanPronounGuidance. The shell no longer opens state storage or builds a profile-reader adapter; focused smoke proves existing pronoun policy is reused and provider close semantics survive the concrete adapter."} {"ts":"2026-07-16T05:20:00Z","type":"implementation","status":"ok","note":"Repo activity prompt lowering moved into pure repo-activity-projector.ts while repo-activity-source.ts retains exporter execution/parsing. Live and inspection paths share the projector; unavailable evidence smoke preserves failure detail and anti-stale-claim guidance. Three dead shell text/number helpers were deleted."} {"ts":"2026-07-16T05:25:00Z","type":"implementation","status":"ok","note":"Inspection-only participant synthesis moved into inspection-participant-factory.ts with explicit zero dynamic heat/response pressure and empty evidence/receipt state. The heartbeat shell is now 618 lines and no longer fabricates a partial initiative participant for prompt inspection."} +{"ts":"2026-07-16T05:30:00Z","type":"architecture","status":"ok","note":"Remaining-shell authority audit found apps/persona-scheduler/index.ts still spawns scripts/run-repo-face-heartbeats.ts as a new Node/TypeScript child every one-minute pulse. The script therefore remains hidden runtime authority and imposes process/bootstrap churn even while paused. Next cut is a direct in-process typed scheduler runner; the script must become CLI/inspection only."} diff --git a/state/map.yaml b/state/map.yaml index 8128847..c08ce5f 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -291,4 +291,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: Keep the Yggdrasil swarm paused. Audit the remaining 618-line `scripts/run-repo-face-heartbeats.ts` shell by authority: top-level tick coordination, participant-spec projection, participant dispatch, live Persona context coordination, prompt-inspection CLI, and argument parsing. Extract only boundaries that own a named invariant; if the remaining shell is merely orchestration, stop shaving it for line-count theater and move to the still-separate Void moderation/mood daemon ownership map. Do not unpause without an explicit controlled-live-fire decision. + next_action: Keep the Yggdrasil swarm paused. Rebuild resident tick ownership: move one typed scheduler tick from `scripts/run-repo-face-heartbeats.ts` into `apps/persona-scheduler/src/persona-scheduler-runner.ts`, make `apps/persona-scheduler/src/index.ts` invoke it directly instead of spawning a fresh TypeScript child every minute, and demote the script to CLI/inspection only. Preserve serialized pulse ownership, typed result reporting, dry-run behavior, and the pause-before-expensive-work invariant. Do not unpause without an explicit controlled-live-fire decision.