chore(技能): 浏览器起法收敛为「会话后台任务」+ 关窗即停手;补索引与自测清理
- browser-harness/SKILL.md:§1 起法整段重写为「只允许这一种 —— 本会话的后台任务」(字面命令/
为什么只许这一种/守卫语义/已知代价/起不来对照表);§3 补一条排障 —— 认进程命令行与它自己的日志,
⛔ 别信 pid 父链;**「删掉脚本」≠「停掉进程」**(依据 2026-10-10 实测:孤儿守卫在脚本已删后仍把浏览器拉回)
- browser-harness/agent-workspace/bh_chrome_keepalive.py:守卫语义分两档 —— Chrome 正常关窗(rc=0) ⇒ 停手退出;
异常退出(rc≠0) ⇒ 重拉(依据:用户手关被无条件拉回,连关三次弹三次)
- session-mechanism/scripts/selftest.py:删掉重复定义的 `t_check_cooldown_no_pileup`(两段逐字相同);自测 PASS 109 / FAIL 0
- session-mechanism/references/humanizer-en/SKILL.md:与顶层 `humanizer` 技能同名冲突 ⇒ 去掉本包这份的注册
(`user-invocable: false` + `disable-model-invocation: true`),6 个文件正文一字未动
- session-mechanism/references/01-文档索引.md:补登 `04-决策方法论.md`/`dsh-decision-method/`/`作业规矩/`/`humanizer-en/`
This commit is contained in:
1 parent
a04b2c08e8
commit
fd9c902bcc
5 files changed
+112
-65
No files matched your search
@@ -901,39 +901,6 @@ def t_check_cooldown_no_pileup():
|
||||
("闸⑥ 排在闸⑤ 之后(先精确后兜底)", ok_order)]
|
||||
|
||||
|
||||
@case("🔴🔴 闸⑥ 同类检查冷却期:两种情况 × 每类最多一条 ⇒ 不堆积(用户「不该有任何堆积」)")
|
||||
def t_check_cooldown_no_pileup():
|
||||
"""🔴 2026-10-05 立(用户口径逐字:「只有两种情况会创建 定时任务创建会话,不应该又任何堆积」)。
|
||||
|
||||
⛔ **病根**(实测,见 `references/pitfalls.md` P0-69):排期名带递增棒次(`第%d棒`)
|
||||
⇒ 闸⑤「同名去抖」**永不命中** ⇒ 同一种情况可被反复建 ⇒ 自测区 2 小时堆 11 条。
|
||||
|
||||
🔴 **判据必须能「改前报红」**(P0-13 同族):
|
||||
· 删掉闸⑥ 那段 ⇒ ②③④ 全红;
|
||||
· 把 `_stamp.update(...)` 改回整体覆盖 ⇒ ③ 红(另一类的冷却记忆被抹);
|
||||
· 把 `CHECK_COOLDOWN_S` 改成 0 ⇒ ① 红。
|
||||
"""
|
||||
import inspect as _ins
|
||||
m = imp()
|
||||
src = _ins.getsource(m.maybe_spawn_check_agent)
|
||||
cd = getattr(m, "CHECK_COOLDOWN_S", None)
|
||||
# ① 冷却常量在位且是「真窗口」(⛔ 0 / None 等于没冷却)
|
||||
ok_const = isinstance(cd, (int, float)) and cd >= 600
|
||||
# ② 闸⑥ 在:按 reason 记冷却键(⛔ 只认带引号的字符串拼装,别认注释里的裸串)
|
||||
ok_key = ('"last_" + reason' in src) or ("'last_' + reason" in src)
|
||||
# ③ 合并写:⛔ 不许整体覆盖 stamp(覆盖 ⇒ 另一类的 last_* 被抹 ⇒ 闸⑥ 对另一情况失效)
|
||||
ok_merge = "_stamp.update(" in src
|
||||
# ④ 顺序:闸⑥ 必须在闸⑤(同名去抖)**之后**(⛔ 顺序颠倒 ⇒ 语义变成"先拦粗的")
|
||||
p5 = src.find("active_schedule_exists(name)")
|
||||
p6 = src.find('"last_" + reason')
|
||||
if p6 < 0:
|
||||
p6 = src.find("'last_' + reason")
|
||||
ok_order = p5 >= 0 and p6 >= 0 and p5 < p6
|
||||
return [("冷却窗口 CHECK_COOLDOWN_S 在位且 ≥10 分钟(实测=%s)" % cd, ok_const),
|
||||
("闸⑥ 按 reason 记冷却键(同名去抖失效时的兜底)", ok_key),
|
||||
("stamp 合并写(⛔ 整体覆盖会抹掉另一类的冷却记忆)", ok_merge),
|
||||
("闸⑥ 排在闸⑤ 之后(先精确后兜底)", ok_order)]
|
||||
|
||||
@case("检查会话的 prompt:**引用的命令必须真存在**(⛔ 引用不存在的命令 ⇒ 静默当成功)")
|
||||
def t_check_prompt_cmds_exist():
|
||||
"""🔴🔴 2026-10-03 实测坐实:`CHECK_PROMPT` 让检查会话用
|
||||
|
||||
Reference in new issue
Block a user