文档(实现回顾): 专项检查计划与台账收口,标注退场对象与处置分布

- 计划状态由「待执行」改为已执行完毕并冻结;并行协调补复检结果;
  旧库迁移模块行标注 2026-09-18 整体退场;附录 A/B 标注已转正为审查标准
- 台账新增「收口与现状(2026-09-18)」:处置链闭环、294 条裁决处置分布
  (修正 203/新机制消除 43/保留 37/条件性延期 7/撤回不实前提 4)、
  执行边界、位置时效、对象退场与过程材料留存口径
- LM-01~LM-07 与模块结论表逐行标注「已退场」;门禁结论与处置声明
  标注检查期时点;两文件补导航元信息,目录索引描述列同步
This commit is contained in:
zizi 2026-09-18 16:38:51 +08:00
parent 8a44364539
commit 8e228af8fc
3 changed files with 33 additions and 21 deletions

View File

@ -1,8 +1,9 @@
<!-- 导航元信息: {"内容描述": "2026-09-16 全仓专项检查的 294 条原发现、复核更正与收口状态", "使用场景": "追溯某条检查发现的原始位置与最终处置时", "使用要求": "原级别分布不是当前未修数;位置为检查时快照,路径以当前仓库为准"} -->
# 全仓专项检查台账 # 全仓专项检查台账
> 日期:2026-09-16 | 编排:主代理 | 依据:[专项检查-计划.md](专项检查-计划.md) 第 5 节严重度分级、第 6 节报告格式 > 日期:2026-09-16 | 编排:主代理 | 依据:[专项检查-计划.md](专项检查-计划.md) 第 5 节严重度分级、第 6 节报告格式
> 范围:`src/muse`、`tests`、`web`、`数据库`、`工具`、`.agent`、`docs`、根文件;不含缓存、构建产物、小说正文与数据库内容。 > 范围:`src/muse`、`tests`、`web`、`数据库`、`工具`、`.agent`、`docs`、根文件;不含缓存、构建产物、小说正文与数据库内容。
> **本台账保存2026-09-16原发现及复核更正,不再单独充当修复输入;2026-09-17已按用户裁决进入[优化执行](../系统架构/新版设计/优化执行合同.md)。下表是原级别分布,不能当作尚未修复数。** > **本台账保存 2026-09-16 原发现及复核更正,不再单独充当修复输入;2026-09-17 已按用户裁决进入[优化执行](../系统架构/新版设计/优化执行合同.md),2026-09-18 收口(见下节)。下表是原级别分布,不能当作尚未修复数。**
## 复核更正(2026-09-17) ## 复核更正(2026-09-17)
@ -16,6 +17,15 @@
逐条三值判定及原始日志:`/tmp/muse-qc-review-20260916-2112/`。已裁决的全量编号处置、五要素与依赖计划已留存于实施区 `.agents.local/优化-20260917/已裁决计划/`;新增全局设计问题一并承接,不能只按原严重度逐项打补丁。原模块报告保留检查时表述,本节纠偏优先于其冲突结论。 逐条三值判定及原始日志:`/tmp/muse-qc-review-20260916-2112/`。已裁决的全量编号处置、五要素与依赖计划已留存于实施区 `.agents.local/优化-20260917/已裁决计划/`;新增全局设计问题一并承接,不能只按原严重度逐项打补丁。原模块报告保留检查时表述,本节纠偏优先于其冲突结论。
## 收口与现状(2026-09-18)
- **处置链已闭环**:294 条主编号(另 12 条并入编号)经 2026-09-17 用户六项裁决后进入[优化执行合同](../系统架构/新版设计/优化执行合同.md),由 O00–O14 工作包承接;逐条处置、五要素与验收断言存于本地实施区(不入库),本条只记结论与边界。
- **裁决处置分布(294 条主编号)**:修正 203、由新机制消除 43、保留 37、条件性延期 7、撤回不实前提 4。原 306 编号中的 12 条为并入别名;另有 7 组前期系统复核与 16 项全局机制发现随批承接。
- **执行与边界**:O00–O14 的离线可验部分已按六批提交(`0658d17`、`d909d1b`、`ae02fd1`、`af08551`、`0260bcd`、`c154ca9`)合入 `main`,其后完成测试成本优化与旧库迁移退场;真实接缝验收(真实模型、浏览器、隔离 PG 真接缝、发布包与恢复演练)按各自批次记录,未完成部分不计作已修。
- **位置时效**:条目位置为 2026-09-16 检查时快照。优化执行重组了提示词、模块与测试文件结构,**路径一律以当前仓库为准**;本台账不逐条追改路径。
- **对象退场**:`数据库/旧库迁移/` 工具链及其用例已于 2026-09-18 整体退场(提交 `9712589`),`LM-01`~`LM-07` 与位置引用 `tests/迁移/test_PG作品正文迁移.py`、`test_作品资产迁移.py`、`test_混合知识分流.py`、`test_隔离目标台账.py` 等已删文件的条目(`TS-20`、`TS-50`、`TS-55`、`TS-61`、`TS-62`)失去核查对象,保留为历史发现。
- **过程材料留存口径**:14 份模块报告(`专项检查-报告-*.md`)与 `/tmp` 探针日志均为过程材料,受 `.gitignore` 忽略、不入版本库;台账中指向它们的路径仅在本地可读时有效。
## 0. 汇总 ## 0. 汇总
| 严重度 | 原始条目 | 合并同事实后 | 说明 | | 严重度 | 原始条目 | 合并同事实后 | 说明 |
@ -42,7 +52,7 @@
| `DR-02` | `JK-07` | `AGENTS.md:53` 结构契约指向已退出路径 + 「23 型」实为 24 | | `DR-02` | `JK-07` | `AGENTS.md:53` 结构契约指向已退出路径 + 「23 型」实为 24 |
| `TS-05` | `AG-11` | `tests/架构/test_模块依赖.py:353` 技能登记断言恒真 | | `TS-05` | `AG-11` | `tests/架构/test_模块依赖.py:353` 技能登记断言恒真 |
## 1. 门禁结论(主代理实测,2026-09-16) ## 1. 门禁结论(主代理实测,2026-09-16 历史快照)
| 门禁 | 首轮 20:30 | 生成物刷新后 20:42 | 证据 | | 门禁 | 首轮 20:30 | 生成物刷新后 20:42 | 证据 |
|---|---|---|---| |---|---|---|---|
@ -155,10 +165,10 @@
| **TL-03** | 工具 | 工具/资源登记.json:183-193、235;工具/构建资源包.py:115-116、138;src/muse/资源加载.py:134 | D7 | V0041、V0042 既直登「资源」(打包路径 迁移/…)又落在「迁移目录」投影;实测 运行资源.zip 85 条含 迁移/ 2 条、清单 131 条含 迁移/ 45 条,而 `打开资源` 对 `迁移/` 前缀只读目录投影,这 2 条 zip 条目永不可达;`已打包[打包路径]` 在 :116 与 :138 被静默覆盖(对比 :118-119 能力资源有显式查重) | 删除这 2 条直登,或对同名打包路径加「重复即失败」校验 | 需用户授权 | | **TL-03** | 工具 | 工具/资源登记.json:183-193、235;工具/构建资源包.py:115-116、138;src/muse/资源加载.py:134 | D7 | V0041、V0042 既直登「资源」(打包路径 迁移/…)又落在「迁移目录」投影;实测 运行资源.zip 85 条含 迁移/ 2 条、清单 131 条含 迁移/ 45 条,而 `打开资源` 对 `迁移/` 前缀只读目录投影,这 2 条 zip 条目永不可达;`已打包[打包路径]` 在 :116 与 :138 被静默覆盖(对比 :118-119 能力资源有显式查重) | 删除这 2 条直登,或对同名打包路径加「重复即失败」校验 | 需用户授权 |
| **TL-01** | 工具 | 工具/资源登记.json:236-263;.agent/skills/操作/写下一章/SKILL.md:1-6;.agent/skills/操作/核对内容一致性/SKILL.md:1-6;tests/架构/test_模块依赖.py:332-337、353 | D7 | 两个操作技能的 frontmatter 声明完整(`id: write-next-chapter`、`commands: [start_writing_task,read_task,read_task_events]`;另一条 `read_candidate_review_report`),三条命令均在合同 211 个 operationId 内,却未进「能力文件」;实测 `能力/目录.json` 的 `operation` 仅 22 项、不含二者。唯一相关门禁 `登记能力 = {Path(条目).name ...}` 取到的是 "SKILL.md",`assert Path(相对).name in 登记能力` 对 `.agent` 技能恒真,检不出漏登记 | 补登这两条能力文件;把 `test_模块依赖.py:332-337` 改为按技能身份/目录名比较,使漏登记可见 | 需用户授权 | | **TL-01** | 工具 | 工具/资源登记.json:236-263;.agent/skills/操作/写下一章/SKILL.md:1-6;.agent/skills/操作/核对内容一致性/SKILL.md:1-6;tests/架构/test_模块依赖.py:332-337、353 | D7 | 两个操作技能的 frontmatter 声明完整(`id: write-next-chapter`、`commands: [start_writing_task,read_task,read_task_events]`;另一条 `read_candidate_review_report`),三条命令均在合同 211 个 operationId 内,却未进「能力文件」;实测 `能力/目录.json` 的 `operation` 仅 22 项、不含二者。唯一相关门禁 `登记能力 = {Path(条目).name ...}` 取到的是 "SKILL.md",`assert Path(相对).name in 登记能力` 对 `.agent` 技能恒真,检不出漏登记 | 补登这两条能力文件;把 `test_模块依赖.py:332-337` 改为按技能身份/目录名比较,使漏登记可见 | 需用户授权 |
| **TL-02** | 工具 | 工具/资源登记.json:236-263;工具/构建资源包.py:49;docs/系统架构/新版设计/编排与能力资源.md:41 | D7 | 46 个 `SKILL.md` 中 22 个无 `id/category/contract_version` 声明:7 个操作技能(导入资料/拆解书稿/整理写作方法/检查与维护拆书结果/确认事实增量/维护故事世界/采集资料与榜单,frontmatter 只有 `name`+`description`)+ 15 个写作·规划·诊断方法技能;`目录: dict = {"role": {}, "method": {}, "operation": {}}` 的 method 桶实测恒为 0 项 | 补声明并登记,或明确「方法技能不进能力目录」后删除 method 死桶 | 需用户授权(跨 .agent 与 工具,可能与 .agent 报告重叠) | | **TL-02** | 工具 | 工具/资源登记.json:236-263;工具/构建资源包.py:49;docs/系统架构/新版设计/编排与能力资源.md:41 | D7 | 46 个 `SKILL.md` 中 22 个无 `id/category/contract_version` 声明:7 个操作技能(导入资料/拆解书稿/整理写作方法/检查与维护拆书结果/确认事实增量/维护故事世界/采集资料与榜单,frontmatter 只有 `name`+`description`)+ 15 个写作·规划·诊断方法技能;`目录: dict = {"role": {}, "method": {}, "operation": {}}` 的 method 桶实测恒为 0 项 | 补声明并登记,或明确「方法技能不进能力目录」后删除 method 死桶 | 需用户授权(跨 .agent 与 工具,可能与 .agent 报告重叠) |
| **LM-05** | 旧库迁移 | docs/系统架构/新版设计/目标文件清单.json | D1/D7 | `PG作品映射.py`、`PG台账接线.py`、`转换PG作品.py`、`转换PG正文.py` 四个文件不在清单内,也没有文件设计逐文件合同小节 | 其余 17 个模块 .py 全部登记(`src/muse` 为 300/300),只有这 4 个 PG 承接文件漏登;`docs/系统架构/新版设计/文件设计/数据库与迁移.md` 的树与逐文件小节同样缺这 4 条。四者在代码中有真实消费者(如 导入新库.py:361-362、映射台账.py:90/268、核对结果.py:65),不是死代码。补登清单与文件合同即可,不动代码 | 无需授权 | | **LM-05** | 旧库迁移(已退场) | docs/系统架构/新版设计/目标文件清单.json | D1/D7 | `PG作品映射.py`、`PG台账接线.py`、`转换PG作品.py`、`转换PG正文.py` 四个文件不在清单内,也没有文件设计逐文件合同小节 | 其余 17 个模块 .py 全部登记(`src/muse` 为 300/300),只有这 4 个 PG 承接文件漏登;`docs/系统架构/新版设计/文件设计/数据库与迁移.md` 的树与逐文件小节同样缺这 4 条。四者在代码中有真实消费者(如 导入新库.py:361-362、映射台账.py:90/268、核对结果.py:65),不是死代码。补登清单与文件合同即可,不动代码 | 无需授权 |
| **LM-03** | 旧库迁移 | 数据库/旧库迁移/切换检查.py:24 | D1 | 全文件只返回 `核对` + `source_delta` + `data_checks_passed` + 两个恒 False;无任何回退条件判定 | 文件合同 `docs/系统架构/新版设计/文件设计/数据库与迁移.md:421-422` 声明该文件「意图/职责:增量对账与回退条件」,实现里没有回退条件。补回退条件判定,或把合同文字改为「增量对账(不含回退条件)」 | 无需授权(改文档)/需用户授权(加判定) | | **LM-03** | 旧库迁移(已退场) | 数据库/旧库迁移/切换检查.py:24 | D1 | 全文件只返回 `核对` + `source_delta` + `data_checks_passed` + 两个恒 False;无任何回退条件判定 | 文件合同 `docs/系统架构/新版设计/文件设计/数据库与迁移.md:421-422` 声明该文件「意图/职责:增量对账与回退条件」,实现里没有回退条件。补回退条件判定,或把合同文字改为「增量对账(不含回退条件)」 | 无需授权(改文档)/需用户授权(加判定) |
| **LM-01** | 旧库迁移 | 数据库/旧库迁移/知识记录分流.py:350 | D1/D3 | `work_id = 行.get("work_id")` / `if work_id is None: raise 迁移错误("unknown_use", …)`;而 `旧结构/SQLite/0003_snapshots.sql:1` 的 `snapshots` 只有 id/kind/payload_json/created_at | `snapshots` 的 K08 镜像分支(同文件 489、505 行)与 `docs/系统架构/新版设计/数据模型/旧知识记录分流.md:92`「K08 承接 snapshots」是死声明:每条 snapshots 记录必在 351 行前抛错并被 535 行兜成「隔离/unknown_use」。二选一:把快照作品身份改为可选映射来源,或删掉 snapshots 承接声明 | 需用户授权 | | **LM-01** | 旧库迁移(已退场) | 数据库/旧库迁移/知识记录分流.py:350 | D1/D3 | `work_id = 行.get("work_id")` / `if work_id is None: raise 迁移错误("unknown_use", …)`;而 `旧结构/SQLite/0003_snapshots.sql:1` 的 `snapshots` 只有 id/kind/payload_json/created_at | `snapshots` 的 K08 镜像分支(同文件 489、505 行)与 `docs/系统架构/新版设计/数据模型/旧知识记录分流.md:92`「K08 承接 snapshots」是死声明:每条 snapshots 记录必在 351 行前抛错并被 535 行兜成「隔离/unknown_use」。二选一:把快照作品身份改为可选映射来源,或删掉 snapshots 承接声明 | 需用户授权 |
| **LM-02**(并入 TS-10) | 旧库迁移 | 数据库/旧库迁移/知识记录分流.py:373 | D1/D3 | `if 行.get("source_status") not in {"active","authorized"} or 行.get("source_action_policy") != "allowed":`;`旧结构/SQLite/0001_init.sql:56` 的 `cards` 无这两列 | 非 embedding 的 `cards` 行必在 373 行抛 `permission_conflict`,到不了 489 行镜像分支。用例 `tests/迁移/test_混合知识分流.py:339-355` 用合成行(含 source_status/action_policy/draft_payload,见同文件 78-91 行)断言 K08 镜像通过,断言在真实旧 SQLite 结构上不成立。补一条真实 DDL 形状的卡表用例,或按真实列改判定 | 需用户授权 | | **LM-02**(并入 TS-10) | 旧库迁移(已退场) | 数据库/旧库迁移/知识记录分流.py:373 | D1/D3 | `if 行.get("source_status") not in {"active","authorized"} or 行.get("source_action_policy") != "allowed":`;`旧结构/SQLite/0001_init.sql:56` 的 `cards` 无这两列 | 非 embedding 的 `cards` 行必在 373 行抛 `permission_conflict`,到不了 489 行镜像分支。用例 `tests/迁移/test_混合知识分流.py:339-355` 用合成行(含 source_status/action_policy/draft_payload,见同文件 78-91 行)断言 K08 镜像通过,断言在真实旧 SQLite 结构上不成立。补一条真实 DDL 形状的卡表用例,或按真实列改判定 | 需用户授权 |
| **TS-06** | 测试与资源 | `tests/用例清单.json`(1358 条机械核对) | D1 | 238 个用例符号带 pytest 参数行却无 `parameter_ids`(734 个实际参数行未登记);249 条登记无 `then` | 与《测试隔离》§3「与…参数行绑定」不一致(另 85 条登记了、5 个同符号多 ID 也登记了):补齐或把「参数行可选」写进规则;缺 `then` 者补预期结果 | 需用户授权 | | **TS-06** | 测试与资源 | `tests/用例清单.json`(1358 条机械核对) | D1 | 238 个用例符号带 pytest 参数行却无 `parameter_ids`(734 个实际参数行未登记);249 条登记无 `then` | 与《测试隔离》§3「与…参数行绑定」不一致(另 85 条登记了、5 个同符号多 ID 也登记了):补齐或把「参数行可选」写进规则;缺 `then` 者补预期结果 | 需用户授权 |
| **TS-02** | 测试与资源 | `tests/单元/test_备份发布身份.py:20-31`(20:35 快照) | D1 | `with pytest.raises(备份恢复错误, match="构建身份"):` | **根因**:门禁颜色取决于带外 `make 生成`(20:42 主代理经授权重生成后转绿并复验)。目标守卫(`备份恢复.py:216`)被 `:215 _核对安装` 抢先(`:311-312` 抛「当前程序、资源或配置不一致…」),用例未自建「代码哈希与安装清单一致」前置、`核对备份` 被 3 键替身整体替换:把生成物耦合写成明文纪律并加固前置 | 需用户授权 | | **TS-02** | 测试与资源 | `tests/单元/test_备份发布身份.py:20-31`(20:35 快照) | D1 | `with pytest.raises(备份恢复错误, match="构建身份"):` | **根因**:门禁颜色取决于带外 `make 生成`(20:42 主代理经授权重生成后转绿并复验)。目标守卫(`备份恢复.py:216`)被 `:215 _核对安装` 抢先(`:311-312` 抛「当前程序、资源或配置不一致…」),用例未自建「代码哈希与安装清单一致」前置、`核对备份` 被 3 键替身整体替换:把生成物耦合写成明文纪律并加固前置 | 需用户授权 |
| **TS-11** | 测试与资源 | `tests/单元/test_受控文件CAS与恢复.py:21-22` | D1 | `with pytest.raises(受控文件错误): 管理器.写入(身份, 哈希, b"different")` | 命中的是「输入字节与授权哈希不符」前置校验,不是「内容哈希排他发布」冲突分支;该分支错误串「现有暂存内容不一致」(`src/muse/基础设施/受控文件.py:144`)在全仓测试零出现 → CAS 保护零覆盖 | 无需授权 | | **TS-11** | 测试与资源 | `tests/单元/test_受控文件CAS与恢复.py:21-22` | D1 | `with pytest.raises(受控文件错误): 管理器.写入(身份, 哈希, b"different")` | 命中的是「输入字节与授权哈希不符」前置校验,不是「内容哈希排他发布」冲突分支;该分支错误串「现有暂存内容不一致」(`src/muse/基础设施/受控文件.py:144`)在全仓测试零出现 → CAS 保护零覆盖 | 无需授权 |
@ -298,8 +308,8 @@
| **TL-06** | 工具 | 工具/维护索引.py:269-274;Makefile:74 | D1 | `--检查` 解析后从未被引用(死参数);`--写入` 仅 `print("索引写入:当前无可写生成物,执行幂等检查")`,随后执行与默认完全相同的只读检查。实测默认态与 `--检查` 态退出码均 0 且输出一致,Makefile「生成索引」为虚设语义 | 删除两个空开关,或在 `生成` 目标改调 `--检查` 并在注释写明无索引生成物 | 需用户授权 | | **TL-06** | 工具 | 工具/维护索引.py:269-274;Makefile:74 | D1 | `--检查` 解析后从未被引用(死参数);`--写入` 仅 `print("索引写入:当前无可写生成物,执行幂等检查")`,随后执行与默认完全相同的只读检查。实测默认态与 `--检查` 态退出码均 0 且输出一致,Makefile「生成索引」为虚设语义 | 删除两个空开关,或在 `生成` 目标改调 `--检查` 并在注释写明无索引生成物 | 需用户授权 |
| **MG-01** | 数据库迁移 | `src/muse/基础设施/数据库/迁移.py:52-54` | D3 | `if 版本 in 已见: raise 迁移错误(f"迁移版本重复:V{版本:04d}")` —— 执行器只拦重号,从不校验编号连续性,空洞无法被机械发现 | 在 `列出迁移` 末尾加一条连续性或白名单校验;同步在 `数据库/迁移/` 加 README 或 `迁移登记.json`,逐个写明 10 个空缺的成因(当前仅 V0011 有) | 无需授权(新增校验与登记文件) | | **MG-01** | 数据库迁移 | `src/muse/基础设施/数据库/迁移.py:52-54` | D3 | `if 版本 in 已见: raise 迁移错误(f"迁移版本重复:V{版本:04d}")` —— 执行器只拦重号,从不校验编号连续性,空洞无法被机械发现 | 在 `列出迁移` 末尾加一条连续性或白名单校验;同步在 `数据库/迁移/` 加 README 或 `迁移登记.json`,逐个写明 10 个空缺的成因(当前仅 V0011 有) | 无需授权(新增校验与登记文件) |
| **MG-02** | 数据库迁移 | `docs/系统架构/新版设计/文件设计/数据库与迁移.md:76-77`(另 `:242`、`:264`) | D3 | 文件树把 `V0013__上下文与检索索引.sql`、`V0015__运行配置版本.sql` 与既有迁移并列列出,`docs/系统架构/新版设计/项目目录与文件职责.md:1603-1604` 同;两文件实际不存在 | 在这两处就地标注「目标编号,实现落于 V0022/V0004」;或在目标清单里改挂实际编号 | 无需授权(文档标注;与 docs 模块检查方向 D4/D7 重合,建议由 docs 报告统一处置) | | **MG-02** | 数据库迁移 | `docs/系统架构/新版设计/文件设计/数据库与迁移.md:76-77`(另 `:242`、`:264`) | D3 | 文件树把 `V0013__上下文与检索索引.sql`、`V0015__运行配置版本.sql` 与既有迁移并列列出,`docs/系统架构/新版设计/项目目录与文件职责.md:1603-1604` 同;两文件实际不存在 | 在这两处就地标注「目标编号,实现落于 V0022/V0004」;或在目标清单里改挂实际编号 | 无需授权(文档标注;与 docs 模块检查方向 D4/D7 重合,建议由 docs 报告统一处置) |
| **LM-04** | 旧库迁移 | 数据库/旧库迁移/切换检查.py:30 | D1 | `"data_checks_passed": 核对["data_checks_passed"] and not any(增量.values())` | 空输入即放行:`--快照 '[]' --当前快照 '[]'` 时 核对结果.py:99 的 `data_checks_passed` 为 True、增量为空 → 入口.py:185 打印「本范围数据检查通过」并返回 0;`导入目标` 同理(入口.py:175 的 `all_accounted` 在 0==0 时成立)。全链路不接收表清单,也不校验快照是否覆盖旧表白名单。建议:快照为空直接报错,并增一条"声明覆盖表 ⊇ 本次分流触及表"的机械断言 | 需用户授权 | | **LM-04** | 旧库迁移(已退场) | 数据库/旧库迁移/切换检查.py:30 | D1 | `"data_checks_passed": 核对["data_checks_passed"] and not any(增量.values())` | 空输入即放行:`--快照 '[]' --当前快照 '[]'` 时 核对结果.py:99 的 `data_checks_passed` 为 True、增量为空 → 入口.py:185 打印「本范围数据检查通过」并返回 0;`导入目标` 同理(入口.py:175 的 `all_accounted` 在 0==0 时成立)。全链路不接收表清单,也不校验快照是否覆盖旧表白名单。建议:快照为空直接报错,并增一条"声明覆盖表 ⊇ 本次分流触及表"的机械断言 | 需用户授权 |
| **LM-06** | 旧库迁移 | 数据库/旧库迁移/知识记录分流.py:348 | D1 | `return 结果("隔离", "unknown_table")` | 覆盖差集(机械核对):旧结构 DDL 白名单共 66 张(PostgreSQL 58 + SQLite 8),分流规则显式承接 26 张,其余 40 张无任何规则(PG 39 张 + SQLite `schema_migrations`),全部落 `unknown_table` 隔离。fail-closed 本身正确,但「白名单可读 ⊃ 规则可承接」这一差集在代码与文档里都没有成文清单,易被读成"全部旧表可迁"。建议在 `旧知识记录分流.md` 增一张「已登记但暂无承接的表」清单 | 无需授权 | | **LM-06** | 旧库迁移(已退场) | 数据库/旧库迁移/知识记录分流.py:348 | D1 | `return 结果("隔离", "unknown_table")` | 覆盖差集(机械核对):旧结构 DDL 白名单共 66 张(PostgreSQL 58 + SQLite 8),分流规则显式承接 26 张,其余 40 张无任何规则(PG 39 张 + SQLite `schema_migrations`),全部落 `unknown_table` 隔离。fail-closed 本身正确,但「白名单可读 ⊃ 规则可承接」这一差集在代码与文档里都没有成文清单,易被读成"全部旧表可迁"。建议在 `旧知识记录分流.md` 增一张「已登记但暂无承接的表」清单 | 无需授权 |
| **TS-54** | 测试与资源 | `tests/契约/test_盲评与引文合同.py`(31)、`tests/架构/test_技能与文档索引.py`(26)、`tests/单元/test_离线修订回放.py`(18) 等 12 文件 | D2 | `def test_unregistered_scenario_and_policy_drift_fail_before_model_call__c80022` 等纯英文用例名 132 个 | 违背《命名规范》§1「测试名使用中文」:批量改中文名(case_id 身份不变) | 需用户授权 | | **TS-54** | 测试与资源 | `tests/契约/test_盲评与引文合同.py`(31)、`tests/架构/test_技能与文档索引.py`(26)、`tests/单元/test_离线修订回放.py`(18) 等 12 文件 | D2 | `def test_unregistered_scenario_and_policy_drift_fail_before_model_call__c80022` 等纯英文用例名 132 个 | 违背《命名规范》§1「测试名使用中文」:批量改中文名(case_id 身份不变) | 需用户授权 |
| **TS-56** | 测试与资源 | `tests/用例清单.json`(45 条 environment、249 条缺 then) | D2 | `"隔离PG/合成HTTP及浏览器"`、`"隔离PG与合成资料;含实际CLI子进程和HTTP"` 等表述挂在无对应依赖的符号上 | 环境字段区分「本用例执行」与「同文件另有旅程/子进程」;与 TS-04、TS-06、TS-12 一并收口 | 无需授权 | | **TS-56** | 测试与资源 | `tests/用例清单.json`(45 条 environment、249 条缺 then) | D2 | `"隔离PG/合成HTTP及浏览器"`、`"隔离PG与合成资料;含实际CLI子进程和HTTP"` 等表述挂在无对应依赖的符号上 | 环境字段区分「本用例执行」与「同文件另有旅程/子进程」;与 TS-04、TS-06、TS-12 一并收口 | 无需授权 |
| **TS-58** | 测试与资源 | `tests/夹具/`(25 文件) | D3 | 计划 §3 D3 写「`tests/夹具` 是空目录」,实测 25 个文件 | 更新计划口径;对 20 个无消费者文件标注「计划内/历史」 | 无需授权 | | **TS-58** | 测试与资源 | `tests/夹具/`(25 文件) | D3 | 计划 §3 D3 写「`tests/夹具` 是空目录」,实测 25 个文件 | 更新计划口径;对 20 个无消费者文件标注「计划内/历史」 | 无需授权 |
@ -381,12 +391,12 @@
| **MG-06** | 数据库迁移 | `数据库/迁移/V0009__正文写作.sql:30`;`数据库/迁移/V0004__任务运行与证据.sql:189`;`数据库/迁移/V0035__评测逐例执行.sql:13`;`数据库/迁移/V0030__模型修订结果.sql:7` | D3 | 基线定义已被后续迁移改写:`origin text NOT NULL CHECK(origin='author')` 被 `V0021:16-20` 扩为 `('author','model')`;`kind IN (4 值)` 被 `V0024:8-16` 扩为 5 值;`kind IN ('generation','comparison')` 被 `V0041:2-4` 扩为 3 值;`diagnosis_id` 的 `NOT NULL` 被 `V0032:2` 解除 | **不改**(历史留痕)。已应用迁移受校验和冻结,回改会被 `迁移.py:98-102` 拦截并拒绝启动,改基线等于制造事故。可选:在基线文件加「本定义已被 V00xx 扩展」注释,纯可读性收益 | 无需授权(仅注释);不改则保留理由已成立 | | **MG-06** | 数据库迁移 | `数据库/迁移/V0009__正文写作.sql:30`;`数据库/迁移/V0004__任务运行与证据.sql:189`;`数据库/迁移/V0035__评测逐例执行.sql:13`;`数据库/迁移/V0030__模型修订结果.sql:7` | D3 | 基线定义已被后续迁移改写:`origin text NOT NULL CHECK(origin='author')` 被 `V0021:16-20` 扩为 `('author','model')`;`kind IN (4 值)` 被 `V0024:8-16` 扩为 5 值;`kind IN ('generation','comparison')` 被 `V0041:2-4` 扩为 3 值;`diagnosis_id` 的 `NOT NULL` 被 `V0032:2` 解除 | **不改**(历史留痕)。已应用迁移受校验和冻结,回改会被 `迁移.py:98-102` 拦截并拒绝启动,改基线等于制造事故。可选:在基线文件加「本定义已被 V00xx 扩展」注释,纯可读性收益 | 无需授权(仅注释);不改则保留理由已成立 |
| **MG-05** | 数据库迁移 | `数据库/迁移/V0002__元数据结构与策略.sql:83` | D6 | `GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA metadata TO muse_app;` 整 schema 一次性授予;而 `数据库/迁移/V0001__共享标识与版本.sql:55-56` 的默认权限反而含 `DELETE` | 统一为逐表 `REVOKE ALL` + 最小 `GRANT`(V0043–V0055 已用该风格);或写明整 schema 授予的理由 | 无需授权(但改动涉及已应用迁移,须以新迁移追加,不可回改) | | **MG-05** | 数据库迁移 | `数据库/迁移/V0002__元数据结构与策略.sql:83` | D6 | `GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA metadata TO muse_app;` 整 schema 一次性授予;而 `数据库/迁移/V0001__共享标识与版本.sql:55-56` 的默认权限反而含 `DELETE` | 统一为逐表 `REVOKE ALL` + 最小 `GRANT`(V0043–V0055 已用该风格);或写明整 schema 授予的理由 | 无需授权(但改动涉及已应用迁移,须以新迁移追加,不可回改) |
| **MG-07** | 数据库迁移 | `src/muse/元数据/存储.py:189-196` | D3 | `"INSERT INTO metadata.schema_binding (target_ref, work_id, ...) VALUES (%s,...)"` 的实参是 `tuple(asdict(绑定).values())`,列序隐式绑定 dataclass 字段序 | 改为具名传参或显式列出取值顺序。当前三方一致(`元数据/模型.py:178-185` 字段序 ↔ `V0002:40-53` 列序),故仅记风险 | 无需授权 | | **MG-07** | 数据库迁移 | `src/muse/元数据/存储.py:189-196` | D3 | `"INSERT INTO metadata.schema_binding (target_ref, work_id, ...) VALUES (%s,...)"` 的实参是 `tuple(asdict(绑定).values())`,列序隐式绑定 dataclass 字段序 | 改为具名传参或显式列出取值顺序。当前三方一致(`元数据/模型.py:178-185` 字段序 ↔ `V0002:40-53` 列序),故仅记风险 | 无需授权 |
| **LM-07** | 旧库迁移 | 数据库/旧库迁移/导入新库.py:305 | D6 | `raise 迁移错误("target_denied", "本次新库身份缺失或改变,保留定位文件不清理")` | 目标库身份无法复核时保留 `维护连接.txt`/`应用连接.txt`(含口令,0600、目录 0700)。属有意设计(同文件 237 行注释与 `旧知识记录分流.md`「先落私有连接引用」),记录不改 | 无需授权 | | **LM-07** | 旧库迁移(已退场) | 数据库/旧库迁移/导入新库.py:305 | D6 | `raise 迁移错误("target_denied", "本次新库身份缺失或改变,保留定位文件不清理")` | 目标库身份无法复核时保留 `维护连接.txt`/`应用连接.txt`(含口令,0600、目录 0700)。属有意设计(同文件 237 行注释与 `旧知识记录分流.md`「先落私有连接引用」),记录不改 | 无需授权 |
| **TS-60** | 测试与资源 | `pyproject.toml:62`、`tests/conftest.py:27,35` | D3 | `"网络: 需要真实网络访问;必须显式标记"`;`--用例清单` 选项 | 全仓 0 用例使用 `网络`;`--用例清单` 无任何入口传入:保留为防护阀/维护能力并注明理由 | 无需授权 | | **TS-60** | 测试与资源 | `pyproject.toml:62`、`tests/conftest.py:27,35` | D3 | `"网络: 需要真实网络访问;必须显式标记"`;`--用例清单` 选项 | 全仓 0 用例使用 `网络`;`--用例清单` 无任何入口传入:保留为防护阀/维护能力并注明理由 | 无需授权 |
| **TS-62** | 测试与资源 | `tests/集成/test_审校报告与案例持久化.py:1105`、`tests/集成/test_任务租约与恢复.py:175`、`tests/迁移/test_隔离目标台账.py:2308` | D2 | `assert 运行审校命令(…) == 服务读回`(CLI 分支即同一次实现调用) | 只证实现内部一致、无独立期望的冗余断言:低优先清理 | 无需授权 | | **TS-62** | 测试与资源 | `tests/集成/test_审校报告与案例持久化.py:1105`、`tests/集成/test_任务租约与恢复.py:175`、`tests/迁移/test_隔离目标台账.py:2308` | D2 | `assert 运行审校命令(…) == 服务读回`(CLI 分支即同一次实现调用) | 只证实现内部一致、无独立期望的冗余断言:低优先清理 | 无需授权 |
| **TS-61** | 测试与资源 | `tests/迁移/test_隔离目标台账.py:2275` | D2 | `"""真实PG用例;…需要父代理显式外部环境运行。"""` | 上游派发流程套话(实际由 `pytestmark`/Makefile 决定):保留或改写 | 无需授权 | | **TS-61** | 测试与资源 | `tests/迁移/test_隔离目标台账.py:2275` | D2 | `"""真实PG用例;…需要父代理显式外部环境运行。"""` | 上游派发流程套话(实际由 `pytestmark`/Makefile 决定):保留或改写 | 无需授权 |
## 各模块一句话结论(14 份报告) ## 各模块一句话结论(14 份报告;检查时规模,`数据库/旧库迁移` 域已退场,见收口节)
| 模块 | P0 | P1 | P2 | P3 | 一句话结论 | | 模块 | P0 | P1 | P2 | P3 | 一句话结论 |
|---|---|---|---|---|---| |---|---|---|---|---|---|
@ -400,7 +410,7 @@
| tests + 资源(157 测试 + 资源) | 1 | 10 | 33 | 2 | 隔离纪律与登记骨架干净(446 个库夹具用例全部带标记、1219 个用例 ID 双向对齐、迁移双副本逐字节零漂移);风险是门禁依赖生成物、一批断言弱于用例名、浏览器旅程无可执行入口。 | | tests + 资源(157 测试 + 资源) | 1 | 10 | 33 | 2 | 隔离纪律与登记骨架干净(446 个库夹具用例全部带标记、1219 个用例 ID 双向对齐、迁移双副本逐字节零漂移);风险是门禁依赖生成物、一批断言弱于用例名、浏览器旅程无可执行入口。 |
| web(114 + 53) | 0 | 2 | 15 | 2 | 全仓最干净的一块:零 `dangerouslySetInnerHTML`、零凭据、零 `any`、零幻路径注释;问题是同一件事多文件各写一遍、用例 id 与清单/文档三方不一致。 | | web(114 + 53) | 0 | 2 | 15 | 2 | 全仓最干净的一块:零 `dangerouslySetInnerHTML`、零凭据、零 `any`、零幻路径注释;问题是同一件事多文件各写一遍、用例 id 与清单/文档三方不一致。 |
| 数据库迁移(45 SQL + 初始化) | 0 | 0 | 2 | 5 | 双副本零漂移、账本与事务纪律由执行器承担、凭据为零、157 个定义对象对代码零悬空;只有编号空洞成因未成文与少量标注熵增。 | | 数据库迁移(45 SQL + 初始化) | 0 | 0 | 2 | 5 | 双副本零漂移、账本与事务纪律由执行器承担、凭据为零、157 个定义对象对代码零悬空;只有编号空洞成因未成文与少量标注熵增。 |
| 数据库/旧库迁移(21 + 旧结构) | 0 | 4 | 2 | 1 | 台账与隔离闭环扎实(零凭据、SQL 全参数化、目标库随机新建);两条已声明的 K08 镜像路径在真实旧结构上不可达,切换检查缺回退条件。 | | 数据库/旧库迁移(21 + 旧结构,已退场) | 0 | 4 | 2 | 1 | 台账与隔离闭环扎实(零凭据、SQL 全参数化、目标库随机新建);两条已声明的 K08 镜像路径在真实旧结构上不可达,切换检查缺回退条件。 |
| 工具(7) | 0 | 5 | 7 | 2 | 无凭据、无 `shell=True`、无硬编码绝对路径,Makefile 工具命令参数一致且等价实跑绿;风险是登记驱动的写入路径缺包含性校验、能力登记与技能/生成物的差集无人看守。 | | 工具(7) | 0 | 5 | 7 | 2 | 无凭据、无 `shell=True`、无硬编码绝对路径,Makefile 工具命令参数一致且等价实跑绿;风险是登记驱动的写入路径缺包含性校验、能力登记与技能/生成物的差集无人看守。 |
| .agent(252 文件) | 1 | 11 | 12 | 6 | 方法技能正文与作者层合同质量高、泔水零命中、338 条链接全可达;塌陷在元数据与绑定层——自称的 manifest/门禁不存在、角色合同指向无物、4 处规则点名的 3 个门禁文件不存在。 | | .agent(252 文件) | 1 | 11 | 12 | 6 | 方法技能正文与作者层合同质量高、泔水零命中、338 条链接全可达;塌陷在元数据与绑定层——自称的 manifest/门禁不存在、角色合同指向无物、4 处规则点名的 3 个门禁文件不存在。 |
| docs 权威区 + 根文件(147 md + workflows) | 1 | 16 | 11 | 1 | 权威区链接几乎全绿(1196 条仅 4 条死链,`新版设计/` 零死链);但 `AGENTS.md` 本身是最大污染源(11 处链接文字失效、4 项陈述与物理事实不符、1 处权威引用落空)。 | | docs 权威区 + 根文件(147 md + workflows) | 1 | 16 | 11 | 1 | 权威区链接几乎全绿(1196 条仅 4 条死链,`新版设计/` 零死链);但 `AGENTS.md` 本身是最大污染源(11 处链接文字失效、4 项陈述与物理事实不符、1 处权威引用落空)。 |
@ -431,12 +441,12 @@
**未取得原始退出码的门禁**:`make 模块边界` 原样命令在本沙箱不可执行(`uv` 缓存 + macOS `sandbox_init` 双重被拒);内容侧等价证据为 `--外部环境` 下 15 passed,主代理另在授权环境跑到 `make 测试` 1005 passed(含该文件)。 **未取得原始退出码的门禁**:`make 模块边界` 原样命令在本沙箱不可执行(`uv` 缓存 + macOS `sandbox_init` 双重被拒);内容侧等价证据为 `--外部环境` 下 15 passed,主代理另在授权环境跑到 `make 测试` 1005 passed(含该文件)。
## 处置声明与硬边界 ## 处置声明与硬边界(2026-09-16 检查期;后续处置见收口节)
- 本轮为**只读专项检查**。除下列三项外未改动任何文件:`docs/实现回顾/专项检查-报告-*.md`(14 份子代理报告)、本台账、`docs/实现回顾/目录.md` 的登记行。 - 本轮为**只读专项检查**。除下列三项外未改动任何文件:`docs/实现回顾/专项检查-报告-*.md`(14 份子代理报告)、本台账、`docs/实现回顾/目录.md` 的登记行。
- **唯一一次越出「只读」的动作**:经用户 2026-09-16 明确授权(问题「P0 门禁红 · 处置选择」→ 选项「授权我跑 make 生成 就地刷新生成物,再重跑 make 测试复绿」),于 20:42 执行 `make 生成`,重写了被 `.gitignore:36` 忽略的生成物(`src/muse/资源/`、`web/dist`、`docs/接口契约/生成/`、索引)。**受跟踪文件零改动**(`git status --untracked-files=no` 仅剩本批报告与 `目录.md`)。 - **唯一一次越出「只读」的动作**:经用户 2026-09-16 明确授权(问题「P0 门禁红 · 处置选择」→ 选项「授权我跑 make 生成 就地刷新生成物,再重跑 make 测试复绿」),于 20:42 执行 `make 生成`,重写了被 `.gitignore:36` 忽略的生成物(`src/muse/资源/`、`web/dist`、`docs/接口契约/生成/`、索引)。**受跟踪文件零改动**(`git status --untracked-files=no` 仅剩本批报告与 `目录.md`)。
- `git add` / `git commit` 全程未执行。**修复另立计划;未获授权不动手。** - `git add` / `git commit` 全程未执行。**修复另立计划;未获授权不动手。**
- 台账每条二值收口:`待授权`(需用户点头)/ `保留(理由)`(P3 与豁免项)/ `已处置(证据)`(仅 `JC-01` 的本地部分)。 - 台账每条二值收口:`待授权`(需用户点头)/ `保留(理由)`(P3 与豁免项)/ `已处置(证据)`(仅 `JC-01` 的本地部分);最终处置以收口节的裁决分布为准。
- 另一会话提交期间的时点声明:开工快照 2026-09-16T20:30:04+08:00,HEAD `f76c3cd04a8b4d461a5e004b36962900db943729`;`git status` 当时仅有 `docs/实现回顾/目录.md` 的未提交改动与未跟踪的计划文件,判定为「未收口」,故计划第 2 节的「.gitignore 与跟踪文件交集」原定延后;实际于 20:43:37 复检(跟踪 1320 / 命中 0)并记入 §2。 - 另一会话提交期间的时点声明:开工快照 2026-09-16T20:30:04+08:00,HEAD `f76c3cd04a8b4d461a5e004b36962900db943729`;`git status` 当时仅有 `docs/实现回顾/目录.md` 的未提交改动与未跟踪的计划文件,判定为「未收口」,故计划第 2 节的「.gitignore 与跟踪文件交集」原定延后;实际于 20:43:37 复检(跟踪 1320 / 命中 0)并记入 §2。
## 证据指针(命令 + 退出码 / 校验结果) ## 证据指针(命令 + 退出码 / 校验结果)
@ -453,4 +463,4 @@
| 台账条目抽取与去重(305 条 → 293 条) | `/tmp/qc/台账/生成5.py`、`/tmp/qc/台账/抽取结果.txt` | | 台账条目抽取与去重(305 条 → 293 条) | `/tmp/qc/台账/生成5.py`、`/tmp/qc/台账/抽取结果.txt` |
| 各模块命令与退出码、逐条 file:line | 各报告「证据指针」节(14 份) | | 各模块命令与退出码、逐条 file:line | 各报告「证据指针」节(14 份) |
> 上述 `/tmp` 路径为一次性探针与日志,不入库;报告内已保留可复现命令与判定结果。 > 上述 `/tmp` 路径为一次性探针与日志,不入库;报告内已保留可复现命令与判定结果。逐条裁决处置与执行证据存于本地实施区 `.agents.local/优化-20260917/已裁决计划/`(不入库);判断某条现状时以当前仓库与本地映射为准。

