已读延迟窗本体+scope_ceiling三档+文档同步 #123
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#103 第四批清单:31 条实现类落差 + 9 条待拍板(条目 15、2、20、27)
What to build
ADR-0017 拍板的"已读延迟窗"是一个独立新 gate:Outbox 防抖批次就绪后、Runtime Loop 组装上下文前独立计时,
delay = clamp(f(energy), 0, scope_ceiling[scope]),纯内部计时对外零信号。origin/main 上它是一个 14 行的return None空壳(docstring 自称"Phase 4 真人感层的范围",但这个推迟从没写进任何设计文档、也没有票承接,Phase 4 收尾时掉了)。冷启动期scope_ceiling要收得更紧这条子轴也完全没接线。真正的改动面不在函数体,在 flush/cancel 的归属结构——这是本片最容易被低估的地方。
Acceptance criteria
一、已读延迟窗本体
read_delay_window签名扩展,接入energy/scope/is_cold_start三个新输入,delay = clamp(f(energy), 0, scope_ceiling[scope])chat scope(私聊/群聊)只影响静态系数/上限(scope_ceiling[private|group]),不进 energy 计算Debouncer.flush()是取批次即从缓冲区清空,_handle_reactive_message对_pending_flushes[chat_id]会previous_flush.cancel()——两者叠加意味着"flush 后 sleep"期间到达的新消息会 cancel 掉正在等待的任务、已取出的整批消息直接丢失、新消息另起缓冲区,与"新消息只并入同一累积批次、不延长等待"这条决策正相反。必须重排 flush/cancel 的归属结构Debouncer.discard_message(服务 ADR-0004 撤回联动)当前 docstring 自称"flush 后是 no-op"——引入真实等待后,撤回联动对窗口内消息会静默失效,须在片内显式决定接不接tests/test_read_delay.py整份重写(现有唯一用例断言的是"零延迟直通",与新行为矛盾)原文(docs/adr/0017-reactive-timing-and-coverage.md「决策 → 已读延迟窗」节):
二、scope_ceiling 三档(含冷启动档)
scope_ceiling私聊/群聊/冷启动三档静态值,冷启动档取更紧值;is_cold_start已在progressive_unlock.py备好,只是消费方是空的_debounced_flush里被算了多次(_evaluate_unified_gate内部一次、spontaneous_goal_unlocked现算一次),read_delay 要用就得把它上提到 read_delay 之前,否则会出现第三次重复的 DB 读——建议顺手收敛成一次并传下去原文(docs/adr/0017「决策 → 已读延迟窗」节最后一条子弹):
原文(同 ADR「备注(实现期跟进,不属本决策)」节——推迟的是数值不是机制):
floor=1已被 ADR-0029 扩到共享沉默预算本身(不再是"选择性回应"专属),但scope_ceiling从未被扩,AC/实现引文请引 ADR-0017 原文,不要照抄 ADR-0007 里"选择性回应 floor=1"那句去重建一个已退场的机制三、文档同步(零独立改动面,作为逐字验收清单)
gate节点、design.md「真人感层」条三处已用现在时描述本机制,实现落地后逐字核对成立即可,无需改字read_delay.py自称属于该阶段),补一行原文(CONTEXT.md「已读延迟窗(Read Delay Window)」条):
Blocked by
is_cold_start传递路径,本片的冷启动档直接复用)2026-08-14(评估侧):本票落地的
circadian_energy_adjustment(read_delay.py)被 #124 撤掉替换——它读墙钟只服务本票的已读延迟窗自己,是 ADR-0017「拒绝了」节点名否决的形状(新 gate 与 energy 并列各自读时钟)。真正共享、供全部 4 个 energy 消费方使用的版本见 #124,决议与代码走向见该票评论。