v0.3.4
Bug Fixes (Council Audit)
8 fixes from a 13-member council audit of the plugin codebase:
Critical
- Smart note infinite re-evaluation loop:
JSON.parsein smart note evaluation had no try-catch — malformed LLM output caused notes to be re-evaluated on every dream run, silently consuming budget. Now catches parse errors, marks notes as checked, and uses greedy regex for bracket handling.
High
- Dedup drop() return ignored: Heuristic deduplication called
drop()but didn't check the return value. In-flight tool calls returning"incomplete"were incorrectly marked as dropped in DB. Now skips status update when drop is incomplete. - Corrupt JSON crashes transforms:
JSON.parseinread-session-raw.tshad no error handling — a single corrupt message row crashed all transforms for that session. Now returns null and skips corrupt entries. - Smart notes not triggering dreams:
findProjectsNeedingDream()only queried thememoriestable. Projects with pending smart notes but no memory changes were never scheduled for dreaming. Now includessmart_notesvia UNION query. - Ready smart notes never surfaced:
peekNoteNudgeTextwas called withoutprojectIdentity, soreadySmartCountwas always 0. Ready smart notes evaluated by the dreamer were invisible to users. Now threadsprojectPaththrough the transform pipeline.
Medium
- Dream queue stale threshold:
enqueueDreamdeleted started entries after 10 minutes, but dreams can run for up to 120 minutes. Active dreams had their queue entries incorrectly deleted. Threshold raised to 2 hours. - ctx-memory schema leak: Tool schema always exposed all 6 actions (write/delete/list/update/merge/archive) regardless of
allowedActions. Regular agents saw options they couldn't use, wasting turns on disallowed actions. Schema now derives enum from actual allowed actions. - Dream schedule debounce on failure:
lastScheduleCheckMswas set beforecheckScheduleAndEnqueue(). If the check threw, the debounce blocked retries for 1 hour. Timestamp now set after successful execution.