View File

@ -1,6 +1,7 @@
<!-- 导航元信息: {"内容描述": "全仓专项检查的检查方向、模块分派与完成口径", "使用场景": "追溯检查范围与方法,或核对审查标准四问七问来源时", "使用要求": "检查已执行完毕并冻结;发现与处置见台账,不充当现行执行输入"} -->
# 全仓专项检查计划 # 全仓专项检查计划
> 日期:2026-09-16 | 状态:口径已确认,待执行 | 编排:主代理统筹分派,子代理详细检查并出具报告 > 日期:2026-09-16 | 状态:已执行完毕并冻结(14 份模块报告与[台账](专项检查-台账.md)已产出;附录 A/B 已转正为[审查标准](../../.agent/规范/审查标准.md)) | 编排:主代理统筹分派,子代理详细检查并出具报告
> 范围:仓内代码与文档;排除缓存、构建产物、小说正文与数据库内容。 > 范围:仓内代码与文档;排除缓存、构建产物、小说正文与数据库内容。
## 1. 目的与范围 ## 1. 目的与范围
@ -20,7 +21,7 @@
- **主代理**:维护本计划口径;按第 4 节分派任务,每次列明 2~3 个最小必读文件;汇总去重成台账;复核阻断级发现;不代替子代理读文件。 - **主代理**:维护本计划口径;按第 4 节分派任务,每次列明 2~3 个最小必读文件;汇总去重成台账;复核阻断级发现;不代替子代理读文件。
- **子代理**:按模块要求详细检查,报告落盘为 `docs/实现回顾/专项检查-报告-<模块>.md`;对话返回按[《子代理交付》](../../.agent/rules/子代理交付.md)三要素不超过 20 行,只报结论与路径。 - **子代理**:按模块要求详细检查,报告落盘为 `docs/实现回顾/专项检查-报告-<模块>.md`;对话返回按[《子代理交付》](../../.agent/rules/子代理交付.md)三要素不超过 20 行,只报结论与路径。
- **并行协调**:另一会话正在提交——git 状态类证据只做一次性快照并注明时点;「.gitignore 与跟踪文件交集」一项待对方收口后补做。 - **并行协调**:检查期间另一会话正在提交,git 状态类证据只做一次性快照并注明时点;「.gitignore 与跟踪文件交集」已于当日 20:43 复检(跟踪 1320 / 命中 0)。
## 3. 检查方向(现状 → 目标) ## 3. 检查方向(现状 → 目标)
@ -73,7 +74,7 @@
| `tests`(157) | D1 D2 | 架构 5、契约 19、迁移 10、端到端 3、真实调用 1 全读;单元抽 10、集成抽 15 | 断言真实性;复制用例;隔离标记纪律([《测试隔离》](../../.agent/rules/测试隔离.md));用例清单登记一致 | | `tests`(157) | D1 D2 | 架构 5、契约 19、迁移 10、端到端 3、真实调用 1 全读;单元抽 10、集成抽 15 | 断言真实性;复制用例;隔离标记纪律([《测试隔离》](../../.agent/rules/测试隔离.md));用例清单登记一致 |
| `web/src`(114)与 `web/tests`(53) | D1 D2 D6 | 门禁全量加精读抽样 20~30 | 界面文案泔水;`dangerouslySetInnerHTML` 等 XSS 面;生成类型与契约同步状态 | | `web/src`(114)与 `web/tests`(53) | D1 D2 D6 | 门禁全量加精读抽样 20~30 | 界面文案泔水;`dangerouslySetInnerHTML` 等 XSS 面;生成类型与契约同步状态 |
| `数据库/迁移`(45 SQL) | D3 D6 | 全量机械加基线与最新 3 个精读 | 编号空洞核对成因;幂等性;与投影 diff | | `数据库/迁移`(45 SQL) | D3 D6 | 全量机械加基线与最新 3 个精读 | 编号空洞核对成因;幂等性;与投影 diff |
| `数据库/旧库迁移`(21 .py 加旧结构) | D1 | 机械门禁加 3 个关键文件精读(映射台账、切换检查、入口) | 有意 legacy 域:豁免泔水与风格要求 | | `数据库/旧库迁移`(21 .py 加旧结构;该域已于 2026-09-18 整体退场) | D1 | 机械门禁加 3 个关键文件精读(映射台账、切换检查、入口) | 有意 legacy 域:豁免泔水与风格要求 |
| `工具`(7 文件) | D1 D6 D7 | 全读 | 与 Makefile、资源登记一致;路径操作安全 | | `工具`(7 文件) | D1 D6 D7 | 全读 | 与 Makefile、资源登记一致;路径操作安全 |
| `.agent`(角色、技能、规则、约束、规范、作者) | D2 D4 D5 | 全量精读 | 附录 A/B 问句;与角色合同一致;目录索引与物理结构一致 | | `.agent`(角色、技能、规则、约束、规范、作者) | D2 D4 D5 | 全量精读 | 附录 A/B 问句;与角色合同一致;目录索引与物理结构一致 |
| `docs` 权威区(系统架构/新版设计、接口契约、运行手册、功能规格、各级目录) | D2 D4 D7 | 全量精读加链接校验机械全量 | 每个领域至少 1 项声明对照代码 | | `docs` 权威区(系统架构/新版设计、接口契约、运行手册、功能规格、各级目录) | D2 D4 D7 | 全量精读加链接校验机械全量 | 每个领域至少 1 项声明对照代码 |
@ -96,14 +97,14 @@
- **报告**:`docs/实现回顾/专项检查-报告-<模块>.md`,四节——结论(分级计数加一句话)、问题清单(编号|位置 file:line|方向|严重度|现状摘录|建议|所需授权)、豁免与边界(查了什么、没查什么、为何)、证据指针(命令加退出码或校验结果)。 - **报告**:`docs/实现回顾/专项检查-报告-<模块>.md`,四节——结论(分级计数加一句话)、问题清单(编号|位置 file:line|方向|严重度|现状摘录|建议|所需授权)、豁免与边界(查了什么、没查什么、为何)、证据指针(命令加退出码或校验结果)。
- **台账**:`docs/实现回顾/专项检查-台账.md`,主代理合并去重,按 P0 至 P3 排序;后续修复动作以台账为唯一输入另立计划。 - **台账**:`docs/实现回顾/专项检查-台账.md`,主代理合并去重,按 P0 至 P3 排序;后续修复动作以台账为唯一输入另立计划。
## 附录 A:提示词四问(替代口径,原文缺失) ## 附录 A:提示词四问(已转正为[审查标准](../../.agent/规范/审查标准.md);原文缺失)
1. 职责边界:做什么、不做什么、输入来源是否成文? 1. 职责边界:做什么、不做什么、输入来源是否成文?
2. 判定可执行:完成标准可机械判定,还是依赖模型自觉? 2. 判定可执行:完成标准可机械判定,还是依赖模型自觉?
3. 合同一致:与《角色合同》的模型策略、工具权限一致吗? 3. 合同一致:与《角色合同》的模型策略、工具权限一致吗?
4. 失败路径:越界或失败时的行为是否写明? 4. 失败路径:越界或失败时的行为是否写明?
## 附录 B:技能七问(替代口径,原文缺失) ## 附录 B:技能七问(已转正为[审查标准](../../.agent/规范/审查标准.md);原文缺失)
1. 触发命中:目录描述能让派发者命中该技能吗? 1. 触发命中:目录描述能让派发者命中该技能吗?
2. 边界成文:输入输出、做与不做是否明确? 2. 边界成文:输入输出、做与不做是否明确?
@ -118,3 +119,4 @@
- 本计划只检查、出报告与台账;修复另立计划;`git add`、`git commit` 一律需明确授权。 - 本计划只检查、出报告与台账;修复另立计划;`git add`、`git commit` 一律需明确授权。
- 不动数据库与创作内容;不跑真实模型测试与备份恢复演练;数据库测试本轮不跑(CI 记录为证)。 - 不动数据库与创作内容;不跑真实模型测试与备份恢复演练;数据库测试本轮不跑(CI 记录为证)。
- 完成 = 各方向目标达成且台账收口,机械证据齐(门禁退出码、链接校验结果、diff 结果),不以「看过了」作数。 - 完成 = 各方向目标达成且台账收口,机械证据齐(门禁退出码、链接校验结果、diff 结果),不以「看过了」作数。
- **收口(2026-09-18)**:检查当日产出 14 份模块报告与[台账](专项检查-台账.md);09-17 复核与用户裁决后进入[优化执行合同](../系统架构/新版设计/优化执行合同.md),O00–O14 的离线可验部分已按六批提交合入 `main`,其后完成测试成本优化与旧库迁移退场。本计划与模块报告自此冻结为历史留痕,不再更新;现行口径以审查标准与优化执行合同为准。

