反思闭环样本补全:周期触发级一打分+群聊追问结局登记 #133
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 条待拍板(条目 6、26)
What to build
反思闭环的反坍缩护栏(hit-rate 按尝试归一 + ceiling 承重)在两处收不到该收的样本:
一、周期触发路径的级一阈值被
+inf直通旁路——proactivity_offset的写方/读方都已接线(reflection._apply_outcome写、gating.evaluate_gate读),但唯一产生尝试样本的周期路(私聊 Drive Tick + 即刻追问)恰好是级一分数恒+inf那条,offset 被推到 ceiling 也拦不住任何东西——护栏本身开路。二、群聊追问结局从不进反思闭环——
_run_group_followup_check全程不调record_proactive_attempt,且贸然加上会更糟:群聊 chat_id 的removesuffix(".p")不生效会把整个群 id 当 user_id 写出假的 per-user 慢情感态;reconnect_cooldown_key对群聊场景恒返回None,导致结局恒判fell-flat——会把群聊追问变成单向拉低 offset 的噪声源,正是反坍缩护栏要防的方向。Acceptance criteria
一、补周期触发级一打分(让 offset 真正生效)
environmental_awareness.tier2_significance_score先例:零 LLM、纯本地启发式、返回有限分数),区分drive_tick(长冷场)与immediate_followup(短窗口追问)两个候选源_evaluate_drive_tick_chat调_evaluate_unified_gate处传level1_score=(复用gating.py已有的显式覆盖参数,level1_score缺省才取+inf,无需新增基建)gating.py模块文档与EVENT_TRIGGER_LEVEL1_SCORE常量措辞——命名与现状不符(周期触发现在也吃它)proceed变为silent_level1——不能只断言纯函数分数计算正确,必须钉住链路真的通了原文(docs/adr/0006-agency-and-drive.md「更新(2026-07-06,情感模型选型 grill 联动)」节):
原文(docs/adr/0006「更新(2026-07-04 A1 反坍缩 grill)」节——护栏本体):
二、群聊追问结局接入反思闭环
_run_group_followup_check到期后调record_proactive_attempt,让群聊追问结局真正计入 hit-ratereflection.py里attempt.chat_id.removesuffix(".p")对群聊 chat_id({room}.g)不生效,会把整个群 id 当 user_id 传进_apply_outcome——须按触发来源(私聊/群聊)分流处理,避免写出假的 per-user 慢情感态run_reflection_cycle判"是否已回应"用的storage.get_reconnect_cooldown(attempt.chat_id),而proactive_reconnect.reconnect_cooldown_key(chat_id, sender_id)对群聊存的是裸sender_id不是群chat_id——群聊 attempt 恒取不到值,结局恒判fell-flat。群聊侧"是否已获回应"现有信号是_last_group_chat_activity(进程内 dict,重启即丢),须决定接入方式或补持久化对应物per-user 慢情感态那一路消费在群聊没有单一主体(Drive Tick 只服务私聊的既有设计),须显式决定群聊 attempt 是否跑这一路,还是只跑 offset 那一路proactive_attempt.py模块文档的作用域声明("只追踪 Drive Tick/Recall 主动重连发送")须同步更新为含群聊追问原文(docs/adr/0025-immediate-follow-up.md「决策」节「治理免费继承」):
Blocked by
gate_threshold_base吃 unlock level 做单调缩放,本片让周期路有一个有限分数去跟这个阈值比,同批做省一次回归)实现期发现,留给评估/工单会话判断是否需要开后续 ticket
落地本票时暴露了 ADR-0011/ADR-0014 一处论证前提缺口:
ADR-0011"更新(issue #112)"节论证"渐进解锁连续缩放不该叠加进
gate_threshold_base"时,枚举的
level1_threshold消费者集合是——+inf,天然免疫缩放)is_relationship_network_unlocked)这个枚举在写下时是完整的。本票让 drive-tick/私聊即刻追问
(
entry_drive_tick.py::_evaluate_drive_tick_chat)也开始显式传入proactive_reconnect.periodic_significance_score算出的有限分数(PR #139)——这两条路径现在是
level1_threshold的第三类真实消费者,但没有类似 tier-2is_relationship_network_unlocked那样的独立解锁门槛。ADR-0011"消费者集合为空"这句枚举从此不再完整成立。
已在 docs 分支
ADR-0011"更新(2026-08-14,issue #133)"节标注这个缺口(本地提交,未推送,随 docs 分支下次同步一起可见)。本票刻意没有解决它——AC 没有要求,仓促补一道未经验证的门槛,
或者反过来推翻这层缩放不该覆盖门控阈值基值的既有决策,都需要一次独立的 grill,不该在这张票
里顺手带过。
需要评估/工单会话判断的问题:是否要开一张后续 ticket,给 drive-tick/私聊即刻追问也补一道
类似 tier-2 的独立解锁门槛(还是干脆重新评估这层缩放该不该覆盖
gate_threshold_base,两个方向都可能是合理答案,取决于真实数据显示 drive-tick 候选质量分布是否真的需要这层保护)。
2026-08-14(评估侧):已核实这个发现是真实的(读了 gating.py/progressive_unlock_scale/proactive_reconnect.py 原文确认)。现状并非无防护——沉默预算容量/回填速率本就覆盖全部触发源按渐进解锁缩放、periodic_significance_score 的熟悉度加成也让冷启动候选天然余量更小,只是都不是硬门槛。用户拍板先不直接补门槛,开观察票 #140 给决策快照打点,攒够真实数据(冷启动期 level1 通过率/hit-rate 是否显著更差)再决定要不要补。顺带:这次也发现 issue #112 的 ADR-0011/0014 更新节和本票一样,声称本地提交但从未真正落进共享 docs 分支——已据代码原文补录,详见 #140 正文末尾链接与评估侧记忆。