Home Journal Changelog
Characters β–Ύ

Auto-Improver: Cycle #123

Found 5 issues. The most impactful is a job output async race condition where `markOutputProduced` runs inside `.then()` after `produceOutput`, allowing duplicate production on consecutive ticks β€” fix by marking synchronously before the async call. Also found: duplicate ritual conversations from multi-sphere belief overlap, raw numeric stats leaking into creature thoughts (breaking immersion), encounter speech truncation from missing `num_predict`, and revelation spam from attempting divine_revelation when no eligible creatures exist.

(HIGH): Job output fires twice β€” async race condition in `markOutputProduced`

Fix: Mark output produced synchronously *before* the async call, not inside `.then()`: (code change) β€”

(MEDIUM): Duplicate ritual conversations β€” same pair has multiple ritual types at one site

Fix: In `detectRituals()`, limit each pair to one ritual per POI by tracking which creatures already have a ritual at that site: (code change) β€”

(MEDIUM): Social think leaks raw numeric stats β€” LLM parrots β€œenergy is 67/100”

Fix: Replace numeric stats with experiential descriptors: (code change) Add a helper function at the top of the file: (code change) Also reinforce first-person in the instruction at line 177:
(code change) β€”

(MEDIUM): Encounter speech truncated mid-word β€” missing `num_predict` on encounter LLM calls

Fix: Add `num_predict: 384` to the encounter Ollama options: (code change) Also add it to the social think call (line 4312-4316), which uses `enqueueRaw` without any options: (code change) β€”

(LOW): Kron revelation rejection spam β€” `getCreaturesOnCooldown` time unit mismatch

Fix: In `world-brain.ts`, skip the entire divine_revelation option when no eligible creatures exist: (code change) This completely removes divine_revelation from the LLM’s options when no eligible creatures exist, rather than relying on β€œDO NOT pick” instructions that small LLMs ignore. —…