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同步,请勿在站点侧修改)