muse-agent-example/docs/实现回顾/专项检查-台账.md
zizi faef454ac7 refactor(提示词): 批次2身份与术语统一——身份句唯一归角色层,JF-03销项
- 删除4份登记模板身份句(生成正文/生成作品规划/细化章节计划/创作质量审阅);
  装配后身份句只来自角色层,消除双自我介绍
- 正典名统一规划员:角色合同 displayName 与章节标题两处文字(红线收窄豁免,
  .agent/角色/规划员.md 不动);生成规划.py 错误文案与受控规划测试断言同步
- A3(JF-03,用户已授权):删除未登记孤儿模板 核对实体歧义.md;研究命令与
  「检查与维护拆书结果」技能话术改为"歧义只登记,由作者人工判定",人工核对
  步骤与合同承接进技能;实体归并.py 话术核实已合规无需改
- C4:创作质量审阅英文状态词首现处补中文对照(insufficient_evidence/ask/
  uncalibrated/reviewed/repair/retain/judgment);continuity/craft/voice 已有对照
- D2:生成正文.md"戏剧化叙述"并入可操作判据(用动作、对白与细节呈现事件,
  不复述或概括事件),写手模板净增0行
- docs:B03-资料研究.md 同步(拆书分析改资源模板加载、新增模板行、删孤儿行、
  备注更新);专项检查台账收口节记录 JF-03 处置;历史目标文档按先例保留原时点

证据:全仓 grep 规划师/核对实体歧义 活跃区零残留;离线全量1153项通过;
受影响数据库集成45项通过(受控规划/完整文学审校/两阶段写手/写手声音/章后/拆书);
资源包已重建,索引检查通过。
2026-09-19 22:08:16 +08:00

180 KiB
Raw Blame History

全仓专项检查台账

