# Night Gym 自身记录过滤与产物验收
- id: `nightgym-run-integrity-doctor`
- kind: `diagnostic-tool`
- risk: `low`
- value: `high`
## 1.1 摘要
这个主题有明确价值:片段同时指向两类 Night Gym 自身问题,一是扫描输入被上一轮 Night Gym 主流程和子分析日志污染,二是无人值守子任务缺少稳定的产物验收信号。它适合落成一个轻量诊断工具,在生成候选前识别自引用记录,在聚合前验证子分析 JSON、日志完成标志和 evidence 质量。
## 1.2 证据
| session_id | cwd | snippet |
| --- | --- | --- |
| 019df9bb-991c-7be0-9ff8-e4eb227a26d9 | ~/.codex/night-gym/runs/2026-05-05 | reflection: 输出目录已存在。我现在写入一个保守的诊断工具结论:重点不是改模型判断,而是在 Night Gym 扫描入口先识别并剔除自己的主流程/子分析记录。 |
| 019df9bb-991c-7431-bcf4-fd66fd8bb7fa | ~/.codex/night-gym/runs/2026-05-05 | reflection: 这个主题不是噪音:片段里同时有明确目标文件和“没有最终消息/没有保存信号”的缺口,正好适合做无人值守任务的产物验收。 |
| 019df9b9-f70a-7f31-8f7a-9ff2a75fc7e5 | ~/.codex/night-gym/runs/2026-05-05 | user/session pattern: input.json 里连续出现 Night Gym 主分析任务和多个 Night Gym 子主题分析 session,容易把上一轮健身房自己的 prompt、子实例日志和 reflection 当作真实用户工作痛点。 |
| 019df9bb-991d-78d0-bbac-b6c6c3b923bc | ~/.codex/night-gym/runs/2026-05-05 | reflection: 这个主题不是噪音:片段里同时出现了重复请求、安装来源不清、网络查询失败、以及缺少最终核验,正好适合做成一个升级诊断工具。 |
## 1.3 拟议改动
1. 新增工具入口 `python3 tools/nightgym_run_integrity_doctor.py --run ~/.codex/night-gym/runs/YYYY-MM-DD --input input.json`。输入来源为当次 `input.json`、`out/sub/*.context.json`、`out/sub/*.log`、`out/sub/*.json` 和最终 `out/manifest.json`;输出 `out/integrity_report.json` 与一段可粘贴进早间复盘的 markdown 摘要。
2. 在 `prepare_contexts.py` 或 Night Gym 上游扫描入口加入 self-session 分类器:检查 `cwd` 是否匹配 `.codex/night-gym/runs/`,用户消息是否包含 `Codex Night Gym`、`SUBAGENT_PROMPT`、`候选主题`、`SUBAGENT_DONE`、`NIGHTGYM_DONE`,以及 assistant/reflection 是否主要描述 Night Gym 自身产物。默认先标记并从真实用户痛点候选里排除,同时在报告里保留被过滤 session 的 id、cwd、命中规则和数量。
3. 在 `spawn_subagent.sh` 后或聚合阶段加入产物验收:逐个检查 `out/sub/<id>.json` 是否存在、JSON 是否可解析、`id/kind/title/summary/evidence/proposed_changes/risk/value/example_md` 是否齐全、`kind=diagnostic-tool` 的 proposed_changes 是否覆盖工具入口/输入来源/核心步骤/成功失败信号/落地路径、日志是否包含 `SUBAGENT_DONE: <id>`。失败信号为缺文件、schema 缺字段、日志无完成标志、evidence 为空或 snippet 超长。
4. 把验收结果接入 `MASTER_PROMPT.md` 的聚合规则:仅聚合通过验收的子分析;未通过的候选写入 `out/rejected_subagents.json`,不要静默跳过。成功信号为 `integrity_report.json` 中 `self_sessions_filtered > 0` 时可解释、`subagent_outputs.failed == 0`、最终 `manifest.json` 的候选都能追溯到非 Night Gym 原始用户 session。
## 1.4 示例
# 诊断流程样例:Night Gym 自身记录过滤与产物验收
## 入口
```bash
python3 tools/nightgym_run_integrity_doctor.py \
--run ~/.codex/night-gym/runs/2026-05-06 \
--input ~/.codex/night-gym/runs/2026-05-06/input.json
```
## 检查链路
| 阶段 | 输入 | 核心检查 | 成功信号 | 失败信号 |
| --- | --- | --- | --- | --- |
| 自身记录过滤 | `input.json` sessions | 按 cwd、prompt 标志词、完成标志词识别 Night Gym 主流程/子分析记录 | 真实候选不再引用 Night Gym prompt 或子实例日志 | evidence 来自 `.codex/night-gym/runs/` 且只描述 Night Gym 自己 |
| 子分析验收 | `out/sub/*.log` + `out/sub/*.json` | 校验 `SUBAGENT_DONE`、JSON schema、diagnostic-tool 必填设计项 | 每个通过候选都有完成标志和可解析 JSON | 缺文件、日志无完成标志、字段缺失、snippet 过长 |
| 聚合守门 | `out/manifest.json` | 候选 evidence 回溯到非自身 session,失败候选进入 rejected 列表 | manifest 只保留验收通过候选 | 静默跳过失败子任务,或把自分析记录当用户痛点 |
## 期望报告
```json
{
"self_sessions_filtered": 6,
"filter_rules": {
"cwd_nightgym_run": 4,
"prompt_marker": 2,
"done_marker": 3
},
"subagent_outputs": {
"checked": 5,
"passed": 5,
"failed": 0
},
"manifest_traceability": "pass"
}
```
## 落地路径
1. 先以只读诊断工具落地,不改变候选生成结果,只输出 `out/integrity_report.json`。
2. 连续两次运行确认误杀率可接受后,把 self-session 过滤接入扫描入口。
3. 把子分析验收接入聚合阶段:失败候选进入 `out/rejected_subagents.json`,不得进入 `manifest.json`。