---
title: 孤儿 wrapper 逐个定性 + 「死||」形状治理
tags: [静默失败, 孤儿wrapper, 门禁, 假装置]
created: 2026-09-12
status: final
---

# 孤儿 wrapper 逐个定性（2026-09-12）

## 一、先纠正数字与口径
- 真孤儿 **55 个**（判据: 无 cron 引用 + 无活脚本引用）。此前记的「60」是另一口径。
- **拒绝「移走让审计安静」** —— 移走 40+ 惰性文件只是拿删功能换指标。
  定性台账的价值在【每项有结论 + 可机械复核】，不在文件消失。

## 二、判据: 能力可达性（不是"名字有没有被引用"）
从【启用的 cron】出发做 6 层传递闭包（**374 个脚本**），再看每个孤儿的载荷是否落在闭包内：
- 落在 → `keep-manual`（能力另有活入口，本文件=手工/应急入口）→ **27 个**
- 不落 → `keep-unwired`（能力真未接线，启用需挂调度）→ **28 个**

这条判据修掉了两版错判据：
- v1「载荷 .py 是否存在」→ FP 3 个（`X.py`/`some_file.py` 是模板占位、`$HOME` 前缀被正则吃掉）
- v3「载荷是否被 cron 引用」→ 全 0，因为 **cron 的 script 常指向别的 wrapper**，不是 .py
  ⇒ 必须做**可达闭包**，不能只看一层。

## 三、落地物
- 新工具 `~/.hermes/scripts/orphan_disposition_audit.py`：审计 / `--stamp` / `--selftest`(L2 3/3)
- 标记格式（机械可读）: `# ORPHAN-DISPOSITION: <status> | evidence: ... | date: YYYY-MM-DD`
- **FP 实测 0/5**（5 个确定非孤儿过判据无误判）→ 登记 A14 → **19/19 · 真未测 0**
- `less_is_more_audit` ③ 块改为报「未定性 / 已定性」→ **未定性 0** 成为一个真数

## 四、连带修掉的问题（都不在计划内）
1. **`detector_audit` 四桶重复计数**: `9+4+5+10=28 > 19 个检测器` —— 上一轮留的陈旧循环
   把已归类的又塞回「真未测」。删掉 + **加闭合 assert**（四桶和必须 == 发现数）。
2. **5 处「死||」真 bug**（新判据 FP=0/5 实测）: `payload || echo "提示" || on_fail $?`
   —— echo 恒成功 → **上报从未触发过**。比裸 `|| true` 更隐蔽（它有文案，像已处理）。
3. **门禁 FP: 扫到注释行** —— 注释里的示例代码被判据命中。修: 判据链末端加
   `grep -vE '^[0-9]+:[[:space:]]*#'`（行号保留，勿用 `grep -v | grep -n` 否则行号错位）。
4. **门禁加 DEAD-OR 判据** → 反例自证 **9/9**（含 3 个注释反例 + DEAD-OR 正例）。
5. **`scripts/.git/hooks/pre-commit` 与规范副本不一致** → 4 仓统一（`66ed3ec6`）。
6. **我自己引入的死变量**: 给 `data_asset_refresh.sh` 加 `FAILED=1` 却忘了出口
   → 补 `[ "${FAILED:-0}" = 1 ] && exit 1`。**改了失败传导就必须有出口。**

## 五、可复用结论
1. **能力可达性 > 引用计数**: "有没有被引用"是一层的；"从活入口能不能走到"才是能力是否活着。
2. **`|| echo ... ||` 是新的静默失败形状** —— 有文案的假兜底比 `|| true` 危险。
3. **扫描器一律不得扫注释行**（行号必须保留）—— 反例自证要含「注释含病灶 → 应放行」。
4. **新判据先量 FP**（本次 0/5）；**台账数字先问数的什么**（本次 4 桶重叠）。
5. **改动失败传导 = 必须同时给出口**，否则自己造出新的假装置。

## 六、仍未决（需老板拍板）
`keep-unwired` **28 个**"建了没接线"的能力（如 `hold_position_check` 盘中持仓突破检查、
`market_alert` 异动预警、`pullback_monitor` 盘中回调、`wiki_freshness` 新鲜度、
`three_heart_collector` 晨报预采集、`intraday_dragon` 盘中异动…）。
**启用 = 挂调度 = 会改分析流程，按规矩必须先批准。** 每个的 cron 写法已就绪。


---
**相关概念**: [[买卖点判断]]