日期:2026-09-16 | 编排:主代理 | 依据:专项检查-计划.md 第 5 节严重度分级、第 6 节报告格式 范围:src/muse、tests、web、数据库、工具、.agent、docs、根文件;不含缓存、构建产物、小说正文与数据库内容。 本台账保存 2026-09-16 原发现及复核更正,不再单独充当修复输入;2026-09-17 已按用户裁决进入优化执行,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 用户六项裁决后进入优化执行合同,由 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:<type>: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<string, string> = { / 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 「方法子阶段在方法技能迁移前可参考旧版 完善故事基础设定 主文档」——链接文字称"旧版",目标与 :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 <a id="file-529b1c403b83b56f"></a>(跨文件撞号)。目标文件清单.json 的 design_location 字段形如 文件设计/<页>.md#file-<hash>,锚点是投影器的定位键 重跑投影器生成唯一哈希;或在校验里加一条「锚点 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 <p key={序}>{段}</p> / <div className="array-item" key={i}> / <option key={i} value={i}> —— 索引作 key 列表项改稳定身份;纯静态 enum/anyOf 分支列表可保留索引 key 并加注释说明 需用户授权
WB-05 web web/src/功能/资料研究/资料页.tsx:43 D1 <a className="text-button" href="/research">研究工作区</a>与<a className="text-button" href="/rankings">榜单与选题</a>。 —— 全仓唯一两处裸 href 站内跳转,触发整页刷新 改 <Link to="/research"> / <Link to="/rankings"> 需用户授权
WB-08 web 13 文件 36 处,最密 web/src/功能/知识方法/数据.ts:76,84,95,109,123,132,146(7 处);另见 审校修订/数据.ts(5)、故事世界/数据.ts(4)、资料研究/数据.ts(4)、正文写作/版本分支.tsx:73、任务运行/任务预算.tsx:49 等 D1/D7 (await 客户端.GET("/api/v1/methods/types", { signal })).data as unknown as 方法类型行[], —— 断言绕过生成类型。根因在契约:211 个带 JSON 响应的操作里 135 个(64%)未声明任何字段(83 个 additionalProperties: true 空对象 + 11 个无字段数组 + 41 个空 schema),生成类型只能给出 object。同仓 web/src/功能/系统管理/数据.ts:78-233(对象/文本/布尔/数字/读系统状态)走运行时逐字段校验,两种纪律并存 二选一并成文:补契约字段后删断言,或统一引入运行时校验层(照 系统管理/数据.ts 的写法) 需用户授权
WB-03 web web/src/应用/路由.tsx:77-116 D1 const 值 = window.location.pathname.split("/").filter(Boolean); / const 索引 = 值.indexOf(name === "work_id" ? "works" : name); —— 已在 BrowserRouter 内却绕过 useParams 自行拆路径,同文件出现 3 种取参写法(:78、:109、:114),Ui版本绑定壳 用 段[1] 硬编码段位,且 :109/:114 未 decodeURIComponent 五处壳组件统一改 useParams(),删除 取路径参数 需用户授权
WB-09 web web/src/功能/正文写作/编辑会话.ts:78+编辑缓冲.ts:52-57+正文页.tsx:188 D1 if (!alive || JSON.stringify(draft) === JSON.stringify(state.draft)) return;(每次输入 1 次全文序列化)→ persist() → storage.setItem(key, text)(第 2 次)→ keys().filter(...)(:55-57 遍历整份 localStorage 全部键);渲染侧 Array.from(正文文本(state.draft)).length 每次按键按码点建数组。单次按键成本随正文长度线性上升 变更判定改脏标/浅比较;字符数缓存在编辑会话快照里;localStorage 写入去抖并只维护当前范围一个键 需用户授权
WB-06 web web/src/界面/结构表单/字段渲染.tsx:79 D1 values.map((v, i) => (<div className="array-item" key={i}> —— 索引 key 与下方 :94 的「移除第 {i + 1} 项」按钮、:106 的「添加」同时存在,构成可增删数组项配索引 key 为数组项生成 client id 并以其为 key 需用户授权
WB-10 web web/src/功能/正文写作/候选审阅.tsx:93-98;web/src/功能/作品规划/规划工作区.tsx:270-275;web/src/功能/正式变更/决策面板.tsx:15 D2/D7 同一 decision 枚举三份中文映射且互相矛盾:undecided: "未决定"(候选审阅)vs undecided: "待决定"(规划工作区);adopt: "已采纳"(候选审阅、决策面板)vs adopt: "已确认"(规划工作区) 收敛为单一导出常量,三处共用 需用户授权
WB-15 web 模板 to= 链接共 50 处,未编码 30 处 vs 已编码 20 处。未编码示例:web/src/功能/交付连载/全书整理页.tsx:200,304,434、web/src/功能/交付连载/连载计划页.tsx:154-156,505,534、web/src/功能/交付连载/跨章校对.tsx:115、web/src/功能/作者经验/偏好页.tsx:217、web/src/功能/作品规划/探索工作区.tsx:72;已编码示例:web/src/应用/路由.tsx:81、web/src/功能/正文写作/候选审阅.tsx:108 D6/D1 to={\/works/${workId}/write/${c.chapter_id}`}与to={`/works/${encodeURIComponent(work)}/write/${encodeURIComponent(chapter)}?branch=…`}` 并存 —— 同类服务端 id 拼路由,一半编码一半不编码 统一:集中一个路由构造函数(内部 encodeURIComponent),或全部就地编码 需用户授权
WB-16 web web/src/功能/作品规划/规划工作区.tsx:332 D2 // 冲突提示立即可见,但最新基线可能仍在迹;重看必须等待新数据,不用渲染时序。 —— 「在迹」为错字,语义应为「在途」 改字为「可能仍在途」 需用户授权
WB-14 web web/src/功能/交付连载/连载计划页.tsx:497;web/src/功能/交付连载/读者反馈页.tsx:248 D6 <a href={r.payload.evidence_url} target="_blank" rel="noreferrer"> —— 直接渲染作者填写并落库的地址;来源表单 :433 是 type="url",而 javascript:/data: 同样能通过 url 类型校验,React 不拦截 href 协议 渲染前校验 new URL(x).protocol ∈ {http:, https:},否则降级为纯文本 需用户授权
JF-07 后端-交付连载上下文资料 src/muse/上下文/材料装配.py:4、src/muse/上下文/材料装配.py:26;src/muse/上下文/任务范围.py:494-503;src/muse/编排/生成规划.py:272、生成正文.py:608、审校修订.py:131、审校修订.py:190、完整审校.py:137 D1 预算单位(UTF-8 字节、明确不是 tokenizer)与来源(任务冻结 budget.context_bytes)只写在代码注释;默认值 65536 在编排侧重复 5 处,其中 审校修订.py:190 直接以常量传 字节上限=65536 绕过任务预算。 把"字节单位 + 预算取自任务冻结输入"写进 B09 模块设计与文件设计;65536 收敛到单一常量并禁止绕过任务预算的调用。 无需授权
JF-09 后端-交付连载上下文资料 src/muse/资料研究/榜单快照.py:17-20、src/muse/资料研究/榜单快照.py:23;src/muse/基础设施/资料来源/榜单读取.py:10-13、网页读取.py:10-13 D6 外部抓取只有 Protocol:无实现、无超时/重试/退避口径,"真实网络实现必须显式标记"没有判定机制;基础设施两个同形 Protocol 全仓零消费者;登记榜单 与 HTTP 路由(接入/http/路由/资料研究.py:147-151)不校验 URL scheme/主机,而 交付连载/发布登记.py:21-22 校验 http/https,口径不一致。HTTP 层 fail-closed(路由:159-161 无读取器返回 503),无静默降级。 在 B03 写死外部抓取合同(超时、重试次数、退避、编码、礼貌策略、失败保留失败态),实现落地时复用同一 Protocol,并给 登记榜单 加 scheme 白名单。 需用户授权
JF-06 后端-交付连载上下文资料 src/muse/上下文/任务范围.py(835 行);src/muse/上下文/依赖校验.py:34;src/muse/上下文/回放材料.py:56 D1 任务范围.py 835 行超 500 行阈值;单函数 核对依赖 225 行、读取回放材料 172 行、上下文服务.授权任务范围 123 行、导出格式/EPUB.py:137 读取 123 行,均为最深嵌套热点。 按来源类型拆 核对依赖(目录/文稿/细纲/事实/声音/方法/偏好各一支),读取回放材料 拆"选材"与"三臂组装"两段,任务范围.py 按"授权/恢复/校验"分文件。 无需授权
JF-10 后端-交付连载上下文资料 src/muse/接入/cli/交付命令.py:39-41 D6 with Path(output).open("xb") as stream: stream.write(bytes(row["data"])):实测写入中途失败留下残件(104 字节),重试因排他创建抛未捕获 FileExistsError;无"临时文件 + rename"原子落盘。排他创建已能阻止覆盖既有文件,路径由本地作者给出。 同目录临时文件写完再 os.replace;捕获 FileExistsError 给作者中文提示。 无需授权
JF-11 后端-交付连载上下文资料 src/muse/上下文/回放材料.py:140(def choose)、该文件 47 个非中文本地变量;src/muse/交付连载/导出格式/EPUB.py 55、Word.py 53、导出格式/init.py 31 D1 .agent/规范/命名.md:5 要求自有业务目录/文件/模块/类/函数/测试名中文优先;同包 任务范围.py(9)、资料研究/分章切窗.py(0)已是中文风格,两种风格并存。 统一改为中文局部名与中文私有函数名;请求/载荷里已是稳定身份的英文字段(work_id、branch_id 等)不动。 无需授权
JF-08 后端-交付连载上下文资料 src/muse/交付连载/接口.py:158(与同文件 :14 重复);src/muse/资料研究/存储.py:31;src/muse/上下文/依赖校验.py:245-247;src/muse/资料研究/接口.py:98;src/muse/资料研究/文本清理.py:100 D1 三域函数体内延迟导入 45 处,其中至少 5 处没有循环依赖理由:同包 上下文/冻结快照.py:17、资料研究/分析保存.py:16 已在模块顶层导入同一符号。 无循环依赖的提到模块顶层;确因 知识方法↔上下文 循环必须延迟的,补一行原因注释(见 JF-13)。 无需授权
JT-09 后端-任务运行编排 src/muse/任务运行/原文生命周期.py(905 行)、接口.py(682)、预算管理.py(661)、存储.py(632);src/muse/编排/生成正文.py(639) D1 find src/muse -name "*.py" -exec wc -l {} + 显示本组 5 个文件超 500 行。圈复杂度热点(ast 脚本,含推导式/布尔运算计 1):生成正文.py:168 登记生成正文 cc=46、配置版本.py:86 __post_init__ cc=36、运行证据.py:220 保存 cc=32、模型调用.py:242 _执行回合 cc=31、研究拆书.py:87 登记研究拆书 cc=24、预算管理.py:351 预留 cc=23、完整审校.py:158 登记完整审校 cc=21、行为评测.py:132 准备 cc=20。两项都不在门禁内:pyproject.toml 的 [tool.ruff.lint] select = ["E","F","W","I","B","UP"] 不含 C901(mccabe) 门禁加 C901(阈值先设 25)把热点固定下来;随后按"旅程壳 + 处理器工厂"拆 登记生成正文(46 个闭包同处一函数)与 运行证据.保存(字段校验矩阵) 需用户授权(改 pyproject 门禁配置)
JT-08 后端-任务运行编排 src/muse/编排/接口.py:14-21 D1/D3 流程服务 三个方法中 .发布 有 6 个生产消费者,.发起(一层转发 运行.创建任务)只有 tests 调用,.查询(转发 运行.读取任务)生产与测试均零调用;生产发起实际都直连 装配.任务运行.创建受控任务/创建任务(生成正文.py:624、研究拆书.py:300)。这是无消费者的转发面 删除 .发起/.查询,只保留有消费者的 .发布;或让业务入口统一经 流程服务 发起,避免两套发起口径 无需授权
JT-13 后端-任务运行编排 AGENTS.md:14 对照 src/muse/任务运行/存储.py 全体 SQL D7 文档:本地 SQLite(data/muse.db,gitignore)是默认派发与单机工作面的运行态账本…运行留痕(runs/events)…落在其中。实现:grep -rn "sqlite" src 工具 Makefile pyproject.toml 命中 0;运行留痕实际全在 PG(muse_task/muse_step/muse_attempt/muse_task_event,见 存储.py:571-599 追加事件)。按 SQLite 口径去查 runs/events 会查空 更正 AGENTS.md 运行态账本一行(或如果 SQLite 账本确有独立实现,补路径);本项主责在根文件组,本组只提供实现侧证据 需用户授权
JT-12 后端-任务运行编排 docs/系统架构/新版设计/调用链路/关键旅程.md:23 对照 src/muse/编排/章后处理.py:373-380 D7 文档:S01 事务登记派生任务 → S02 租约执行 → 固定正文版本 → 摘要/B02 事实提案/B09 索引 → 完成前来源复检。 实现:来源复检(post.verify)是第一步,之后 4 步只按冻结 revision 读历史正文(读取正文依据(..., int(来源["revision"]))),最后一个"登记摘要与索引"不再核对当前版本;另有 登记恢复检查 在恢复时复检一次(:120-123)。"完成前复检"在实现里不存在 二选一:把文档改为"入口来源复检 + 恢复时复检",或在 登记摘要与索引 前补一次当前版本核对(不一致即拒绝登记) 需用户授权(改文档口径或改流程步骤)
JT-11 后端-任务运行编排 src/muse/编排/研究拆书.py:31;src/muse/启动.py:288 D1 from muse.编排.章后处理 import _工厂, 前步检查点 与 from muse.编排.运行装配 import _登记默认运行 —— 下划线私有符号被跨文件导入(_工厂 还是 3 个旅程共用的数据库工厂构造)。AGENTS.md 与本组对外口径均要求"外部不导入私有模型或 SQL"(S02 文档 :26:所有接口在本模块的接口.py 暴露…外部不导入私有模型或 SQL) 把 _工厂 提升为公开名(如 编排.装配工厂())或下沉到独立模块;_登记默认运行 去掉下划线并写进 运行装配.__all__ 无需授权
JT-05 后端-任务运行编排 src/muse/编排/载入模板.py:40-63(解析);src/muse/任务运行/模型.py:134-143(步骤计划无保护字段) D3/D7 11 个流程模板里有 7 个写了 protection: 冻结上下文(如 流程/生成正文.yaml 冻结回放),但 解析流程文本 只取 step_id/processor/processor_version/depends_on/tools/role,protection 无任何读取点(全仓 grep 该键命中 0)。真正生效的是 登记类型(必需保护=...) + 步骤处理器.保护职责(槽位约束.py:42-46)。模板里这个字段是登记了但没人读的第二事实源:改它不会改变保护,删它也不会削弱保护 二选一:解析时读入并与处理器 保护职责 核对(不一致即拒绝),或从模板删除该字段并在模板注释写明"保护节点由处理器登记决定" 无需授权
JT-14 后端-任务运行编排 src/muse/任务运行/预算管理.py:66-73 D1/D7 归属窗口 docstring:沿用每日 00/05/10/15/20 边界;末窗到午夜,而 AGENTS.md 口径是"严格遵守 5 小时额度窗口"。实现末窗 20:00–24:00 只有 4 小时;且边界小时数是硬编码常量,额度策略.时区 可配但边界不可配 文档写明"四段 5 小时 + 末段 4 小时",或把边界提成 额度策略 字段(默认不变) 无需授权
JT-10 后端-任务运行编排 src/muse/编排/生成正文.py:91-100 与 src/muse/编排/章后处理.py:357-364;src/muse/任务运行/预算管理.py:27、配置版本.py:26、角色策略.py:29-35;src/muse/任务运行/存储.py:37-38 与 接口.py:514-528、预算管理.py:606-646 D1/D2 ① 前步检查点 在 生成正文 与 章后处理 各实现一份,逻辑相同仅错误类型不同(研究拆书.py:31 又跨文件 import 了后者)。② 五角色集合硬编码三份:预算管理._角色、配置版本._角色 逐字相同,角色策略.py:29-35 再校验一次;权威声明在 策略/角色.yaml(roles: 五键)。③ 存储.查询 的自述是 仅本模块固定 SQL 使用 schema 占位,不接收外部 SQL 或表名,但 接口.py:514-528 与 预算管理.py:606-646 都把外模块 SQL 常量传进来(schema 仍走 sql.Identifier + 参数化,无注入风险,但边界声明失真) ① 抽到一个公共模块(如 编排/步骤上下文.py)。② 角色集合从 角色策略目录.从发布包() 取,删除两份 frozenset。③ 或把 存储.查询 的自述改为"供任务运行所属模块共用,schema 由调用方指定不得来自外部输入",或把这两处 SQL 下回收进 存储 无需授权
JT-15 后端-任务运行编排 src/muse/编排/研究拆书.py:300-304 对照 src/muse/任务运行/接口.py:548-557 D7/D1 任务ID = 装配.任务运行.创建任务(请求, 流程身份, 流程版本) 之后才 if 配置ID: 配置版本管理(...).冻结到任务(...)。而 接入/http/路由/资料研究.py:45 的 config_id: str | None = None 是可选字段,因此不传配置时会创建一个注定在"绑定分析配置"步骤失败的任务。同一仓的 任务登记参与者 明确避免这种任务:# 部署未声明抽取配置时不登记注定失败的任务(接口.py:555),发起章后处理 也先 raise 配置错误 再创建 对齐口径:发起研究拆书 在 配置ID is None 时直接 raise 配置错误(或与章后一致走 创建受控任务 + 配置必填),并把 HTTP 的 config_id 改为必填 需用户授权(改接口契约字段)
JT-06 后端-任务运行编排 src/muse/任务运行/接口.py:493-501 D2/D3 公开方法 登记外部调用 的 docstring:发送前持久化调用引用;模型治理与预算按策略接入。——"按策略接入"无判据;且它与 对账调用 一样只有 tests 调用(生产派发实际走 预算管理.标记已发送(登记尝试=True) → 存储.登记调用)。三个公开入口(登记外部调用/对账调用/核对可登记任务)里前两个在生产面零消费者 docstring 改为陈述实际语义("供无 S02 派发能力的受控外部调用登记引用;当前仅测试与运维对账使用"),或按 JT-01 的结论决定去留 无需授权
JT-07 后端-任务运行编排 src/muse/编排/生成正文.py:527,537、章后处理.py:373,383、研究拆书.py:225,235;src/muse/任务运行/模型.py:50 + 事件记录.py:5-7 D3 流程定义_生成正文/生成正文步骤、流程定义_章后处理/章后处理步骤、流程定义_研究拆书/研究拆书步骤 六处只自引用(定义行 + 本文件 __all__),全仓 grep 零外部消费者;实际流程来自 运行资源.zip 的 流程/*.yaml(运行装配.py:44-59)。同理 事件类型.等待作者("task.waiting")在 事件记录.py 白名单内,但无任何生产者,web/src/功能/任务运行/数据.ts 的事件名表也没有它 删除这六处代码内流程定义(流程模板是唯一来源),或反过来让模板缺失时回退到它们;删除 等待作者 枚举与白名单项 无需授权
JW-18 后端-写手规划经验 src/muse/作品规划/提示词/细化章节计划.md:1;src/muse/作品规划/近期细化.py:29;docs/系统架构/新版设计/模块设计/B01-作品规划.md:41 D1 一个概念两个名:提示词文件名"细化章节计划",而同模块代码与模块设计一律称"细纲"(查章规划(..., "fine_outline")、读取已确认细纲、文件合同"章级细纲任务模板"),违反 .agent/规范/命名.md 第 6 条"一个概念一个名" 统一为"细纲"(改名随 JW-02 的登记一并做) 需用户授权
JW-08 后端-写手规划经验 src/muse/正文写作/提示词/生成正文.md:3-4 D2 面向维护者的装配元信息("资源身份随发布包加载并记录哈希;角色身份、字段结构、权限和预算从各自权威装配…")随模板进入模型系统提示(编排/生成正文.py:342 → :159 → 任务运行/角色会话.py:21-29 拼接),对写手无写作指令价值;同文件 文件合同 :146-149 已声明"边界:仅定义本任务提示" 移出模板(改放文件合同或代码注释) 需用户授权
JW-09 后端-写手规划经验 src/muse/正文写作/提示词/生成正文.md:18 D2 单条要求堆叠五处否定:"不把口癖强塞到每句;…不是必须新造或照抄的剧情。声音条目不取代…不把词表命中直接判为缺陷",判据互相缠绕,模型难以机械对齐 拆成 2~3 条各带单一判据的正向要求 需用户授权
JW-16 后端-写手规划经验 src/muse/正文写作/写作任务.py:20-23、61-64、115-118;src/muse/正文写作/接口.py:382 D3 写作粒度集() 的 expand_scene/edit_selection 无生产消费者:唯一调用点 编排/生成正文.py:557 先拒绝非 new_chapter(HTTP/CLI schema 亦为 Literal["new_chapter"]);且 创建写作任务 只在基线为 0 时约束粒度,实测 写作任务合同(粒度="expand_scene", 基线=3, 选区=()) 通过(仅 edit_selection 强制选区) 明确保留为 API 能力并在文件合同注明无生产调用,或收窄 其他粒度 的接受条件 需用户授权
JW-13 后端-写手规划经验 src/muse/作品规划/进度查询.py:21;src/muse/作品规划/探索交接.py:109 D1 生产代码用 assert 身份.作者 is not None / assert 作品 is not None 做控制流;python -O 下断言被剥离,前置不变量静默消失 改为显式 raise 作品错误(...) 需用户授权
JW-14 后端-写手规划经验 src/muse/作品规划/进度查询.py:23-25 D1 逐章调用 正文.读取正文 与 正文.列出候选,二者各自 with self.数据库.连接(只读=True)(正文写作/接口.py:224-232、:324),500 章即约 1000 次连接获取 增加批量读取入口或由调用方传入连接 需用户授权
JW-17 后端-写手规划经验 src/muse/正文写作/候选版本.py:38;src/muse/作品规划/模型规划.py:1;配置/流程模板/生成规划.yaml:1 D2 术语偏差:代码 docstring 与流程模板注释出现 Shadow("任务事务内保存 Shadow 与模型来源"、"受控规划的动态输出合同与 Shadow 候选出口"、"规划只产出 Shadow 候选"),与 .agent/规范/术语.md 第 4 条"Shadow/Canonical 等内部词在界面与文档中用候选/正式"不一致 三处改称"候选" 需用户授权
JW-07 后端-写手规划经验 src/muse/作品规划/探索交接.py:48 D2 错误文案硬编码"整理稿须按导航顺序包含根设定、九章和待决与取舍";章数实际来自资源 .agent/skills/操作/完善故事基础设定/references/交付结构.json(实测 9 项),资源改章数后文案失真 由 树["chapters"] 长度生成文案 需用户授权
JW-15 后端-写手规划经验 src/muse/作者经验/存储.py:49、119 D1 INSERT INTO muse_preference VALUES (%s,%s,%s) ON CONFLICT(preference_id)… 与 INSERT INTO muse_improvement VALUES (%s,%s,%s)… 不写列名,依赖物理列序;同文件其他语句均显式列名 补列名,避免后续迁移加列即错位 需用户授权
JW-19 后端-写手规划经验 src/muse/作品规划/分层规划.py:85-184;src/muse/作者经验/运行观察.py:20-145;src/muse/作品规划/探索交接.py:28-73 D1 复杂度热点(AST 计圈复杂度):核验规划 CC≈36/100 行、_业务依据 CC≈26/126 行、校验交付格式 CC≈24/46 行;本组 37 文件无超 500 行(最大 规划版本.py 483 行) 前两者按"结构/投影校验"与"来源/哈希校验"、"各类业务来源"拆分 需用户授权
JW-10 后端-写手规划经验 src/muse/正文写作/接口.py:145 D1 函数内 from muse.正文写作.候选版本 import 段落差异,而模块顶部 :18 已导入同名符号,重复导入 删除函数内重复导入 需用户授权
JW-12 后端-写手规划经验 src/muse/作品规划/存储.py:152、162;src/muse/作者经验/存储.py:22-45;src/muse/正文写作/写作任务.py:67-69 D1 同一文件内中英混用:存储.py:152 行 = … 与 :162 row = …;作者经验/存储.py 全用 row/pid,同包 作者偏好.py:50 行 = store.读偏好(pid) 混搭;写作任务.py:67-69 用 甲/乙 作选区循环变量(语义弱),与 .agent/规范/命名.md 第 1 条"中文优先"取向不一致 统一为中文局部名(技术约定名如 payload 除外) 需用户授权
JW-06 后端-写手规划经验 src/muse/作品规划/分层规划.py:249-337 D3 F06.05 节奏簇(内置题材档位/校验节奏标注/检查节奏分布/登记题材档位)消费者只有 tests/单元/test_规则节奏与伏笔.py,src/muse/接入/、src/muse/编排/ 全无引用(grep "节奏" 在接入目录零命中) 明确登记为"已实现未接线"并注明接线路标,或接入规划表单/进度查询 需用户授权
JW-05 后端-写手规划经验 src/muse/作品规划/分层规划.py:275-283;src/muse/作品规划/接口.py:290 D1 节奏分布 进入 接口.py 的 __all__,但全仓(含 tests、web、接入)零消费者;空输入实测 ZeroDivisionError: division by zero(总数 = len(场景们) 后直接相除,无空校验) 空输入显式抛 作品错误,并取消无人使用的 __all__ 导出 需用户授权
JW-11 后端-写手规划经验 src/muse/正文写作/接口.py:352-387 D1 __all__ 分两段::352-384 一块,:387 再 __all__ += ["写作输出合同", "生成正文模板"];同仓其他模块单块书写 合并为单块 __all__ 需用户授权
JC-12 后端-基础设施共享 src/muse/基础设施/备份恢复.py(1018 行)、数据归档.py(547 行) D1 复杂度 两个文件超 500 行;创建备份 102 行、恢复备份 99 行、_数据库摘要 93 行、直接调用.准备 96 行、Pi.运行 83 行(AST 实测) 按职责拆分(备份的"清单校验/数据库摘要/客户端调用"三段可独立成模块),拆前先补该文件的单元覆盖 择机修
JC-16 后端-基础设施共享 配置/测试.example.toml:1-14;tests/conftest.py:248 D3/D7 孤儿配置面 该模板的 连接环境变量/允许用途/真实调用 三个键全仓无读取方(grep 配置/测试 零命中);测试侧另行硬编码 数据库环境变量 = "MUSE_TEST_DATABASE_URL" 要么让测试引导真的读该模板,要么把它降级为纯纪律说明并删键,避免"成文协议无实现" 择机修
JC-19 后端-基础设施共享 src/muse/基础设施/检索/向量.py:1 D2 描述失真 模块 docstring 写"余弦相似与倒数排名",本文件只有 余弦相似/向量得分;RRF 融合实现在消费者 src/muse/上下文/混合检索.py:19 改述为"余弦相似打分;倒数排名融合由上下文层承担" 择机修
JC-20 后端-基础设施共享 src/muse/基础设施/资料来源/网页读取.py:1,11 D2 自相矛盾 模块 docstring"失败如实上抛",协议 docstring"失败返回失败结果"(同一文件两种失败语义) 与该模块的最终处置(JC-06)一并定稿,只留一种失败语义 择机修
JC-22 后端-基础设施共享 配置/本机正式.toml:2,7,22,30、本机维护.toml:5,14、运行配置/章后抽取-本机.toml:21,26 D6 环境信息入仓 三个"本机"配置入库(git ls-files 配置/ 确认),含个人绝对路径(/Users/qingse/.local/share/muse/正式环境/…)、内网地址与端口(100.64.0.8:5433、http://100.64.0.8:3000/v1/messages)、正式库名;文件内自述"非敏感配置由 Git 管理" 无凭据值泄漏,不构成 P0;建议把"本机"配置移出跟踪(保留 .example 模板纪律),或明确仓库不外发并保持现状 需用户授权(改跟踪清单)
JC-17 后端-基础设施共享 src/muse/共享/__init__.py:6-38;src/muse/配置.py:187 D3 导出面大于消费者 from muse.共享 import … 全仓零命中(18 个再导出名无消费者,消费方一律直接导入子模块);配置.py 的 解析配置、运行装配配置 也无外部消费者 共享包保留子模块导入路径即可,收窄 __init__ 再导出面;配置.py 的两个名字从 __all__ 移出或注明为装配入口保留 择机修
JC-18 后端-基础设施共享 后端-基础设施.md:17,30,61-62,302-303 D7 文档-实现不符 文档声明 连接.py "连接池和生命周期/仅构造受控连接池",实际 连接.py 每次调用新建连接、无池;声明 可观测性.py "日志、关联身份、指标和脱敏",实际只有 记录运行/配置日志,无指标 改为如实描述(受控连接与生命周期、日志与脱敏),或按目标补齐实现;两处均属"目标未落地",须与 JC-10 同批处置 需用户授权(改设计文档)
JC-21 后端-基础设施共享 src/muse/基础设施/检索/向量.py:19-24 D1 重复计算 向量得分 对每个语料项调用 余弦相似 两次(过滤一次、取值一次),语料大时重复全部点积 改为一次计算后判正(海量语料下同时省一半算术) 择机修
JC-15 后端-基础设施共享 src/muse/基础设施/数据库/迁移.py:20、备份恢复.py:41、tests/集成/test_数据库连接与迁移.py:233 D1 重复常量 三处各写一份 0x6D757365 迁移互斥锁键,无任何断言保证迁移与备份仍锁同一键 抽到单一位置(如 数据库/迁移.py 导出 迁移锁键)并让备份引用;补一条"两模块取同一锁"的断言 择机修
JC-14 后端-基础设施共享 src/muse/基础设施/受控文件.py:83-93 D1 错误质量 _根句柄 的 except OSError 覆盖了 yield 之后的调用方代码:探针实测 读取(不存在的对象ID) 报"受控暂存不可访问"(真实原因是对象目录不存在) 把 except OSError 收窄到 os.open(self.根,…) 一处,调用方 OSError 按各自语义转 受控文件错误 择机修
JC-13 后端-基础设施共享 备份恢复.py:874-1006、系统运行.py:18-34、受控文件.py:191-213 D1 命名规范 自有局部名纯英文:《命名》第 1 条要求中文优先;实测 备份恢复.py 15 个(manifest/entry/created/seen/process/chunks/environment/candidates/directory/member/archive/root/child/expected_id/entry_id)、系统运行.py 10 个(config/conn/database/manifest/status/files/directory/parts/actual/visit)、受控文件.py 5 个(file/info/out/stream/root) 新改的代码统一中文命名;不做全仓批量重命名(收益低于 diff 风险) 择机修
JS-18 后端-审校效果评测 src/muse/审校修订/接口.py(函数内 import 21 处)、src/muse/效果评测/接口.py(25 处) D1 两个公开面模块大量在方法体内做 import(多为规避循环依赖),读公开面时无法一次看到该用例的真实依赖与落点 把不参与循环的 import 上提;确实循环的用模块级 TYPE_CHECKING + 运行时延迟导入并加一行原因注释 无需授权
JS-14 后端-审校效果评测 src/muse/效果评测/逐例执行.py(991 行)、效果评测/接口.py(946)、审校修订/存储.py(901)、审校修订/持久返修.py(812)、效果评测/规则诊断.py(717)、审校修订/接口.py(588)、效果评测/文学评分.py(503);复杂度:指标汇总.py:13 汇总实验 C≈150/L272、启用判据.py:107 判定效果 C≈115/L215、文学评分.py:371 _仲裁文学评分 C≈114/L132、逐例执行.py:152 固定执行计划 C≈80/L266、持久返修.py:514 _读取返修比较来源于 C≈73/L241 D1 7 个文件超 500 行(占本组 48 文件的 15%);497 个函数中 67 个圈复杂度 ≥15,5 个 ≥70,均在"应保持确定性可复核"的报告组装与判据路径上 按职能拆文件(如 逐例执行 拆计划/交付/核验、指标汇总 把五类指标拆成子函数),或抽出具名私有步骤函数 无需授权
JS-16 后端-审校效果评测 src/muse/审校修订/返修策略.py:15、持久返修.py:39(le=5)、持久返修.py:125(1 <= 最大轮数 <= 5)、持久返修.py:273(1..5);src/muse/效果评测/文学评分.py:83(ge=0, le=10, multiple_of=0.5)、:236-239、:420-425(0.5/10 再写一遍);src/muse/审校修订/机器味诊断.py:58(width=12)与 :411(调用点硬编码 32) D1 同一阈值在多处重复字面量:返修轮数上限 5 出现 ≥4 次、评分 0-10/0.5 出现 ≥4 次;语境窗口同时存在 12 与 32 两个默认 集中为具名常量(最大返修轮数、评分上下限/步长、语境窗口宽度)并只留一个定义 无需授权
JS-15 后端-审校效果评测 src/muse/审校修订/存储.py:19-20 D1 查询助手命名为 _声音查询,实际是全类通用查询入口(本文件 30+ 处调用,覆盖案例、规则、诊断、文学片、报告等无关领域) 改名 _查询(或 _行查询),声音专用语义留到调用点 无需授权
JS-19 后端-审校效果评测 src/muse/审校修订/机器味规则.py:23-40 D1 单一 规则触发 模型用全部可选字段(pattern/criteria/handler/max_chars/min_run/window_chars/min_hits/tolerance)同时承载 regex/handler/density/model_judgment 四类触发器,合法性只能靠 核对规则:73-97 的手写分支补 改判别联合(type 为判别字段),让非法组合在合同层就被拒 无需授权
JS-11 后端-审校效果评测 src/muse/效果评测/返修比较.py:34 D3 数据集版本 = 诊断数据集版本 为兼容别名,仓内零消费者(同文件只用 诊断数据集版本/选段数据集版本) 删除该行 无需授权
JS-12 后端-审校效果评测 src/muse/审校修订/机器味规则.py:145-147 D3 def 核对规则启用(规则, 样例, 评测依据=None): 核对规则(...); raise 规则启用不可用(...) —— 无条件抛错、第三个参数从未使用;除 tests/单元/test_机器味诊断合同.py:28、test_声音与规则合同.py:109 外零调用者,真实启用走 规则启用.py:145-181 删除;若要保留拒答桩,去掉未用参数并在 docstring 写明真实入口 无需授权
JS-17 后端-审校效果评测 src/muse/效果评测/标定.py:310 D1 agreement = sum(verdicts) / len(verdicts) if verdicts else None —— 上一行 :308-309 已 if not verdicts: return,else None 是永不执行的死分支 去掉条件表达式,直接相除 无需授权
JS-13 后端-审校效果评测 src/muse/审校修订/接口.py:516-587、src/muse/效果评测/接口.py:127-199 D3 15 个 __all__ 名在仓内无任何跨模块调用方,只有 接口.py 自身的 import 与 __all__ 字符串:准备模型修订、基础检查报告、连续性报告、返修比较来源类型、返修比较选段授权、返修比较选段来源;读取规则诊断凭据、样本分层、标定引用、标定报告、文学评判依据、核对评判依据、写手审计声明、混淆项报告、裁决行为(符号本身在同包内另有消费者,故非死代码,只是转发层冗余) 从 __all__ 收回未消费项,避免把内部合同误当公开面 无需授权
JR-08 后端-接入 src/muse/接入/创作操作.py(546 行)、src/muse/接入/cli/入口.py(527 行) D1 全域仅这两个文件超 500 行(wc -l 全量核对)。创作操作.py:31-546 全是 pydantic 请求/结果模型,作品、规划、探索、故事世界四域混住;入口.py:25-277 是 19 个子命令的 argparse 声明 创作操作.py 按域拆成作品/规划/探索/事实四个模型模块;入口.py 的解析器按命令族下沉到各 cli/*命令.py(导出 注册(子命令解析器)) 无需授权
JR-17 后端-接入 http/路由/元数据.py:1 对照 :13-16 D2/D7 模块 docstring 自称"读取固定的公共基础结构;作品扩展与启用由具名业务授权入口提供",但同文件 POST /api/v1/schemas/commands 直接调 执行结构操作,可完成 登记候选/发布版本/兼容检查 三类写动作 docstring 改为"读取已发布结构 + 受控结构维护命令(登记候选/发布版本/兼容检查)";若要保留"不提供实例启用"的边界,就在此文件显式写出 无需授权
JR-18 后端-接入 src/muse/接入/主会话.py:1,40-84;对照 后端-装配与接入.md:471 D7 设计文档把 主会话.py 职责写成"中文意图和已授权作者动作接入,关联对话及任务",实际文件只有任务控制/额度 DTO、参数合同错误、呈现结构 与两个转交函数(执行任务控制/执行预算批准,:55-84),没有任何中文意图或对话实现;文件名 主会话 与内容也不相符 二选一:把文档职责改为"HTTP/CLI 共用的任务控制与结构呈现合同"(并考虑改名 任务控制.py);或补齐对话/意图接入面(新功能,须另立计划) 需用户授权(改文档或改名)
JR-10 后端-接入 cli/研究命令.py:15,24-46;http/路由/资料研究.py:51-52 D1 ① 拆解请求 设了 ConfigDict(populate_by_name=True) 却没有任何 alias(该开关在此无作用),另加 6 个只读转发 property(命令ID/来源ID/配置ID/理由/重跑窗/窗口章数),一对一映射同名字段,无任何转换语义;② _装配(request) 是一行 return request.app.state.装配,被同文件 11 处调用 ① 删掉 6 个 property 与 populate_by_name(同层 生成发起请求 直接用英文字段名);② 直接用 request.app.state.装配 或提升为 依赖.py 的 Depends 无需授权
JR-13 后端-接入 cli/入口.py:31-276 覆盖的 19 子命令 / 149 动作项 D3 机械核对:文档里 72 处 python -m muse 用法中命令名 0 处不匹配、39 处动作名成对可校验且 0 处不匹配;但 115 个动作项在权威文档(README/.agent/docs/配置/Makefile)从未出现;18 个 CLI 适配函数中 10 个无任何测试引用(运行交付命令/运行作品命令/运行探索命令/运行规划命令/运行创作命令/运行审阅命令/运行维护任务命令/运行角色行为命令/运行行为评测/运行评测命令) 对无文档无测试的动作做一次清点:保留的补进 README 或对应 SKILL(至少写用途与前置配置),确无产品用途的删掉;不必逐条补测试,但每个动作要有明确使用方 需用户授权(删减 CLI 面)
JR-11 后端-接入 审校操作.py:38-39,108,115;cli/角色行为命令.py:23;评测操作.py:14,20;http/应用.py:74;http/事件订阅.py:89 D1 ① 返修轮数上限 5 写三次(max_rounds le=5、expected_round le=5、域内 审校修订/持久返修.py:273 的 1 <= 最大轮数 <= 5);② 审校切分默认与边界 4000 / ge=2,le=12000 / 240 两处(审校操作.py:38-39、审校修订/审校报告.py:48,53),且接入另加域内不存在的 context_size le=2000;③ command_id max_length=200 三处;④ 会话有效期 max_age=12*3600 硬编码;⑤ SSE 轮询 asyncio.sleep(1) 硬编码 每个上限给唯一定义处(域内常量或 接入/契约常量.py)并被两侧引用;context_size 若确要收紧,在文档写明理由;会话有效期与轮询间隔提升为配置项 无需授权
JR-07 后端-接入 cli/审校命令.py:46、cli/评测命令.py:60、cli/入口.py:292、cli/研究命令.py:49、cli/交付命令.py:15、cli/经验命令.py:43 D1 圈复杂度(ast 自算,含 if/for/try/with/布尔/推导/断言):运行审校命令 cc≈45、运行评测命令 cc≈45、main cc≈36、运行研究命令 cc≈27、运行交付命令 cc≈21、运行经验命令 cc≈20。审校命令.py:96-153 是一张 18 项动作表 + 18 个 if 的线性派发。pyproject.toml:64 的 select = ["E","F","W","I","B","UP"] 不含 C901,无机械门禁 改为 {动作: (schema, 执行函数)} 单表派发(多数分支只差一个调用);门禁加 C901(阈值 25 起)——改 pyproject 属另一批授权 无需授权(本域重构)/需用户授权(改门禁配置)
JR-19 后端-接入 http/应用.py:49,71 D6 secret_key=hashlib.sha256(("muse-session:" + 口令).encode()).hexdigest():会话签名密钥由作者口令确定性派生,同一口令同时承担登录校验与会话签名。口令(读取凭据("受控存储", 服务.口令文件))熵不足时,拿到一个会话 cookie 即可离线爆破口令并伪造会话。本项无凭据泄漏,属加固项 会话密钥改为独立随机值(受控存储第二个值或环境变量),与登录口令解耦;itsdangerous 已在依赖内 需用户授权(改部署配置与密钥来源)
JR-16 后端-接入 cli/入口.py:51,99 D2 作者可见的 CLI 帮助夹内部代号与英文:help="固定场景裁决或显式S02角色行为执行"、help="具体改进、真实评测关联与目标owner启停"。.agent/规范/中文正文与界面.md 第 4 条要求作者可见的界面与说明用简体中文白话 改为"S02"→"角色行为评测"、"owner"→"目标责任人(改进所在目标的作者)" 无需授权
JR-15 后端-接入 http/路由/作品规划.py:52 vs :87;http/路由/知识方法.py:116 vs :216;cli/交付命令.py:18 vs cli/作品命令.py:131 vs cli/审阅命令.py:16;http/路由/作者经验.py:67,164;只读工具.py:5,42 vs :13,33 D1 同一概念多名的实例:① 应用装配在 作品规划.py 内先叫 app(:52)后叫 装配(:87),知识方法.py 同样混用;② 调用身份在 CLI 四个模块里分别叫 identity/actor/作者/身份;③ 服务对象叫 svc(作者经验.py:67)又叫 service(:164);④ 只读工具 docstring 写"历史文稿"(:5,:42),同文件代码写"历史正文"(:13,:33)。违反 .agent/规范/命名.md 第 6 条"一个概念一个名" 全层统一:装配→装配、调用身份→身份、服务→服务、历史正文为唯一术语;本次已列全清单,逐条机械替换即可 无需授权
JR-09 后端-接入 cli/研究命令.py:66,83 ↔ http/路由/资料研究.py:181,201;cli/创作命令.py:54-64 ↔ http/路由/创作生成.py:101-110;http/路由/交付连载.py:53-55 ↔ http/路由/作者经验.py:60-62 D1 ① 拆书状态回退字典逐字重复:return 状态 or {"台账": [], "对照": None, "说明": "该来源尚无拆书任务"};② 样本 = {"理由": ...} if ... else None 两处;③"取候选当前版本→读审校报告→无则报错"两处各写一遍(含 数据库工厂(装配.配置.数据库, 装配.配置.运行用途) 直连构造);④ 同名 _服务(request, 作者) 在交付连载与作者经验各写一份,功能相同 ①②③ 收到 接入 的单一转交函数(如 接入/研究操作.py、接入/创作操作.py),HTTP/CLI 都调它;④ 合并为 接入/http/依赖.py 的共享助手 无需授权
JR-14 后端-接入 http/路由/任务运行.py:250;http/路由/审校修订.py:97,214,220;另 25 条见下 D3 211 条路由中 4 条除生成合同(web/src/接口/生成/类型.ts、openapi.generated.json)外全仓零引用:POST /tasks/{id}/raw-recovery、GET /voice-proposals/{id}、POST /quality-case-withdrawals、POST /quality-case-rules(对应服务方法仅在 tests/集成/test_案例采集与复核.py、tests/迁移/test_作品资产迁移.py 以域层调用出现)。另有 25 条在 web/src(非生成物)无调用点,其中 raw-*/evidence 系列部分由 tests/集成/test_原文归档与恢复.py:420-441 以 base + "/raw-leases" 拼接覆盖 4 条零引用路由交主代理确认产品用途:工作台要用就接线,不用就删并重新生成 openapi.generated.json;另外 25 条建议在文档标注"仅 CLI/测试可达" 需用户授权(删路由)
JR-12 后端-接入 cli/入口.py:296-324,523 D1/D3 只读动作 是跨命令的 27 项动作名白名单,用来在写入前跳过迁移兼容门禁;它与同文件 argparse 的 choices 重复声明、无机械校验(grep 只读动作 tests 命中 0)。同名动作在别的命令里一旦变成写动作就会静默免检。另有 main 尾部 return _退出码_用法错误:对"已注册但未接线"的子命令静默返回 2,不打印任何说明 白名单改为 {命令: frozenset(动作)},与 choices 同源生成;未接线子命令先 print(..., file=sys.stderr) 再返回 2;补一条"白名单 ⊆ choices 且每个写动作都过门禁"的用例 无需授权
JK-11 后端-知识方法故事世界 src/muse/知识方法/方法卡.py:1,172 + docs/系统架构/新版设计/模块设计/B04-知识方法.md:31,42 D7 「六类范式/六类内置」;内置结构里 实例族 含 method 的实为 8 型:character/combat/craft/emotion/pacing/scene_pattern/style/trope 改为"内置范式类型以 S04 method 族为准(当前 8 型)" 无需授权
JK-14 后端-知识方法故事世界 src/muse/故事世界/接口.py:1 D2 「当前提案依据校验,后续同表面接入确认和查询」已过期:决定事实、查询世界 已在本文件实现 改为现状陈述 无需授权
JK-09 后端-知识方法故事世界 src/muse/正式变更/依赖锁.py:15-17 D1 D7 {"schema": "SCHEMA_STALE", "projection": "PROJECTION_STALE"} 不可达:全仓 22 个依赖维护者的 种类 无 schema/projection;S01-正式变更.md:41 的「锁序覆盖结构、投影」实际由 元数据/结构版本.py:257-291 在参与者内部完成 删死映射;S01 文档改写为"结构/投影由 S04 参与者保护" 无需授权(文档改动需授权)
JK-10 后端-知识方法故事世界 src/muse/元数据/内置结构/公共字段.yaml:25-97 vs src/muse/元数据/扩展合成.py:23-36 D2 「受保护骨架」8 项(无 created_at/updated_at),代码 保护属性 10 项;yaml 自述"仅用于描述",两份清单已漂移 由代码清单派生成文档,或补齐两行 无需授权
JK-15 后端-知识方法故事世界 src/muse/元数据/内置结构/narrative_state.yaml:34 D2 字段说明内嵌「设计发现:2026-07-09——字段隐含"已有前章"假设……(待回填)」,无目标文件、无判据 移入台账或删除 无需授权
JK-17 后端-知识方法故事世界 src/muse/知识方法/存储.py:119,325;存储.py:148,150、方法版本.py:82,191、故事世界/接口.py:204 D1 D6 两处 f-string SQL 只拼接固定字面片段、值全部 %s 绑定(逐条核对无注入);__import__("json")/__import__("muse.…") 反模式散落 5 处 统一 psycopg.sql.SQL 组合与顶部 import 无需授权
JK-16 后端-知识方法故事世界 src/muse/元数据/内置结构/style.yaml:124-138 D2 「达标样张……(余华/毕飞宇/经典网文实证片段),写手对照校准」:与全仓「严禁抄录原文」(craft.yaml:267、证据反例.py:37-39 静态资源只登记路径与哈希)纪律冲突,字段无授权约束 改为只登记定位/哈希,或加版权授权前置 需用户授权
JK-12 后端-知识方法故事世界 src/muse/元数据/内置结构/reference_work.yaml:137-153 D2 「产出范式清单」只引用 craft/combat/emotion/scene_pattern/trope 五型(漏 pacing/style,二者同为 method 族),且 作品范围: same_work 用于系统侧档案对象 补齐 method 族目标类型,并核对系统侧档案的作品范围语义 需用户授权(涉及结构发布)
JK-18 后端-知识方法故事世界 src/muse/知识方法/方法版本.py(536 行);src/muse/元数据/字段校验.py:198-306 D1 本组唯一超 500 行文件;校验字段变更 为 108 行嵌套闭包手工路径穿越,属复杂度热点(未装复杂度工具,按结构判断) 拆出参与者类与路径解析辅助 无需授权
JK-13 后端-知识方法故事世界 src/muse/知识方法/方法版本.py:296-321 + src/muse/知识方法/模型.py:75 D2 enable 无凭据分支读完消费回执后必然抛 METHOD_ACTIVATION_UNAVAILABLE(预留路径,无判据);状态命令 docstring「启用需指向实际消费回执」与实现(必须 B10 启用凭据,状态参与者 亦然)冲突 删预留分支;docstring 改「启用必须提供 B10 凭据」 无需授权
JK-19 后端-知识方法故事世界 src/muse/知识方法/方法版本.py:515-536、方法卡.py:190-200、故事世界/人物关系.py:122-128 D1 __all__ 导出 13 个本包外零引用的名字(8 个参与者类、读取方法结构、列出人物/列出关系 等),公开面宽于真实消费者 收窄 __all__ 到对外合同 无需授权
TL-07 工具 工具/构建发布.py:25-39;Makefile:70-74 D1 生成序列(生成接口.py → openapi-typescript → pnpm build → 构建资源包.py)在工具与 Makefile 各写一份,当前逐条一致,任一侧改序或加步都会静默漂移 序列只留一处(Makefile 目标或共享函数),另一处调用它 需用户授权
TL-09 工具 工具/生成接口.py:29 D1 argparse.ArgumentParser(description="生成 Schema、OpenAPI 和 TypeScript") 与实际不符:只写 OpenAPI 与固定 客户端.ts;类型.ts 由 Makefile:71 与 构建发布.py:26-37 的 openapi-typescript 产出,「Schema」从不产出 描述改成实际产物 需用户授权
TL-08 工具 工具/维护索引.py:48(同族 :169) D6 根.rglob("目录.md") 无法剪枝忽略目录,_在忽略目录 只在命中文件上判定(:49-50);实测仍下钻 .venv(1140 个目录)与 web/node_modules(2381 个目录),整轮 1.5s。实测 Python 3.12.6 的 rglob 与 glob("**") 均不跟随符号链接,无软链风险 改 os.walk 剪枝,或把忽略目录收进显式候选根 需用户授权
TL-11 工具 工具/环境预检.py:91-97;工具/生成接口.py:39 D1 前者把 OSError/ValueError/KeyError/SubprocessError 归并为一条通用 JSON,丢掉实际原因(退出码仍为 1,未伪成功);后者 条目["工厂"].split(":", 1) 在缺冒号时抛裸 ValueError 回溯 通用分支保留原始异常文本;工厂格式先校验再报错 需用户授权
TL-10 工具 工具/构建资源包.py:146 D6 shutil.copytree(web_dist, 工作台目录) 默认 symlinks=False:web/dist 内符号链接会被解引用,把链接目标内容复制进发行包(本组唯一跟随软链处) 用 symlinks=True,或逐文件复制并按清单校验 需用户授权
TL-12 工具 工具/资源登记.json:237-263;工具/构建资源包.py:67 D1/D2 22 个已登记操作技能身份两套命名:16 个带 operation. 前缀(operation.polish-text 等),6 个不带(expand-scene、inspect-task 等);包内路径 能力/operation/operation.polish-text.md 与 能力/operation/expand-scene.md 并存 统一身份命名口径后重建资源包 需用户授权
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-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-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-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-25 测试与资源 tests/单元/test_受控文件CAS与恢复.py:1 D2 """合成私人暂存的字节、权限与清理边界。"""(文件名含「恢复」) 全文无恢复/历史归档用例:改名或补用例 无需授权
TS-44 测试与资源 tests/集成/test_上下文快照与索引写入.py:4,121,462,573,578,603,619,644,657,736 D1/D2 assert f"r{来源.revision}" in 文本(两字符子串必中);assert all(m["method_id"] != method_id for m in 材料)(空表恒真);from muse.共享.错误 import Muse错误 as _Mus(与 :640 重复) 模块 docstring「参数上限来自版本策略」全仓无该来源;:462 docstring 声称「经服务读取确认存在」但只重算 uuid5;段注释自称「不引用旧 SQL」而 :593-594 用裸 SQL;多处只断基类异常;:121 与 :584-600 是同套流程两份实现 无需授权
TS-29 测试与资源 tests/契约/test_语义检测合同.py:10,21 ≈ test_盲评与引文合同.py:41,52;test_盲评与引文合同.py:619 = test_角色能力与配置.py:61;test_文学评分与仲裁.py:124,204;test_工具范围.py:1 vs test_探索回放合同.py:151-173 D1 def 材料(): / def _语义材料(): 逐字同构;同一 工具定义/只读工具集 夹具各建一份 抽共享夹具模块或参数化 无需授权
TS-34 测试与资源 tests/契约/test_运行观察合同.py:13,22,31 D1 _请求() 单例夹具被 :22 与 :31 两处变异复用 新增字段会同时放宽两处断言:按用例构造 无需授权
TS-47 测试与资源 tests/集成/test_原文归档与恢复.py:27,140,152,251,258 D1/D2 """保留LC-d6e3f58513a1;…""";服务.清理(任务, 租约)(裸调用当幂等证据) 样本 ID 在用例清单与全仓均查不到;:140(临时授权)与 :152(哈希不符)两条拒绝理由都只断类型;:258-267,:296-305,:320-329,:519-528 四处 diff 完全相同 无需授权
TS-30 测试与资源 tests/契约/test_判据来源合同.py:31-32、test_行为场景执行.py:37-46 D1 del request["samples"][0]["candidateBody"];report.update(persisted=True, target=…) 用同一 pydantic 模型重解析自造 dict 当「公开输入」证据;观察对象就地改写成「已持久」再交裁决且无负例 无需授权
TS-32 测试与资源 tests/契约/test_流式终态.py:34-42;tests/契约/test_混淆项合同.py:7 D1 逐字节喂入只覆盖 ASCII 帧内 \u0085;import test_效果判据 as 判据测试 补多字节中文跨块用例;跨测试模块导入私有 _输入() 改共享夹具模块 无需授权
TS-14 测试与资源 tests/单元/test_声音与规则合同.py:44-45,62,294-297,337-338 D1 assert 文本[候选["start"]:候选["end"]] == 候选["quote"](实现同式,声音基线.py:82);assert 统计声音样本(文本) == 统计声音样本(文本);assert 校验声音节(None) is None 断言与实现同源/恒真:引入独立期望 无需授权
TS-22 测试与资源 tests/单元/test_离线修订回放.py:46,60-66,127-129,186 D1/D2 monkeypatch.setattr(cli, "构建", 禁止构建);assert 可见文本(doc) == text;docstring「独立成对选择由原观察集成测试另行核验」 守卫在 --离线 路径不可达(入口.py:480 三元短路);只断异常类型;恒真断言;承诺的集成核验不存在 无需授权
TS-23 测试与资源 tests/单元/test_事实时点与有效性.py:46,52,100,264,271 D1/D2 # 保留原LC-e3eca2942895样本…;assert escaped_body.endswith("\\n舱灯闪了一下");with pytest.raises(元数据错误): 样本 ID 全仓仅此一处(不可核实);恒真断言;引文断言用 in 而非等值;两处违约只断类型 无需授权
TS-17 测试与资源 tests/单元/test_探索交接与规划.py:50-51,125,265,359-360,421-427 D1 assert 校验交付格式(原探索稿)["valid"](用例名承诺「局部展开+不设编号篇幅门」);assert "不进入 Canonical" in 入口 名实不符的单断言、10 组参数共用无 match 的 raises、文档子串代替行为判据、配置两处逐字复制 无需授权
TS-27 测试与资源 tests/契约/test_工具范围.py:50、test_运行观察合同.py:31、test_动态结构投影与版本.py:93、test_角色能力与配置.py:103、test_文学评分与仲裁.py:242 D1 with pytest.raises(模型协议错误): 等只吃异常类型;四组变异共用一句 assert … == "invalid_report" 补错误码/字段/match 判据 无需授权
TS-28 测试与资源 tests/契约/test_正文与模型输出.py:57、test_探索回放合同.py:184,203、test_效果判据.py:32+220、test_诊断入口原观察.py:27-30,46-51 D1 assert 可见文本(草稿) == 可见文本(另名);校验清单(清单, 范围) # 不抛异常即通过;assert report["rule_library_version"] == first["fingerprint"] 期望值改为独立常量/夹具;裸调用处补返回值核对 无需授权
TS-57 测试与资源 tests/架构/test_技能与文档索引.py:61,79,87;tests/端到端/test_改进验证与版本启用.py:141,162,181,199,219,237;tests/集成/test_生产评测权限隔离.py:172 vs test_回放资料封存.py:123-127 D1 三连/六连同构用例(相似度 0.93–0.97);跨文件逐字断言块 参数化合并,保留参数分支 无需授权
TS-20 测试与资源 tests/单元/test_上下文快照哈希.py:68、test_声音与规则合同.py:62、test_端到端/test_改进验证与版本启用.py:330、tests/迁移/test_PG作品正文迁移.py:231 D1 assert PG目标ID(w, "a", "work") == PG目标ID(w, "a", "work") 全仓机械扫描出的 4 处「同参自比」,只证确定性不证行为 无需授权
TS-18 测试与资源 tests/单元/test_评测数据集.py:72,97-98 D1 7 组参数命中 3 类守卫却共用 with pytest.raises(评测错误):;5 个字段同由 extra="forbid" 拒绝 补 match/错误码,或删减无区分度参数行 无需授权
TS-19 测试与资源 tests/单元/test_角色探针.py:76,92 D1 用例名「逐角色真实调用」,_配置() 只声明 extractor 一个角色;:92 的 raises(Muse错误) 无 match(同文件 :98,:123 有) 扩到全部角色或改名;补拒绝原因判据 无需授权
TS-40 测试与资源 tests/集成/test_数据库连接与迁移.py:76,233,255,261 D1/D2 "options", ["", "-c application_name=readonly-probe"];SELECT pg_advisory_lock(%s)", (0x6D757365,);assert main([...]) == 预期码 options 行与 default 等价;锁键字面量硬编码;只核退出码不读 stderr;:261 名「受控文件」但未设 0o600、实现不校验权限 无需授权
TS-51 测试与资源 tests/架构/test_模块依赖.py:76,88,121,205 D2 """src/mude 不以代码依赖 .agent 技能目录…""";getattr(节点.func, "attr", "") == "run";业务模块 = {p.parent.name for p in 源码根.glob("*/接口.py")} 拼写错误;子进程检查漏 Popen/create_subprocess_exec;相对导入与基础设施域不受跨域限制 无需授权
TS-21 测试与资源 tests/单元/test_文件归档恢复.py:82,100,118,135,162,175,183,196,222 D1 with pytest.raises(归档错误):(8 处同类裸断言) 数据归档.py:80/109/147 把内部异常也包装成 归档错误:篡改/逃逸/软链/未知根/中断清理无法与内部崩溃区分 无需授权
TS-41 测试与资源 tests/集成/test_生产评测权限隔离.py:98,155,172,188,194,237,258,264,348 D1/D2 with pytest.raises(psycopg.Error), conn.transaction():;assert result["conditions"]["generator"]["config_hash"](只断真值) 13 条登记同一 environment="隔离PG与合成资料;含实际CLI子进程和HTTP",实测仅 2 条用 CLI/HTTP;防篡改只核基类异常(V0028…sql:28 有固定消息可用);:172-176 与 test_回放资料封存.py:123-127 逐字重复;:194/:237/:264 多参数共用无 match 断言 无需授权
TS-46 测试与资源 tests/集成/test_结构接入.py:105;tests/集成/test_故事事实确认与时点.py:105,396,622 D1 assert client.get("/api/v1/schemas/new-schema/versions/1").status_code != 200;with pytest.raises(Muse错误): 只要求非 200(500/401 也算「候选未启用」);:396 不查错误码(本域已有 事实错误);:622 计划模式分支只断 ["results"] 为真值;:105 与 :183,:201 是同一段替换正文的 7 行复制 无需授权
TS-15 测试与资源 tests/单元/test_声音与规则合同.py:108-109 D1 核对规则启用(next(iter(规则库["rules"].values())), 规则库["samples"], {"pass": True}) 该函数无条件抛错且第三参数从未被读取(机器味规则.py:145-147)→「逐例评测与正式批准」门禁判据没进入被测逻辑 无需授权
TS-31 测试与资源 tests/契约/test_动态结构投影与版本.py:111-148 D1 assert 总字段 == 216 文件哈希自比 + 总量抵消(删一加一仍 216)+ 公共字段只采样 2 个结构:补逐结构清单核对 无需授权
TS-16 测试与资源 tests/单元/test_声音与规则合同.py:112-119 vs :122-129;:190-201 vs :94-109;:413-422 vs :342-351 D1 同读内置规则、同 deepcopy l002、同改 regression、同 match="四类例证" 三组复制/真子集用例:参数化合并 无需授权
TS-24 测试与资源 tests/单元/test_结构合成与字段校验.py:118,216,269,274,285,344-345 D1/D2 # 细纲读取与落库门禁(原 FineOutlineReader/FieldCoverage);键 = next((k for k in self.行集 if k in sql), None) 两个「原」类名全仓不存在;SQL 替身未命中静默 None;docstring 的「在进库前/可保存」无对应动作;多例违约只断同一异常类型 无需授权
TS-42 测试与资源 tests/集成/test_评测执行与失败收敛.py:118-119,235,246,608-610,911,934,1031-1033,996,1038,747-750/957-960 D1/D2 assert all(u["output"] is None for u in result["units"])(无数量前置);assert costs[0]["has_unknown"] or Decimal(...) > 0;assert not request.get("previous_response_id") all() 可空集恒真;四变异共用基类异常无 match;读取任务绑定(...).内容哈希 只判真值;allow_failure=True 静默吞 Muse错误;previous_response_id 在 src 从不产生(半句恒真);注释「7项盲评原观察」「旧"错误适配器角色拒绝"」全仓唯一且无对应;四处逐字同构执行序列 无需授权
TS-45 测试与资源 tests/集成/test_任务租约与恢复.py:131,175,331,365 D1/D2 assert [e.序号 for e in 续接.事件] == list(range(1, 续接.最后序号 + 1));with pytest.raises(任务错误, match="不存在|用途") 期望值由被测对象的 最后序号 生成(空事件时恒真);:175 只证结果非 None;:365 用基类异常+或匹配、:396 连 match 都没有;:131 为全仓唯一孤儿助手 无需授权
TS-59 测试与资源 tests/单元/test_结构合成与字段校验.py:132-155、tests/集成/test_审校报告与案例持久化.py:850、tests/契约/test_动态结构投影与版本.py:124 D2 参数表与 ids 表 9 个字符串逐字重复;TypeAdapter(案例采集请求).validate_python({**asdict(请求), "carrier": "unknown"}) 与 :443-453 同构 低价值冗余与同构负例:合并参数、抽助手 无需授权
TS-36 测试与资源 tests/集成/test_受控模型调用.py:141,499,716,837/858 D1 SSE 载荷块 5 处近似复制(:124-146,231-251,472-489,644-654,781-802);宿主装配块 7 处(:150,499,668,808,846,867,892) Pi 行与 direct 行在 :720-732 观测完全相同,无观测区分真 Pi 与直接循环:抽公共夹具并补可区分证据 无需授权
TS-48 测试与资源 tests/集成/test_发布包独立运行.py:161 D1 assert not (tmp_path / ".git").exists() 刚建的空目录本就无 .git,该断言恒真,证不了「无 Git 安装包」 无需授权
TS-49 测试与资源 tests/迁移/test_备份恢复与切换核对.py:175,249,469,494,525,550,585,664,485,515,540,575,597,621 D1 assert 连.execute("SELECT to_regclass('public.muse_migration')").fetchone() == (None,) 逐字 7 次;def 记录(命令, 参数, 引用, 动作名): 逐字 6 份;assert 敏感标记 not in str(捕获.value.呈现())(该配置从未带口令) 抽公共助手;删恒真断言 无需授权
TS-53 测试与资源 tests/真实调用/test_诊断技能行为.py:177;tests/端到端/test_诊断入口与只读边界.py:39;tests/契约/test_诊断入口原观察.py:81 D1 assert report["runtime_verified"] and report["model_verified"];assert result["mode"] == "service" and not result["model_verified"] model_verified 由提供方名推导(编排/行为评测.py:340-349)与 执行行为场景 写死 False(效果评测/行为场景.py:234-246)→ 断言不可能失败;诊断入口断言只回显输入长度 无需授权
TS-33 测试与资源 tests/契约/test_角色能力与配置.py:189 D6 for 文件 in (仓库根 / "配置").glob("*.toml"): 凭据扫描漏 配置/角色策略.yaml(当前该文件无凭据形状内容,属覆盖缺口) 无需授权
TS-43 测试与资源 tests/集成/test_案例采集与复核.py:201,239,551,654 D1 with pytest.raises((Muse错误, ValidationError)):;match="作品|四类" 三类非法输入接受任一异常族不核错误码;5 处用全局基类异常;或分支匹配无法区分规则;:654-668 与 :689-703 15 行块逐字相同 无需授权
TS-55 测试与资源 tests/夹具/(20 文件)、tests/conftest.py:263、tests/集成/test_任务租约与恢复.py:131、tests/迁移/test_作品资产迁移.py:15 D3 25 个夹具文件中 20 个全仓无测试消费者(去味/*.yaml 8、方法审核/历史标定/* 6、旧看板/* 3、模型事件.json、旧库样本.sql、宿主事件/DSH历史事件.json);def 夹具根() 无人请求;def 完成所有(…) 从未被调用 删除或登记用途;死代码一并清理 需用户授权
TS-52 测试与资源 tests/架构/test_技能与文档索引.py:272,281,383;test_元数据不能跨模块写值.py:20;test_测试依赖与执行证据.py:119,164,402,419,439 D1/D2 assert 资源["name"] == 条目["name"](读取能力 返回 {**条目,…},恒真);if isinstance(节点, ast.Constant)…;docstring「--case 与标记取交集」 三条架构门禁弱化/恒真 + 两处近似逐字用例(:402 vs :439)+ 三处无判据承诺 无需授权
TS-37 测试与资源 tests/集成/test_两阶段写手.py:275,622,756,825,802-832,834 D1 except Exception: self.send_error(500);with pytest.raises((Muse错误, RuntimeError, OSError)):;assert any(s["state"] == "failed" for s in 终态.步骤) 宿主吞异常+宽泛 raises 使宿主自身故障可冒充被测失败;:802-832 与 :733-763 复制;:834 未核对登记 then 的「输出合同 additionalProperties=false 拒绝」 无需授权
TS-50 测试与资源 tests/迁移/test_隔离目标台账.py:788,1586-1587,1892,2275,2308、test_质量资产迁移.py:355,499、test_作品资产迁移.py:15,105 D1/D2 必表 = ("runs","events","reviews","revisions","cards");"card_id": "case-legacy-9";assert records[1]["original"]["record"]["status"] == "confirmed"(上一行已全等) 用例名「旧账本五表」实为 8 张;card_id 不符合真实 CHECK ^case-[a-z0-9]{20}$;:1892 参数行只断言自建快照构造失败;:15 死夹具别名、:105 与 :243-263 近似复制;:2275 套话 docstring 无需授权
TS-35 测试与资源 tests/集成/test_受控模型调用.py:832,834,621,893,55,375 D1 assert 行 is not None and 行[0] == …(终态证据);全部费用断言等于自带替身常量(:87 Decimal("0.125")) 合成载荷的 model/usage/structured_output_hash 零断言;期望值由被测 组装角色请求 产出;三种故障共用基类异常无 match;合成提供方不校验 Authorization/model(tests 全目录无凭据外发正向断言);步骤入口为恒真空壳 无需授权
TS-26 测试与资源 tests/契约/test_盲评与引文合同.py:854,931,939 D1 calls = [] … assert calls == [] 三处 calls 从未被写入(无替身/spy 引用)→ 恒真 无需授权
TS-39 测试与资源 tests/集成/test_审校报告与案例持久化.py:1021/1037/962/1052、:241/249/267、:261、:850 D1 四例结构相似度 0.91(登记 then 为 None);replace(请求, verbal_tics=("样张中不存在",)) 三处复本;for 假审阅 in ("missing", "", "00000000-…") 与 :100-102 逐字 复制用例成组:合并/参数化并补齐 then 登记 无需授权
TS-38 测试与资源 tests/集成/test_审校报告与案例持久化.py:1105,744,688,710,959,501,414,533,237 D1/D2 assert 运行审校命令(…) == 服务读回;assert not list(tmp_path.glob("*.inventory.json"));match="connection refused"(消息由测试 stub 自写) 同实现自比 4 处;*.inventory.json 全仓无产出代码 → 恒真;match 只证异常透传;:533 引用全仓不存在的「旧烟雾开关」;:237 的 verbal_tics 到 声音确认.py:176 才校验、本用例走不到 无需授权

P3(原始 34 条 → 去重后 34 条)

编号 模块 位置 方向 现状摘录 建议 所需授权
AG-26 agent层 .agent/skills/操作/ 18 个技能(压缩正文、备份与恢复数据、导入资料、建立作品声音档案、拆解书稿、提出并验证改进、整理写作方法、整理定稿与导出、查看与恢复任务、检查与维护拆书结果、登记连载与反馈、确认事实增量、确认作者偏好、维护元数据结构、维护故事世界、记录机器味案例、运行效果评测、采集资料与榜单) D3 除 操作/目录.md 的索引行外,无任何作者场景、角色、规则或其他技能引用它们。索引行本身构成合法入口(AGENTS.md → 目录 → SKILL.md 的渐进披露合同),故记录不改。 若期望由作者层直达,需在 .agent/作者/场景/ 增入口 无需授权
AG-28 agent层 15 个方法技能 ## 输出 段 D5 方法技能产出为对话内 Markdown,明确声明"不直接落库、不代替 写下一章/决定正文候选去留 写 Canonical",因此没有持久留痕与查询入口。 有意保留:留痕由承接的操作技能负责;若要沉淀,应在复利链落库 无需授权
AG-29 agent层 .agent/skills/操作/ 30 个技能 D5 未写 lesson/范式卡升格接入;这些是 CLI/HTTP 确定性入口,不产生经验资产(整理写作方法 已接入方法卡升格链)。 有意保留 无需授权
AG-30 agent层 .agent/约束/数据与读取范围.md:6 — 写入旧正式库地址 100.64.0.8:5433/muse-example 作为"禁止回退"的反面清单。这是内网地址而非凭据(无账号口令),且服务于明确禁令。 有意保留;若仓要外发,改为占位符 无需授权
AG-27 agent层 .agent/skills/操作/查看与恢复任务/SKILL.md:22、.agent/skills/操作/运行效果评测/SKILL.md:54 D2 各有一处连续空行;.agent/ 内无行尾空白。 随手清理 无需授权
AG-25 agent层 .agent/skills/操作/备份与恢复数据/SKILL.md:25 D4 链接 迁移与验收.md#备份与恢复入口 用的是标题锚点,目标文档 docs/系统架构/新版设计/迁移与验收.md:69 确有同名标题(可达);但本仓 工具/维护索引.py:261 的锚点约定是 <a id="…">,该文档零处使用。 统一锚点约定(或在该标题加 <a id>) 无需授权
DR-24 docs与根文件 docs/实现回顾/(既有 4 文件) D4 仅机械计数,不复查表述、不提修改建议。既有留痕(专项检查-计划.md、技能身份中文化迁移实现回顾.md、目录.md、R2改造历史留痕.md):Markdown 仓内链接 6 条、死链 0 条;反引号仓内路径引用 30 条、死引用 4 条(专项检查-计划.md:44 ×2 指向 muse/content/meta/schemas/、muse/lifecycle/flow/chains/;:97 指向尚未创建的 专项检查-台账.md;技能身份中文化迁移实现回顾.md:59 指向 tests/architecture/test_author_instructions.py) 保留(历史留痕豁免),仅登记 无需授权
WB-18 web web/src/应用/工作台布局.tsx:35-54 D2 <NavLink to="/works">我的作品<span>01</span></NavLink> … <NavLink to="/system">系统管理<span>07</span></NavLink> —— 序号是硬编码装饰,与路由、顺序无数据关系,增删导航需手改两处 记录不改;若接受改造则由数组 .map 生成 记录
WB-19 web docs/系统架构/新版设计/文件设计/前端-应用与通用界面.md:298,309,320,342,430,441,613,624,647,658,669,680,703;前端-功能工作台.md:475,486,739,805,871,992,1003,1014,1025,1036,1047 D7 24 个 web 目标文件(17 源码 + 7 测试,如 web/src/界面/分栏.tsx、web/src/功能/元数据/结构管理页.tsx、web/tests/交互/报告失效.test.tsx)在设计文档有条目但磁盘不存在。该文档首行已声明「本页从目标文件清单投影…文件和目标合同不代表实现或验收已完成」,且这些条目未携带 现行用例身份(与已落地条目写法一致区分) 保留为设计目标;若某目标已废弃,从 目标文件清单.json 撤下 需用户授权
JF-13 后端-交付连载上下文资料 src/muse/交付连载/接口.py:44-158;src/muse/上下文/任务范围.py:104-310 D1 D3 接口.py 的单层转发与多数函数体内导入并非无证据抽象:tests/架构/test_模块依赖.py:203-234 强制跨模块只经 接口.py,且 知识方法/接口.py:257-271 反向 import 上下文,构成真实循环。 有意保留;只清 JF-08 列出的无理由延迟导入。 无需授权
JF-12 后端-交付连载上下文资料 src/muse/资料研究/实体归并.py:73、src/muse/资料研究/实体归并.py:84、src/muse/资料研究/实体归并.py:92;src/muse/资料研究/分析保存.py:183 D2 D1 载荷键 canonical 与 canonical_written 是英文键,与 docs/系统架构/新版设计/领域模型/术语表.md:37"避免使用:自动正典"的口径不合;但两键已被 tests/单元/test_分章切窗与实体归并.py:59 与 tests/迁移/test_隔离目标台账.py:1966 断言。 记录不改:随下次契约版本一并改名为"规范名/已写正式",本次只登记。 需用户授权
JT-16 后端-任务运行编排 配置/流程模板/*.yaml(11 个)与 src/muse/资源/运行资源.zip 内 流程/*.yaml D3 机械核对:11/11 文件名对应且逐字节相同(配置/角色策略.yaml 与 zip 内 策略/角色.yaml 亦相同)。属有意保留的"可审副本 + 发布投影"双物理副本,当前零漂移,本次不动 保留,但需同步纪律成文(改模板必须重打资源包,工具/资源登记.json 是唯一变更入口),否则下次改一份就漂移 无需授权
JW-21 后端-写手规划经验 src/muse/作者经验、src/muse/正文写作、src/muse/作品规划(全组) D3 三模块内 grep lesson/范式卡/升格 零命中,无升格链入口;docs/系统架构/新版设计/模块设计/B07-作者经验.md:65 已声明"Skill及其他用途尚无完整owner链时明确保持未实现" 保留并在此台账登记为"有意未接",避免下一轮重复发现 无需授权(记录)
JW-20 后端-写手规划经验 src/muse/作者经验/存储.py:19 D6 self.连.execute(f"SELECT {fn}(hashtextextended(%s,0))", …),fn 取自 "pg_advisory_xact_lock_shared" if 只读 else "pg_advisory_xact_lock" 二选一字面量,无用户输入进入 SQL 文本,实测不可注入;按 D6"SQL 字符串拼接"口径记录 拆成两条静态 SQL 更干净;保留亦可,理由:不可注入 无需授权(记录)
JC-24 后端-基础设施共享 src/muse/基础设施/受控文件.py:1 vs :96-101 D1 术语漂移 模块 docstring 称"不透明租约ID",实现与错误信息一律称 对象ID/对象身份;租约在 共享与 S02 另有既定义 保留(改 docstring 属可选清理,无行为影响) 记录不改
JC-23 后端-基础设施共享 src/muse/基础设施/宿主/Pi工具桥.ts:47 D6 占位字面量 apiKey: "local-callback", baseUrl: "http://127.0.0.1:1" —— 进程内回调提供方的占位值,紧邻注释已写明"这是进程内回调提供方,不发HTTP",不是可用凭据 保持现状;如需零扫描噪音可改名为 apiKey: "in-process-callback-no-secret" 之类自证非凭据的常量 记录不改
JC-25 后端-基础设施共享 src/muse/基础设施/系统运行.py:65-67 D1 吞错判定 读取系统状态 捕获 (Muse错误, psycopg.Error, OSError) 后只回 error 错误码、不抛;这是健康/系统状态接口的既有合同(docstring 声明"不暴露凭据值"),且不含凭据与异常正文 保留;若后续要求诊断可追溯,改为同时落一条 可观测性.记录运行(仍不带正文) 记录不改
JS-20 后端-审校效果评测 src/muse/审校修订/存储.py:680、:688;src/muse/效果评测/存储.py:129 D6 f"SELECT {lock}(hashtextextended(%s,0))":插值只取 pg_advisory_xact_lock / pg_advisory_xact_lock_shared 两个字面量,锁键仍走 %s 绑定;无用户输入进入 SQL 文本,无注入面。记录不改 保留;若要更严可改 psycopg.sql.SQL 常量组合 无需授权(仅记录)
JS-21 后端-审校效果评测 src/muse/审校修订/存储.py:684-697 D1 + (" FOR SHARE" if 共享 and 锁行 else "" if 共享 else " FOR UPDATE") 三元嵌套可读性差,但语义正确(共享且不锁行时不取行锁,与 诊断服务.py:24 只锁库级共享的调用一致)。记录不改 保留;后续若改动加注释说明三态 无需授权(仅记录)
JR-20 后端-接入 pyproject.toml:27(muse = "muse.__main__:main") D3 仓内没有调用点使用安装后的 muse 控制台脚本:Makefile(:66)、README、.agent/skills、测试全部用 python -m muse;muse.__main__.main 本身有 55 处测试引用。属安装面有意保留 保留不改。理由:安装后 muse <子命令> 与 python -m muse 等价,删除会破坏已发布安装方式 无需授权
JK-20 后端-知识方法故事世界 docs/write-chapter/artifacts/(125 文件) D2 D3 历史运行产物引用 writer-context-v1 等合同,仓库内已无生产者(JK-03 的对照面) 按计划第 1 节历史留痕豁免,不改 无需授权(记录不改)
JK-21 后端-知识方法故事世界 src/muse/知识方法/模型.py:33-39 与 事实提案请求 D1 证据引用 用英文 kind 而相邻字段中文;库内 payload 键混用(work_id/known_to/reader_visible)属 DB 合同 保留;改动需迁移,不属本轮 无需授权(记录不改)
JK-22 后端-知识方法故事世界 src/muse/知识方法/方法版本.py:470-476 D6 B04.binding 依赖用 对象ID.split(":")[1]/rsplit 解析 work_id 与 target_ref,构造方唯一(方法版本.py:416)故当前安全 改结构化依赖对象,去掉字符串反解析 无需授权
TL-13 工具 Makefile:4、65 D7 .PHONY 未列 迁移(:65 定义该目标);实测仓库根无名为 迁移 的文件或目录,当前不会触发「目标被跳过」 把 迁移 补进 .PHONY 无需授权(仅记录)
TL-14 工具 工具/环境预检.py、工具/构建发布.py;README.md:55、279 D7 5 个工具中 3 个由 Makefile 目标承载(:43、:70、:73、:74),环境预检与构建发布只在 README 给出 uv run python 工具/… / .venv/bin/python 工具/… 命令 记录为有意保留(发布与预检属人工步骤) 无需授权(仅记录)
MG-04 数据库迁移 数据库/迁移/(45 文件全量) D3 全量 IF NOT EXISTS 出现 0 次、DROP ... IF EXISTS 0 次;128 CREATE TABLE + 18 CREATE INDEX + 5 CREATE VIEW + 4 CREATE TYPE + 22 ADD CONSTRAINT + 51 CREATE TRIGGER + 7 CREATE FUNCTION 全部无重跑保护,全仓无一条 BEGIN;/COMMIT; 属有意设计(事务与幂等由执行器统一承担,见证据指针),但迁移文件自身无一句说明。建议在 数据库/迁移/ README 写清「单文件不自幂等、不可单独执行、必须经 python -m muse 迁移」 无需授权(补文档)
MG-03 数据库迁移 数据库/迁移/V0024__模型派发授权依据.sql:9;数据库/迁移/V0041__评测语义检测单元.sql:2 D6 'ALTER TABLE %I.muse_runtime_evidence DROP CONSTRAINT muse_runtime_evidence_kind_check' / ALTER TABLE evaluation.muse_evaluation_unit DROP CONSTRAINT muse_evaluation_unit_kind_check; —— 硬编码名直接 DROP,无存在性前置校验 对齐 V0021/V0023 的写法:先 SELECT conname INTO ... FROM pg_constraint,IS NULL 时 RAISE EXCEPTION。风险有限:两处均在 迁移.py:109-110 的逐版本事务内,失败整体回滚不留半成品 无需授权
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-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「先落私有连接引用」),记录不改 无需授权
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-61 测试与资源 tests/迁移/test_隔离目标台账.py:2275 D2 """真实PG用例;…需要父代理显式外部环境运行。""" 上游派发流程套话(实际由 pytestmark/Makefile 决定):保留或改写 无需授权

各模块一句话结论(14 份报告;检查时规模,数据库/旧库迁移 域已退场,见收口节)

模块 P0 P1 P2 P3 一句话结论
后端·接入(48 文件) 0 6 13 1 骨架干净:211 条路由零重复零缺 id、合同与实现 211/211 一致、零凭据零拼接零穿越;问题是一处异常伪装 404、两处身份/状态核对断裂、一个只有测试在用的「后台入口」。
后端·基础设施+共享(37) 2 9 11 3 错误合同、路径约束与凭据纪律扎实(零硬编码、零拼接、零关闭 TLS、零裸 except);塌陷在「生成物/外部版本」这条门禁边(JC-01/JC-02)与一批零消费者导出面。
后端·审校修订+效果评测(48) 1 9 9 2 确定性规则引擎无模型调用、两次运行字节一致;塌陷在规则数据与提示词资源的权威口径已与实现脱钩(16 条规则写「激活门豁免」而实现无此开口)。
后端·任务运行+编排(35) 0 4 11 1 派发主链留痕完整、白名单与 5 小时窗口真实落地;问题是恢复链断头(JT-01)、角色探针旁路预算与留痕(JT-02)。
后端·交付连载+上下文+资料研究(47) 0 5 6 2 定稿冻结、四格式导出与复读校验、来源漂移拒绝都失败关闭;问题是 4 个提示词孤儿、榜单快照采集时刻不是合法时间戳、导出落盘非原子。
后端·作者经验+正文写作+作品规划(37) 0 4 15 2 模型锁定与「先审后入」经调用点复核成立(正典写入仅 2 处、无绕过口);问题是提示词承诺与实现不符、两条规划提示词直读源树、B05 直读 B06 私表。
后端·知识方法+正式变更+故事世界+元数据(44) 0 8 11 3 正典写入无旁路、结构字段与库内断言逐数字一致;问题是资产无消费者(2 提示词、1 结构合同、2 合同字段)与 AGENTS.md 结构契约路径。
tests + 资源(157 测试 + 资源) 1 10 33 2 隔离纪律与登记骨架干净(446 个库夹具用例全部带标记、1219 个用例 ID 双向对齐、迁移双副本逐字节零漂移);风险是门禁依赖生成物、一批断言弱于用例名、浏览器旅程无可执行入口。
web(114 + 53) 0 2 15 2 全仓最干净的一块:零 dangerouslySetInnerHTML、零凭据、零 any、零幻路径注释;问题是同一件事多文件各写一遍、用例 id 与清单/文档三方不一致。
数据库迁移(45 SQL + 初始化) 0 0 2 5 双副本零漂移、账本与事务纪律由执行器承担、凭据为零、157 个定义对象对代码零悬空;只有编号空洞成因未成文与少量标注熵增。
数据库/旧库迁移(21 + 旧结构,已退场) 0 4 2 1 台账与隔离闭环扎实(零凭据、SQL 全参数化、目标库随机新建);两条已声明的 K08 镜像路径在真实旧结构上不可达,切换检查缺回退条件。
工具(7) 0 5 7 2 无凭据、无 shell=True、无硬编码绝对路径,Makefile 工具命令参数一致且等价实跑绿;风险是登记驱动的写入路径缺包含性校验、能力登记与技能/生成物的差集无人看守。
.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 处权威引用落空)。

豁免与边界(本轮查了什么、没查什么、为什么)

已全量精读/全量机械核对

  • 后端 src/muse 300 个 .py(按 17 个业务子包分 8 组,无一抽样);src/muse/资源 仅一致性(产物不读)。
  • tests 157 个 .py:架构 5、契约 19、迁移 10、端到端 3、真实调用 1 全读;单元抽 10、集成抽 15(抽样清单在各报告「豁免与边界」节)。
  • web/src 114 + web/tests 53:门禁全量 + 精读抽样 37 个 TS/TSX + 16 项机械全量扫描。
  • 数据库/迁移 45 SQL 全量机械 + 基线 V0001 与最新 3 个精读;数据库/旧库迁移 21 .py 机械门禁 + 3 个关键文件精读(映射台账/切换检查/入口)。
  • 工具 7 文件全读;.agent 252 文件全读(46 个 SKILL.md 全文 + 117 个 references 存在性 + 9 规则 + 3 约束 + 3 规范 + 作者层 + 5 个目录索引)。
  • docs 权威区 + 根文件 + 两个 workflow 全读;docs/实现回顾 既有留痕仅机械计数。

免检与豁免(照计划第 1、4 节)

对象 处置 理由
docs/实现回顾/ 既有留痕(计划、R2 留痕、迁移回顾、本目录索引) 只计数死链,不复查表述、不提修改建议 计划第 1 节「历史留痕:表述不复查、内容不修改」;本轮计数:md 链接 6/死 0,反引号路径引用 30/失效 4(含本计划自身引用的 <模块> 占位与 skills.json)
数据库/旧库迁移 的命名/风格/注释 D2 泔水与风格要求豁免 计划第 4 节明示「有意 legacy 域」;仍查事实错误、链路、安全
src/muse/资源/工作台、运行资源.zip、docs/接口契约/生成/openapi.generated.json、web/src/接口/生成/类型.ts 只验与权威同步,不评质量 生成物/构建产物;web 侧实测重新生成后逐字节一致
docs/接口契约/生成/ 之外的 .venv、node_modules、__pycache__、.zcode、data/、.agents.local/ 不查 缓存、本地环境、个人配置、创作数据
数据库内容、创作正文(含 data/sources/)、data/muse.db 不读不改 硬边界:不动数据库、不读创作正文
make 数据库测试、make 真实模型测试、make 宿主测试、备份恢复演练 未跑 计划「本轮不跑数据库测试(CI 记录为证)」;无隔离库/真实模型/固定 Pi 路径
make 生成、make 构建、make 格式写入、维护索引.py --写入 子代理一律未跑(只静态核对);主代理经授权跑过一次 make 生成 写模式会覆盖生成物;make 生成 的授权与证据见 §4
tests/迁移 对真实 PG 的行为、数据库/迁移 在真实 PG 上可跑通 无证据 未连库;10 个迁移用例只做清单级核对

未取得原始退出码的门禁:make 模块边界 原样命令在本沙箱不可执行(uv 缓存 + macOS sandbox_init 双重被拒);内容侧等价证据为 --外部环境 下 15 passed,主代理另在授权环境跑到 make 测试 1005 passed(含该文件)。

处置声明与硬边界(2026-09-16 检查期;后续处置见收口节)

  • 本轮为只读专项检查。除下列三项外未改动任何文件: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)。
  • git add / git commit 全程未执行。修复另立计划;未获授权不动手。
  • 台账每条二值收口:待授权(需用户点头)/ 保留(理由)(P3 与豁免项)/ 已处置(证据)(仅 JC-01 的本地部分);最终处置以收口节的裁决分布为准。
  • 另一会话提交期间的时点声明:开工快照 2026-09-16T20:30:04+08:00,HEAD f76c3cd04a8b4d461a5e004b36962900db943729;git status 当时仅有 docs/实现回顾/目录.md 的未提交改动与未跟踪的计划文件,判定为「未收口」,故计划第 2 节的「.gitignore 与跟踪文件交集」原定延后;实际于 20:43:37 复检(跟踪 1320 / 命中 0)并记入 §2。

证据指针(命令 + 退出码 / 校验结果)

证据 位置
全部门禁首轮与刷新后原始输出 /tmp/qc/门禁结果.txt、/tmp/qc/门禁结果-uv.txt、/tmp/qc/门禁结果-复跑2.txt
P0 门禁红证据档(时间线 + 三步根因探针) /tmp/qc/P0-门禁红-证据.md
代码哈希三向比对(清单/HEAD/工作树,301 文件逐一) /tmp/qc/probe4.py
安装核对与资源一致性探针 /tmp/qc/probe5.py
Markdown 链接机械校验(393 文件 / 1680 链 / 4 死链) /tmp/qc/链接校验.py、/tmp/qc/死链结果.txt
反引号路径引用校验(2722 / 1236) /tmp/qc/反引号校验.py、/tmp/qc/反引号死链.txt
docs 子代理链接校验(口径 A/B/C 与 R2 穷举) /tmp/lc2.py、/tmp/lc2.json、/tmp/lc2-summary.txt(子代理落盘)
台账条目抽取与去重(305 条 → 293 条) /tmp/qc/台账/生成5.py、/tmp/qc/台账/抽取结果.txt
各模块命令与退出码、逐条 file:line 各报告「证据指针」节(14 份)

上述 /tmp 路径为一次性探针与日志,不入库;报告内已保留可复现命令与判定结果。逐条裁决处置与执行证据存于本地实施区 .agents.local/优化-20260917/已裁决计划/(不入库);判断某条现状时以当前仓库与本地映射为准。