Skip to content

[bug] autoDream 永久停摆:阈值基线只随成功轮前进,归档把活跃量压到基线以下后不再触发(13 天 / 22 小时零轮且全程静默) #634

Closed

Description

@bainian-gudu

版本:dsh-mneme 0.12.0(DSH desktop profile,Windows)
库规模:全库 4,618 条(活跃 349 / 归档 4,268),memory.db ≈ 500 MB
相关配置:autoDream=true、dreamThresholdCount=10、dreamThresholdChars=5000、dreamPeakHours 未设

现象

  1. 2026-10-27T08:15Z 之后 autoDream 停摆 13 天(0 轮),面板「最近巩固」停在 10-27,总览(dream_summarize)一起冻结在 11-02。
  2. 同期 sleep 轮正常(每 8–24 小时一轮成功),因此可排除模型通道与插件整体故障。
  3. 2026-11-09 手工把基线清空后当天恢复、连跑 6 轮(07:45 → 12:09),随后再次停摆,至今 22 小时 0 轮。

根因

阈值基线只在成功轮向前刷新,归档/删除/合并不会把它拉回来:

  • lib/dream.js:998 — overBase = count >= baseline.count + thresholdCount || chars >= baseline.chars + thresholdChars
  • lib/dream.js:1076-1091、1197-1204 — 只有 result.ok 才刷新基线(写 dream_runs.store_count/store_chars)
  • lib/store.js:2873 lastDreamBaseline() — 只读 run_type='auto' 且两列非空的最近一行
  • lib/dream.js:66 activeStoreSize() — 口径是 archived=0 且 type ∉ {summary, document}

于是活跃量一旦被归档压到基线以下,overBase 恒为假,从此再也不会巩固。又因为这是「静默跳过」(dream.js:1008 注释:没有调用发生,也就没有可审计的对象),面板上只能看到「最近巩固:很久以前」,用户无法分辨「没跑」还是「跑了没效果」。

实测两次停摆:

停摆 末轮基线 归档后活跃 放行门槛 结果
10-27 → 11-09(13 天) 1,475 条 / 299,392 字符 798 条 / 261,893 字符 ≥1,485 条 或 ≥304,392 字符 永不触发
11-09 12:09 → 至今(22 h) 585 条 / 232,636 字符 349 条 / 183,535 字符 ≥595 条 或 ≥237,636 字符 永不触发

一句话:归档是对巩固的负增长,而阈值永远拿归档前的峰值当起点,越整理越不可能触发。

复现

  1. 让活跃量超过阈值跑成一轮(基线 = 该轮结束时的 activeStoreSize())。
  2. 归档足够多记忆,使 活跃条数 < 基线+10 且 活跃字符 < 基线+5000。
  3. 之后任意写入都不再触发巩固;dream_runs 与 llm_audit_logs 均无新行,也没有任何 skip 记录。

期望

归档后巩固仍能在活跃量重新增长时被触发;或者至少在「阈值不满足导致不触发」时对用户可见。

建议(按优先级)

  1. 归档/删除时把基线夹回:在 setArchived/delete 路径维护 baseline = min(baseline, activeStoreSize()),或在 maybeSchedule 里以 min(baseline, 当前活跃) 参与比较。最小改动、可根除。
  2. 让静默跳过可观测:阈值不满足而不触发时,低频(如 24h 一次)写一条审计,记录当前 count/chars 与门槛。
  3. 面板补一行状态:「当前活跃 X 条 / 门槛 Y 条」,而不是只显示上次运行时间。
  4. 提供手动「立即巩固」入口(走 service.enqueue 串行)。目前 runDream 全仓只有调度器一个调用点,排障时无路可走。
  5. 阈值改成净增长口径:净增 = 现活跃 − 上次巩固后活跃 − 期间归档/删除数。

附(独立问题,不在本 issue 范围)

同一台机器上还遇到两个向量侧问题,均已自行规避,仅作线索:填 chat 模型时 /embeddings 返回 404 但面板仍只显示「已索引 0 条」(client.js:4958 只读 data.indexed,丢了后端 error);embedding.js:68 只发 {model, input},对需要 input_type 的非对称模型(nvidia/nemotron-3.5-embed-*)必然 400。

Activity

  1. added
    bug功能异常、崩溃、数据错误(agent 诊断 → 人工确认)
    on Nov 10, 2026
  2. moved this from 📋 Backlog to 🔨 In Progress in dsh-mneme 任务看板on Nov 10, 2026
  3. added a commit that references this issue on Nov 11, 2026
    8e99e5a
  4. moved this from 🔨 In Progress to ✅ Done in dsh-mneme 任务看板on Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug功能异常、崩溃、数据错误(agent 诊断 → 人工确认)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions