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:
admin committed 2026-10-10 23:25:36 +08:00
1 parent a04b2c08e8
commit fd9c902bcc
5 files changed
+112 -65

No files matched your search

-33
View File
@@ -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` 让检查会话用