背景
#135 定论楼确认的空体连发机制:dreamMinIntervalMinutes 默认 0 时,失败的 run 不推进 baseline(这是刻意设计——LLM 失败必须让下次写入能立即重试),于是实测触发间隔 1.6–12 分钟、失败不失败地一直烧调用。@lengduan 的月跨度统计(440 轮 87% failed)是该机制在野外的量级实证。
PR #291 修掉了重启放行那一半(lastRunAt 跨重启持久化);本单处理同会话内的连续失败:修复前后行为互补,互不替代。
提案
连续失败退避(failure backoff):同一调度器连续 N 次失败后,下次可触发的时刻按退避序列顺延,run 成功即重置。要点:
- 退避只统计真正发起过 LLM 调用且失败的 run(degraded 算失败还是成功待定——它部分落地、部分烧了 token,倾向算「重置半程」或单列一档,PR 里拍板);
- 退避上限与
dreamMinIntervalMinutes 的关系要写清:退避是 min-interval 之上的失败态加长,不是第二套节流配置;
- sleep 调度器(
dream/sleep.js)是否同款处理一并评估——同族结构,失败同样不推进任何水位。
开关口径(请实现 PR 拍板)
两种立场,二选一并给理由:
- 默认开启、不设配置键:退避只在连续失败后激活,健康库零感知——按仓库口径「修复静默缺陷的键,默认值跟修复走」;
- opt-in 默认关 + settings.js 白名单 + lightMode 考虑:若认为「失败后拉长间隔」改变了既有可预期行为,按新能力走闸门。
验收线
- 回归测试:退避序列单调、成功重置、与
minIntervalMs 的叠加语义、(若做)sleep 同款;
- 改
src/ 后 npm run sync;
- CHANGELOG
[Unreleased] 登记。
关联
背景
#135 定论楼确认的空体连发机制:
dreamMinIntervalMinutes默认0时,失败的 run 不推进 baseline(这是刻意设计——LLM 失败必须让下次写入能立即重试),于是实测触发间隔 1.6–12 分钟、失败不失败地一直烧调用。@lengduan 的月跨度统计(440 轮 87% failed)是该机制在野外的量级实证。PR #291 修掉了重启放行那一半(lastRunAt 跨重启持久化);本单处理同会话内的连续失败:修复前后行为互补,互不替代。
提案
连续失败退避(failure backoff):同一调度器连续 N 次失败后,下次可触发的时刻按退避序列顺延,run 成功即重置。要点:
dreamMinIntervalMinutes的关系要写清:退避是 min-interval 之上的失败态加长,不是第二套节流配置;dream/sleep.js)是否同款处理一并评估——同族结构,失败同样不推进任何水位。开关口径(请实现 PR 拍板)
两种立场,二选一并给理由:
验收线
minIntervalMs的叠加语义、(若做)sleep 同款;src/后npm run sync;[Unreleased]登记。关联