# 诊断流程样例:Night Gym 输入递归过滤与产物验收 ## 工具入口 ```bash cd /Users/bytedance/.codex/night-gym/runs/2026-05-07 python3 ../tools/validate_run.py --run-dir . --input input.json --strict ``` ## 输入来源 | 来源 | 用途 | | --- | --- | | `input.json` | 检查 session 是否混入 Night Gym 自己的 prompt、子分析日志和完成标志 | | `out/sub/*.context.json` | 检查候选 evidence 是否来自允许的真实工作片段 | | `out/sub/*.json` | 校验子分析结构、枚举、证据长度和 example 是否完整 | | `out/sub/*.log` | 确认每个子实例是否真的输出 `SUBAGENT_DONE: <id>` | | `out/manifest.json` | 聚合前检查是否把失败候选或递归噪音写进早间复盘 | ## 核心检查步骤 1. 扫描所有 session,给片段打 `source_kind`:`user_work`、`agent_reflection`、`nightgym_internal`、`tool_output`。 2. 命中 `Codex Night Gym — 主分析任务`、`Night Gym 子主题分析`、`SUBAGENT_DONE`、`NIGHTGYM_DONE`、`out/sub/` 或 cwd 在 `.codex/night-gym/runs/` 下时,标记为 `nightgym_internal`。 3. 对非 `nightgym-*` 候选,如果 evidence 主要来自 `nightgym_internal`,直接失败并从候选清单中跳过。 4. 对 `nightgym-*` 候选,允许保留内部片段,但要求 summary 明确说明这是元流程问题,不是用户业务工作痛点。 5. 验收子分析产物:JSON 可解析、id 一致、kind/risk/value 枚举合法、evidence 2-5 条且每条不超过 200 字、log 含完成标志。 ## 成功信号 ```json { "status": "pass", "filtered_internal_fragments": 18, "validated_candidates": 5, "blocked_candidates": [] } ``` ## 失败信号 ```json { "status": "fail", "blocked_candidates": [ { "id": "some-business-topic", "reason": "evidence dominated by nightgym_internal fragments", "markers": ["Night Gym 子主题分析", "SUBAGENT_DONE"] } ] } ``` ## 建议落地路径 先把脚本作为独立验收器放到 `tools/validate_run.py`,由主流程在聚合前调用;等连续 3 次运行没有误伤后,再把 `source_kind` 写入 `build_contexts.py` 的候选构建阶段,让递归过滤前置。