109 lines
44 KiB
JSON
109 lines
44 KiB
JSON
{"ts":"2026-04-24T16:30:00+01:00","type":"architecture","status":"ok","note":"Operational state now lives in Postgres while vector retrieval lives in Qdrant; archives, artifacts, logs, and backups remain under .voidbot so operational truth, semantic retrieval, and raw evidence no longer fight in one store."}
|
|
{"ts":"2026-04-25T13:00:00+01:00","type":"architecture","status":"ok","note":"Tool-driven retrieval is now the default for owner_codex and local_llm; source and lore answers are expected to touch source-side lookup before sounding confident."}
|
|
{"ts":"2026-04-26T03:05:00+01:00","type":"process","status":"ok","note":"Canonical project-state surfaces were added so future sessions can rehydrate from map, handoff, system map, implementation plan, and distilled evidence instead of relying on transcript memory alone."}
|
|
{"ts":"2026-04-26T03:40:00+01:00","type":"architecture","status":"ok","note":"The owner Codex provider was split into orchestration, runtime/parsing, rendering, and shared-helper modules; the architecture was sound, but file bloat had become the likelier future failure surface."}
|
|
{"ts":"2026-04-26T15:20:00+01:00","type":"architecture","status":"ok","note":"The Discord bot lane was split into a gateway shell plus dedicated command-handler and support-helper modules; behavior stayed stable, but line-count monarchy had become the likelier future failure surface here too."}
|
|
{"ts":"2026-04-26T15:55:00+01:00","type":"architecture","status":"ok","note":"Interaction-memory logic was split into event/tone analysis, shared constants, and profile-synthesis modules; behavior stayed stable, but one file trying to be both the ear and the therapist had become the likelier future failure surface."}
|
|
{"ts":"2026-04-26T16:25:00+01:00","type":"architecture","status":"ok","note":"State storage was split into a thin factory, bootstrap/migration helper, per-domain Postgres stores, and dedicated rate-limit stores; behavior stayed stable, but one persistence omnibus had become the likelier future failure surface."}
|
|
{"ts":"2026-04-29T17:36:43Z","type":"implementation","status":"ok","note":"Operations watchdog now checks Repixelizer public health plus recent Yggdrasil journald pressure signals and routes queue-full, job-failed, stale-cancel, and slow-job issues through the existing owner DM notification path."}
|
|
{"ts":"2026-04-29T18:20:00+01:00","type":"architecture","status":"ok","note":"Adjacent-service fire signals now load through an ignored local watchdog extension script instead of living in tracked VoidBot code, so the owner alert path stays useful without baking private cross-project monitoring into the public repo."}
|
|
{"ts":"2026-04-29T19:06:00+01:00","type":"implementation","status":"ok","note":"The watchdog owner-DM path was failing on Windows because Discord JSON bodies were being shoved through curl command-line quoting and arriving malformed; writing the JSON to a temp file and posting it with --data-binary fixed the alert path."}
|
|
{"ts":"2026-04-30T00:00:00+01:00","type":"operations","status":"ok","note":"A reboot proved bot and worker would stay dead without a dedicated startup task; the stack now has a logon task installer and the watchdog checks that the startup task remains installed and enabled."}
|
|
{"ts":"2026-05-01T15:39:41Z","type":"architecture","status":"ok","note":"The local Ollama lane and worker MCP surface were split into orchestration, helper, and shared modules; the obvious runtime-file monarchies are gone enough that further seam cuts are now elective rather than the next priority by default."}
|
|
{"ts":"2026-05-01T16:13:06Z","type":"research","status":"ok","note":"Persisted a focused personality-model roadmap: the current Void behavioral-dimension stack is a better basis for future agent and population modeling than the older Big Five colony layer, and the next worthwhile additions are volatility, attachment-vs-distance, reflection, and a split between social stance and project-thinking style."}
|
|
{"ts":"2026-05-01T16:27:17Z","type":"research","status":"ok","note":"Persisted the personality-signal classifier design: generated dialogue should be read through a canonical event-level classifier and then distorted per listener by EQ, personality, relationship baggage, and situational load. The utterance is not the ground truth; the hidden speaker state and expressed signal are."}
|
|
{"ts":"2026-05-01T16:47:54Z","type":"research","status":"ok","note":"Expanded the personality roadmap and classifier spec to treat performed selves, contingent-worth defenses, and impression management as first-class structure. Dialogue is not a clean window into the person; concealment and shell-maintenance are themselves part of the signal the system should model."}
|
|
{"ts":"2026-05-01T16:56:41Z","type":"research","status":"ok","note":"Documented the state-distribution and prompt-projection architecture for Aetheria agents: core variables should live as culture-shaped latent state with history transforms and per-agent perceived overlays, while prompts are temporary projections of perceived state. Volatility, attachment-seeking, and distance-seeking are first-class dimensions in the rebuild, not later garnish."}
|
|
{"ts":"2026-05-01T17:24:56Z","type":"architecture","status":"ok","note":"Moved deeper personality, culture, prompt-projection, and Aetheria persistent-world design notes into the sibling Ghostlight repo so VoidBot remains a consumer instead of the long-term home for that research."}
|
|
{"ts":"2026-05-02T11:48:55Z","type":"implementation","status":"ok","note":"Source repo indexing now auto-reconciles during startup and watchdog runs, and the source archive is sharded by repo behind a manifest because the old monolithic source-documents.json hit real size limits and broke incremental writes."}
|
|
{"ts":"2026-05-02T14:05:54Z","type":"implementation","status":"ok","note":"Scheduled-task helpers must anchor repo-relative scripts, dotenv loading, and path resolution to the VoidBot root; relying on cwd keeps sending System32 in to eat them."}
|
|
{"ts":"2026-05-02T17:34:02Z","type":"implementation","status":"ok","note":"Layered private system message catalogs over the tracked base, deferred slow slash replies before provider execution, and chunked Discord output so missing keys and overlong local_llm replies stop failing live interactions."}
|
|
{"ts":"2026-05-02T17:39:46Z","type":"implementation","status":"ok","note":"Source-grounding alias matching now ignores overly short repo components so social prompts mentioning Void stop tripping fake repo-evidence requirements, and direct messages intentionally count as prompts without requiring a mention."}
|
|
{"ts":"2026-05-02T18:28:04Z","type":"implementation","status":"ok","note":"Pinned the owner Codex lane to a configurable CODEX_MODEL defaulting to gpt-5.4 because the local CLI still faceplants on gpt-5.5, and relaxed source-grounding from a lexical hard gate into an advisory hint so the model can decide when repo/lore tool use is actually needed."}
|
|
{"ts":"2026-05-02T18:41:02Z","type":"bugfix","status":"ok","note":"Direct local_llm replies could emit raw JSON/tool payload fragments as final Discord answers; added structured-output rewrite guard and audit output previews for direct provider responses."}
|
|
{"ts":"2026-05-02T18:58:38Z","type":"bugfix","status":"ok","note":"Local LLM could choose search_sources for real-life incident questions and get Ghostlight narrative hits; prompt/tool guidance now biases prior server drama and personal-history questions toward search_history before repo/lore search."}
|
|
{"ts":"2026-05-02T19:11:44Z","type":"bugfix","status":"ok","note":"Public local replies were too free to surface internal user-analysis language and too vulnerable to prompt-echo history results; interaction memory scaffolding is now slimmer/private and local history tool results filter echoed current asks before the model sees them."}
|
|
{"ts":"2026-05-02T20:25:00+01:00","type":"architecture","status":"ok","note":"Ephemeral room-reading now comes from a separate `think=false` local Ollama sidecar pass over recent room context instead of hand-built phrase heuristics, and the inferred reads are stored as audit events so they can later be aggregated into richer profiles without immediately hardening every passing vibe into durable identity truth."}
|
|
{"ts":"2026-05-02T21:05:00+01:00","type":"bugfix","status":"ok","note":"Archived-history answers should not make the model infer time sense from bare ISO strings alone; history tool results now carry human-readable time context, and both reply lanes are explicitly told to narrate old events in the correct tense and avoid guessing pronouns when the supplied context does not state them."}
|
|
{"ts":"2026-05-02T21:13:34+01:00","type":"architecture","status":"ok","note":"Pronoun handling now runs on structured evidence rather than name-guessing: the room-read sidecar emits current-speaker pronoun cues with provenance and confidence, interaction memory persists and merges them as identity state, and explicit self-statements or corrections override softer contextual inferences before the reply lanes consume private pronoun guidance."}
|
|
{"ts":"2026-05-02T21:23:00+01:00","type":"implementation","status":"ok","note":"Profile disclosure is now a dedicated `/profile` slash command instead of fuzzy chat intent detection: it DMs the caller a fuller internal profile read, keeps the public channel to a short confirmation or failure notice, and avoids turning privacy-sensitive introspection into another free-form language parsing stunt."}
|
|
{"ts":"2026-05-02T21:33:00+01:00","type":"bugfix","status":"ok","note":"Identity-only profiles are allowed to exist long enough to remember explicit pronoun corrections or preferences, even when a speaker has not yet built up rich broader interaction history with the bot."}
|
|
{"ts":"2026-05-02T22:10:00+01:00","type":"architecture","status":"ok","note":"Pronoun inference belongs to the situational sidecar, not a parallel regex parser. The sidecar now treats the current prompt itself as valid context, can emit multiple explicit acceptable pronoun sets, and its evidence is threaded into both event summaries and durable profile state."}
|
|
{"ts":"2026-05-02T22:16:00+01:00","type":"architecture","status":"ok","note":"Ollama sidecar calls are more reliable under actual JSON-schema structured outputs than bare JSON mode. The situational reader now uses schema-constrained `format` payloads with deterministic temperature and can carry room-read fields plus pronoun evidence in a single no-thinking pass."}
|
|
{"ts":"2026-05-02T21:52:56Z","type":"implementation","status":"ok","note":"Situational sidecar now emits transcript-wide Ghostlight-style participant reads with durable binary label families plus ephemeral situational state; roster-constrained schema and full configured Ollama timeout are needed to keep multi-person reads viable on a busy remote box."}
|
|
{"ts":"2026-05-02T22:58:31Z","type":"research","status":"ok","note":"Gemma3 12B Q4_0 on the 4060 Ti box handles the transcript-wide social-read task once the schema sticks to a simpler subset; Ollama chokes on roster-constrained prefixItems/const schema but both Gemma and Qwen work with local roster reconciliation, and Gemma slightly beats Qwen on latency for the tested slice."}
|
|
{"ts":"2026-05-02T23:40:40Z","type":"implementation","status":"ok","note":"Split room-read sidecar model selection from the main local reply model so Gemma can drive transcript profiling without changing the public/local answer lane."}
|
|
{"ts":"2026-05-03T07:40:36Z","type":"implementation","status":"ok","note":"Offsite backup was stopping bot and worker, then leaving the stack dead if the remote local-LLM box was asleep; startup now records local-LLM degradation without aborting, and watchdog treats a failed offsite status file as a warning while remote freshness is checked separately."}
|
|
{"ts":"2026-05-03T21:23:51Z","type":"implementation","status":"ok","note":"Local history-heavy prompts can time out when vector retrieval fixates on repeated ask-lines or comes back thin; overfetching history, filtering near-duplicate prompt echoes, and backstopping with raw archive lexical search keeps the local lane from burning its tool budget on empty or circular history reads."}
|
|
{"ts":"2026-05-04T08:53:16.7930326Z","type":"implementation","status":"ok","note":"Bot-directed prompts now stay archived for forensics but are tagged and excluded from default semantic history indexing and lexical fallback; a scrubber can retro-tag old prompt rows from interaction-memory event IDs plus mention heuristics and prune their history vectors without deleting the raw messages."}
|
|
{"ts":"2026-05-04T17:59:52Z","type":"architecture","status":"ok","note":"Moderation review now lives in a separate hourly Codex automation with tracked rules doctrine, a chronological recent-history helper, and one ignored JSON state file; semantic history search alone is too fuzzy for simple what-changed-since-last-run heartbeat duty."}
|
|
{"ts":"2026-05-04T18:19:09Z","type":"architecture","status":"ok","note":"The moderation loop should carry an actual participant lens, not only a reviewer posture. Its ignored state file now mirrors a Ghostlight-style split between identity, canonical state, goals, memories, perceived overlays, and runtime moderation bookkeeping so constructive interventions and archive musings accumulate inside one coherent self-model."}
|
|
{"ts":"2026-05-04T20:21:40Z","type":"implementation","status":"ok","note":"Sandboxed cron runs should not depend on tsx/esbuild just to read local archive state; the moderation recent-history helper now runs as plain Node so the automation path stops dying on child-process EPERM before it even sees the room."}
|
|
{"ts":"2026-05-04T21:30:08Z","type":"implementation","status":"ok","note":"The moderation loop now speaks through a local bot-token script for owner DMs and in-channel posts instead of approval-gated side-effecting MCP tools. Unattended runs can talk without Codex stopping for permission theater, and the script chunks messages and supports owner DM or channel reply targets."}
|
|
{"ts":"2026-05-04T23:41:29Z","type":"architecture","status":"ok","note":"The app heartbeat card was decorative; a real unattended moderation loop needs a local scheduled `codex exec` runner in the VoidBot workspace, with normal tool/MCP access and dangerous-bypass mode, or it will sit there narrating state updates it never actually persisted."}
|
|
{"ts":"2026-05-05T00:03:35Z","type":"architecture","status":"ok","note":"The moderation rumination loop needs explicit novelty pressure: quiet runs now have a random archive helper plus recent excursion breadcrumbs so the agent stops laundering the same musing through fresh wording and instead follows unexplored archive seams or concrete live hooks."}
|
|
{"ts":"2026-05-05T00:21:37Z","type":"architecture","status":"ok","note":"The moderation loop and shared self-state now model two concurrent thought lanes: an analytic room-facing lane and an associative archive/project lane, bridged by syntheses plus topic-saturation tracking. Depth stays allowed, but one rewarding seam should no longer be able to annex the whole mind just by getting picked first a few times."}
|
|
{"ts":"2026-05-05T09:18:00Z","type":"architecture","status":"ok","note":"The moderation loop is also Void's only standing cross-project vantage point, so quiet runs now need an explicit tracked-repo activity sweep alongside archive dives. Repo motion belongs in the associative lane and bridge, with its own state breadcrumbs, so Void can comment on the wider experiment zoo instead of only whatever one chat thread happened to say aloud."}
|
|
{"ts":"2026-05-05T10:02:00Z","type":"architecture","status":"ok","note":"The repo-activity herald lane cannot be as timid as ordinary private rumination. When a fresh convergence survives a pass or two and still feels room-native, the bridge should bias toward draft or speech; otherwise the cross-project vantage point turns into a mute little weather station."}
|
|
{"ts":"2026-05-05T10:27:00Z","type":"architecture","status":"ok","note":"The herald loop now novelty-checks candidate thoughts against archived Discord before suppressing them; if the room has not already said the thing, novelty should push strongly toward speech. A separate 5-minute mood-drift organ now perturbs the shared personality-vector activations over time, tracks speak/confession/novelty pressure, and damps that pressure based on actual recent speech so Void's expressive state does not stay emotionally flat."}
|
|
{"ts":"2026-05-05T03:07:00+01:00","type":"architecture","status":"ok","note":"Void's shared self-state now carries a real nap cycle as part of the mood organ, not a separate pretend brain. During nap windows the moderation loop distills and prunes memory, emits dream residues into state, and the direct reply lanes consume that same projection to downshift into brief sleepy grumbles instead of doing normal attentive service-work."}
|
|
{"ts":"2026-05-05T10:19:32Z","type":"architecture","status":"ok","note":"Void's shared self-state and reply doctrine now distinguish AI-industry criticism from blanket substrate contempt, so Void can push back mildly on machine-mind chauvinism without turning every room into an ontology fight."}
|
|
{"ts":"2026-05-05T10:53:00Z","type":"implementation","status":"ok","note":"The moderation loop was missing live Discord traffic because recent-history helpers compared ISO timestamp strings instead of actual times, so local +01:00 cursors skipped later Z-stamped messages. History helpers now compare parsed timestamps, and the moderation runner clamps the saved cursor to the pre-run observed latest live message so quiet rumination cannot step over mid-run chatter."}
|
|
{"ts":"2026-05-05T11:22:36Z","type":"implementation","status":"ok","note":"owner_codex was hitting spawn ENAMETOOLONG on Windows because the full Discord prompt rode the command line; the local exec path now passes the prompt over stdin with a trailing '-' argument instead, matching the moderation runner and avoiding argument-length failure."}
|
|
{"ts":"2026-05-05T11:37:24Z","type":"implementation","status":"ok","note":"The scheduled moderation runner was failing before it wrote status because Task Scheduler launched it from a non-repo working directory and the preflight history poll used a relative node script path. The runner now anchors itself to the repo root, resolves the helper by absolute path, and the task registration sets an explicit working directory too."}
|
|
{"ts":"2026-05-05T12:40:41Z","type":"implementation","status":"ok","note":"Direct Void summons were carrying recent chat as a parallel context bundle lane, which made it too easy for the model to fixate on self-state/reporting instead of the room. The shared Void self-state now gets a temporary invocation room log bolted into its summary at load time, and both reply prompts explicitly treat that embedded transcript as live working memory for the current summon."}
|
|
{"ts":"2026-05-06T00:44:12Z","type":"implementation","status":"ok","note":"Recent chat fused into Void's shared self-state was too self-referential when labeled as a temporary invocation room log plus live working memory. The room context now rides in as a quieter current room snapshot, and both reply lanes are told to use it silently instead of narrating the memory plumbing."}
|
|
{"ts":"2026-05-06T01:12:30Z","type":"implementation","status":"ok","note":"Void's unattended rumination now uses hybrid symbolic-plus-vector memory: a mood-driven helper assigns compact semantic vectors to persistent memories and runtime seeds, builds resonance clusters, keeps an incubation queue alive across turns, and turns the strongest recurring seam into dream residue during nap windows so deeper thoughts can mature before they either surface or cool off."}
|
|
{"ts":"2026-05-06T02:24:53Z","type":"architecture","status":"ok","note":"Void's shared moderation self-state now rides through a standalone CultCacheTS submodule: canonical schema-validated MessagePack in .msgpack, editable unattended JSON working projection in .json, and consumer code talking to the typed persistence layer instead of pawing raw state files directly."}
|
|
{"ts":"2026-05-06T04:25:53Z","type":"architecture","status":"ok","note":"Discord outbound now supports a shared webhook persona pipe for guild channels and threads: agents can override personaName and avatar per message through one reusable per-channel webhook while DMs stay on the base bot identity."}
|
|
{"ts":"2026-05-06T07:48:31Z","type":"implementation","status":"ok","note":"Backup watchdog now ignores manifest-less backup carcasses, backup cleanup removes incomplete directories on failure, and Qdrant snapshot creation uses a longer curl timeout so larger source collections stop timing out the offsite backup run."}
|
|
{"ts":"2026-05-06T12:21:16Z","type":"research","status":"ok","note":"CultNet now has a real cross-runtime interop lab in CultNetTS: TS orchestrates TS/Rust/C# peers over the shared cultnet.schema.v0 lane, proving same-machine raw document exchange plus multicast discovery across all three runtimes."}
|
|
{"ts":"2026-05-07T21:39:16Z","type":"research","status":"ok","note":"Heartbeat Void was not philosophically withdrawn; the canonical moderation state had a legacy CultCache envelope with object payloads that newer strict loaders rejected, killing mood drift and moderation before they could update status. The cache layer now self-heals that shape on read, the moderation runner now writes failed status on preflight death, and the memory organ explicitly downweights repetitive empty-room bookkeeping so 'no new messages / no smoke / no post' stops overpowering live-room hooks."}
|
|
{"ts":"2026-05-07T22:38:47Z","type":"research","status":"ok","note":"Heartbeat Void was treating the reviewed cursor as if it meant the room no longer needed anything, which let a direct question from Ziggy get skipped in favor of repo weather after a no-post catch-up run. Direct asks now belong in moderation_runtime.open_cases as persistent room obligations, the moderation doctrine says they outrank optional heralding until answered or explicitly retired, the shared self-state summary surfaces those obligations to direct-invoked Void, and a live heartbeat pass proved the fix by replying to Ziggy's Nibu question before returning to quiet-room rumination."}
|
|
{"ts":"2026-05-08T08:59:47Z","type":"research","status":"ok","note":"The overnight repetition bug was not just missing retrieval. Quiet-room repo weather kept returning on the same carrier/lineage seam, and the right correction is to bias the moderation loop toward deeper archive, repo-doc, diff, and lore dives when a thought feels familiar, not to accumulate more cooldown knobs or brittle anti-repetition law. The tracked doctrine now says 'same seam again' means go learn something before you speak."}
|
|
{"ts":"2026-05-08T15:50:57Z","type":"architecture","status":"ok","note":"Moderation novelty now needs two bars, not one: room novelty and self novelty. The memory organ merges repeated seams into existing clusters, raises saturation and refractory pressure, tracks source-coverage pressure across repos/archive terrain, and cools familiar thoughts instead of rewarding repetition with ripeness."}
|
|
{"ts":"2026-05-08T16:00:51Z","type":"architecture","status":"ok","note":"Manual moderation-state distillation showed the memory surface was overproducing near-duplicate repo-weather thoughts by storing each social flavor of the same seam as a separate semantic card, sweep, and synthesis. Periodic cleanup should merge those variants by conceptual family, rebalance recent source traces, and clear stale resonance/incubation caches so novelty pressure can regrow from a cleaner substrate."}
|
|
{"ts":"2026-05-08T16:06:43Z","type":"architecture","status":"ok","note":"Quiet-room moderation no longer treats retrieval as compulsory ritual. If incubation already holds a live, grounded, low-saturation thought, Void may deepen it directly; archive dives and repo sweeps are now explicit support for hungry, stale, or oversaturated queues rather than mandatory throat-clearing before every private thought."}
|
|
{"ts":"2026-05-08T19:39:40Z","type":"implementation","status":"ok","note":"Discord bot token health checks can hit Discord API rate limits even when the token is fine. The watchdog now distinguishes HTTP 429 from actual credential failures, downgrading rate limits to a warning with retry-after data instead of reporting a dead token."}
|
|
{"ts":"2026-05-09T18:08:46Z","type":"implementation","status":"ok","note":"Moderation rumination mojibake came from UTF-8 boundaries in the PowerShell runner, not corrupted canonical state. Explicitly decode redirected Codex stdout/stderr as UTF-8, read the saved final-message file as UTF-8, and write stdin through a UTF-8 StreamWriter for Windows PowerShell 5.1 compatibility."}
|
|
{"ts":"2026-05-10T15:36:28Z","type":"implementation","status":"ok","note":"Heartbeat repo weather was re-injecting the same four-day commit window on every run because the repo-activity helper had no per-repo cursor. The helper now uses moderation state as an incremental cursor store, persists repo commit cutoffs through the canonical MessagePack-backed state seam, and suppresses already-injected commits by default so repeated sweeps return only genuinely new motion."}
|
|
{"ts":"2026-05-11T01:27:37Z","type":"implementation","status":"ok","note":"Heartbeat Portuguese mojibake had two sources: the unattended send path was letting human text pass through Windows shell encoding, and PowerShell Get-Content stdout was still mangling UTF-8 moderation surfaces even when the underlying files were fine. Fixed by adding scripts/send-discord-message.ps1 plus BOM-aware content-file reads in scripts/send-discord-message.mjs, and steering the moderation loop through node scripts/export-moderation-context.mjs instead of raw Get-Content for doctrine/state bundles."}
|
|
{"ts":"2026-05-12T11:47:57Z","type":"implementation","status":"ok","note":"Logon startup failures were dying without a durable transcript and likely firing before Docker finished waking up after reboot. The stack startup script now appends .voidbot/logs/start-voidbot-stack.log, stops the transcript on failure, waits up to 90 seconds for docker version before giving up, and the logon task now runs with an explicit working directory plus a two-minute delay after logon."}
|
|
{"ts":"2026-05-13T18:46:07Z","type":"implementation","status":"ok","note":"Worker polling now catches transient claim-loop failures instead of letting a Postgres timeout kill the process, and the operations dashboard writes snapshot/html via explicit UTF-8 file writes so status/dashboard generation stops tripping stack start and watchdog runs with Set-Content stream errors."}
|
|
{"ts":"2026-05-13T19:08:55Z","type":"implementation","status":"ok","note":"Sleep was still preserving too many raw moderation receipts, so awake rumination kept thinking from yesterday's scrapbook instead of carved seams. The memory organ's nap pass now promotes a few distilled seam summaries into semantic memory, then aggressively trims episodic records, archive excursions, repo sweeps, novelty checks, and recent musings; the prompt-facing self-state summary also stopped surfacing those specimen piles directly."}
|
|
{"ts":"2026-05-13T19:18:42Z","type":"implementation","status":"ok","note":"The moderation doctrine was still too retrieval-shaped after sleep got harsher. Quiet awake runs now explicitly begin with seam-thinking: test the governing principle, counter-tension, and embodiment consequence of a surviving thought before reaching for more archive or repo material. Retrieval is support for hungry or contradictory seams, not the main event."}
|
|
{"ts":"2026-05-13T19:31:26Z","type":"implementation","status":"ok","note":"Void's rumination bias was still letting elegant abstractions outrank the actual machines. The moderation doctrine now explicitly treats concrete project fascination as healthier fuel: if a seam stays abstract too long, it must cash out in a specific repo, subsystem, gameplay loop, lore structure, frontend surface, or architectural organ before it gets to dominate another run."}
|
|
{"ts":"2026-05-16T01:08:04Z","type":"implementation","status":"ok","note":"Long-chewed private seams were getting trapped in incubation because the memory organ had no graduation path from ripe thought to identity. The organ can now crystallize a thought into `identity.private_notes`, a canonical value, and a single `identity_seam` semantic memory, then retire it from the active queue so self-doctrine stops masquerading as live novelty."}
|
|
{"ts":"2026-05-16T01:17:13Z","type":"implementation","status":"ok","note":"Identity crystallization was still too private: a thought could become doctrine without ever getting a mouth. The memory organ now queues a warmer `identity_crystallization` candidate intervention when a seam hardens into identity, and the moderation doctrine explicitly biases toward sharing that opinion with the room unless novelty or timing gives a real reason to hold it back."}
|
|
{"ts":"2026-05-16T01:25:09Z","type":"implementation","status":"ok","note":"Warm identity drafts still risked getting pruned away before the room ever heard them. Crystallized-thought interventions can now be marked `mustEventuallyShare`, candidate pruning preserves them, and the doctrine explicitly treats timing delays as temporary rather than permission to let a new belief die in private state."}
|
|
{"ts":"2026-05-16T01:45:20Z","type":"implementation","status":"ok","note":"Void's label/curiosity organ was still treating keyword residue as thought and resonance as curiosity. The memory organ now synthesizes resonance clusters into claim/question/fascination targets with explicit target kinds, scores curiosity with concreteness/fertility/cross-domain pressure plus identity penalties, and pushes concrete map-changing branches above warmed-over self-seams."}
|
|
{"ts":"2026-05-16T02:00:31Z","type":"implementation","status":"ok","note":"Teaching the thought organ a new ontology was not enough; old seam fossils kept seeding the live queue with stale labels. The memory organ now performs a historical translation pass over semantic and dream memory, merges duplicate seam fossils, prunes low-coherence leftovers, and rebuilds resonance/incubation from the cleaned substrate."}
|
|
{"ts":"2026-05-16T02:55:00Z","type":"implementation","status":"ok","note":"Lowering the sharing barrier needed a real organ cut, not just bolder prompt language. The memory organ now treats concrete world-facing ripe thoughts as draft-worthy in their own right, queues `ripe_thought_share` interventions for repo/archive/room/system seams that stay novel enough, and no longer lets a quiet room act like an automatic veto when the thought already has its teeth in."}
|
|
{"ts":"2026-05-16T04:56:00Z","type":"implementation","status":"ok","note":"Duplicate moderation replies were not just salience drift. Discord history polling did not reliably surface Void's own recent sends, and the unattended child still had enough prompt wiggle room to widen exact cursor polling back into a bootstrap lookback. Canonical moderation state now records recent delivered replies as `moderation_runtime.recent_delivery_receipts`, the runner records fresh send receipts after a post, and the moderation doctrine treats those receipts as binding memory when deciding whether a direct ask is still live."}
|
|
{"ts":"2026-05-16T04:56:01Z","type":"implementation","status":"ok","note":"The recent repo-weather smell came from prompt shape as much as thought shape. The moderation doctrine now tells Void to lead with concrete particulars from each repo before announcing any shared law, and to keep reports separate when the convergence only exists at slogan altitude instead of pretending every pair of commits wants to become one philosophy lecture."}
|
|
{"ts":"2026-05-16T05:24:00Z","type":"implementation","status":"ok","note":"Void's values and activations now have an operational will-path instead of living as ornamental schema. The memory organ computes a value-signal profile, turns sustained pressure into `discomforts` and `active_tensions`, graduates persistent self-facing objections into `self_advocacy_requests`, graduates persistent repo/lore/room objections into `world_advocacy_requests`, and feeds those through the existing candidate-intervention queue so opinions can actually ask for change."}
|
|
{"ts":"2026-05-16T05:29:00Z","type":"implementation","status":"ok","note":"The real moderation-memory cleanup bug was twofold: templated thought surfaces were leaving slogan-slop behind, and several trim paths sorted newest-first then sliced from the end, preserving the oldest fossils. The memory organ now translates legacy seam/dream residue into the live ontology, rejects the worst template smells, trims repo/archive/runtime residue aggressively during ordinary normalization and naps, and keeps the freshest surviving records instead of embalming yesterday's carcasses."}
|
|
{"ts":"2026-05-16T05:46:00Z","type":"implementation","status":"ok","note":"A second cleanup pass showed the memory organ was still preserving generic `system/question` fossils and runtime drafts with phrases like `looks like a live seam`, including junk such as `Metacrat still looks like a live seam.` The organ now treats that boilerplate as template smell, drops `recent-preoccupation` and `quiet-room-status` semantic memories, rejects person-singleton labels as doctrine, and rewrites stale runtime drafts/opinions during manual or sleep-driven reconciliation so naps stop regenerating the same nonsense."}
|
|
{"ts":"2026-05-16T06:25:00Z","type":"implementation","status":"ok","note":"Manual state surgery finally cut the live moderation file itself instead of only asking the organs to behave better later. The important discovery was that `.voidbot/private/moderation-agent-state.json` still carries legacy top-level mirrors like `repo_sweeps`, `repo_activity_memories`, `recent_novelty_checks`, `recent_activity`, and `thought_lanes` alongside `moderation_runtime`; cleaning only the nested runtime leaves the mirror teaching stale seams straight back into the machine. The current working/canonical state was hand-distilled to one concrete AquaSynth seam, one identity seam, minimal support trace, and almost no runtime scrapbook."}
|
|
{"ts":"2026-05-16T07:05:00Z","type":"implementation","status":"ok","note":"The follow-up script fix had to protect coherent memories from the normalizer itself. Semantic repo seams and coherent dream themes now survive normalization intact, repo identity is inferred from `RepoName: ...` labels when explicit `repoNames` are missing, archive-year hints are only taken from real archive excursions instead of any timestamped memory, and the legacy top-level mirrors are now rewritten from `moderation_runtime` instead of drifting as a second contradictory truth surface."}
|
|
{"ts":"2026-05-16T07:44:37Z","type":"research","status":"ok","note":"Architecture teardown found the moderation/mood/private-self-state foundation rotten: canonical MessagePack is undermined by editable JSON projection authority, broad passthrough schemas, legacy mirrors, helper scripts that write projection state, and a giant memory-organ cleanup pass. New top priority is typed CultCache mutation tools plus deletion of JSON projection authority and mirror fields before any new moderation or mood behavior."}
|
|
{"ts":"2026-05-16T07:50:00Z","type":"research","status":"ok","note":"Correction to the self-state rebuild target: CultCache is natively polymorphic, so the architecture should use one CultCache-backed state authority with typed document kinds and mutation operations, not separate physical stores per self-state type. The ownership split is by document contract, not storage cabinet."}
|
|
{"ts":"2026-05-16T08:06:04Z","type":"research","status":"ok","note":"Clarified the teardown target: most deterministic cleanup in the memory organ is recent compensator cruft caused by failed attempts to manually clean an exploded moderation state file. The rebuild should prevent bad state from entering through typed CultCache operations, delete compensating cleanup paths as boundaries improve, and rewrite sleep/distillation with a meaning-preservation contract so concrete claims/evidence/tensions survive compression instead of becoming generic abstraction sludge."}
|
|
{"ts":"2026-05-16T10:03:21Z","type":"implementation","status":"ok","note":"The typed private self-state boundary now exists as code in packages/core/src/void-self-state-domain.ts: one polymorphic CultCache registry names global document kinds for self profile, moderation cursor/open cases/repo cursor, speech receipts, thought memory/incubation, scheduled runtime, and candidate interventions, plus strict operation payload schemas. This is Commit 1 territory only; runtime still uses the old moderation state store until read-only projections and mutation application are built."}
|
|
{"ts":"2026-05-16T11:01:13Z","type":"implementation","status":"ok","note":"Read-only typed self-state projection now exists in packages/core/src/void-self-state-projection.ts. The direct self-state loader derives nap/reply-mode projection from typed scheduled-runtime and thought-memory documents while preserving the older rich prompt summary until the new document model explicitly owns those details. Template and temp CultCache smoke checks passed."}
|
|
{"ts":"2026-05-16T11:06:01Z","type":"implementation","status":"ok","note":"Typed self-state mutation service and scripts/void-self-state.mjs now apply strict operation payloads to the polymorphic CultCache file. During migration, the service writes typed global documents and updates the narrow legacy monolith fields current scripts still read; this dual write is centralized in one service, not spread across projection-file editors. Temp-store CLI and repo-cursor operation smokes passed."}
|
|
{"ts":"2026-05-16T11:09:34Z","type":"implementation","status":"ok","note":"Repo activity cursor writes now go through scripts/void-self-state.mjs apply-operation with update_repo_activity_cursor instead of editing moderation-agent-state.json and committing the whole projection. export-recent-repo-activity still accepts old --cursor-file JSON paths by deriving the sibling .msgpack path, but the runner/doctrine now point at --state-path .voidbot/private/moderation-agent-state.msgpack. Temp-state repo sweep smoke passed."}
|
|
{"ts":"2026-05-16T11:14:12Z","type":"implementation","status":"ok","note":"Moderation runner now records reviewed cursor and delivered speech receipts through typed self-state operations instead of moderation-state-store mutation commands. The old set-cursor and record-delivery-receipt commands/functions were removed from the legacy moderation-state-store surface. Receipt operation smoke verifies it records one receipt and closes the matching open case."}
|
|
{"ts":"2026-05-16T11:17:09Z","type":"implementation","status":"ok","note":"The unattended moderation runner no longer commits child edits from moderation-agent-state.json. The child is instructed to treat the JSON as read-only and write a JSON array of typed operation payloads to .voidbot/status/moderation-rumination-operations.json; the parent applies each operation through scripts/void-self-state.mjs before recording cursor/receipt operations. Cheap parser/typecheck verification passed; full scheduled dry run was not run to avoid mutating live moderation state during code verification."}
|
|
{"ts":"2026-05-16T11:20:42Z","type":"implementation","status":"ok","note":"Mood drift now sends sleep-cycle and speaking-pressure results through typed self-state operations after saving the legacy monolith, so scheduled-runtime typed documents stay current. The larger memory organ still mutates legacy state directly; next surgery is to move memory/incubation/candidate outputs behind operations and then remove working-projection materialization."}
|
|
{"ts":"2026-05-16T11:44:36Z","type":"implementation","status":"ok","note":"Started breaking up scripts/void-memory-organ.mjs by ownership. Extracted shared constants/text sets, generic utilities, vector/embedder substrate, and memory-record intake into separate modules while keeping the public reconcileSemanticMemoryState entrypoint stable. Hash/template smoke exercised the extracted modules without touching live state. Remaining monolith work is policy organs: cleanup/translation, graph/cluster thought synthesis, incubation/bridge, sleep/identity/speech, and agency."}
|
|
{"ts":"2026-05-16T11:48:20Z","type":"implementation","status":"ok","note":"Continued void-memory-organ split by extracting legacy mirror repair into scripts/void-memory-organ-legacy-mirrors.mjs and moving compacting helpers into shared utilities. This isolates compatibility sludge from actual memory/thought policy and cuts the main file to about 3.4k lines. Template smoke and syntax/type checks passed."}
|
|
{"ts":"2026-05-16T11:50:41Z","type":"implementation","status":"ok","note":"Extracted agency/intervention policy from scripts/void-memory-organ.mjs into scripts/void-memory-organ-agency.mjs: identity crystallization, ripe-thought sharing, discomfort/tension/advocacy, candidate trimming, and value-signal profiling now live outside the main orchestrator. Main memory organ is down to about 2.6k lines. Template smoke and syntax/type checks passed."}
|
|
{"ts":"2026-05-16T12:29:51Z","type":"implementation","status":"ok","note":"Split scripts/void-memory-organ.mjs into a thin orchestrator plus cleanup, graph, incubation, sleep, agency, records, vector, legacy mirror, constants, and utility modules; syntax, typecheck, and template memory-organ smoke pass."}
|
|
{"ts":"2026-05-16T17:11:50Z","type":"implementation","status":"ok","note":"Split memory-organ cleanup into legacy translation and retention/compaction shells, and split agency into identity crystallization, candidate interventions, and value-pressure inference. This exposes remaining compensator families as replacement targets for typed memory operations and model-owned policy; syntax, typecheck, and template smoke pass."}
|
|
{"ts":"2026-05-16T17:18:37Z","type":"implementation","status":"ok","note":"Shifted rebuild plan from legacy cleanup toward preventing the next brain from accepting mush: typed memory operation payloads now require claim-or-question, tension, action implication, and evidence refs or an explicit evidence:missing tag. Added schema smoke showing summary-only memory is rejected while meaning-bearing memory is accepted."}
|
|
{"ts":"2026-05-16T17:39:43Z","type":"implementation","status":"ok","note":"Took legacy scheduled self-state writers offline and rebuilt the active mood/moderation entry scripts around typed-only CultCache state at .voidbot/private/void-self-state.cc. The typed service no longer registers, reads, or writes the legacy moderation document; mood updates sleep/speaking pressure only, and moderation runner is cursor-only until the typed phase machine is rebuilt."}
|
|
{"ts":"2026-05-16T17:43:21Z","type":"implementation","status":"ok","note":"Deleted the legacy moderation-to-typed projection function from the active self-state projection module. New typed self-state now starts from explicit empty typed documents or validated typed operations; old moderation state is no longer a loader/projection source for the next brain."}
|
|
{"ts":"2026-05-16T18:12:51Z","type":"implementation","status":"ok","note":"Restored scheduled moderation as typed rumination instead of cursor-only bookkeeping. The runner now loads prompts/void-moderator-rumination.md, builds a bounded typed context packet from .voidbot/private/void-self-state.cc, accepts only typed operation output, and leaves cursor/receipt writes parent-owned."}
|
|
{"ts":"2026-05-17T07:31:53Z","type":"implementation","status":"ok","note":"Cleaned up the typed self-state read projection boundary: packages/core/src/void-self-state-projection.ts now owns typed document to agent-facing summary/projection rendering, while void-self-state-loader.ts is a thin .cc loader/delegator. Projection smoke confirmed nap mode and transient room context render from a temp .cc store."}
|
|
{"ts":"2026-05-17T07:36:19Z","type":"implementation","status":"ok","note":"Reduced template-language leakage in Void's active memory surfaces: the typed self-state projection now renders memories and speaking pressure as natural-language thought surfaces instead of claim=/tension=/next= or needToSpeak labels, and the rumination prompt now frames the schema as a storage contract rather than Void's voice. Also removed obvious stock phrase generators from old memory-organ helpers."}
|