# 全仓专项检查台账 > 日期:2026-09-16 | 编排:主代理 | 依据:[专项检查-计划.md](专项检查-计划.md) 第 5 节严重度分级、第 6 节报告格式 > 范围:`src/muse`、`tests`、`web`、`数据库`、`工具`、`.agent`、`docs`、根文件;不含缓存、构建产物、小说正文与数据库内容。 > **本台账保存 2026-09-16 原发现及复核更正,不再单独充当修复输入;2026-09-17 已按用户裁决进入[优化执行](../系统架构/新版设计/优化执行合同.md),2026-09-18 收口(见下节)。下表是原级别分布,不能当作尚未修复数。** ## 复核更正(2026-09-17) - **不能直接据原台账逐条实施**:原报告306个编号,原合并表实际294行,12个编号被并入;原总计295为算术错误。本次从报告恢复被截断的现状及建议全文,保留原报告作为发现来源。 - 13项源码抽样(全部5项P0、5项P1、2项P2、1项P3)结果为11项证据成立、2项证据不实、0项无法复现;六份报告22项证据抽查为8成立、7不实、7无法复现。覆盖映射不是306项全部已证实。 - R2“846/889”缺原快照、脚本和口径,判定为**无法复现**;当前范围统计不能证伪历史数字。AGENTS的旧路径中有明确“已退出”标记,不能统称至少六处物理谎报;只修现行错误声明及缺失导航。 - 合并更正:JF-02是资料研究未消费模板,恢复独立;JS-03与JW-02分别保留审校和规划消费者验收。AG-07/DR-13归DR-01,TL-13归DR-14。JR-09只复用JR-06共有的报告读取部分。 - JS-01按P1处理:规则仍为candidate,新版不承继旧豁免;旧evidence出处未核不改同版本载荷。AG-25撤回标题锚点误判;JS-06撤回“例证未校验污染指纹”前提;TS-34保留独立工厂;TL-02保留受测method协议;DR-26区分旧59项承接与现行46个物理技能;AG-10缺操作frontmatter实际7项;DR-12/TS-60保留网络隔离标记。 - AG-01关于“无双向核对”的说法不完整:已有架构测试双向核对。后续提取共享发现实现,不再增设第二套同义门禁。 - 2026-09-16复核原命令 `make 检查`、`make 测试` 均exit 0,后者1005 passed/927 deselected/2 warnings;这是旧源码基线证据,优化后的验收必须重新覆盖变更。 逐条三值判定及原始日志:`/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` 忽略、不入版本库;台账中指向它们的路径仅在本地可读时有效。 - **JF-03 处置(2026-09-19)**:经用户授权采纳删除方案——`src/muse/资料研究/提示词/核对实体歧义.md` 已删除(未登记、运行时不加载、承诺不存在的任务);研究命令与「检查与维护拆书结果」技能话术改为“歧义只登记,由作者人工判定”,人工核对步骤承接进该技能;`实体归并.py` 话术检查时已合规。原行保留为历史快照。 ## 0. 汇总 | 严重度 | 原始条目 | 合并同事实后 | 说明 | |---|---|---|---| | **P0** 红线与风险 | 6 | **5** | 门禁红 2(同一根因 1 组)、误导性权威声明 2 | | **P1** 事实错误 | 95 | **84** | 悬空引用、死代码/零消费者资产、一致性断裂、标准缺失、门禁恒真 | | **P2** 熵增 | 171 | **171** | 重复、泔水、孤儿、复杂度热点、依赖冗余 | | **P3** 记录不改 | 34 | **34** | 历史留痕与有意保留项,已注明理由 | | 合计 | 306 | **294** | 另有 6 条「未发现问题」覆核行(各报告零发现节),不计入条目 | **原检查的覆盖边界**:离线绿测只证明实际选中行为,不能据此宣称全仓设计合理或全部链路健康。后续复核发现连接、资源核验、测试底座、索引、调用费用、授权撤回、上下文与工作面等全局问题,按优化执行合同处理。 **来源与去重**:**14 份模块报告**(后端 8 组:接入 / 基础设施+共享 / 审校修订+效果评测 / 任务运行+编排 / 交付连载+上下文+资料研究 / 作者经验+正文写作+作品规划 / 知识方法+正式变更+故事世界+元数据;非后端 6 份:tests+资源 / web / 数据库迁移 / 旧库迁移 / 工具 / `.agent` / docs+根文件——详见 `docs/实现回顾/专项检查-报告-*.md`)合并去重。9 组同事实重复项已合并,主条目与被并入项对照如下(被并入项不再单列,原始行仍在各自报告): | 保留条目 | 并入 | 同一事实 | |---|---|---| | `JC-01` | `TS-01` | CI「离线测试」步无生成步骤 → 干净检出必红 | | `JC-02` | `DR-11` | Pi 版本口径 CI 0.84.4 vs 代码/文档/部署 0.85.1 | | `AG-01` | `DR-04`、`DR-05` | `skills.json` 不存在 + 「59 个技能」实为 46 | | `AG-07` | `DR-13` | 「审查标准」原文缺失(AGENTS.md:60 权威引用落空) | | `JT-03` | `JS-03`、`JW-02`、`JF-02` | 提示词未登记资源、绕过发布包直读源树(跨 3 模块同模式) | | `DR-10` | `JW-04` | B07 声明 `作者经验/提示词/整理偏好与改进建议.md`,目录不存在 | | `LM-02` | `TS-10` | 「混合知识分流」用例断言在真实旧结构上不成立 | | `DR-02` | `JK-07` | `AGENTS.md:53` 结构契约指向已退出路径 + 「23 型」实为 24 | | `TS-05` | `AG-11` | `tests/架构/test_模块依赖.py:353` 技能登记断言恒真 | ## 1. 门禁结论(主代理实测,2026-09-16 历史快照) | 门禁 | 首轮 20:30 | 生成物刷新后 20:42 | 证据 | |---|---|---|---| | `make 检查` | 绿 | 绿 | ruff `All checks passed!`;pyright `0 errors, 0 warnings`;架构 `15 passed`;索引通过 | | `make 测试` | **红**:`1 failed, 1004 passed` | 绿:`1005 passed, 927 deselected` | `/tmp/qc/门禁结果.txt`、`/tmp/qc/门禁结果-复跑2.txt` | | `make 资源核对` | 绿 | 绿 | 发布身份 `muse-foundation-r2`,131 项 | | `make 前端检查` | 绿 | 绿 | exit 0 | | `make 前端测试` | 绿 | 绿 | `28 passed` 文件 / `91 passed` 用例 | | `uv run python 工具/维护索引.py --检查` | 绿 | 绿 | exit 0 | 首轮红的原因、处置与**残余的 CI 风险**见 `JC-01`;本轮门禁只覆盖本机工作区,**干净检出/CI 的结论是红**(同一根因)。 **环境限制(非产品缺陷,但影响证据强度)**:`uv run` 在受限沙箱下拒绝写 `~/.cache/uv`(exit 2),子代理普遍改用 `.venv/bin/*` 等价命令;`pytest` 不带 `--外部环境` 时因 `tests/conftest.py:110-121` 的 macOS `sandbox_init` 被拒而 exit 4(OS 离线隔离按设计拒绝无防护执行)。因此**测试类结论以主代理在授权环境下的 `make 测试` 为准**(1005 passed)。 ## 2. 原机械复核与更正边界 | 项 | 口径 | 结果 | 结论 | |---|---|---|---| | Markdown 相对链接 | 393 个 .md、1680 条链接(全 docs + .agent + .github + 根文件) | 死链 **4** 条 | 主代理与 docs 子代理两套独立脚本收敛到同一数字 | | Markdown 链接(docs 权威区 + 根文件) | 1196 条 | 死链 **4** 条;`docs/系统架构/新版设计/` 单独 1076 条**零死链** | 权威区链接健康 | | 反引号仓内路径引用 | 2722 条(主代理口径)/3000 条(docs 子代理口径) | 失效 1236/574 条 | 量级大但绝大部分落在历史执行记录与「文件清单」形态引用上 | | **R2 旧结论「证据死链 846/889」** | 穷举「范围 × 引用类型」组合 | **无法复现**:当前探针未得到889/846,但缺原统计输入和算法 | 仅保留当前快照的独立结果,不能据此推翻历史数字 | | `.gitignore` 与跟踪文件交集 | `git ls-files` 1320 个 × `.gitignore` | **0 命中** | 计划第 2 节「零误跟踪」目标本轮成立(20:43:37 快照) | | 全新检出模拟 | 临时移走 `src/muse/资源/清单.json` 与 `运行资源.zip`(gitignore 生成物) | `tests/迁移/test_备份恢复与切换核对.py` **收集期**即报 `资源缺失错误`,整套中断(0 collected) | 坐实 `JC-01` 的 CI 风险 | | `AGENTS.md` 已知过期点 | 逐条 `ls`/`find` 验证 | ① `muse/content/meta/schemas/` 不存在;② `muse/lifecycle/flow/chains/` 不存在;③ 全仓无 `skills.json`;④ `.venv-旧` 不存在;⑤ 父仓 `../AGENTS.md`、`../design-docs` 存在 | 旧路径已标退出者仅缺现行导航;当前skills.json、运行态、数量、审查口径及旧解释器声明分别核对,撤回“至少六处”笼统结论 | | 链接文字≠目标 | `.agent`+`docs`+根文件 | 8 类(`AGENTS.md` 11 处、历史文档 2 处) | 与 `DR-07` 一致 | | 技能物理计数 | `find .agent/skills -name SKILL.md` | **46**(诊断 1、规划 6、操作 31、写作 8);`能力/目录.json` 仅 22 operation + 5 role,`method` 恒 0 | 「59」既非物理数也非登记数 | ## 3. 问题清单 ## P0(原始 6 条 → 去重后 5 条) | 编号 | 模块 | 位置 | 方向 | 现状摘录 | 建议 | 所需授权 | |---|---|---|---|---|---|---| | **AG-01**(并入 DR-04、DR-05) | agent层 | `.agent/skills/规划/目录.md:3`(同文 `写作/目录.md:3`、`诊断/目录.md:3`)、`AGENTS.md:55` | D4 | 「技能名和物理路径来自 manifest,技能说明来自 SKILL.md frontmatter;本文件手工维护,`工具/维护索引.py --检查` 核对清单与技能目录一致」;AGENTS.md「59 个技能…(物理清单以 `skills.json` 为准)」。全仓无 `skills.json`/manifest;被点名的门禁只校验"磁盘技能目录有合规 SKILL.md",**不做清单↔物理一致核对**;物理与索引实为 46 个 `SKILL.md`。 | 删除 manifest/skills.json 口径或回填该文件;在 `工具/维护索引.py` 增加一轮「`目录.md` 表行 ↔ 磁盘技能目录」双向核对,使声明与门禁对齐;AGENTS.md 数量改 46 或写明 59 的构成 | 需用户授权(改门禁与入口声明) | | **DR-01** | docs与根文件 | AGENTS.md:60 | D4 | `| 审查标准 | [`.agent/规范/审查标准.md`](.agent/rules/文档与资源生成.md) | 智能体提示词 4 问、技能质量 7 问 + D8 复利审查规程与严重度定义。 |` —— 链接文字所指 `.agent/规范/审查标准.md` **全仓不存在**(`find . -name '审查标准*'` 零命中),目标 `.agent/rules/文档与资源生成.md` 是「文档与资源生成规则」6 条,内容不含 4 问/7 问/D8/严重度 | 二选一:①把该行改为指向真实存在的审查标准文件并把原文落盘;②若已无原文,改引 `专项检查-计划.md` 附录 A/B 并将附录转正。在此之前该行不得再作为权威引用 | 需用户授权(改 AGENTS.md) | | **JC-01**(并入 TS-01) | 后端-基础设施共享 | `tests/单元/test_备份发布身份.py:18,31`;`src/muse/基础设施/备份恢复.py:311`;`.github/workflows/检查.yml:42-52` | D1 门禁 | 用例红:`AssertionError: Regex pattern did not match … Actual message: '当前程序、资源或配置不一致,须先核对安装产物'`;探针实测 `运行代码哈希()=3b2f775f…` ≠ 清单 `代码哈希=11bc9044…`,`src/muse/资源/清单.json` 构建于 18:46、HEAD 提交于 19:09 | 根因是本地资源包(gitignore 生成物,`.gitignore:36`)早于当前 HEAD:先 `make 构建` 重建资源包复核;同时给 `检查.yml` 的"离线测试"步补构建步骤,否则全新检出下 `加载清单()` 直接抛 `资源缺失错误`(同一用例的登记环境为"离线/已知发布构建",见 `tests/用例清单.json:13732-13741`) | 需用户授权(`make 构建` 会重写 web/dist、接口生成物与索引) | | **JC-02**(并入 DR-11) | 后端-基础设施共享 | `.github/workflows/检查.yml:59`;`src/muse/基础设施/宿主/Pi.py:28`;`tests/集成/test_受控模型调用.py:717` | D7 一致性 | CI 钉 `@earendil-works/pi-coding-agent@0.84.4`,而代码按 `包["version"] != self.固定版本` 精确比对、测试构造 `Pi宿主(..., "0.85.1")`;`README.md:28`、`docs/系统架构/新版设计/模块设计/S02-任务运行.md:56` 均写 0.85.1 | 统一为 0.85.1(改 CI 钉版本或改代码/文档,只能二选一);本轮未执行宿主测试,结论由三处静态证据推断 | 需用户授权(改 CI 或改版本口径) | | **JS-01** | 后端-审校效果评测 | `src/muse/审校修订/内置规则/密度/d001.yaml:30`(另有 15 处同文:密度 d002-d006、词汇 l005/l006、结构 s002-s007、语义 sem002/sem003 各自 `evidence:` 行) | D2 | `2026-08-16 所有者决定跳过 holdout 直接激活(激活门豁免,留痕供审计)`。仓内工作树零留痕(全仓 grep `2026-08-16`/`激活门豁免` 非规则文件命中 0);当前实现也不存在豁免开口:`机器味规则.py:133-134` 强制安装包规则必须 `candidate`、`:145-147` 无条件抛"缺少B10逐例评测和正式批准",`规则启用.py:163-170` 启用必须持 B10 规则诊断凭据。留痕只在**已退出工作树**的旧 `humanization/` v0 库(git `476bb71`,其 README 写明这 16 条 holdout 是"欠账…必须补齐"),而新版规则文本把"欠账"限定删掉了 | 二选一:删掉"(激活门豁免,留痕供审计)"括注,或改写为可核路径并保留欠账限定(例:`依据 git 476bb71 旧 humanization v0 库豁免;新版 holdout 仍欠账`);同时把豁免是否延续写进 B06 文档 `规则候选与只读诊断合同` 节 | 需用户授权 | ## P1(原始 95 条 → 去重后 84 条) | 编号 | 模块 | 位置 | 方向 | 现状摘录 | 建议 | 所需授权 | |---|---|---|---|---|---|---| | **AG-07**(并入 DR-13) | agent层 | `.agent/规范/目录.md:1-5`;计划 D4/D5 | D4 | 「审查标准(提示词 4 问、技能 7 问、D8 复利审查规程)」原文在 `.agent/规范/`、`.agent/rules/` 与设计文档中均无对应文件;计划只能用附录 A/B 作替代口径。 | 把本计划附录 A/B 与 D8 规程转正为 `.agent/规范/审查标准.md`,并在 `.agent/规范/目录.md` 登记 | 需用户授权 | | **AG-10** | agent层 | `工具/资源登记.json`(`能力文件` 22 条);`.agent/skills/操作/写下一章/SKILL.md:2`、`.agent/skills/操作/核对内容一致性/SKILL.md:2` | D4 | 资源登记含 22 个 `.agent/skills/操作/*/SKILL.md`;`写下一章`、`核对内容一致性` 声明了完整能力身份(`id: write-next-chapter`、`id: check-consistency`)却未登记;另 9 个操作技能(导入资料、拆解书稿、检查与维护拆书结果、采集资料与榜单、维护故事世界、确认事实增量、整理写作方法 等)无 `id/category/contract_version`,按 `src/muse/资源加载.py:40-55` 无法通过能力声明校验。 | 明确"能力化技能"清单:要么补齐 9 个技能的能力 frontmatter,要么删除未使用的 `id` 并成文"方法/工具技能不打包" | 需用户授权 | | **AG-05** | agent层 | `.agent/rules/正式变更.md:3`、`.agent/rules/任务与证据.md:3`、`.agent/rules/审校与修订.md:3`、`.agent/规范/中文正文与界面.md:3` | D4 | 四份规则各自点名机械门禁:`tests/架构/test_正式写入入口.py`(S01 已落地,该文件不存在且全仓无此字符串)、`tests/集成/test_取消恢复与未知调用.py`、`tests/单元/test_正文格式与选段.py`(两处引用)——三个文件均不存在。 | 改指真实门禁(如 `tests/集成/test_正式提交原子性.py`、`tests/集成/test_任务租约与恢复.py`、`tests/单元/test_审校覆盖.py`),或回填被点名文件 | 需用户授权 | | **AG-06** | agent层 | `.agent/目录.md:3,4,5`;`AGENTS.md` §3 同源 | D4 | 索引描述列点名「执行流程」「红线」「审查标准」「指令集」「去 AI 味道」,五项在 `.agent/` 均无对应文件(`.agent/rules/` 9 个、`.agent/约束/` 3 个、`.agent/规范/` 3 个)。AGENTS.md 用这些名字指到了另外三个真实文件(`.agent/rules/模块依赖.md`、`.agent/约束/作者主权.md`、`.agent/rules/文档与资源生成.md`)。 | 回填缺失文件,或改写索引与 AGENTS.md 的文字使其与物理文件同名 | 需用户授权 | | **AG-02** | agent层 | `.agent/角色/角色合同.md:6,13,20,27,34`(`promptFile`)与 `:43` | D5/D2 | frontmatter 五个 `promptFile: .agent/agents/{writer,planner,extractor,detector,judge}.md`;正文称「`.agent/agents/*.md` 保存 Agent-facing 的身份、Skill 路由与工作方法」。`.agent/agents/` 不存在;真实文件为 `.agent/角色/{写手,规划员,知识抽取员,检测员,评委}.md`(`tests/架构/test_模块依赖.py:406` 亦按此路径断言),且五份提示词实测**不含任何 Skill 路由**。 | `promptFile` 改为 `.agent/角色/<中文名>.md`;删去"Skill 路由"或把路由回填进提示词 | 需用户授权 | | **AG-03** | agent层 | `.agent/角色/角色合同.md:7-8,14-15,21-22,28-29,35-36,45,103` | D5 | 合同:`modelPolicy: fixed-opus|governed-chain-or-fixed|judge-fixed`、`modelPolicyVersion: fixed-opus-v1|muse-governed-chain-v1|judge-fixed-v1`、`toolPolicy: task-spec-allowlist`;并自称「本文件是模型策略的事实源;执行侧的常量与校验是该事实的镜像,两者不一致即为缺陷」。执行侧 `配置/角色策略.yaml:1` 是 `version: role-policy-r2-v2`,策略名为 `fixed|governed|judge-fixed`,工具面为 `readonly_tools`;上述 5 个策略名/版本串与 `task-spec-allowlist` 在 `src/`、`配置/`、`tests/` 全零命中。白名单成员(`deepseek-v4.1-flash`、`muse-spark-1.3-contributor`)与实现一致。 | 把契约改为显式引用 `配置/角色策略.yaml` 并同步策略名与版本号,或把 `modelPolicyVersion`/`toolPolicy` 登记进配置由校验读取 | 需用户授权 | | **AG-09** | agent层 | `.agent/作者/场景/写下一章.md:10-11`、`.agent/作者/场景/查作品.md:12` | D5/D2 | 「正式技能」章节把实现模块登记为技能:`[准备任务上下文](../../../src/muse/上下文/材料装配.py)`、`[固定任务上下文](../../../src/muse/上下文/冻结快照.py)`、`[分析质量短板](../../../src/muse/作者经验/改进提案.py)`;三者不在任何技能目录,"分析质量短板"全仓无同名技能或入口。 | 该章改为"实现模块"表述并另给真实技能指针(核对内容一致性/评估内容质量),或补齐同名技能 | 需用户授权 | | **AG-12** | agent层 | `.agent/rules/计划与提交.md:31,33` | D4 | 两处链接 `../../../.agents/rules/verification-principles.md`:目标落在**仓外**父仓 `/oh-my-muse/.agents/rules/`(本机存在,`git ls-files` 零命中)。单仓克隆即死链,L3 判据在本仓不可读。 | 复制进仓或显式标注"父仓规则、不随本仓分发" | 需用户授权 | | **AG-04** | agent层 | `.agent/角色/角色合同.md:49` | D2 | 「两阶段…派发实现见 `写下一章/scripts/two_phase_writer.py`」。该路径不存在,`.agent/skills/` 下无任何 `scripts/` 目录;`.agent/rules/模块依赖.md:8` 明令「技能不携带实现…禁止在技能目录放可执行脚本」。 | 改指真实实现(`src/muse/正文写作/`,`tests/集成/test_两阶段写手.py` 为证)或删除该句 | 需用户授权 | | **AG-08** | agent层 | `.agent/skills/规划/提炼故事概念/SKILL.md:92-93` 等 15 处(规划 6、写作 8、诊断 1) | D5/D2 | 15 个方法技能的 `## 复利合同` 逐字相同:「本 Skill 的选型判断指导后续 `制定作品规划` / `准备任务上下文` 的范式绑定」;`审核知识卡` → 用户确认(批次 3)。`制定作品规划`、`准备任务上下文`、`审核知识卡` 均不在 46 个技能中;`准备任务上下文` 仅在 `.agent/作者/场景/写下一章.md:10` 作为指向 `src/muse/上下文/材料装配.py` 的链接文字出现。 | 改写为真实目标(如 `确认规划候选`、`写下一章`、`整理写作方法`),或删除该段 | 需用户授权 | | **DR-09** | docs与根文件 | 目标文件清单.json(`.agent/skills/方法/` 171 条)、文件设计/执行知识-方法技能.md(124 条反引号引用) | D7 | `docs/系统架构/新版设计/目标文件清单.json` 把 `.agent/skills/方法/` 写作技能分类;物理树只有 `诊断/规划/操作/写作` 四个分类目录。1432 条目标条目中 **279 条物理不存在,其中 171 条属 `.agent/skills/方法/`**;16 个技能名实为搬迁(`呈现人物`→写作、`增强叙事动力`→规划、`诊断作品问题`→诊断 …),`build` 后按图索骥必 404。该 JSON 是 `执行知识-方法技能.md` 等文件设计页的投影源(页首自述「本页从目标文件清单.json 投影」) | 分类目录改名对齐物理树(`方法`→按实际的 `写作`/`规划`/`诊断` 拆分),并重跑 `工具/维护索引.py`;同时确认 `执行知识-操作技能.md` 中 4 个物理不存在的技能名(`制定作品规划`、`合并故事方案`、`规划下一章` 等)是待建还是废弃 | 需用户授权 | | **DR-26** | docs与根文件 | docs/系统架构/新版设计/技能承接表.md:3;docs/功能规格/技能身份中文化与作者创作入口.md:20,338(另 :85,:320,:321,:323 同类) | D4 | `skills.json` 幻路径不只在 AGENTS.md,已扩散进权威区正文:`技能承接表.md:3`「以当前 **skills.json** 登记的 **59 个技能**为输入,逐项定义新版位置」;`技能身份中文化与作者创作入口.md:20`「正式技能 | `muse/lifecycle/quality/harness/manifests/skills.json` 登记且磁盘存在的 59 个项目技能」——该路径全仓不存在(`find . -type d -name lifecycle` 零命中);`:338` 的机械验收条款「`.agent/skills/目录.md` 与 `muse/技能目录.md` 的每个链接均可打开,并与 manifest 对账一致」要求校验一个不存在的文件,**该条款无法执行**;`:85,:320,:321,:323` 另引 `muse/sot/domains/05-创作流程领域.md`、`07-Agent与Skill领域.md`、`muse/技能目录.md`,均不存在 | 把 manifest 基准从 `skills.json` 改为 `.agent/skills/目录.md`(技能目录)+ `工具/维护索引.py --检查`(已能核索引与磁盘一一对应);`:338` 的验收条款按新基准改写;`59` 统一改 `46` | 需用户授权 | | **DR-20** | docs与根文件 | docs/目录.md:4,5,6,9,10,15-19、docs/根 8 个 `2026-*.md` | D4 | 索引与实体三处脱节:① `docs/目录.md:4,5,6,9,10` 把「领域模型 / 数据模型 / 模块设计 / 业务需求 / 调用链路」的相对地址标为 **`暂无`**,但这 5 个主题在 `docs/系统架构/新版设计/` 下真实存在(分别 2 / 6 / 15 / 2 / 2 篇 .md)——索引读者会得出「不存在」的错误结论;② 同文件只登记了 1 篇 `2026-09-01-*`,漏掉同目录另外 **7 篇** `2026-*`;③ `acceptance`/`design`/`plans`/`research`/`write-chapter` 五行(:15-19)只填了名称与相对地址,`内容描述`/`使用场景`/`使用要求` 三列**全空**。这 5 个目录 + 7 个文档既不在计划第 4 节「docs 权威区」,也不在「实现回顾 留痕」豁免面内,属口径缺口 | 五行「暂无」改为指向 `系统架构/新版设计/<主题>/目录.md` 的真实相对地址;补登 7 篇 `2026-*` 并统一标注「R2 期历史执行记录,表述不复查」;补全 5 行的三列描述。这样口径缺口一并闭合 | 需用户授权 | | **DR-27** | docs与根文件 | docs/系统架构/新版设计/研究依据/选型比较/比较约束.md:7 | D4 | `- 功能比较基准:`docs/业务需求/小说创作共性功能清单.md`,20 个功能域、117 个功能点;原本地草稿已移走。` —— `docs/业务需求/` 目录不存在,`docs/系统架构/新版设计/业务需求/` 下只有 `目标系统完整功能清单.md` 与 `目录.md`。同行虽有「原本地草稿已移走」的弱标注,但**未给出替代路径**,而该行自称「功能比较基准」(下游比较的依据) | 把基准指到实际存在的 `docs/系统架构/新版设计/业务需求/目标系统完整功能清单.md`,并复核「20 个功能域、117 个功能点」与现存文档是否对得上(我未能把 117 对上现存文件,需原作者确认是口径变更还是笔误) | 需用户授权 | | **DR-25** | docs与根文件 | AGENTS.md:13 vs docs/运行手册.md:10、配置/本机正式.toml:2 | D7 | 同一「正式内容库」两套库名:AGENTS.md:13「PostgreSQL(`muse-example` 库)是系统正式内容的唯一权威」;运行手册:10「infra(`100.64.0.8:5433`)PG 实例,库 `muse_migration_1fe755ea37684f9d926f3a0cb3e9c7f2`」,`配置/本机正式.toml:2`(Git 已跟踪)同此。全仓检索 `muse-example` 仅 AGENTS.md:13 一处命中 | 以实际部署为准统一:把 AGENTS.md:13 的库名改成 `muse_migration_1fe755ea37684f9d926f3a0cb3e9c7f2`(或改为不写死库名,指向运行手册与 `配置/本机正式.toml`)。另注:运行手册:10 把内网地址 `100.64.0.8:5433` 写进 Git 跟踪文档,D6 范围不属本任务,仅登记 | 需用户授权 | | **DR-07** | docs与根文件 | AGENTS.md:14,50,51,54,55,57,58,60,61(×3) | D4 | 11 处链接**文字**是仓内不存在的路径、**目标**存在(机械核对逐条:14 `muse/authority/db/表映射.md`→`数据模型/存储与对象关系.md`;50 `muse/sot/domains/`→`阅读指南.md`;51 `muse/sot/边界合同.md`→`总体架构.md`;54 `muse/sot/创作周期与Skill导读.md`→`调用链路/关键旅程.md`;55 `muse/技能目录.md`→`.agent/skills/目录.md`;57 `.agent/约束/红线约束.md`→`.agent/约束/作者主权.md`;58 `.agent/rules/执行流程.md`→`.agent/rules/模块依赖.md`;60 `.agent/规范/审查标准.md`→`.agent/rules/文档与资源生成.md`;61 `去AI味道工程规范.md`→`审校与修订.md`、`指令集规范.md`→`命名.md`、`术语规范.md`→`术语.md`) | 逐条把链接文字改成目标的真实文件名(11 处均为「文字未更新」,目标本身可达) | 需用户授权 | | **DR-08** | docs与根文件 | docs/功能规格/阶段0交互式作品探索.md:31 | D4 | `[\u2026](../../muse/lifecycle/flow/skills/book/完善故事基础设定/references/candidate-contract.md)` —— `docs/功能规格/` 属计划第 4 节明列的 docs 权威区,该相对链接目标不存在(`muse/…` 旧实现路径) | 改指现行落点(`.agent/skills/操作/完善故事基础设定/`),或标注为 R2 期历史方案并归入留痕 | 需用户授权 | | **DR-10**(并入 JW-04) | docs与根文件 | docs/系统架构/新版设计/模块设计/B07-作者经验.md:43 | D7 | 内部职责表声明 `` | 提示词/整理偏好与改进建议.md | 保留原话及区分推断的提案模板 | ``,但 `src/muse/作者经验/提示词/` 目录本身不存在(`ls` No such file or directory)。B07 是 14 个模块文件中唯一声明与代码不符的一个 | 二选一:补建该提示词模板;或从模块设计表删去该行(B07 其余 11 个声明文件全部存在) | 需用户授权 | | **DR-02**(并入 JK-07) | docs与根文件 | AGENTS.md:53、AGENTS.md:15 | D4 | `| 结构契约 | `muse/content/meta/schemas/`(原路径…已随旧实现退出,见固定基线) | 23 型结构本体与规划产物的字段合同 |`;`ls muse/content/meta/schemas` 与 `src/muse/content/meta/schemas` 均 No such file or directory。同一路径在 `:15`(「Git 是代码、技能、智能体提示词、`muse/content/meta/schemas/`、文档和 DDL 的权威」)**裸引、无「已退出」标注**——同文件对同一路径两套写法 | 路径改指现行物理位置 `src/muse/元数据/内置结构/`;「23 型」改为实测值 24(`读取内置种子()` 返回 24 个 `builtin::1`,目录内 25 个 yaml 含 `公共字段.yaml`);`:15` 与 `:53` 的标注口径统一 | 需用户授权 | | **DR-03** | docs与根文件 | AGENTS.md:56 | D4 | `| 创作链条 | `muse/lifecycle/flow/chains/`(原路径…已随旧实现退出,见固定基线) | scenario、purpose、功能 skill、角色槽位和保护节点的链路登记 |`;该目录及其 `src/` 同名路径均不存在 | 改指现行落点 `src/muse/编排/流程登记.py`、`流程版本.py`、`槽位约束.py`(`流程登记.py:45` 登记「必需保护」) | 需用户授权 | | **DR-12** | docs与根文件 | pyproject.toml:60-65 | D7 | `markers` 只声明 `数据库`/`网络`/`真实模型`/`浏览器` 4 个。实测:`网络` 在 `tests/**/*.py` 中 **0 个文件**使用(多余);`宿主` 在 2 个文件使用(`tests/集成/test_受控模型调用.py:528-529` 等)却**未声明**(缺失),靠 `tests/conftest.py:27,50` 运行时 `addinivalue_line` 补登记;`Makefile:49,54,60-62` 也直接用 `-m 宿主` | `pyproject.toml` markers 删 `网络`、补 `宿主`;或明确「标记以 conftest 为权威」并把 pyproject 的 4 条改为注释。当前未红是因为 conftest 兜底 | 需用户授权 | | **DR-06** | docs与根文件 | AGENTS.md:69、.gitignore:32-34 | D4 | AGENTS.md:69「新版工程统一使用仓内解释器 `.venv`(uv 管理;旧代码用 `.venv-旧`)」;`ls -d .venv-旧` → No such file or directory。.gitignore:33 同源注释「旧代码运行环境在 .venv-旧(旧入口保持可运行)」 | 两处一并删去 `.venv-旧` 表述(README:153-155 已声明旧实现完全退出,旧入口不再存在) | 需用户授权 | | **WB-02** | web | `web/tests/旅程/资料对照.spec.ts:7`(登记见 `tests/用例清单.json`)、`世界维护.spec.ts:7`、`方法库.spec.ts:7`、`单元/中文显示与动作.test.tsx:30` | D7 | 清单登记 `case_id: "NC-w17-browser"`,文件内用例名却是 `test("NC-browser-source-workbench:资料对照页与榜单失败态"`;设计文档 `前端-应用与通用界面.md:787` 引用的是清单 id `NC-w17-browser`、`NC-w18-browser` | 以文件内 symbol 为准回填清单 `case_id`,并同步 `前端-应用与通用界面.md:787,797,807` 的引用(同 `NC-w19`/`NC-w20`/`TC-00f820aca9ee-动作` 共 5 条) | 需用户授权(与 tests 模块共担) | | **WB-01** | web | `web/src/功能/创作对话/数据.ts:16` | D1 | `export const 粒度标签: Record = {` / `new_chapter: "新章", expand_scene: "扩写", edit_selection: "选段修改",` —— 在 `src` + `tests` 全量 grep 仅命中定义行本身,零消费者 | 删除该常量;若确为待接入位,改为在 `作者动作` 里实际渲染粒度 | 需用户授权 | | **JF-01** | 后端-交付连载上下文资料 | src/muse/交付连载/提示词/全书审阅.md:1、src/muse/交付连载/提示词/整理交付材料.md:1 | D3 | 两模板已登记并打包(工具/资源登记.json:200,204;src/muse/资源/清单.json:5,8),但 `src/`、`tests/`、`.agent/` 全仓零引用;`配置/流程模板/` 11 个流程中唯一交付流程是 `定稿交付.yaml`(deterministic、`model_calls: 0`,src/muse/编排/定稿交付.py:97)。 | 二选一:为跨章审阅/材料起草接一个真实模型任务并在流程模板登记;或删两文件并撤资源登记条目(同时停发打包字节)。 | 需用户授权 | | **JF-03** | 后端-交付连载上下文资料 | src/muse/资料研究/提示词/核对实体歧义.md:4;src/muse/资料研究/实体归并.py:67;src/muse/接入/cli/研究命令.py:123 | D2 | 模板写"歧义只登记不调用模型,本模板供后续语义核对阶段装配使用";代码与 CLI 都对作者说"歧义保留;待核对实体歧义任务澄清",但仓内无该任务的流程模板、入口或消费者。 | 要么实现该任务并接线;要么把三处话术改成"歧义只登记,由作者人工判定",删掉"后续/待…任务"的无判据承诺。 | 需用户授权 | | **JF-04** | 后端-交付连载上下文资料 | src/muse/资料研究/榜单快照.py:62 | D6 D7 | `"captured_at": 时刻.isoformat() + f"+{sha256(...)[:8]}"`;实测得 `2026-09-16T12:37:00.121045+00:00+ae27547f`,`datetime.fromisoformat` 抛 ValueError。库内真实时刻是 V0007__资料研究.sql:58 的 `clock_timestamp()`,`列出快照`(存储.py:262)返回的又是另一个值;B03 模块设计:20 声明 `capture_ranking` 输出"带采集时刻及质量状态的快照"。 | 直接返回 `时刻.isoformat()`(或回读库内 `captured_at`);若哈希确有用途,另立字段名并写进接口契约。 | 无需授权 | | **JF-05** | 后端-交付连载上下文资料 | src/muse/上下文/索引维护.py:96;src/muse/资料研究/分析版本.py:58、src/muse/资料研究/分析版本.py:187;src/muse/资料研究/实体归并.py:89 | D3 | 四个函数全仓零调用(含 docs/`.agent` 文本检索)且未进各域 `接口.py` 的 `__all__`:`文档关键词检索`、`待重试窗口`、`基准引用`、`归并哈希`;重跑窗逻辑实际由 编排/研究拆书.py:149-150 自行实现。 | 删除或接入真实消费者;删除时同步清各文件 `__all__`。 | 无需授权 | | **JT-02** | 后端-任务运行编排 | `src/muse/基础设施/模型/角色探针.py:92`(旁路点);`src/muse/任务运行/配置版本.py:277`(生产强制 runtime 验证) | D6/D7 | `结果: 模型结果 = asyncio.run(self._宿主(提供方, 凭据).准备(请求).调用())` —— 逐角色真实外发,不走 `模型执行器`:无 `预算管理.预留/标记已发送/结算`,无 `muse_runtime_evidence`,无 `调用发出` 事件;而 `if self.数据库.用途 is 用途.生产 and 证据.模式 != "runtime": raise` 强制生产配置必须持有 runtime 证据。等于每次启用生产配置都会产生一笔**不入 5 小时窗口账本、不留运行留痕**的真实费用 | 探针调用纳入预算账本与留痕(或为其登记独立的探针账户与窗口),并在 S02 文档写明探针费用的记账口径;本项主责在基础设施组,任务运行组需配合提供记账接口 | 需用户授权 | | **JT-03**(并入 JS-03、JW-02、JF-02) | 后端-任务运行编排 | `src/muse/编排/生成规划.py:147` | D1/D7 | `模板 = (Path(__file__).resolve().parents[1] / "作品规划/提示词" / 模板名).read_text()` —— 规划提示词从源树直读;该文件在 `运行资源.zip` 的 85 个条目中不存在(zip 内 `规划/` 只有 `探索交付结构.json`)。同包其它旅程都走发布包:`生成正文.py:342` `生成正文模板()` → `打开资源("正文/生成正文.md")`、`审校修订.py:216` `修订模板(auth)` → `打开资源(...)`。结果是该提示词不受资源发布身份/清单哈希约束,只在检查点留运行时 `模板哈希` | 把两个规划提示词登记进 `工具/资源登记.json` → `运行资源.zip`,`模型规划` 改用 `打开资源`;与审校组 JS-03(`审校修订/完整审校.py:20` 同类直读)一并处理 | 需用户授权 | | **JT-04** | 后端-任务运行编排 | `src/muse/编排/章后处理.py:153-154`、`src/muse/编排/研究拆书.py:136-137` | D1 | `except 预算状态冲突: pass # 恢复重试时包络已登记且哈希一致;不一致会被上一步骤拒绝。` —— 没有"上一步骤"做这件事:抛错的正是 `登记任务预算于` 自己(`预算管理.py:215-216`,既有 `plan_hash` 不等即抛)。因此同一任务重算包络不一致(例如包络公式随部署变化)会被静默吞掉并继续用旧包络,注释断言与实现相反 | 改为只吞"哈希一致"的重复登记(先读既有哈希比对再决定忽略),不一致时照常抛;同步删掉不成立的注释 | 需用户授权 | | **JT-01** | 后端-任务运行编排 | `src/muse/任务运行/接口.py:503`(对账入口);`src/muse/任务运行/恢复控制.py:32-33`(前置条件) | D3/D7 | `def 对账调用(...)` 只在 `接口.py` 定义与 tests 中被调用;`src/muse/接入` 全目录 grep `对账`/`reconcil` 命中 0,任务 HTTP 路由的 16 个 `operation_id` 里没有对账端点,CLI 也无对应命令。而恢复被硬性拦住:`if 存储.未知调用(任务ID): raise 状态冲突("调用结果未知,必须先对账再恢复")`。后果:任何在"标记发送事务提交后、响应证据落库前"中断的调用会把任务锁进 `reconciling`,Web 任务页对 reconciling 显示的"核对并恢复"按钮必然报状态冲突,唯一出口是取消 | 补一个受控对账入口(HTTP 或 CLI,带命令幂等键与回执),或在 S02 文档把 `对账调用` 明确标注为"仅运维/测试可达、产品面暂不可达"并同步 Web 按钮可用状态 | 需用户授权 | | **JW-01** | 后端-写手规划经验 | src/muse/正文写作/提示词/生成正文.md:25 | D2 | "每段是完整段落文本,不含换行符;段内换行由系统处理。" 实测:`写作输出合同` 不禁止段内换行(探针 1 通过 schema 校验),`模型.py:22-23` 的 `文本节点` 直接抛"段内换行必须使用显式换行节点";`编排/生成正文.py:422-426` 无归一,`任务运行/模型调用.py:49-66` 只做 JSON Schema 校验 | 删除"段内换行由系统处理",或在 `生成正文.py:422` 前按 `选段编辑._新文本` 同法拆成显式换行节点 | 需用户授权 | | **JW-03** | 后端-写手规划经验 | src/muse/正文写作/正式提交.py:96-105 | D1 | B05 用裸 SQL `SELECT verdict FROM muse_review_report WHERE candidate_id=%s AND candidate_revision=%s` 直读 B06 私表,违反 `docs/系统架构/新版设计/总体架构.md:59`"跨业务调用只穿过接口.py 暴露的合同;存储、内部对象和私有函数不跨模块使用";B06 已有公开读取(`审校服务.读取报告`,同法见 `src/muse/作者经验/运行观察.py:80`) | 改经 B06 公开接口读报告判定,或由 B06 暴露"候选必需检查结论"窄读取合同 | 需用户授权 | | **JC-11** | 后端-基础设施共享 | `配置/提供方.example.toml:4` | D7 模板过期 | 模板写 `"角色策略版本" = "role-policy-r2-v1"`,权威 `配置/角色策略.yaml:1` 为 `role-policy-r2-v2`;`角色探针.py:63` 会以"与当前发布包不一致"拒绝按模板生成的配置 | 模板升到 `role-policy-r2-v2`;模板值应与发布的 `角色策略.yaml` 同步(或改为占位符并注明取值来源) | 本批修复候选 | | **JC-06** | 后端-基础设施共享 | `src/muse/基础设施/资料来源/网页读取.py:10-13`、`榜单读取.py:10-13` | D3 孤儿入口 | 两个 Protocol 在 `src`、`tests`、`工具`、`数据库` 零引用;`src/muse/资料研究/榜单快照.py:17-20` 另有一个同形 `榜单读取器` Protocol 承接了真实消费 | 二选一:删 `资料来源/` 两个协议,或让 `资料研究` 改为依赖基础设施协议(避免两套同义抽象) | 本批修复候选 | | **JC-08** | 后端-基础设施共享 | `src/muse/共享/标识.py:11-14` | D3 死代码 | `作品标识`、`命令标识`、`审阅版本标识` 除本文件与 `共享/__init__.py` 的再导出外零引用(仅 `任务标识` 有消费者) | 删除三个 NewType 与对应再导出;未来需要时再按真实调用点引入 | 本批修复候选 | | **JC-04** | 后端-基础设施共享 | `src/muse/基础设施/模型/ChatCompletions.py:19-25`;`src/muse/基础设施/模型/Messages.py:20-31` | D1 错误合同 | 探针:`usage={"prompt_tokens":1}` → 裸 `KeyError: 'completion_tokens'`;Messages 缺 `index`/缺 `delta.type` → 裸 `KeyError: 0`/`'type'`。同族 `Responses.py:47-53` 统一转 `模型协议错误` | 三个协议解析器统一把缺字段/坏帧转成 `模型协议错误`(上层 `任务运行/模型调用.py:367` 只按该类型分流) | 本批修复候选 | | **JC-09** | 后端-基础设施共享 | `docs/系统架构/新版设计/文件设计/后端-基础设施.md:36,214,215`;`src/muse/基础设施/模型/嵌入.py:3` | D2/D7 口径对立 | 设计文档写 `向量.py # pgvector 查询实现`、职责"pgvector 查询实现",而 `嵌入.py:3` 写"裁决 A:不依赖外部嵌入服务与 pgvector",`检索/向量.py` 实际是纯 Python 余弦;"裁决 A"在 `docs/` 内查无出处 | 统一口径:更新 `后端-基础设施.md` 的 向量.py 条目(改述为纯函数余弦/或标注裁决变更),并把"裁决 A"落到可检索的裁决记录 | 需用户授权(改设计文档) | | **JC-07** | 后端-基础设施共享 | `src/muse/共享/时间.py:51,58` | D3 死代码 | `截止于`、`单调秒` 全仓零消费者;实际调用方直接 `from time import monotonic`(`任务运行/步骤执行.py:8,51`、`接入/http/应用.py:5,80,89`),期限也各自 `+ timedelta(...)`(如 `效果评测/逐例执行.py:136`) | 删除两个无人调用的入口,或让调用方改用它们并在模块 docstring 保留"期限计算只在此处一种解释"的口径 | 本批修复候选 | | **JC-05** | 后端-基础设施共享 | `src/muse/基础设施/数据库/连接.py:92-96` | D3 孤儿入口 | `连接范围()` 全仓零消费者(含测试),实现只是 `with 连接(...) as 连: yield 连` 的一层转发 | 删除,或改为在调用方直接使用 `数据库工厂.连接`;保留则需给出消费者 | 本批修复候选 | | **JC-03** | 后端-基础设施共享 | `src/muse/配置.py:167-175` | D1 校验断裂 | `原文暂存 = ""` 被静默解析为**配置文件所在目录**、`探索草稿 = " "` 被解析为带空格的目录;同一函数对 `备份目录` 有显式非空校验(`:171-173` 抛"文件.备份目录需要明确路径") | 给 原文暂存/探索草稿 补与 备份目录 一致的非空与 `strip()` 校验,空串直接 `配置错误` | 本批修复候选 | | **JC-10** | 后端-基础设施共享 | `docs/系统架构/新版设计/目标文件清单.json:8856`;`后端-基础设施.md:32,287`;`工具/维护索引.py:246-264` | D3/D7 门禁盲区 | 清单与设计文档登记 `src/muse/基础设施/文件保留.py`,仓内不存在该文件;`维护索引.py --检查` 只核对设计文档锚点存在,不核对目标文件是否存在,实测退出 0(未发现) | 删除该目标条目(或补实现);把"清单登记路径必须在树上存在"加入 `检查文件定位`,让门禁能发现同类悬空目标 | 需用户授权(改清单/门禁) | | **JS-05** | 后端-审校效果评测 | `src/muse/审校修订/提示词/诊断机器味.md`、`src/muse/审校修订/提示词/提取作品声音.md` | D3 | 两个提示词文件既无加载点(全仓无 `诊断机器味.md`/`提取作品声音.md` 的资源路径引用),也未登记发布资源(`工具/资源登记.json` 无条目、`运行资源.zip` 内不存在)。对应能力已由确定性代码实现:`诊断服务.生成诊断`→`机器味诊断.诊断文本` 纯规则、`声音基线.统计声音样本` 纯统计 | 删除两个孤儿提示词并同步 B06 文档:59-60,或补上真实调用点并登记进发布资源 | 需用户授权 | | **JS-07** | 后端-审校效果评测 | `src/muse/审校修订/诊断服务.py:26-32` + `src/muse/审校修订/机器味诊断.py:436` | D1 | 无任何激活记录时 `读取诊断规则` 返回空库 `核对规则库([], [])`;生产诊断(`预览候选=False`)随即产出 `mode:"active"`、`coverage.deterministic:[[0,全文长度]]`、`executed_rules: []`、`unreviewed_rules: []`、`findings: []`。下游无法区分"扫了全文、零命中"与"一条规则都没启用"(实测见证据指针 P3) | 报告增加 `active_rule_count`/`empty_library`(或 `coverage.rules_executed`)标记;或在空库时拒绝出具 `active` 报告 | 需用户授权 | | **JS-02** | 后端-审校效果评测 | `src/muse/审校修订/内置规则/密度/d002.yaml:31`(另有 12 处:d003-d006、l005/l006、s003-s007、sem002/sem003) | D2 | `129 条研究目录 D-01 机制候选`/`D-07`/`L-14`/`P-11`/`N-05`/`S-11`…。该目录真实存在过(旧 `humanization/research/20-project-humanization-rule-catalog.zh-CN.md`,自述"目录规模:129 个归一化条目"),但已随旧实现整目录退出工作树,规则文本未给任何可定位路径 | 引用改为可定位形式(补 `git 476bb71:humanization/research/...` 或标注"依据已随旧实现退出");同批处理 d001/s002 的"20 项开源研究机制候选" | 需用户授权 | | **JS-09** | 后端-审校效果评测 | `docs/系统架构/新版设计/模块设计/B06-审校修订.md:37-61`、`B10-效果评测.md:32-47` | D7 | 内部职责表与物理文件不一致:B06 表列 18 个 .py,缺 `诊断服务.py`/`案例规则.py`/`模型修订.py`/`离线回放.py`;B10 表列 13 个 .py,缺 `启用凭据.py`/`工作面.py`/`文学执行.py`/`文学评分.py`/`方法对照.py`/`条件第三.py`/`标定.py`/`标定消费.py`/`混淆项.py`/`角色行为.py`/`语义检测.py`,也未列 `提示词/文学评分.md` | 补齐两表,或在表上显式标注"节选,完整清单见目标文件清单" | 需用户授权 | | **JS-06** | 后端-审校效果评测 | `src/muse/审校修订/规则例证/regression.yaml:52`、`:81` | D3 | `reg-004`、`reg-006` 两条例证 `rules: []`,不被任何规则 `samples` 引用。实测:规则库 107 条例证中仅 105 条被引用(`读取内置规则` 只对引用到的例证做合同核验,这两条既不校验也不消费,却计入 `fingerprint`) | 为两条补挂真实规则,或从例证库删除 | 需用户授权 | | **JS-10** | 后端-审校效果评测 | `src/muse/效果评测/混淆项.py:224`、`:227` | D1 | 判定 `panel["status"] == "unstable"` 并把它列入可收尾状态,但生产者 `文学评分._仲裁文学评分` 只会返回 `stable_report`/`adjudicated_report`/`needs_third_reviewer`/`invalid_unstable`/`invalid_report`,从不产出 `"unstable"` | 改为 `invalid_unstable`,或删掉该分支并让 `invalid_report`/`invalid_unstable` 明确计入 `incomplete` | 需用户授权 | | **JS-08** | 后端-审校效果评测 | `src/muse/审校修订/接口.py:374`(`import _核验, _读提案`)、`模型修订.py:13`(`import _准备`)、`持久返修.py:360`(`存储._要求返修会话`);`src/muse/效果评测/接口.py:587`(`import _数据库身份`)、`逐例执行.py:188` 与 `:540`(`import _要求数据集`) | D1/D7 | 跨模块导入/调用下划线私有名共 6 处,与 B06 文档 `:33`、B10 文档 `:28` 的"外部不导入私有模型或 SQL"声明不符 | 把被跨模块使用的私有名提升为公开名(去下划线)或下沉到同模块;若是有意例外,在文档写清例外范围 | 需用户授权 | | **JS-04** | 后端-审校效果评测 | `src/muse/审校修订/持久返修.py:757`(导出:`接口.py:542`;文档:`B06-审校修订.md:30`) | D3/D7 | `def 读取返修比较来源(...)` 是 B06 文档列明的公开用例,但全仓零调用方(精确匹配只命中定义行与 `接口.py` 的 import/`__all__` 两处)。B10 实际走的是 `读取返修比较来源于`(`效果评测/返修比较.py:19,117`) | 删除该公开入口并在 B06 文档:30 改为 `读取返修比较来源于`,或让 B10 改经它调用 | 需用户授权 | | **JR-05** | 后端-接入 | `src/muse/接入/cli/入口.py:4` | D2/D7 | 模块 docstring:`已实现子命令:自检、迁移(显式维护命令,不在启动时自动执行)。`;而 `_解析参数`(`:25-277`)实际注册 **19** 个子命令(数据维护/行为评测/评测/经验/自检/交付/迁移/服务/任务/创作/审校/研究/结构/作品/审阅/探索/规划/配置/管理) | 改为"子命令清单以 `--help` 为准(当前 19 个)"或直接列举;同文件 `:5` 的"不返回伪成功"实测成立,可保留 | 无需授权 | | **JR-04** | 后端-接入 | `src/muse/接入/执行器.py:8-34`;唯一调用点 `tests/集成/test_任务租约与恢复.py:426`;对照 `后端-装配与接入.md:489-496` | D3/D7 | 设计文档把该文件写成"后台进程入口、用途装配和优雅停机",实测生产代码零消费者:全仓 `接入.执行器` 只命中那条测试;`cli/入口.py:508-519` 的 `服务` 只起 uvicorn,Makefile/`工具/`/`配置/` 无任何 worker 启动目标。仓内不存在文档声明的后台入口 | 二选一:补真实后台领取入口(发布目录脚本或 `python -m muse` 子命令)并接线;或把文档改为"预留的领取循环实现,当前仅测试可达"并把它定位为测试夹具 | 需用户授权(新增入口或改文档口径) | | **JR-06** | 后端-接入 | `cli/创作命令.py:14-22,61-62`;`http/路由/创作生成.py:22,109-110`;`http/路由/作品规划.py:42-61`;`http/路由/正文写作.py:127-149`;对照 `后端-装配与接入.md:374,396` | D7/D1 | 设计文档要求"命令与 HTTP 用例保持相同结果与拒绝条件"。实测三处不一致:① 读候选审校报告缺报告时,CLI `raise 配置错误(f"候选 {目标} 版本 {当前版本} 没有审校报告")`,HTTP `raise HTTPException(404, "该候选版本没有审校报告")`;② 发起生成正文(`发起生成正文` 同一用例)HTTP 请求模型有 `budget`(`创作生成.py:22`),CLI `生成发起请求` 没有(`创作命令.py:14-22`);③ HTTP 有 `POST /works/{id}/planning-tasks` 与 `POST /chapters/{id}/post-derivations`,CLI 的动作表(`入口.py:214-230,247-260`)无对应动作 | 请求模型抽一份放 `接入/创作操作.py`(照 `审校操作.py` 的做法,两侧共用);报告缺失统一走带 `NOT_FOUND` 的错误;CLI 补"规划 发起""作品 章后重建",或把这两条 HTTP 入口在文档标注"仅工作台可达" | 需用户授权(改接口面) | | **JR-03** | 后端-接入 | `src/muse/接入/http/路由/上下文.py:57-65`(对照 `src/muse/上下文/依赖校验.py:202,211-216,236-241,255-256`、`src/muse/上下文/任务范围.py:292,296,315`) | D1/D7 | 逐来源 `current_state` 只分三档:`状态.有效`→全"有效";来源等于细纲或文稿→查 `锁定身份`;`else: 当前 = "有效" if 事实锁定 else "SOURCE_STALE"`(注释写"事实对象没有逐对象锁定")。但 `来源绑定` 还含 voice/preference/method 三类(偏好 id、声音 version_id、方法 binding_id),快照失效时它们被按"事实系统是否锁定"整体标注,会把真正漂移的声音/方法/偏好来源报成"有效"(反之亦然) | 分类改为:仅事实键 `f"{作品ID}:事实系统"` 用 `事实锁定`,其余来源一律用 `绑定.来源ID in 锁定身份`;补一条含 voice/method 绑定的断言用例 | 无需授权 | | **JR-01** | 后端-接入 | `src/muse/接入/http/路由/资料研究.py:92-95`;根因 `src/muse/资料研究/模型.py:14-15` | D1/D7 | `try: return 装配.要求资料().读取版本(连, source_id, revision)` / `except Exception: raise HTTPException(404, "来源版本不存在") from None`。数据库连接失败、事务错误、代码缺陷都被报成"来源版本不存在";`后端-装配与接入.md:175` 明写边界「转换已有错误;**不吞异常**、不伪造成功」。根因是 `资料错误` 只有 `错误码 = "SOURCE_INVALID"`(不以 `NOT_FOUND` 结尾),走统一错误壳会落 422,路由于是自己造了 404 | 让 B03 为"来源版本不存在"给出 `*_NOT_FOUND` 错误码(该文件第二条同类错误亦同),删除这处 `except Exception`,统一由 `错误响应.py` 映射 | 需用户授权(跨域改 B03 错误码) | | **JR-02** | 后端-接入 | `src/muse/接入/http/路由/知识方法.py:247-249`(对照 `作品规划.py:51,78,118`、`故事世界.py:82,101,112`) | D7/D1 | `def 绑定方法(work_id: str, 请求: 方法绑定请求, ...)` 函数体没有 `核对路径(work_id, 请求.work_id)`,直接 `...绑定方法(..., 请求.command_id, 请求.命令())`;而 `请求.命令()`(`:107-110`)用的是请求体自己的 `self.work_id`。全层 28 处 `核对路径` 调用 + 2 处等价内联检查(`任务运行.py:104`、`知识方法.py:206`),只有这一条写路由完全没有身份核对 | 补 `核对路径(work_id, 请求.work_id)`,或删掉路径参数改成 `/api/v1/method-bindings`;二选一但必须与其他写路由统一 | 无需授权 | | **JK-02** | 后端-知识方法故事世界 | `src/muse/知识方法/提示词/提炼写作方法.md:1` | D3 | 17 个提示词文件中属"完全孤儿"(未登记 `工具/资源登记.json`,`.py/.yaml/.json` 零引用),`B04-知识方法.md:36` 仍列为模块文件 | 与 JK-01 同一处置:删文件或补消费者 | 需用户授权 | | **JK-01** | 后端-知识方法故事世界 | `src/muse/故事世界/提示词/抽取章节事实.md:3` | D2 D3 | 「章后派生按本模板语义组装系统提示」;实际抽取提示是 `src/muse/编排/章后处理.py:175-176` 的内联字符串,全仓无任何读取该模板的代码 | 删除该文件并同步 `B02-故事世界.md:36` 的职责表,或让章后抽取改读该模板 | 需用户授权 | | **JK-05** | 后端-知识方法故事世界 | `src/muse/知识方法/模型.py:24-26` | D1 | `方法结构.effective_schema_hash` 属性恒返回 `""`,全仓无消费者(`评测材料.py:59,82,120` 读的是元数据 `有效结构` 的同名属性) | 删除该 property | 无需授权 | | **JK-03** | 后端-知识方法故事世界 | `src/muse/元数据/内置结构/generation_context.yaml:25-105` | D2 D3 | 「严格合同」WriterContext/WriterOutput(`writer-context-v1` 等)在 `src/` 与 `tests/` 零读取(`内置导入.py:36-50` 只读 `类型/结构/种子身份/原定义哈希/合入公共内容`);该结构 `字段: []`,`type_id` 仅 `tests/契约/test_动态结构投影与版本.py:147` 引用 | 或实现该合同并给出消费者,或删块并把空结构降级为显式说明 | 需用户授权 | | **JK-04** | 后端-知识方法故事世界 | `src/muse/元数据/模型.py:30` + `src/muse/元数据/字段校验.py:84` | D1 | `引用规则.作品范围` 只被定义与枚举校验(`same_work` / `authorized_source`),全仓无任何分支读取它;`authorized_source` 无实现,各 owner(如 `故事世界/设定修订.py:59`、`事实提案.py:64`)一律按 `work_id` 相等判定 | 定为文档则删字段,定为合同则实现 `authorized_source` 判定 | 需用户授权 | | **JK-06** | 后端-知识方法故事世界 | `src/muse/故事世界/人物关系.py:53-56` | D1 | `try: 结果 = 校验值(结构, 行["content"] or {})` / `except Exception: return 引用对象集`——静默返回空集:`列出关系` 会输出 `端点: []`,`设定修订.py:363` 的 `评估修订影响` 会漏报受影响对象 | 只捕获 `元数据错误`,其余异常失败关闭;或把失败原因显式回传前端 | 无需授权 | | **JK-08** | 后端-知识方法故事世界 | `src/muse/元数据/内置结构/power_system.yaml:124` | D2 | 「设计发现:2026-07-09《焚忆》立项……(待回填专题-06/后端-04)」:`专题-06` 已随 design-docs 退出,`docs/系统架构/新版设计/文件设计/` 下无「后端-04」文件 | 删除该待办,或改指现行文件并转台账 | 无需授权 | | **TL-05** | 工具 | 工具/生成接口.py:20-21、43-45、46-48 | D6/D1 | `输出 = 仓库根 / 条目["输出"]` 由登记驱动且无越界校验,`输出.parent.mkdir(parents=True, exist_ok=True)` 后直接覆盖写;登记文件缺失时按空登记 `return 0`(`构建资源包.py:34-35` 对缺 资源登记.json 是 SystemExit)。删掉 生成输入.json 即可让 `make 生成` 静默通过并沿用旧合同 | 登记输出路径加包含性校验;登记文件缺失统一改为非零退出 | 需用户授权 | | **TL-04** | 工具 | 工具/构建资源包.py:108、112 | D6 | `源 = 仓库根 / str(条["源路径"])` 未做包含性校验(同文件 :53 对能力文件有 `文件.is_relative_to(根.resolve())`);`zipfile.ZipInfo(打包路径, date_time=…)` 不校验 `../` 与绝对路径。登记可把仓外文件打进随包发行的 zip,也可造 zip-slip 条目;`构建发布.py:73` 却对 wheel 显式排除 `.git/.env/tests` | 按 :53 同源加包含性校验,并规范化打包路径(拒绝绝对路径与 `..`) | 需用户授权 | | **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-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-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-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-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-04** | 测试与资源 | `tests/端到端/test_交付归档与恢复.py:87-88,218`、`tests/集成/test_实际运行装配.py:217`、`tests/集成/test_发布包独立运行.py:220`,共 16 文件(11 文件带 `浏览器` 标记) | D1 | `if os.environ.get("MUSE_RUN_BROWSER") != "1": pytest.skip("需显式启用浏览器")`;`"MUSE_BROWSER_EXECUTABLE": "/Applications/Google Chrome.app/…"` | `MUSE_RUN_BROWSER` 只出现在 tests(Makefile/CI 0 处);`make 前端测试`=`vitest run`,24 个 `web/tests/旅程/*.spec.ts` 无门禁入口;`:220` 的分支还不报 skip → 真后端浏览器旅程与「备份带走」端到端验收没有执行入口 | 需用户授权 | | **TS-08** | 测试与资源 | `tests/真实调用/test_诊断技能行为.py:162-166`;`tests/夹具/行为评测/诊断机器味场景.json:52` | D1 | `if prepared["task_id"] is None: assert …["preflight_only"] …; return True` | `missing-work-ref` 场景 `"work_ref": null` 使其挂 `真实模型` 标记却零模型调用仍计通过:改标离线预检或补真实对照 | 无需授权 | | **TS-13** | 测试与资源 | `tests/集成/test_上下文快照与索引写入.py:177-183` | D1 | 用例名「同哈希去重与owner冲突」,去重半句只有 `assert 再`(首次回执 `:180` 被丢弃) | 未比对提案身份、未验第二张卡不存在:补身份比对与计数断言 | 无需授权 | | **TS-03** | 测试与资源 | `tests/conftest.py:252-259`;`tests/架构/test_测试依赖与执行证据.py:138-160`;`tests/集成/test_数据库连接与迁移.py:74` | D1 | `pytest.skip(f"未设置 {数据库环境变量}…")`;架构用例断言「全跳过 → 退出码 5」 | 与《测试隔离》§2「缺 `MUSE_TEST_DATABASE_URL` 时**直接失败**,不跳过」冲突。实测:环境变量未设置时 `pytest tests/集成/test_数据库连接与迁移.py --外部环境 -q` → **2 passed, 20 skipped, 退出码 0**,绕过 §5 全跳过守卫:夹具改 `pytest.fail` 或改规则口径 | 需用户授权 | | **TS-05**(并入 AG-11) | 测试与资源 | `tests/架构/test_模块依赖.py:330-353` | D1 | `assert Path(相对).name in 登记能力` | `登记能力` 由 `Path(条目).name` 构成(实测 `{SKILL.md, 写手.md, …}`),技能路径取 name 恒为 `SKILL.md` → 「场景只路由已登记技能」永不拒绝:改后缀匹配 | 无需授权 | | **TS-07** | 测试与资源 | `tests/端到端/test_改进验证与版本启用.py:371-392`、`:330-332` | D1 | docstring「此处以最小红例固定『运行观察不产生任何 skill/lesson 落盘』的合同」;用例体只断言 `saved["state"]` 与列表首元素 id | 从不检查 `.agent/skills` 或提示资源是否被改写:补文件字节/哈希断言;`:330` 同调用自比只证读取确定性 | 无需授权 | | **TS-09** | 测试与资源 | `tests/架构/test_模块依赖.py:442-468` | D1 | `characters={"甲": ["嗯"], "乙": ["嗯"]}` → `pytest.raises(ValidationError)` | `characters`/`untouchable_verbal_tics` 都不是 `声音提案请求` 的字段(`src/muse/审校修订/声音确认.py:67-76`,`extra="forbid"`):只能命中「未知 kwarg」,用例名承诺的角色级归属规则无判据 | 无需授权 | | **TS-12** | 测试与资源 | `tests/集成/test_审校报告与案例持久化.py:1037-1049`;登记条目 `TC-873f1d93b7df` | D1 | 用例名「CLI诊断默认持久化且**同一作者可读回**」,函数体只有 `assert 结果["report"]["persisted"] is True`;登记 `environment="离线,固定样张、规则和四类反例"` | 该用例经 `诊断环境`→`章后环境`→`应用测试库` 依赖隔离 PostgreSQL,登记环境与真实依赖矛盾、用例名与断言不符 | 无需授权 | ## P2(原始 171 条 → 去重后 171 条) | 编号 | 模块 | 位置 | 方向 | 现状摘录 | 建议 | 所需授权 | |---|---|---|---|---|---|---| | **AG-13** | agent层 | `.agent/skills/操作/{扩写场景,润色正文,重写选段,压缩正文}/SKILL.md`;15 个方法技能公共段 | D2 | 四份选段技能逐行比对**仅 3 行不同**(`id`、`description`、`mode` 与一句动作描述),其余 20 行完全一致;15 个方法技能的输入首行/输出首行/复利两行逐字相同(各 15/15)。 | 抽成一份受控选段修订合同 + `mode` 参数;方法技能保留各自特有的输入差异、删除复制的"当前不…"段 | 无需授权 | | **AG-16** | agent层 | `.agent/skills/操作/建立作品声音档案/SKILL.md:2`、`.agent/skills/操作/评估内容质量/SKILL.md:2` 等 24 处 | D4 | 24 个有 `id` 的技能中 16 个带 `operation.` 前缀、8 个不带(`write-next-chapter`、`inspect-task`、`check-consistency` 等);`operation.build_voice`、`operation.review_content` 用下划线,其余用连字符。 | 统一 `id` 命名口径并在规范中成文 | 无需授权 | | **AG-15** | agent层 | `.agent/skills/操作/目录.md:3,4,8,10` | D5 | 四行使用场景="需要该项操作时"、使用要求="只使用已实现的具名入口",无任何触发信息;其中 `:8` 是核心入口 `写下一章`,`:10` 是 `核对内容一致性`。 | 按 SKILL.md 的"何时使用/命令"补写具体触发场景 | 无需授权 | | **AG-20** | agent层 | `.agent/作者/场景/定故事.md:16` | D4 | 「方法子阶段在方法技能迁移前可参考旧版 [完善故事基础设定](../../skills/操作/完善故事基础设定/SKILL.md) 主文档」——链接文字称"旧版",目标与 `:9` 是同一个新版路径;"主文档的「整理交付」"在 SKILL.md 中已变为 `references/整理交付.md`。 | 删去"迁移前/旧版/主文档"表述,改指 `references/整理交付.md` | 无需授权 | | **AG-23** | agent层 | `.agent/skills/操作/完善故事基础设定/SKILL.md:16`、`.agent/skills/操作/记录机器味案例/SKILL.md:20` | D4 | `完善故事基础设定/references/` 有 8 个文件,SKILL.md 只提到 `交付结构.json`,未给 `references/目录.md` 索引指针(其余 6 个指令文件不可从 SKILL.md 发现);`记录机器味案例/references/目录.md` 未被 SKILL.md 引用。 | 在 SKILL.md 补 `references/目录.md` 指针 | 无需授权 | | **AG-14** | agent层 | `.agent/skills/操作/目录.md:31,32` | D2 | `整理定稿与导出` 与 `登记连载与反馈` 两行的内容描述("作者定稿、实际文件与版本反馈")、使用场景("交付连载时")、使用要求("明确版本和作者动作")三列**逐字相同**,派发者无法区分,且描述与导出技能实际职责(冻结/导出/下载)不符。 | 按各自 SKILL.md 重写两行 | 无需授权 | | **AG-22** | agent层 | `.agent/skills/规划/铺设并回收伏笔/SKILL.md:49-56`、`写作/打磨小说场景/SKILL.md:63-73`、`写作/打磨小说语言/SKILL.md:41-52`、`写作/表达主题与立场/SKILL.md:66-75`、`写作/运用展示与留白/SKILL.md:53-63` | D4 | 这 5 个技能的 `references/_coverage.md`(自述"唯一追溯文件")未出现在 SKILL.md 的引用索引;另外 10 个方法技能逐条登记。 | 统一:引用索引补 `_coverage.md` 行 | 无需授权 | | **AG-24** | agent层 | `.agent/skills/诊断/诊断作品问题/SKILL.md:58-74` | D2 | 「症状→专精 Skill 路由」15 行表与 15 个方法技能 description 的"与 X 交接"段、`.agent/skills/诊断/目录.md:11` 的交接清单三处维护同一批关系,改一处必须同步三处。 | 保留一处为定义、其余改为指针 | 无需授权 | | **AG-18** | agent层 | `.agent/skills/规划/搭建故事结构/SKILL.md:61`、`.agent/skills/写作/设计人物/SKILL.md:81`、`.agent/skills/诊断/诊断作品问题/SKILL.md:94` 等 14 处 | D2 | `## 脚本` 段列出的全部是 `references/*-checklist.md`、`*-worksheet.md`、`*-ledger-template.md` 之类 Markdown 台账,没有任何脚本;而 `.agent/rules/模块依赖.md:8` 禁止技能目录放脚本,两处叠加造成"声称有脚本、实际无脚本、也不允许有脚本"。 | 段名改为「台账/清单」,并在需要机械判定的台账上注明由谁校验 | 无需授权 | | **AG-17** | agent层 | `.agent/skills/` 全目录;`工具/维护索引.py:64-75` 与 `src/muse/资源加载.py:40-55` | D5 | 同一目录两套 frontmatter 最低要求:24 个技能要求 `id/category/contract_version`,22 个只要求 `name/description`;索引门禁只校验 `name`,打包校验才要全套,口径未成文。段落结构同样不统一:31 个操作技能全部没有 `## 输入`/`## 输出` 分段,5 个方法技能没有 `## 红线` 段。 | 成文最小技能合同(必填字段 + 必填段落),并按合同补齐或明确豁免 | 无需授权 | | **AG-19** | agent层 | `.agent/skills/写作/打磨小说场景/SKILL.md:80` | D4 | 「来源」列写 `/scene-mission-driven;/fiction-打磨小说场景;/scene-enter-late-exit-early;/cinematic-distances`——旧英文技能调用名,与技能身份中文化(`chinese_only`)口径冲突;其余技能已改用中文源单元名。 | 换成中文源单元名或删除该列 | 无需授权 | | **AG-21** | agent层 | `.agent/skills/规划/提炼故事概念/SKILL.md:93` 等 15 处 | D2 | 「当前不自动登记 `example_lesson`,避免无效果信号的公共卡膨胀(批次 3)」——历史批次号与阶段性状态写入长期技能正文;`example_lesson` 仅存在于旧库冻结域(`数据库/旧库迁移/旧结构/PostgreSQL/108-example经验升格.sql`)。 | 删除批次号与阶段性状态,或迁到 `docs/` 计划留痕 | 无需授权 | | **DR-15** | docs与根文件 | .github/workflows/检查.yml、构建.yml vs Makefile | D7 | **CI 有、本地无独立入口**:`数据库/初始化/用途角色.sql` 初始化步(检查.yml:54)、`宿主测试`(:58-60)、`检查` 整体(CI 拆成 `格式`+`类型`+`维护索引 --检查`,不走 `make 检查`)。**本地有、CI 无**:`make 检查` 里的 `模块边界` 无显式步(仅被 `make 测试` 收集间接覆盖)、`make 资源核对`(Makefile:81)无任何 CI 步。**版本不一致**:构建.yml:22 `node-version: "22"` vs 检查.yml:34 `"24.15.0"`;Pi 版本见 DR-11 | 在 CI 显式补 `make 模块边界` 与 `make 资源核对`;统一两个 workflow 的 Node 版本;`make 检查` 与 CI 步骤表对齐后同步到运行手册 | 需用户授权 | | **DR-28** | docs与根文件 | docs/系统架构/新版设计/文件设计/*.md、各 `目录.md` | D2 | (c)投影页逐字重复:`文件设计/` 四字段去重率极低——**边界**字段 1331 行只有 301 条不同(1030 行逐字重复,如 `执行知识-方法技能.md:566,588`「仅辅助对应 Skill;不定义第二套业务字段、权限、写入或评分权威」全目录出现 133 次)、**目标** 1265 行仅 275 条不同、**意图** 1237/1008、**职责** 1359/1212;`目录.md` 的「内容描述」列逐字复制「名称」列共 64 行(`新版设计/目录.md:16`、`功能规格/目录.md:7` 8 行、`决策/目录.md:7` 7 行、`技能承接表.md:23` 的「承接要求」列 33 行同句);`目录.md` 固定填充单元格合计 170 处(`设计、实现或评审对应主题`×18、`逐文件目标合同`×27 等);跨文件重复句族 20 个(`后端-B09-上下文.md:3` 的页首页脚 ×27、`文档与研究证据.md:237` 的「意图」句 ×95) | 投影页的字段本应逐文件不同;建议改投影器:字段为空时输出「—」而不是复制模板句,`目录.md` 的「内容描述」在等于名称时留空。属生成器问题,不逐页手改 | 需用户授权 | | **DR-19** | docs与根文件 | .gitignore:2-3,5-6,13-14,32-34 | D4 | 残留旧实现条目:`works/*/评审/`(`works/` 不存在)、`requirements.txt`(已由 `pyproject.toml`+`uv.lock` 取代,文件不存在)、`muse/content/entity/skills/review/审核知识卡/golden/calibrate-stamp.json`(路径不存在)、`.venv-旧/`(见 DR-06) | 逐条删除或加「历史保留」注释;`docs/write-chapter/artifacts/`(:16-19)对应的目录仍存在,可留 | 需用户授权 | | **DR-14** | docs与根文件 | Makefile:4、Makefile:65 | D7 | `.PHONY` 列出 16 个目标(安装 格式 格式写入 类型 模块边界 检查 测试 数据库测试 宿主测试 真实模型测试 前端安装 前端检查 前端测试 生成 构建 资源核对),漏掉实际存在的 `迁移`(65-66) | `.PHONY` 补 `迁移` | 无需授权(一行) | | **DR-17** | docs与根文件 | AGENTS.md:4、68、89-90;AGENTS.md:82、100 | D2 | (c)同义重复:「技能发现走 AGENTS.md → 索引 → SKILL.md、不依赖宿主自动发现」在同一文件说了 **3 遍**(:4 页首、:68 §4.1、:89-90 harness 块);「清理过时内容/控制长期熵增」说了 **2 遍**(:82 §5 工程复利、:100 维护纪律) | 保留一处权威表述(建议 §4.1),其余改为指针 | 需用户授权 | | **DR-16** | docs与根文件 | AGENTS.md:22-38 | D7 | §2「目录导航」物理树漏列 8 个顶层条目:`部署/`(含 Dockerfile/启动.sh/停止.sh/compose.yaml,README:277-289 有正式用法)、`upstream/`(`溯源.yaml`)、`.github/`(两个 workflow)、`data/`、`uv.lock`、`.editorconfig`、`.gitattributes`、`.gitignore` | 补 `部署/`、`upstream/`、`.github/`、`data/`(README:157-172 的「目录速览」亦同缺) | 需用户授权 | | **DR-21** | docs与根文件 | web/package.json:31,40 | D8 | `@testing-library/user-event` 在 `web/src`、`web/tests`、全部配置文件**零命中**(仅 package.json + pnpm-lock);`prettier` 无 `.prettierrc`、无 npm script、Makefile 无入口,同样零命中 | 删除这两条 devDependency。**注意**:`itsdangerous`(`pyproject.toml:17`)虽三目录零 import,但 `src/muse/接入/http/应用.py:9,70` 的 starlette `SessionMiddleware` 在 `sessions.py:8` 无条件 `import itsdangerous`,属隐式必需,**不得**列入未使用 | 需用户授权 | | **DR-23** | docs与根文件 | AGENTS.md:80、AGENTS.md:100 | D2 | (a/b)无判据的表述::80「系统的核心价值在于复利:每一次创作与开发任务后,系统必须比上一次更强」(「更强」无判据,紧随其后的两条机制才是可判定内容);:100「优先保持代码可读、简单、局部且可维护」(四个形容词无机械标准) | :80 删首句直接进两条机制;:100 改为可判定的既有门禁指针(`make 检查` + `维护索引` 规则) | 需用户授权 | | **DR-18** | docs与根文件 | README.md:126、208、212、236 | D2 | (c)同义重复:同一免责语义在 4 处以不同措辞重复——「隔离合成测试不替代真实模型验收,也不授予生产启用许可」(:126)、「合成调用不认证真实外部模型行为」(:208)、「合成验证不作为真实外部模型效果验收」(:212)、「不能把合成提供方或读取报告当作通过」(:236) | 收敛为一处总的验证边界声明 + 各节指针 | 需用户授权 | | **DR-22** | docs与根文件 | README.md:146-148、279 vs 其余各处 | D2/D7 | 同一份 README 混用两套命令口径:`uv run muse 研究 …`(:146-148)、`uv run python 工具/构建发布.py …`(:279),而全文其余 30+ 处统一用 `.venv/bin/python -m muse …` | 统一为 `.venv/bin/python -m muse`(或全量改为 `uv run` 并在开头声明唯一口径) | 需用户授权 | | **DR-29** | docs与根文件 | docs/系统架构/新版设计/文件设计/前端-功能工作台.md:309、docs/系统架构/新版设计/文件设计/前端-应用与通用界面.md:768 | D7 | 两个文件用了**同一个锚点 ID** ``(跨文件撞号)。`目标文件清单.json` 的 `design_location` 字段形如 `文件设计/<页>.md#file-`,锚点是投影器的定位键 | 重跑投影器生成唯一哈希;或在校验里加一条「锚点 ID 全仓唯一」 | 需用户授权 | | **WB-13** | web | `web/tsconfig.tsbuildinfo` | D3/D1 | `git ls-files web/tsconfig.tsbuildinfo` 命中(已被跟踪),`git check-ignore` 退出码 1(未被忽略);文件内容是 `{"root":["./src/main.tsx",...]}` 全量文件清单+增量构建缓存,每次增删文件都产生噪声 diff | `git rm --cached web/tsconfig.tsbuildinfo` 并在 `.gitignore` 加 `web/tsconfig.tsbuildinfo` | 需用户授权 | | **WB-12** | web | `web/package.json:12,29` + `web/vitest.config.ts:7` + `Makefile:18-19` | D1/D7 | `"test": "vitest run"`,`include: ["tests/**/*.test.{ts,tsx}", ...]` 排除 `*.spec.ts`;`web/tests/旅程/` 有 24 个 `*.spec.ts`;`package.json` 无 playwright 脚本,`Makefile` 的 `前端测试` 只调 `pnpm --dir web run test`。24 个旅程用例**无任何声明入口**(设计文档 `前端-应用与通用界面.md:166` 只说配置文件,未给命令) | 加 `"test:journey": "playwright test"`,并在 `Makefile`/运行手册登记为需真后端的独立入口(不入 `make 检查`) | 需用户授权 | | **WB-11** | web | `web/package.json:13` | D1 | `"lint": "eslint src"` —— 53 个测试文件(`web/tests`)不在任何 lint 范围;`tsconfig.json` 的 `"include": ["src", "tests"]` 使 typecheck 覆盖了它们,检查面不对齐 | 改 `"lint": "eslint src tests"` | 需用户授权 | | **WB-17** | web | `web/src/功能/审校修订/问题清单.tsx:13`;`web/src/功能/创作对话/消息流.tsx:7` | D1 | `export function Ui问题清单({ items }: { items: 发现[] })` 与 `export function 折叠消息(事件: 任务事件[]): {` —— 两者仅在本文件内被调用(`问题清单.tsx:61,85`、`消息流.tsx:26`);同类「导出但无跨文件消费者」的符号共 34 个(其余 32 个是类型),均属多余 `export` | 去掉多余 `export` 关键字 | 需用户授权 | | **WB-04** | web | `web/src/功能/资料研究/资料页.tsx:17` 与 `:22` | D1 | `const { data, error } = await (await import("../../接口/生成/客户端")).客户端.POST(` —— 连续两行对内联动态导入同一模块;该模块在其余 30+ 文件一律顶部静态导入 | 顶部 `import { 客户端 } from "../../接口/生成/客户端";` | 需用户授权 | | **WB-07** | web | 12 文件 20 处:`界面/结构表单/字段渲染.tsx:39,79,136`;`交付连载/全书整理页.tsx:229`;`效果评测/逐例比较.tsx:139,175,185`;`正文写作/版本分支.tsx:187,237`;`正文写作/选段改写.tsx:175,183,242,259`;`创作对话/消息流.tsx:43`;`创作对话/作者动作.tsx:86`;`审校修订/独立比较.tsx:138`;`审校修订/审校页.tsx:219`;`审校修订/声音档案.tsx:173`;`审校修订/规则页.tsx:39`;`审校修订/修订对照.tsx:290`;`作品规划/探索工作区.tsx:297` | D1 | `

{段}

` / `
` / `