{ "evidence_id": "20260919-t2n-consistency-judgment", "step": "乙-30(a) 收尾:一致性工具首轮判读 + 作门禁 + 从 _build 移出留痕", "artifacts_outside_repo": { "tool": "D:\\桌面\\金融\\_consistency.py", "output": "D:\\桌面\\金融\\_consistency.txt" }, "tool_relocation": { "from": "客服agent/_build/_consistency.py", "to": "_consistency.py", "reason": "_build/ 已被 D1.1 §13 第九轮宣布「勿重跑」,脚本留在那里会被连带误执行", "build_dir_kept": true, "build_dir_kept_reason": "客服agent/_build/README-已过期-请勿重新生成.txt(2011 字节)已在 D1.1 §13 登记留痕;删除会丢留痕 ⇒ 修正早前「删 _build」建议,改为保留(本轮如实登记该建议修正)" }, "judgment": { "real_residue_fixed": [ { "site": "客服agent/D2.1-客服Agent执行Todolist.md:569", "issue": "D-03 仍写成 over-fetch 在办任务,与 D2.2 FR-CS-033(v2.5 取消 over-fetch)冲突", "fix": "改为「分区裁剪取回口径 + 『过滤后为空』独立指标(v2.5 取消 over-fetch;隔离机制并入 H-05)」" }, { "site": "客服agent/D2.1-客服Agent执行Todolist.md:682", "issue": "S-6 理由(必须 over-fetch)已失效", "fix": "保留「D-01/D-02/D-03 同批」串行约束并显式标注 v2.5 口径修正" }, { "site": "客服agent/D2.3-客服Agent开发计划.html:557", "issue": "批次 D 依赖链仍写 D-03 over-fetch", "fix": "改为 D-03 取回口径 +「过滤后为空」独立指标(v2.5 取消 over-fetch)" }, { "site": "客服agent/D2.3-客服Agent开发计划.html:692", "issue": "S-6 同 D2.1", "fix": "同 D2.1 的 HTML 版" }, { "site": "客服agent/D2.4-客服Agent知识库设计方案.html:475", "issue": "§0.3 术语表把 over-fetch 当现行术语(同表 visibility / tiers 均为现行)", "fix": "补「❌ v1.3 起取消——改由集合内分区裁剪结构性保证(见 §7.2.1)」" } ], "judged_not_residue": [ { "term": "actor.py / knowledge_tier.py", "verdict": "非残留——工具标签贴错", "evidence": "仓库 app/core/ 下两者均不存在;它们是 D2.1 G-01 / G-03 两条 [ ] 待办任务声明要「新增」的文件" }, { "term": "subject_type", "verdict": "非残留", "evidence": "仓库源码 subject_type 0 命中 / visibility 48 命中;D2.4 §0.3 明示权限模型是「subject_type(主体,运行时推导)+ visibility(档位,入库标注)」两轴 ⇒ 不是旧字段名。登记为『术语—代码落差』观察项" }, { "term": "low_score_repeat / 「连续 2 轮兜底」", "verdict": "非残留(正常留痕)", "evidence": "全部命中位于「已删除 / 零残留取证 / 白名单收口」语境(D1.6 §4.21)" }, { "term": "投顾", "verdict": "非残留(正常留痕)", "evidence": "D2.2 命中 11 行全部为「已于 2026-09-17 整体清除 / 底座保留性确认 / 风险表」语境;D2.3、D2.1 同型。工具 §三 的『疑似仍在依赖』是关键词启发式,首轮判读真残留 0" } ], "real_residue_count": 5, "judged_not_residue_count": 4 }, "eol_evidence": { "客服agent/D2.1-客服Agent执行Todolist.md": { "before": { "crlf": 0, "lf": 860 }, "after": { "crlf": 0, "lf": 860 }, "bytes": 125813 }, "客服agent/D2.3-客服Agent开发计划.html": { "before": { "crlf": 893, "lf": 0 }, "after": { "crlf": 893, "lf": 0 }, "bytes": 67874 }, "客服agent/D2.4-客服Agent知识库设计方案.html": { "before": { "crlf": 0, "lf": 1758 }, "after": { "crlf": 0, "lf": 1758 }, "bytes": 148020 } }, "gate": { "kind": "退出码门禁(0 = 通过,1 = 拦截)", "positive": { "returncode": 0, "verdict_lines": [ " ✅ 通过:14 条关键事实无遗漏 / 需求编号事实在位 / 失效锚点 0 / 交叉引用全齐 / 四文件齐备" ], "rerun_after_trace_writeback": true }, "negative_test": { "mutation": "需求 去 FR-CS-052 / 计划 插假 TOC 锚点 #bogus-anchor-xyz / 知识库 去交叉引用『客服Agent需求文档』", "returncode": 1, "caught_items": [ "· actor.py / knowledge_tier.py 是 G-01 / G-03 的**待新增文件**(在办任务产物),命中即正常", "· subject_type 是「会话主体」轴的设计术语(`D2.4` §0.3 明示与 visibility 不同轴);代码零命中属设计期概念", "· over-fetch / low_score_repeat / 「连续 2 轮兜底」是真作废概念,必须逐条看语境", "· 首轮真残留:`D-03 over-fetch` 在办任务链(`D2.1` 2 处 + `D2.3` 2 处)——已修", "· [需求] over-fetch(v2.5 取消,改分区裁剪) —— 6 处", "· [计划] over-fetch(v2.5 取消,改分区裁剪) —— 4 处", "· [Todo] over-fetch(v2.5 取消,改分区裁剪) —— 6 处", "· [知识库] over-fetch(v2.5 取消,改分区裁剪) —— 18 处", "· [需求] subject_type(会话主体轴概念名,与 visibility 不同轴) —— 12 处", "· [知识库] subject_type(会话主体轴概念名,与 visibility 不同轴) —— 11 处", "· [需求] actor.py(G-01 待新增文件,非旧文件名) —— 5 处", "· [计划] actor.py(G-01 待新增文件,非旧文件名) —— 2 处", "· [Todo] actor.py(G-01 待新增文件,非旧文件名) —— 3 处", "· [需求] knowledge_tier.py(G-03 待新增文件,非旧文件名) —— 1 处", "· [计划] knowledge_tier.py(G-03 待新增文件,非旧文件名) —— 3 处", "· [Todo] knowledge_tier.py(G-03 待新增文件,非旧文件名) —— 2 处", "· [知识库] knowledge_tier.py(G-03 待新增文件,非旧文件名) —— 2 处", "· [需求] low_score_repeat(v2.5 删除) —— 1 处", "· [Todo] low_score_repeat(v2.5 删除) —— 3 处", "· [需求] 连续 2 轮兜底(v2.5 删除) —— 2 处", "· [计划] 连续 2 轮兜底(v2.5 删除) —— 1 处", "· [Todo] 连续 2 轮兜底(v2.5 删除) —— 5 处", "· 关键事实全文档缺失:FR-CS-052", "· 需求文档缺失编号事实:FR-CS-052", "· 失效锚点:计划 #bogus-anchor-xyz", "· 交叉引用缺失:知识库 → 客服Agent需求文档" ], "verdict": "三类问题全部被拦 ✅" }, "non_gating_sections": [ "§二-b 已作废概念(只报数)", "§三 投顾残留(只报数)" ] }, "tool_state": { "_consistency.py": { "bytes": 7824, "sha256_16": "c918621444e9406e", "eol": "LF(本轮把 1 处 CRLF 统一为 LF)" }, "_consistency.txt": { "bytes": 15789 } }, "temp_scripts_remaining": 2, "post_gate_writeback": { "note": "门禁跑通后,又向 D1.6 写 §4.22、向 D2.1 写 v6.9(D2.1 是门禁对象之一)⇒ 重跑门禁复核并回填本字段", "d21_bytes": 128452, "d16_bytes": 165195 } }