VoidBot/state/evidence.jsonl

61 lines
21 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."}