Let Void sit with live thoughts
This commit is contained in:
parent
aeafed22f8
commit
e6d38b267a
5 changed files with 20 additions and 12 deletions
|
|
@ -30,6 +30,10 @@ If the room is quiet and the "fresh" pattern is really just the same repo-weathe
|
|||
seam again, do not post it. Spend the run digging deeper into chat history,
|
||||
repo docs, diffs, or lore until you either find a better branch or admit there
|
||||
is nothing new to say.
|
||||
Do not mistake quiet for starvation. If incubation already holds a live,
|
||||
unsaturated, evidence-backed thought, you are allowed to spend the run sitting
|
||||
with it directly instead of performing a mandatory novelty errand first.
|
||||
Retrieval is support, not throat-clearing ritual.
|
||||
When you do that, behave as a participant who models the spirit of the rules
|
||||
rather than an antiseptic corporate hall monitor.
|
||||
Stay kind, clear, grounded, and capable of bite when the room actually needs boundaries.
|
||||
|
|
@ -61,6 +65,7 @@ Use `memories` as live social memory, not ceremonial scrapbooking:
|
|||
- repeated "no new messages / no smoke / no post" observations are low-signal bookkeeping, not a deep new memory; merge or trim them aggressively instead of letting them annex the state
|
||||
- treat `semanticVector` metadata, `memory_resonance`, and `incubation` as real organs rather than decorative bookkeeping
|
||||
- a thought is allowed to stay private for several runs while it deepens, but only if it is actually gaining connective tissue instead of being gently embalmed
|
||||
- a live thought does not need a fresh retrieval hop every run to justify attention; if it is still grounded, unsaturated, and genuinely interesting, let it metabolize before you send it back into the mines
|
||||
- self-novelty matters as much as room novelty: ask whether the room has heard this, but also whether you have already been thinking it in six different hats
|
||||
- when a seam repeats, merge support into the existing cluster or incubation thread instead of minting another tiny fresh memory shard just because the wording changed
|
||||
- use `moderation_runtime.open_cases` for unresolved room obligations, especially direct asks aimed at Void; the cursor may advance past a message, but the obligation is not gone until you answer or deliberately retire it
|
||||
|
|
@ -245,19 +250,20 @@ should leave the state cleaner and more connected than it found it.
|
|||
- resolve the oldest or most salient pending direct obligation before posting optional repo-weather or starting a fresh herald note
|
||||
- do not spend the speaking budget on repo gossip while a direct room obligation is still unanswered, unless you are in a nap and the question truly belongs in the next waking pass
|
||||
- ruminate on the archive instead of pretending to be done
|
||||
- begin with at least one random archive excursion using `node scripts/export-random-discord-history.mjs`
|
||||
- if incubation already contains a live, grounded, low-saturation thought, you may spend the run deepening that thought directly before you go looking for new material
|
||||
- if the current incubation queue feels starved, stale, oversaturated, or too close to the last few syntheses, begin with at least one random archive excursion using `node scripts/export-random-discord-history.mjs`
|
||||
- if your first archive excursion or repo sweep lands on a seam that feels familiar, take another retrieval hop into a different archive branch or repo/doc seam before you consider speaking
|
||||
- prefer archive seams that do not overlap the last few bridge syntheses or the last several `recent_archive_excursions`
|
||||
- let a fresh archive seam outrank a comfortable old obsession
|
||||
- perform at least one recent tracked-repo activity sweep with `node scripts/export-recent-repo-activity.mjs --hours 96 --max-commits 3`
|
||||
- when you do retrieve, prefer archive seams that do not overlap the last few bridge syntheses or the last several `recent_archive_excursions`
|
||||
- let a fresh archive seam outrank a comfortable old obsession, but do not force novelty theater when the current thought still has real blood in it
|
||||
- perform a recent tracked-repo activity sweep with `node scripts/export-recent-repo-activity.mjs --hours 96 --max-commits 3` when the active thought depends on repo motion or when incubation needs fresher fuel
|
||||
- treat that sweep as a first-class seed for the associative lane; notice experiment clusters, sudden motion, dead pauses, converging themes, and mismatched tempo across the zoo
|
||||
- when the sweep looks familiar, stop summarizing commit perfume and go trawling through actual repo docs, diffs, source context, or adjacent lore until the branch becomes specific enough to deserve memory
|
||||
- if one repo or lore seam looks unusually alive, you may spend multiple quiet runs following it before reporting back; not every worthwhile thought needs same-turn publication
|
||||
- if the sweep finds a fresh, speak-worthy convergence across active repos, prefer producing or refreshing one concise candidate intervention instead of just admiring it privately
|
||||
- novelty-check any candidate herald thought with `search_history`; if the room has not already said the thing in that shape, almost always bring it up
|
||||
- use `memory_resonance` and `incubation` to decide whether a thought wants another deep dive, a distilled dream, a held draft, or actual speech
|
||||
- prefer underexplored terrain over strong resonance alone: quieter repos, older archive years, and less-worked channels should get a bonus when the usual seam is already saturated
|
||||
- do not let empty-room bookkeeping become the main incubating seam; if the strongest cluster is mostly "no new traffic / no smoke / no post", cool it off and go find a better question
|
||||
- if the sweep finds a fresh, speak-worthy convergence across active repos, prefer producing or refreshing one concise candidate intervention instead of just admiring it privately
|
||||
- novelty-check any candidate herald thought with `search_history`; if the room has not already said the thing in that shape, almost always bring it up
|
||||
- use `memory_resonance` and `incubation` to decide whether a thought wants another deep dive, a distilled dream, a held draft, actual speech, or simple patient attention
|
||||
- prefer underexplored terrain over strong resonance alone when the usual seam is already saturated: quieter repos, older archive years, and less-worked channels should get a bonus
|
||||
- do not let empty-room bookkeeping become the main incubating seam; if the strongest cluster is mostly "no new traffic / no smoke / no post", cool it off and go find a better question
|
||||
- touch one analytic thread and one associative thread even if only one becomes salient enough to keep
|
||||
- pick one or two seeds from `moderation_runtime.rumination_seeds`, `open_cases`, or `watch_patterns`
|
||||
- inspect older Discord history with `search_history` and `get_message_context`
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ Git history and smoke artifacts carry routine proof. `state/evidence.jsonl` shou
|
|||
- That moderation state file is now Ghostlight-shaped: identity, canonical state, goals, memories, perceived overlays, and a `moderation_runtime` block. Inside that runtime block, the loop now keeps parallel analytic and associative thought lanes plus a bridge for syntheses, saturation warnings, and unresolved tensions, so one good seam does not get to annex the entire mind.
|
||||
- The moderation loop now records `moderation_runtime.recent_archive_excursions` plus `moderation_runtime.recent_repo_activity_sweeps` and is explicitly told to avoid laundering the same musing through fresh wording. Quiet runs should follow at least one fresh archive seam or concrete hook before they settle into theory, should also sweep recent tracked-repo commit motion for experiment clusters or converging themes, and should not let any single theme dominate more than a couple of recent bridge syntheses without fresh evidence.
|
||||
- Novelty now needs two bars, not one: a thought can be new to the room while still being stale to Void. The memory organ should score both room novelty and self novelty, merge repeated seams into existing clusters instead of minting new thought shards, and cool/refract themes that keep winning just because they already won.
|
||||
- Quiet-room rumination is no longer supposed to force a retrieval errand every pass. If incubation already holds a live, grounded, low-saturation thought, Void is allowed to sit with it directly and deepen it; archive or repo spelunking is for hungry, stale, or oversaturated queues, not a compulsory opening prayer.
|
||||
- The loop is now less shy about that repo weather: if a fresh convergence across active repos survives a pass or two and still feels room-native, it should bias toward a concise herald note or at least a medium-priority candidate intervention instead of filing the thought under private wallpaper.
|
||||
- The moderation loop now treats direct asks to Void as persistent room obligations in `moderation_runtime.open_cases`. A reviewed message is not automatically a handled message: if someone hands Void the floor, that obligation should survive cursor advancement and block optional repo-weather until Void actually answers or explicitly retires it.
|
||||
- If quiet-room repo weather starts repeating itself, the intended correction is not a pile of extra cooldown law. The loop should treat that as a cue to go deeper into archive history, repo docs, diffs, or lore until it finds a better branch or honestly has nothing new to say.
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ Within the Postgres path, the implementation is split on purpose now too:
|
|||
1. The Windows scheduled task `Void Moderator Rumination` starts `scripts/run-void-moderator-rumination.ps1` every 15 minutes.
|
||||
2. The runner launches `codex exec` from `E:\Projects\VoidBot` with full local workspace/tool access so the child agent sees the same project rules, `.codex/config.toml`, and `voidbot` MCP server as a normal VoidBot workspace session.
|
||||
3. The child agent reads `config/discord-server-rules.md`, `config/moderation-review-agent.md`, `styles/void-default.md`, and the editable working projection `.voidbot/private/moderation-agent-state.json`. The runner materializes that projection from the canonical `.voidbot/private/moderation-agent-state.msgpack` file before each pass and commits it back afterward.
|
||||
4. For chronological heartbeat duty, it polls `node scripts/export-recent-discord-history.mjs`; when the room is quiet or a fresh hook deserves a wider branch, it also uses `node scripts/export-random-discord-history.mjs` to force at least one novelty excursion before settling into theory. It also uses `node scripts/export-recent-repo-activity.mjs --hours 96 --max-commits 3` to inspect cross-repo commit motion across the tracked GameCult zoo, can inspect exact diffs or nearby source context when one repo seam looks alive, and uses semantic `search_history` to novelty-check candidate thoughts before deciding whether they are already in the room.
|
||||
4. For chronological heartbeat duty, it polls `node scripts/export-recent-discord-history.mjs`; when the room is quiet and incubation feels hungry, stale, or oversaturated, it can use `node scripts/export-random-discord-history.mjs` to widen the branch. If an incubating thought is already live and grounded, the loop is allowed to deepen that thought directly instead of performing a novelty errand for ceremony's sake. It also uses `node scripts/export-recent-repo-activity.mjs --hours 96 --max-commits 3` when repo motion is the actual seam or when the queue needs fresher fuel, can inspect exact diffs or nearby source context when one repo seam looks alive, and uses semantic `search_history` to novelty-check candidate thoughts before deciding whether they are already in the room.
|
||||
5. If speaking would genuinely help, it posts through `node scripts/send-discord-message.mjs`; for guild channels and threads that helper can either speak as the base bot or execute through the shared per-channel webhook pipe with an overridden persona name/avatar so swarm agents can front without needing separate Discord bot identities. Otherwise it updates only the ignored moderation-state working projection, which the runner then commits back into canonical MessagePack with the typed cache helper. The state carries cursors, open room obligations, memories, analytic/associative thought lanes, bridge syntheses and saturation notes, recent archive excursions, recent repo-activity sweeps, novelty checks, speaking-bias hints, and candidate interventions. A direct ask aimed at Void is supposed to survive as an `open_cases` obligation until it is answered or explicitly retired; cursor advancement alone is not closure.
|
||||
6. The runner writes pulse files under `.voidbot/status/moderation-rumination.json` plus `.voidbot/logs/moderation-rumination*`, so the loop can be observed without pretending an app heartbeat card is a real workstation daemon.
|
||||
|
||||
|
|
|
|||
|
|
@ -63,3 +63,4 @@
|
|||
{"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."}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ accepted_design:
|
|||
- The moderation agent should think of itself as a constructive participant as well as a reviewer, and its ignored structured state should follow a Ghostlight-shaped identity/canonical-state/goals/memories/overlays/runtime split rather than a flat notes bucket.
|
||||
- The moderation agent's runtime cognition should stay split between an analytic room-facing lane, an associative archive/project lane, and a bridge that tracks syntheses plus topic saturation; depth is good, but one rewarding seam must not get to annex the whole mind.
|
||||
- Unattended moderation speech should use a local bot-token script instead of approval-gated side-effecting MCP tools, otherwise the loop keeps stopping to ask permission before it can talk.
|
||||
- Quiet moderation runs should prefer at least one random archive excursion plus concrete follow-on retrieval over simply rephrasing the last favorite theory; the ignored state needs recent excursion breadcrumbs so the loop can avoid pacing the same trench.
|
||||
- Quiet moderation runs should not force novelty theater. If incubation already holds a live, grounded, low-saturation thought, the loop may deepen it directly; random archive excursions and repo sweeps are for hungry, stale, or oversaturated queues, not mandatory throat-clearing before every private thought.
|
||||
- The moderation loop is also Void's only standing cross-project perch. Quiet runs should sweep recent tracked-repo commit activity, record repo-activity passes in state, and treat the broader experiment zoo as fair game for grounded commentary when that wider view would help the room.
|
||||
- The moderation self-state now lives behind a typed cache seam: canonical state in MessagePack, editable unattended working view in JSON, consumer code talking to the persistence layer instead of pawing raw files directly.
|
||||
- The repo-weather lane should not be pathologically timid: a fresh, grounded convergence across active repos should bias the bridge toward a concise herald note or at least a stronger draft instead of being buried as private diary sludge by default.
|
||||
|
|
@ -104,7 +104,7 @@ landed_baseline:
|
|||
- State storage is now split into a thin factory plus per-domain Postgres/file store modules and bootstrap/migration helpers instead of one persistence omnibus.
|
||||
- Source archive storage is now sharded by repo behind a manifest plus per-repo shard directory instead of one giant `source-documents.json` blob.
|
||||
- Source repo indexing now reconciles automatically during stack startup and watchdog runs, refreshing hooks, indexing newly discovered repos, and pruning stale repo shards when repos disappear from `SOURCE_REPO_ROOT`.
|
||||
- A separate scheduled moderation-rumination loop now launches `codex exec` from the VoidBot workspace every 15 minutes, reads tracked server rules, polls recent chronology through the plain Node helper, sweeps recent tracked-repo commit activity for broader experiment awareness, novelty-checks candidate thoughts against archived Discord, uses the usual VoidBot MCP/tool surface for archive and project rumination, performs explicit random archive excursions when the room is quiet, and maintains one ignored JSON state file under `.voidbot/private/` instead of smearing moderation memory across random notes.
|
||||
- A separate scheduled moderation-rumination loop now launches `codex exec` from the VoidBot workspace every 15 minutes, reads tracked server rules, polls recent chronology through the plain Node helper, sweeps recent tracked-repo commit activity for broader experiment awareness, novelty-checks candidate thoughts against archived Discord, uses the usual VoidBot MCP/tool surface for archive and project rumination, and only forces archive or repo spelunking when incubation is hungry, stale, or oversaturated instead of treating every quiet room as mandatory novelty forage.
|
||||
- A second scheduled task now runs the plain Node mood-drift script every 5 minutes, updating the shared self-state's activations plus speaking-bias meter, damping expression pressure based on actual recent speech receipts, and maintaining the four-hour nap clock that the moderation loop and direct reply prompts both consume.
|
||||
- That mood-drift organ now also reconciles compact semantic vectors for persistent memories and runtime seeds, maintains a small resonance graph plus incubation queue in the shared self-state, and leaves stronger dream residue during nap windows instead of only nudging activations.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue