加载闸门两处收口:派活族不受冷却 + 冷却跳过留痕(用户问「有什么影响 该如何处理」)
一、影响评估(实测,会话 b232218f)
- 冷却窗口 COOLDOWN=300;旧实现:命中 → 查冷却 → 落在窗口内就 return,**且只在注入成功后才写日志**。
- 后果两条:
① 01:32:00 命中后,**01:33:46 那条最明确的触发句**(「每次我说使用执行会话完成目标…」)
距上次仅 105 s ⇒ **被吞掉,那一轮 AI 收不到任何提醒**;
② 被吞掉**连一行痕迹都没有** ⇒ "没命中"与"被吞"在日志上分不出来,排查只能靠状态文件时间戳反推。
- ⚠️ 危害已被 2026-10-07 新增的「派活收工闸」**部分补偿**(待办标记写在冷却之前 ⇒ 不受冷却影响,
仍会在收工前拦一次);剩下的是"口头提醒缺失"与"日志盲点"。
二、处置(两处,都在 skill-load-guard.py)
1. 抽出共用的 `_is_dispatch()`;冷却旁路改为
`if _cooling(workdir, sid) and not _is_dispatch(prompt):`
⇒ **派活族显式触发句不受冷却**(其余词照旧受)。
2. 被跳过时写一行 `COOL_SKIP sid=… hits=…(冷却中,本轮不注入)` ⇒ 抑制态不再隐身。
三、判据与验证
- 新增 selftest 用例 t_skillguard_cooldown(3 项,**源码级** —— 跑真钩子会动到真工作区的冷却状态,
⛔ 不适合进回归套)。
- 另做了一次**行为级**验证(外部脚本,用真作用域内的工作区、测前备份冷却状态、测后还原):
5/5 通过 —— 非派活首次注入 ✓/非派活冷却中不注入 ✓/**派活族冷却中仍注入 ✓**/
日志有 COOL_SKIP ✓/日志有 DISPATCH_PENDING ✓。
- ⚠️ 该验证脚本第一版**读日志读错**:`log_before` 是字节数却按字符切片 ⇒ 误判成"日志没写"。
改成按字节 seek 后全绿(同族坑:本项目已记过"字节 vs 字符")。
验收:selftest.py rc=0 PASS 103 / FAIL 0(改前 102);manifest 70 份、语法失败 0。
This commit is contained in:
1 parent
1a0cd14c91
commit
9a152a1952
3 files changed
+42
-6
No files matched your search
@@ -7345,5 +7345,25 @@ def t_check_idle_min():
|
||||
]
|
||||
|
||||
|
||||
@case("⛔ 加载闸门:派活族不受冷却 + 冷却跳过要留痕(⛔ 别让抑制态隐身)")
|
||||
def t_skillguard_cooldown():
|
||||
"""🔴 2026-10-07 立(用户问「有什么影响 该如何处理」时落的)。
|
||||
|
||||
实测(会话 `b232218f`):01:32:00 命中后,**01:33:46 那条最明确的触发句**
|
||||
(「每次我说使用执行会话完成目标…」)距上次仅 **105 s < COOLDOWN(300)** ⇒ 被吞掉,
|
||||
且旧实现**只在注入成功后才写日志** ⇒ 连一行痕迹都没有(排查时只能靠状态文件时间戳反推)。
|
||||
两处处置:① 派活族显式触发句**不受冷却**;② 被冷却跳过**写 `COOL_SKIP`**。
|
||||
⚠️ 本条是**源码级**判据(跑一次真钩子会动到真工作区的冷却状态,⛔ 不适合放进回归套)。
|
||||
"""
|
||||
src = (HERE / "hooks" / "skill-load-guard.py").read_text(encoding="utf-8", errors="replace")
|
||||
return [
|
||||
("有共用的 `_is_dispatch()`(⛔ 别在两处各写一遍判定)", "def _is_dispatch(" in src),
|
||||
("冷却旁路在:`_cooling(...) and not _is_dispatch(...)`",
|
||||
"_cooling(workdir, sid) and not _is_dispatch(prompt)" in src),
|
||||
("被跳过写 `COOL_SKIP`(⛔ 否则「没命中」与「被吞」分不出来)",
|
||||
"COOL_SKIP" in src),
|
||||
]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user