SOP:过账结构治理(挂账 21 → 6,含阈值计数口径修正)¶
主题目录:
backlog-review-20261007/|变更日期:2026-10-07|用户主动要求过账(非 Hook 提醒)
1. 背景¶
- 挂账虚高触发空转:
optimization-backlog.md第一节「挂账」累计 21 项 ≥ 20 闸值, SessionStart Hook 会每个会话注入[过账提醒],但其中 13 项是判据型(判据早已写进规则 / skill, 没有独立交付物)——它们既"做不掉",又让计数长期虚高,提醒反复空转。 - 两项已被他处关闭:原第一节 #34 / #35(
slurm_ins逐条下发 / 重复探测)2026-10-07 已由该工程侧落地 (dedupe_probe_20261007/、parallel_probe_20261007/、sync_status_concurrency_20261007/、conn_reuse_20261007/,主部署器 07:24~07:32 改完),总账未同步。 - 本会话新增两项可登记成果:工具执行埋点、上游生成侧耗时字段;另有 1 条认知被证伪(
hooks.json免重启)。
2. 目标¶
- 第一节拆为 1.1 待办型(有交付物、可执行)与 1.2 判据型(已入规则、无交付物);
过账阈值只数 1.1,
session-start-inject.py的_backlog_count同步改口径(含旧格式回退); - 关闭 #34 / #35(移入第二节「已做」,注明依据);#33 移入第五节「待标定」;
- 登记已做 #36 / #37、新增已证伪 #9、新增待标定 #38 / #39;
- 第四节补一条过账记录;收敛判据(关闭 ≥ 新增)满足。
3. 前置条件¶
- 可写
~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md与sessionstart-hook/session-start-inject.py; python3可用;- 改 hook 脚本前必须备份(它影响每个会话的注入)。
4. 影响范围¶
| 项 | 说明 |
|---|---|
| 涉及对象 | 全局优化总账(被 session-start-inject.py 读取)、SessionStart Hook 脚本 |
| 是否停服 | 否,无停服、无窗口要求;改脚本后下一次会话启动即按新口径判定(脚本每次启动时执行) |
| 影响面 | ① 计数 21 → 6,阈值不再触发,提醒停止空转;② 总账结构变化,人工阅读路径改变(1.1 / 1.2) |
| 不受影响 | 三锚点(## 一、挂账 / ## 二、 / ## 四、过账记录)保持原位,解析逻辑不失效 |
5. 分步操作¶
步骤 1:备份(高危前置,必做)¶
TS=$(date +%Y%m%d-%H%M%S)
D=~/Documents/services/token_proxy/backlog-review-20261007/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references
mkdir -p "$D"
cp -p ~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md "$D/optimization-backlog.md.bak.$TS"
cp -p ~/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py \
~/Documents/services/token_proxy/backlog-review-20261007/backup/home/rain/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py.bak."$TS"
预期:两条 *.bak.<时间戳> 生成(总账约 30 KB、脚本约 15 KB)。
步骤 2:总账拆节与登记¶
坑:拆分不得移动三锚点标题(## 一、挂账 / ## 二、 / ## 四、过账记录),
Hook 靠它们定位;只在其内部新增 ### 1.1 / ### 1.2 子标题与搬移表格行。
改动五处:
1. 头部加「分类说明」(1.1 / 1.2 的定义与动因);
2. 第一节原 21 行重组:1.1 留 #3 / #4 / #27 / #29 / #32 + 由第二节迁入的「改-验循环提醒」(现 #35);
1.2 收 #5 / #6 / #7 / #10 / #11 / #12 / #13 / #14 / #15 / #16 / #17 / #18 / #20(13 项);
3. 第二节新增已做 #36(工具执行埋点)/ #37(上游耗时字段)/ #38(slurm_ins 四改,原 #34 / #35);
4. 第三节新增已证伪 #9(hooks.json 须重启 → 推翻);
5. 第五节新增待标定 #33(TTL 边界,由第一节迁入)/ #38(三段占比与生成速率)/ #39(Edit 合并收益);
6. 第四节追加 2026-10-07 过账记录行。
cd ~/.trae-cn/skills/ops-execution-efficiency/references
grep -n "^## \|^### " optimization-backlog.md # 预期:一/1.1/1.2/二/三/四/五 六节齐全
grep -c "^| [0-9]" optimization-backlog.md # 各节合计(与拆分前对比看搬移是否完整)
预期:## 一、挂账 之后紧跟 ### 1.1 待办型 与 ### 1.2 判据型;
grep -c "^| [0-9]" 的总数在拆分前后应一致(只搬位置、不增删行,新增的 #36~#39 与 #9 属预期增量)。
步骤 3:改计数口径(Hook 脚本)¶
_backlog_count() 由「数 ## 一、挂账 整节」改为「数 ### 1.1 待办型 子节」,
并保留旧格式回退(找不到 1.1 标题时退回整节计数),保证总账未升级时判据不失效。
坑:_section(text, start, end) 取的是 start 标记之后到 end 标记之前的内容——
故 1.1 的区间写作 _section(text, "### 1.1 待办型", "### 1.2"),正好覆盖表头与数据行、不含 1.2。
cd ~/Documents/services/token_proxy
python3 -m py_compile sessionstart-hook/session-start-inject.py && echo "语法通过"
sed -n '229,245p' sessionstart-hook/session-start-inject.py # 预期:见 1.1 区间 + 回退分支
步骤 4:验证(离线,不必开会话)¶
cd ~/Documents/services/token_proxy && python3 - <<'PY'
import importlib.util, os, re
spec = importlib.util.spec_from_file_location("inj", "sessionstart-hook/session-start-inject.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
led = os.path.expanduser("~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md")
text = open(led, encoding="utf-8").read()
old = len(re.findall(r"^\|\s*\d+\s*\|", m._section(text, "## 一、挂账", "## 二、"), re.M))
print("新口径 %d | 旧口径 %d" % (m._backlog_count(text), old))
print("回退路径 %d" % m._backlog_count("## 一、挂账\n\n| 1 | a |\n| 2 | b |\n\n## 二、x"))
print("提醒", m._review_notice())
PY
预期:新口径 6 | 旧口径 19、回退路径 2、提醒 None。
失败判断:新口径仍 ≥20 → 1.1 子标题未生效(核对标题字面量是否为 ### 1.1 待办型);
报 AttributeError → 脚本被改坏,走第 7 章回滚。
6. 验证¶
| 层级 | 命令 | 预期 |
|---|---|---|
| 语法 | python3 -m py_compile sessionstart-hook/session-start-inject.py |
无输出 |
| 计数口径 | 步骤 4 的脚本 | 新 6 / 旧 19 / 回退 2 |
| 阈值行为 | 同上(_review_notice()) |
None(挂账 6 < 20,且今日已过账) |
| 端到端 | python3 sessionstart-hook/session-start-inject.py < /dev/null \| head -2 |
正常输出「请全程用中文思考和回答。」+ HANDOFF 全文 |
| 结构 | grep -n "^## \|^### " optimization-backlog.md |
三锚点位置未变,新增 1.1 / 1.2 两个子标题 |
7. 回滚¶
备份位置:
- backlog-review-20261007/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md.bak.20261007-074318
- backlog-review-20261007/backup/home/rain/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py.bak.20261007-074448
台账见 backup/README.md。
# 还原总账
cp -p ~/Documents/services/token_proxy/backlog-review-20261007/backup/home/rain/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md.bak.20261007-074318 \
~/.trae-cn/skills/ops-execution-efficiency/references/optimization-backlog.md
# 还原 Hook 脚本
cp -p ~/Documents/services/token_proxy/backlog-review-20261007/backup/home/rain/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py.bak.20261007-074448 \
~/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py
python3 -m py_compile ~/Documents/services/token_proxy/sessionstart-hook/session-start-inject.py && echo "回滚后语法通过"
回滚后验证:_backlog_count 回到整节口径(21)、_review_notice() 重新返回提醒文本(挂账 ≥20)。
两者必须同时回滚——只回滚其一会出现「脚本按 1.1 数、总账没 1.1 标题」的组合,
虽然回退分支能兜住(退回整节计数),但语义已不一致。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 改 Hook 脚本影响每个会话的注入 | 改动局限在 _backlog_count 一个函数;_review_notice 整体 try/except 静默;步骤 4 的端到端实跑已验证 |
| 总账解析失效(锚点被移动) | 三锚点位置未动,仅在其内部加子标题;步骤 6 的 grep -n "^## " 复核 |
| 计数为 0 导致阈值永不触发 | 回退分支保证旧格式仍可数;另 _review_notice 保留「距上次过账 ≥7 天」这一独立触发条件 |
| 判据型被误判为"已做" | 1.2 节头部写明「无独立交付物、效果未标定前不动」,且其效果项单列在第五节 |
| 过账结论与事实不符(如 #34/#35 实际未做完) | 已按 slurm_ins 侧四个 10-07 档案与主部署器改动时间取证;若实际未覆盖,回滚该两行即可 |
附录:交付物清单¶
| 文件 | 说明 |
|---|---|
optimization-backlog.md(改) |
第一节拆分 + 登记 6 处 |
session-start-inject.py(改) |
_backlog_count 改口径 + 回退分支 |
backlog-review-20261007/SOP.md |
本文档 |
backlog-review-20261007/backup/ |
两个文件备份与台账 |
来源:
/home/rain/Documents/services/token_proxy/backlog-review-20261007/SOP.md| 最后更新:2026-10-07 07:45(由build/sync.py同步,请勿在站点侧修改)