跳转至

SOP:补 SHORT_ORDER 缺失的「改跑」

变更日期:2026-10-07  执行人:Agent(用户授权)  对象:cost_audit/wrapup.py

1. 背景

收尾自查的「未合并」列格式为 组数/步数(语义类简称)。语义类简称由 KIND_SHORT 映射而来,其中 write+run(改-验循环)对应 「改跑」。

但输出用的 SHORT_ORDER = ("增", "删", "改", "查", "跑", "其它") 不含「改跑」,而 _short_txt() 只遍历 SHORT_ORDER:

txt = "".join("%s%d" % (k, counts[k]) for k in SHORT_ORDER if counts.get(k))
return txt or "—"

→ 该类计数被静默丢弃,若一组里只有它,整列回退为 —。实测连续多轮出现 1/3(—)、1/2(—),取证确认其 ublock_kind 正是 {'write+run': {...}}。

影响:未合并块的「原因线索」在最该被看到的一类(改-验循环)上恰好失效——而改-验循环正是规则点名的「最该批量化的一类」。

2. 目标

SHORT_ORDER 含 "改跑";未合并块分列能正常显示,如 1/2(改跑1)。

可验证状态:离线 4 项断言通过;真机该列由 — 变为「改跑N」。

3. 前置条件

  • 对 cost_audit/wrapup.py 有写权限;
  • python3 可用。

4. 影响范围

  • 主机:单机(本机 token_proxy 工程),一个常量。
  • 组件:SHORT_ORDER(仅 _short_txt() 使用)——纯显示层,不改任何统计口径。
  • 是否停服:否;随改随生效。窗口期:无要求。在跑作业:无影响。

5. 分步操作

步骤 1:备份(高危前置)

cd /home/rain/Documents/services/token_proxy
TS=$(date +%Y%m%d-%H%M%S)
mkdir -p wrapup-short-order-20261007/backup/cost_audit
cp -p cost_audit/wrapup.py \
      wrapup-short-order-20261007/backup/cost_audit/wrapup.py.bak.$TS

预期:backup/cost_audit/wrapup.py.bak.<TS>(18463 B)。 失败判断:目录不可写或 cp 非 0 → 停止。

步骤 2:把「改跑」加入 SHORT_ORDER

sed -i 's/SHORT_ORDER = ("增", "删", "改", "查", "跑", "其它")/SHORT_ORDER = ("增", "删", "改", "改跑", "查", "跑", "其它")/' \
    cost_audit/wrapup.py

位置取「改」之后(它是编辑与验证的组合),并补注释说明「改跑」来自 write+run、只出现在未合并块分列里。

坑:不要改 KIND_SHORT 的映射("write+run": "改跑" 是对的),也不要改 TOOL_SHORT——已合并步的分列由 TOOL_SHORT 产出,不会出现「改跑」,加进去反而制造不存在的键。

python3 -c "import ast; ast.parse(open('cost_audit/wrapup.py', encoding='utf-8').read()); print('语法通过')"
grep -n 'SHORT_ORDER' cost_audit/wrapup.py     # 预期:仅 1 处,含「改跑」

步骤 3:(无)不涉及其它文件。

6. 验证

层级 命令 预期
语法 python3 -c "import ast; ast.parse(open('cost_audit/wrapup.py').read())" 无异常
断言 ① _short_txt({"改跑": 2}) 改跑2
断言 ② _short_txt({}) —(空态不变)
断言 ③ _short_txt({"增":1,"改跑":2,"跑":3}) 增1改跑2跑3(顺序固定)
断言 ④ _short_txt({"改跑":1,"其它":2}) 改跑1其它2
真机 python3 cost_audit/wrapup.py 「未合并」列出现 (改跑N)
真机取证 打印 merge_stats(cur_shape)["ublock_kinds"] 该组确为 {'write+run': ...}

实测(2026-10-07):4 项断言全通过;真机由 1/2(—) 变为 1/2(改跑1);取证显示 {'write+run': {'groups': 2, 'steps': 8}}。

7. 回滚

备份位置:wrapup-short-order-20261007/backup/cost_audit/wrapup.py.bak.20261007-085213(登记见 backup/README.md)。

cd /home/rain/Documents/services/token_proxy
cp -p wrapup-short-order-20261007/backup/cost_audit/wrapup.py.bak.20261007-085213 \
      cost_audit/wrapup.py
python3 cost_audit/wrapup.py        # 回滚后预期:该列重新显示为「—」

回滚触发量化:若真机该列出现异常简称(如「改跑」出现在已合并列)→ 回滚。

8. 风险说明

风险点 缓解措施
误改统计口径 只动 SHORT_ORDER(显示层);merge_stats 的计数逻辑未动
误把「改跑」加进 TOOL_SHORT 已注明:已合并步分列不含该类
跨轮比对 历史轮次里该类显示为空、未被记录;与 2026-10-07 之前的行比对时,未合并列的简称可能「凭空多出」改跑 —— 属修复效果,非新现象

来源:/home/rain/Documents/services/token_proxy/wrapup-short-order-20261007/SOP.md | 最后更新:2026-10-07 08:52(由 build/sync.py 同步,请勿在站点侧修改)