跳转至

SOP — 优化总账分区治理与过账收敛(backlog-prune-20261002)

1. 背景

过账机制(SessionStart Hook 到点注入 [过账提醒])2026-10-02 上线后,连续 4 条过账记录中 3 条为「零挂账推进、纯新增」,挂账数 20 → 23,提醒随挂账数增长反复空转。

结构性原因:23 项挂账里有 3 项(#24 / #25 / #30)类型为「效果标定」——能否推进取决于 数据积累而非执行力,在任何一次过账里都做不掉,却与可推进项同处第一节,共同计入阈值 (session-start-inject.py 的 _backlog_count() 数第一节内全部 | <数字> | 数据行)。

用户 2026-10-02 要求按上一轮给出的建议「逐步推进」。

2. 目标

# 可验证状态
1 总账新增第五节「待标定(等数据)」,#24 / #25 / #30 移出第一节;过账阈值计数 23 → 20
2 头部新增「收敛判据」(关闭 ≥ 新增)与「分区说明」(过账只统计第一节)
3 session-start-inject.py 零改动:新节置于文件末尾,不触碰 ## 二、 / ## 四、过账记录 两个锚点
4 完成挂账 #31 第①项验证(子智能体 Exec 是否暴露 browser_*),并如实记录结论

3. 前置条件

  • 备份完成(见第 7 章);
  • python3 可用(回归内省用);
  • 无需权限提升,无需停服。

4. 影响范围

  • 变更对象:仅一份文档 —— ~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md。
  • 该文件按需加载,不进每轮 system 前缀,故改后不需要开新会话(依据 ops-execution-efficiency skill 红线第 8 条:改 skill 正文 / references/ 不影响前缀)。
  • 不涉及代理服务 proxy.py、config.yaml,不需要停服,无在跑作业受影响;不触碰 Hook 脚本。
  • 窗口与影响面:纯本地文档编辑,单机、无并发、无窗口期要求。

5. 分步操作

步骤 1:备份

把总账备份进本次交付目录的 backup/(结构见全局规则「备份与留档」),并登记台账。

TS=$(date +%Y%m%d-%H%M%S)
D="$HOME/Documents/services/token_proxy/backlog-prune-20261002"
mkdir -p "$D/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references"
cp "$HOME/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md" \
   "$D/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md.bak.$TS"
chmod 600 "$D/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md.bak.$TS"

预期:备份文件存在、权限 600(实测 optimization-backlog.md.bak.20261002-214256,17296 字节)。 失败判断:目录不存在或权限非 600 → 停止,不得继续改正文。

步骤 2:头部追加「收敛判据」与「分区说明」

在头部 > **过账建议** 之后插入两条说明。坑:这是给下一次过账的人与 AI 看的约定, 不改判据本身(判据仍在 Hook 脚本里)。

# 编辑 optimization-backlog.md 头部引用块,追加:
#   > **收敛判据(2026-10-02 新增)**:一次过账须满足 关闭(移入第二节)≥ 新增挂账。
#   > **分区说明(2026-10-02 新增)**:过账阈值只统计第一节「挂账」。

预期:头部出现这两行;文件其余部分不变。

步骤 3:从第一节物理移除 #24 / #25 / #30

坑:必须删除整行,仅在别处提及编号不减计数——_backlog_count() 数的是第一节内的行。 坑:删行后第一节编号不连续(22, 23, 26, 27, 29, 31),编号保留不动以利追溯,不重排。

# 编辑 optimization-backlog.md:删除第一节中首列为 24 / 25 / 30 的三行

预期:第一节数据行由 23 → 20。

步骤 4:文件末尾新增第五节「待标定(等数据,不计入过账阈值)」

放置 #24 / #25 / #30,表头为 | # | 待标定项 | 出处 | 触发条件(何时才有数据可推进) |。

坑(本步最关键):新节必须放在「## 四、过账记录」之后。 _read_event→_backlog_count() 用 ## 二、 作第一节的结束锚点、_last_review_date() 用 ## 四、过账记录 作起点锚点;若把新节插在第一节与「二、」之间,前者计数会错位。 放在末尾则两个锚点均不受影响,脚本一行都不用改。

# 在 optimization-backlog.md 结尾引用块之前插入 ## 五、待标定 一节

预期:文件出现第五节;## 一、挂账 / ## 二、 / ## 四、过账记录 三个锚点字面不变。

步骤 5:回归过账解析

用脚本自身的函数直接内省,确认计数与提醒判据未失效(等价于 Hook 启动时的真实调用)。

cd "$HOME/Documents/services/token_proxy/sessionstart-hook" && python3 -c "
import importlib.util
spec = importlib.util.spec_from_file_location('ssi', 'session-start-inject.py')
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
t = m.REVIEW_LEDGER.read_text(encoding='utf-8')
print('backlog_count =', m._backlog_count(t))
print('last_review   =', m._last_review_date(t))
print('notice        =', m._review_notice())
"

预期输出(实测):backlog_count = 20、last_review = 2026-10-02、 notice 文本含「当前挂账 20 项」。失败判断:计数仍为 23(步骤 3 未删净)或为空 (锚点被破坏 → 用第 7 章回滚)。

6. 验证

  • 步骤 5 已实测通过:backlog_count = 20(较改前 23 降 3)、_last_review_date = 2026-10-02、 _review_notice() 正常返回提醒文本 → 解析未失效。
  • 过账记录表新增一行,记录「23 → 20」。
  • 挂账 #31 第①项验证结果见附录 A。

7. 回滚

  • 备份位置:backlog-prune-20261002/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/, 台账见 backlog-prune-20261002/backup/README.md。
  • 回滚步骤: bash cp "$HOME/Documents/services/token_proxy/backlog-prune-20261002/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md.bak.20261002-214256" \ "$HOME/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md"
  • 回滚后验证:重跑步骤 5,应回到 backlog_count = 23。
  • 触发条件:步骤 5 计数异常、或过账提醒文本出错、或发现新节结构导致解析错位。

8. 风险说明

风险 缓解
新节误插在第一节与「二、」之间 → 计数翻倍/错位 强制置于文件末尾;步骤 5 回归实测计数
误删第一节其它行 改前备份 + 三处编辑仅触及 3 个指定行
提醒仍会注入(20 ≥ 阈值 20) 属数据事实非缺陷;待挂账降到 <20 自然停止
第一节编号不连续 有意保留编号以利追溯,不重排

附录 A:挂账 #31 验证结果(2026-10-02 本轮)

  • 第①项(子智能体 Exec 是否暴露 browser_*):实测未通过。 两次派 web-scout 做工具自检,均回报:当前会话可调用工具只有 Skill,不存在 mcp__integrated_code_mode__Exec / run_mcp 入口,无法内省 tools 对象。
  • 含义:以 tools: Skill, mcp__integrated_code_mode__Exec + mcpServers: [integrated_code_mode] 的当前写法,web-scout 拿不到浏览器能力,与上一轮的静态查证结论不一致。
  • 第②③项(是否共享浏览器会话 / mcpServers 是否需项目前缀):前置(第①项)未满足,无法验证。
  • 待排查方向:① Subagent tools 字段是否支持 MCP 工具名、正确写法是什么; ② Beta「启用 Subagents 目录」是否已开启、定义是否被加载;③ server 名是否需带项目前缀。
  • 注意:子智能体为 DeepSeek-V4-Flash,其自述存在不确定性;上述结论基于两次一致回报, 若要强证据,可改为派一个「只有 Exec 才能完成」的具体任务(如导航 about:blank)观察是否失败。
  • 安全缺口仍在(未变):该 Subagent 仅靠提示词约束只读,不可当强隔离。

附录 B:交付物清单

  • backlog-prune-20261002/SOP.md(本文件)
  • backlog-prune-20261002/backup/README.md + 备份文件
  • 被修改文件:~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md
  • 未出 RUNBOOK.md:本次无新增可复用交付物(服务 / 工具链 / 脚本 / 配置),变更对象即 skill 文档结构本身, 属一次性的文档治理,按 writing-ops-change-sop 的判定不出。
  • 回填:measured-baselines.md §二十六(D 组)/ §二十七(A·B·C)/ §二十九(E 组)各追加一行。

附录 C:固化判据补进 skill 正文(2026-10-02 第二轮,源自 #2 复核)

1. 背景:用户复核挂账 #2(把 OpenWrt 旁路由的「改 → scp → chmod → ruby -c → 跑 → 看」固化成部署脚本)时指出: 该项目已是完成态,事后固化无意义——"除非事先针对该场景评估、实施时就走固化脚本的逻辑"。 该质疑成立,暴露了原判据("同类操作第 3 次即应固化")只数次数、不含"还会不会发生"的前置判断。

2. 目标:把判据修正落到 skill 正文,使后续会话在接任务时就能判「该不该固化」。

3. 前置条件:ops-execution-efficiency skill 正文可写(改正文不进每轮前缀,无需开新会话)。

4. 影响范围:仅 ~/.trae-cn/skills/ops-execution-efficiency/SKILL.md(新增 §8,其余章节未动); 不涉及系统状态、无停服、无窗口期。

5. 分步操作

# ① 备份(本主题 backup 下,保持来源路径层次)
B=~/Documents/services/token_proxy/backlog-prune-20261002/backup
TS=$(date +%Y%m%d-%H%M%S)
mkdir -p "$B/trae-cn/skills/ops-execution-efficiency"
cp -p ~/.trae-cn/skills/ops-execution-efficiency/SKILL.md \
      "$B/trae-cn/skills/ops-execution-efficiency/SKILL.md.bak.$TS"
chmod 600 "$B/trae-cn/skills/ops-execution-efficiency/SKILL.md.bak.$TS"

# ② 在 §7 末尾与「## 收尾自查清单」之间插入 §8(用编辑器做增量插入,不整篇重写)
#    锚点:§7 最后一条「验证待分发的脚本时走 stdin」段之后
grep -n "^### 8\. 固化判据" ~/.trae-cn/skills/ops-execution-efficiency/SKILL.md   # 预期有行号输出

新增 §8 的实质内容(三道闸,需同时成立):① 会再发生(一次性 / 已收尾 → 不固化); ② 序列已定型(仍在探索 → 先手工,别把不确定的东西封进壳);③ 重复的是流程而非内容。 三条全「是」→ 第一次执行就按脚本形态做;并附 OpenWrt 反例与总账第三节 #8 指针。

6. 验证:grep -n "固化判据\|三道闸" SKILL.md 命中 §8;节编号连续性(§7 → §8 → 「收尾自查清单」)未被破坏。

7. 回滚:cp -p "$B/trae-cn/skills/ops-execution-efficiency/SKILL.md.bak.<TS>" ~/.trae-cn/skills/ops-execution-efficiency/SKILL.md (备份台账见 backup/README.md)。回滚触发:§8 与既有 §2/§6 的「合并取数」「固化」表述出现矛盾或重复。

8. 风险说明

风险 缓解
新节与 §2「同一主机多只读检查合并」「大文件扩展用增量编辑」等既有条目语义重叠 §8 只回答「何时把序列变成脚本」,其余条目回答「单次调用怎么省」,边界已在节首一句写明
判据被误用为「不固化的借口」(闸①一律判"否") §8 明确「任务内重复」也算「会再发生」,并给出"三条全「是」→ 第一次就上脚本"的正向结论
规则 rule-agent-efficiency.md 中「第 3 次即固化」一句仍缺前置条件 已由附录 D 补上(原计划本轮不改规则,后经用户批准一并改)

附录 D:全局规则「第 3 次固化」补前置条件(2026-10-02 第三轮)

1. 背景:附录 C 把三道闸补进了 skill,但 skill 是按需加载;而"同类操作第 3 次 → 主动提议固化"这句只存在于每轮都进 prompt 的全局规则里,两处口径不同源。用户批准一并修正。

2. 目标:规则里该条带上前置条件,使接任务时就能判「该不该固化」,不必先想起去加载 skill。

3. 前置条件:用户明确批准;改 user_rules 会进每轮 system prompt,改完须开新会话(否则下一轮前缀全量重建,单条 miss ≈0.35 元)。

4. 影响范围:仅 ~/.trae-cn/user_rules/rule-agent-efficiency.md 一行(「执行方式(必须)」表末行); 不涉及系统状态、无停服。

5. 分步操作

TS=$(date +%Y%m%d-%H%M%S)
cp -p ~/.trae-cn/user_rules/rule-agent-efficiency.md \
      ~/.trae-cn/user_rules/backup/rule-agent-efficiency.md.bak."$TS"
chmod 600 ~/.trae-cn/user_rules/backup/rule-agent-efficiency.md.bak."$TS"

# 改「执行方式(必须)」表最后一行(增量替换,不整篇重写):
#   原文:| 同类操作出现第 3 次 | 主动提议固化为脚本或命令(一次投资,跨会话复用) |
#   改后:在该句后追加「但须先过 skill `ops-execution-efficiency` §8 的三道闸:
#         ① 会再发生 ② 被固化对象已定型 ③ 重复的是流程而非内容;三条同时成立才动手,
#         且当次就按脚本形态做——固化是事前投资,不是事后归档」
grep -n "三道闸" ~/.trae-cn/user_rules/rule-agent-efficiency.md   # 预期 1 处命中

6. 验证:grep -n "三道闸" rule-agent-efficiency.md 命中 1 处;该表其余 8 行未被触碰(git diff 或前后对拍); 语义验证须开新会话(规则只在会话启动时读取)。

7. 回滚

cp -p ~/.trae-cn/user_rules/backup/rule-agent-efficiency.md.bak.<TS> \
      ~/.trae-cn/user_rules/rule-agent-efficiency.md

备份台账见 ~/.trae-cn/user_rules/backup/README.md。回滚触发:新会话发现该行表述与 skill §8 冲突,或规则整体超出可读长度。

8. 风险说明

风险 缓解
改规则的直接代价:下一轮首条请求前缀重建(≈0.35 元) 已提醒用户收尾后开新会话;本次改动与「验证 web-scout」合并到同一次新会话,不额外多付一次
表格单元格变长,可读性下降 只保留判据要点(三个"① ② ③"短句),细节留 skill §8;未新增行、未改表头
规则与 skill 两处判据日后漂移 规则行内显式引用 skill §8 为详述源;skill §8 末尾反向引用总账第三节 #8,三处指向同一结论

来源:/home/rain/Documents/services/token_proxy/backlog-prune-20261002/SOP.md | 最后更新:2026-10-02 22:23(由 build/sync.py 同步,请勿在站点侧修改)