View File

@ -1,7 +1,7 @@
<!-- 导航元信息: {"内容描述": "功能落地对照、R2 历史留痕及验证边界", "使用场景": "后续改同一功能、交接、对照设计时", "使用要求": "功能合并后留回顾"} --> <!-- 导航元信息: {"内容描述": "功能落地对照、R2 历史留痕及验证边界", "使用场景": "后续改同一功能、交接、对照设计时", "使用要求": "功能合并后留回顾"} -->
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 | | 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------| |------|----------|----------|----------|----------|
| 全仓专项检查计划 | [专项检查-计划.md](专项检查-计划.md) | | | | | 全仓专项检查计划 | [专项检查-计划.md](专项检查-计划.md) | 全仓专项检查的检查方向、模块分派与完成口径 | 追溯检查范围与方法,或核对审查标准四问七问来源时 | 检查已执行完毕并冻结;发现与处置见台账,不充当现行执行输入 |
| 全仓专项检查台账 | [专项检查-台账.md](专项检查-台账.md) | | | | | 全仓专项检查台账 | [专项检查-台账.md](专项检查-台账.md) | 2026-09-16 全仓专项检查的 294 条原发现、复核更正与收口状态 | 追溯某条检查发现的原始位置与最终处置时 | 原级别分布不是当前未修数;位置为检查时快照,路径以当前仓库为准 |
| 技能身份中文化迁移实现回顾 | [技能身份中文化迁移实现回顾.md](技能身份中文化迁移实现回顾.md) | 59 个技能的中文身份、作者自然语言入口、角色探针边界与数据库登记迁移结果 | 后续修改技能身份、作者场景、角色模型、残留门或数据库登记时 | 先核对作者旅程、固定 Opus 合同与探针状态,再修改现行合同 | | 技能身份中文化迁移实现回顾 | [技能身份中文化迁移实现回顾.md](技能身份中文化迁移实现回顾.md) | 59 个技能的中文身份、作者自然语言入口、角色探针边界与数据库登记迁移结果 | 后续修改技能身份、作者场景、角色模型、残留门或数据库登记时 | 先核对作者旅程、固定 Opus 合同与探针状态,再修改现行合同 |
| R2 改造历史留痕 | [R2改造历史留痕.md](R2改造历史留痕.md) | 固定版本与验证边界 | 追溯 R2 时 | 不追认全部通过,不替代稳定合同 | | R2 改造历史留痕 | [R2改造历史留痕.md](R2改造历史留痕.md) | 固定版本与验证边界 | 追溯 R2 时 | 不追认全部通过,不替代稳定合同 |