设计文档:SoT 同步与生成物重出

- 新版设计各域 SoT 按本轮实现同步:总体架构、模块设计、接口契约、数据模型、功能规格、文件设计与决策记录。
- 接口契约生成物重新导出(openapi 与前端客户端随契约一致)。
- 实现回顾与专项检查台账保留历史结论;本轮收尾发现另见 .agents.local 下的收尾报告与审查处置。
This commit is contained in:
zizi 2026-09-18 01:15:18 +08:00
parent af08551d7b
commit 0260bcd8e2
89 changed files with 3096 additions and 798 deletions

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 参考书作品面数据入库方案
- 版本:v6(2026-07-14。v1→v3:两轮独立评审修正事实与幂等/隔离/回滚;v4:第三轮评审补存储落点与真实额度时间线;v5:创始人五条反馈后换核——废分层、全实体统一生长、正文窗直抽+缓存友好;**v6:第四轮复审后修三处硬伤——实体索引改窗内机械预扫(防重蹈章级实体膨胀坑)、判重与更新预算上修并设总额闸、补出场留档表防跨窗漏立卡**)

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 升格卡改造设计(P0 补骨架记里程碑 · P1 串链语义判重)
- 版本:v2(2026-07-20 已实现;新增里程碑章号原文证据绑定)

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 落库与看板设计 v2(八张待落库表 + 只读看板)
> 目标读者:创始人。状态:**设计待审(已吸收四路评审),未动代码**。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 评测 harness 改造设计(概念层)
> 目标读者:创始人。状态:**概念设计已定稿(三条独立概念评审收敛),实现细节后续进行**。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# craft 蒸馏操作留痕(2026-08-19)
> 本文件是 2026-08-19 在 agent-example 上完成的小说写作方法论蒸馏操作

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史审查报告", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# Skill 质量审查与复利改造清单(2026-08-20)
> 性质:一次性审查记录与改造方案,不是 SoT。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 质量收敛环运行手册(实验性)
> **状态**:历史实验流程,不是任何 Skill 的现行合同。现行归因入口是 [`optimize-content-quality`](../src/muse/作者经验/改进提案.py)(只出建议);评分归 [`score-content-quality`](../.agent/skills/操作/评估内容质量/SKILL.md);Gate 终态归 [`adjudicate-quality-gate`](../src/muse/效果评测/启用判据.py)。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "历史审查报告", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 2026-08-30 提交前四维形而上审查报告
> 审查对象:本次「harness 规则与实现差异修复」全量改动(38 文件,+509/−339)。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "本次提交前对创作链 SoT/Skill/实现校准差异的四维审查结论与验证证据", "使用场景": "提交前确认本轮变更是否可交付时", "使用要求": "只对应本次合同校准提交,不替代长期 SoT"} -->
# 2026-09-01 创作链路合同校准提交前四维审查报告
verdict: PASS

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "59 个正式技能的中文单名、作者指令层、迁移边界与机械验收合同", "使用场景": "修改技能名称、发现索引、运行归属或作者创作入口前", "使用要求": "中文名称、作者交互边界或迁移规则变化时同步更新"} -->
# 技能身份中文化与作者创作入口
## 1. 目标

View File

@ -1,5 +1,6 @@
<!-- 导航元信息: {"内容描述": "功能方案、阶段0提示词探索的设计边界、验收标准与实施计划(spec)", "使用场景": "实现或评审某功能前", "使用要求": "功能范围、方案或实施步骤确认时"} -->
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 技能身份中文化与作者创作入口 | 技能身份中文化与作者创作入口.md | 59 个正式技能的中文单名、作者指令层、迁移边界与机械验收合同 | 修改技能名称、发现索引、运行归属或作者创作入口前 | 中文名称、作者交互边界或迁移规则变化时同步更新 |
| 阶段0交互式作品探索 | 阶段0交互式作品探索.md | 一份主文档与六份子阶段提示词、九章产出范式和最终校验的职责边界 | 调整阶段0作者交互、探索指令或最终交付格式时 | 流程只维护在正式 Skill,保留渐进探索与两次人审 |
| 技能身份中文化与作者创作入口 | [技能身份中文化与作者创作入口.md](技能身份中文化与作者创作入口.md) | 59 个正式技能的中文单名、作者指令层、迁移边界与机械验收合同 | 修改技能名称、发现索引、运行归属或作者创作入口前 | 中文名称、作者交互边界或迁移规则变化时同步更新 |
| 阶段 0 交互式作品探索 | [阶段0交互式作品探索.md](阶段0交互式作品探索.md) | 一份主文档与六份子阶段提示词、九章产出范式和最终校验的职责边界 | 调整阶段0作者交互、探索指令或最终交付格式时 | 流程只维护在正式 Skill,保留渐进探索与两次人审 |
<!-- my-skills-cli:index:v2 -->

View File

@ -1,8 +1,9 @@
<!-- 导航元信息: {"内容描述": "一份主文档与六份子阶段提示词、九章产出范式和最终校验的职责边界", "使用场景": "调整阶段0作者交互、探索指令或最终交付格式时", "使用要求": "流程只维护在正式 Skill,保留渐进探索与两次人审"} -->
# 阶段 0 交互式作品探索
## 一、问题
原流程先冻结根设定,再生成多份完整、同构的九章候选。单份包含 36 组、161 个内容单元,作者在想法尚未形成时就必须审大量成稿,也难以从人物、片段或关系的局部发现继续生长。
旧实现流程曾先冻结根设定,再生成多份完整、同构的九章候选。单份包含 36 组、161 个内容单元,作者在想法尚未形成时就必须审大量成稿,也难以从人物、片段或关系的局部发现继续生长。
阶段 0 应允许散乱、多变和暂不收束。创作中的中心与边缘相互影响,结构逐步形成;真正开始写正文后,作品主体仍可能变得更清楚。
@ -22,13 +23,13 @@
## 四、实现决策
创作流程由提示词管理,不建立探索状态机、逐轮操作接口、固定代理队列或自动推进条件。合并也采用指令,移除逐章 packet / accept 串行脚本。模型调用和正式数据操作继续使用现有受控入口。
探索内容由提示词引导,不建立逐轮自动推进状态机或固定代理队列。当前保存、格式检查与方向选定走具名探索入口;模型调用和正式数据操作继续使用受控入口。旧实现的逐章 packet / accept 流程仅作历史背景。
九章导航沿用现有内容知识。参考外部小说 Skill 时,吸收观察细节、自由草拟、人物与情节相互牵引、关系与声音发现等方法,优先使用本仓已有方法;不复制整套技能,不引入固定节拍数量和写作时长。
作品行先于探索存在。草稿默认在 `.agents.local/草稿/<作品>/`,不作为正式内容或正文上下文。已有方法、schema 与角色合同仍由各自文件维护。
私人探索先按配置的 `文件.探索草稿` 目录保存;选定方向时才必须点名目标作品及稿件版本。草稿不作为正式内容或正文上下文。已有方法、结构与角色合同仍由各自文件维护。
整理交付时才运行代码校验。探索稿的格式权威为 [产出范式](../../muse/lifecycle/flow/skills/book/完善故事基础设定/references/candidate-contract.md);正式 setting 的字段权威为 `work_core`、`novel_work`,写入与确认归「制定作品规划」。不在本次扩建规划存储、字段投影或正文生产链。
整理交付时才运行格式校验,格式源为[交付结构](../../.agent/skills/操作/完善故事基础设定/references/交付结构.json)。当前保存、检查及选定方向的命令以[完善故事基础设定](../../.agent/skills/操作/完善故事基础设定/SKILL.md)为准;正式规划的字段按已发布结构校验,审阅与决定归[确认规划候选](../../.agent/skills/操作/确认规划候选/SKILL.md)。
## 五、产出核对
@ -36,7 +37,7 @@
最终格式校验只检查九章目录、已展开标题、空节、裸占位符和可选编号重复。没有候选数量、条目数量、句长或全书设计完整度门槛。未探索的章节有明确说明即可。
方向选择记录的检查只核对 JSON 形状,不能证明真实用户授权,也未接入 `persist_planning` 自动拦截。实际交接依据用户回复:所选稿交给规划角色,生成 setting Shadow,再由用户确认具体内容。正式字段覆盖与篇幅目标的现有缺口继续按领域合同列明,不把文档更新写成生产链已经验证。
方向选定由作者明确决定,经当前探索入口携带确切稿件哈希与作品修订提交;S01保存快照与回执。方向选定只使该稿成为规划来源,正式规划候选仍需另行展示、审阅和确认。旧 `persist_planning` 及“只检查 JSON 形状”的说明属于已退出实现,不是现行接入合同。
## 六、范围外

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "固定版本与验证边界", "使用场景": "追溯 R2 时", "使用要求": "不追认全部通过,不替代稳定合同"} -->
# R2 改造历史留痕
R2 过程管理已结束。现行工程结果就是当前代码、测试、迁移、工作台与稳定设计;本文只固定版本和验证边界,不再保存计划、工作包、处置账本或本机回执。

View File

@ -0,0 +1,456 @@
# 全仓专项检查台账
> 日期:2026-09-16 | 编排:主代理 | 依据:[专项检查-计划.md](专项检查-计划.md) 第 5 节严重度分级、第 6 节报告格式
> 范围:`src/muse`、`tests`、`web`、`数据库`、`工具`、`.agent`、`docs`、根文件;不含缓存、构建产物、小说正文与数据库内容。
> **本台账保存2026-09-16原发现及复核更正,不再单独充当修复输入;2026-09-17已按用户裁决进入[优化执行](../系统架构/新版设计/优化执行合同.md)。下表是原级别分布,不能当作尚未修复数。**
## 复核更正(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/已裁决计划/`;新增全局设计问题一并承接,不能只按原严重度逐项打补丁。原模块报告保留检查时表述,本节纠偏优先于其冲突结论。
## 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 | 「方法子阶段在方法技能迁移前可参考旧版 [完善故事基础设定](../../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** `<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(含该文件)。
## 处置声明与硬边界
- 本轮为**只读专项检查**。除下列三项外未改动任何文件:`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` 路径为一次性探针与日志,不入库;报告内已保留可复现命令与判定结果。

View File

@ -0,0 +1,120 @@
# 全仓专项检查计划
> 日期:2026-09-16 | 状态:口径已确认,待执行 | 编排:主代理统筹分派,子代理详细检查并出具报告
> 范围:仓内代码与文档;排除缓存、构建产物、小说正文与数据库内容。
## 1. 目的与范围
对 R2 合并后的全仓做一次质量、表述、链路、口径层面的专项检查,产出问题台账与处置提案;修复不在本计划内,另立计划经授权执行。
**检查对象**:`src/muse`、`tests`、`web`、`数据库`、`工具`、`.agent`、`docs`、根文件(AGENTS.md、README、Makefile、pyproject.toml、CLAUDE.md、.gitignore、.github/workflows)。
**排除**:
- 缓存与本地环境:`.venv`、`node_modules`、`__pycache__`、`.zcode` 等;
- 构建产物与生成物:`src/muse/资源/工作台`、资源.zip、`docs/接口契约/生成/openapi.generated.json`、`web/src/接口/生成/类型.ts`(只验与权威同步,不评质量);
- 小说正文与创作内容:数据库内正文、实体、规划产物一律不读不改;
- 历史留痕(`docs/实现回顾` 既有文件、git 历史):表述不复查、内容不修改。
## 2. 编排与交付
- **主代理**:维护本计划口径;按第 4 节分派任务,每次列明 2~3 个最小必读文件;汇总去重成台账;复核阻断级发现;不代替子代理读文件。
- **子代理**:按模块要求详细检查,报告落盘为 `docs/实现回顾/专项检查-报告-<模块>.md`;对话返回按[《子代理交付》](../../.agent/rules/子代理交付.md)三要素不超过 20 行,只报结论与路径。
- **并行协调**:另一会话正在提交——git 状态类证据只做一次性快照并注明时点;「.gitignore 与跟踪文件交集」一项待对方收口后补做。
## 3. 检查方向(现状 → 目标)
### D1 代码质量
现状:门禁齐全(`make 检查`、`make 测试`、`make 前端检查`、`make 前端测试`)但本轮未在当前工作区复核;复杂度、超长文件、吞错、伪抽象从未系统排查;ruff 规则集(E/F/W/I/B/UP)不含复杂度类。
目标:门禁红绿有结论;后端 295 个文件全部经子代理精读;热点(复杂度、超 500 行、吞错、无证据抽象)全部入台账;测试文件按第 4 节深度抽查断言真实性与隔离纪律。
### D2 AI 泔水识别
现状:去 AI 味口径已成文(AGENTS.md 汇报纪律、《中文正文与界面》规范),但代码、文档、提示词从未按此复查;R2 产出文档按旧口径写成。
目标:四类判定(套话、无判据的空洞承诺、同义重复、幻路径引用)覆盖全部权威文档与代码注释、命名、界面文案;泔水清单分级入台账;历史留痕豁免。
### D3 代码链路清理
现状:前端构建产物被 gitignore 但仍被 git 跟踪(同类别未全量排查);迁移 SQL 双物理副本(`数据库/迁移` 与 `src/muse/资源/迁移` 各 45 个)一致性未验证;`tests/夹具` 是空目录;迁移编号空洞(缺 V0008、V0010–V0015、V0017–V0019);孤儿公共入口未排查。
目标:零误跟踪;迁移双副本零漂移或同步纪律成文;空目录与编号空洞消除或记录成因;公共入口零孤儿(每个入口有真实消费者或删除)。
### D4 过期口径更新/清理
现状(已证实):AGENTS.md 两行 SoT 指向已退出路径(`muse/content/meta/schemas/`、`muse/lifecycle/flow/chains/`);「物理清单以 `skills.json` 为准」但全仓无此文件;「旧代码用 `.venv-旧`」所指环境不存在;多处链接文字是旧文件名(目标存在、文字未更新);审查标准(提示词 4 问、技能 7 问、D8 规程)原文在 `.agent/` 与设计文档中定位不到。未复核的旧结论:R2 审计「证据死链 846/889、AGENTS.md 三处矛盾」(来自记忆,未经机械复现)。
目标:现行权威文档零死链(以链接校验为机械证据);过时陈述与旧链接文字清零;历史留痕豁免边界成文;被推翻或证实的旧结论同步更新记忆;审查标准缺失作为发现处置——找到原文回填,或本计划附录口径转正。
### D5 提示词与技能质量
现状:`.agent/角色` 提示词与 59 个技能从未按结构化标准复查;审查标准原文缺失(见 D4)。
目标:提示词按附录 A 四问、技能按附录 B 七问逐个过;与《角色合同》的模型策略、工具权限一致性抽查;不合格项入台账。
### D6 凭据与安全
现状:《凭据与外部调用》纪律成文,但从未全仓扫描硬编码凭据、SQL 拼接、危险路径操作。
目标:机械扫描加精读确认,凭据类问题一律 P0;CI workflows 的 secrets 用法核对。
### D7 代码-文档一致性
现状:Makefile 自称「每个声明命令都必须真实可执行」未逐条验证;接口契约生成物与后端路由、web 类型的同步状态未知;AGENTS.md SoT 表与物理结构的一致性从未系统校验。
目标:Makefile 与 pyproject scripts 每条可执行;openapi 生成物与路由一致;权威文档声明抽查对照代码(每个领域至少 1 项)。
### D8 依赖健康
现状:pyproject 9 个运行依赖、4 个开发依赖与 web/package.json 依赖的使用情况未清点。
目标:未使用与可收敛依赖清单入台账;升级建议只记录不动手。
## 4. 模块差异化要求
| 模块(规模) | 方向 | 深度 | 模块特有要求 |
|---|---|---|---|
| `src/muse` 17 个业务子包(295 .py) | D1 D2 D3 D6 D7 | 全量精读,按子包分 8 个子代理任务 | 命名与术语符合 `.agent/规范`;吞错、无证据抽象是重点;子包职责与领域 SoT 相符 |
| `src/muse/资源` | D3 | 仅一致性 | 工作台与资源包是产物不读;迁移投影与 `数据库/迁移` 逐字节 diff;`make 资源核对` 跑一次 |
| `tests`(157) | D1 D2 | 架构 5、契约 19、迁移 10、端到端 3、真实调用 1 全读;单元抽 10、集成抽 15 | 断言真实性;复制用例;隔离标记纪律([《测试隔离》](../../.agent/rules/测试隔离.md));用例清单登记一致 |
| `web/src`(114)与 `web/tests`(53) | D1 D2 D6 | 门禁全量加精读抽样 20~30 | 界面文案泔水;`dangerouslySetInnerHTML` 等 XSS 面;生成类型与契约同步状态 |
| `数据库/迁移`(45 SQL) | D3 D6 | 全量机械加基线与最新 3 个精读 | 编号空洞核对成因;幂等性;与投影 diff |
| `数据库/旧库迁移`(21 .py 加旧结构) | D1 | 机械门禁加 3 个关键文件精读(映射台账、切换检查、入口) | 有意 legacy 域:豁免泔水与风格要求 |
| `工具`(7 文件) | D1 D6 D7 | 全读 | 与 Makefile、资源登记一致;路径操作安全 |
| `.agent`(角色、技能、规则、约束、规范、作者) | D2 D4 D5 | 全量精读 | 附录 A/B 问句;与角色合同一致;目录索引与物理结构一致 |
| `docs` 权威区(系统架构/新版设计、接口契约、运行手册、功能规格、各级目录) | D2 D4 D7 | 全量精读加链接校验机械全量 | 每个领域至少 1 项声明对照代码 |
| `docs/实现回顾` 既有留痕 | D4 | 仅机械统计 | 死链只计数不修;表述不复查 |
| 根文件与 `.github/workflows` | D4 D6 D7 D8 | 全读 | AGENTS.md 已知过期点逐条处置;Makefile 命令逐条执行验证;workflows 与本地门禁一致 |
后端分派分组(每任务一个报告):接入(48);基础设施+共享(36);审校修订+效果评测(48);任务运行+编排(35);交付连载+上下文(33);资料研究+作者经验(26);正文写作+作品规划(25);知识方法+正式变更+故事世界+元数据(44)。
## 5. 严重度与处置
- **P0 红线与风险**:凭据泄漏、误导性权威声明、门禁红——立即报主代理,处置需授权。
- **P1 事实错误**:悬空引用、死代码、一致性断裂、标准缺失——本批修复候选。
- **P2 熵增**:泔水、空目录、重复、依赖冗余——择机修。
- **P3 记录不改**:历史留痕、有意保留项——台账注明理由。
台账每条二值收口:已修(经授权)或保留理由明确。
## 6. 报告与台账
- **报告**:`docs/实现回顾/专项检查-报告-<模块>.md`,四节——结论(分级计数加一句话)、问题清单(编号|位置 file:line|方向|严重度|现状摘录|建议|所需授权)、豁免与边界(查了什么、没查什么、为何)、证据指针(命令加退出码或校验结果)。
- **台账**:`docs/实现回顾/专项检查-台账.md`,主代理合并去重,按 P0 至 P3 排序;后续修复动作以台账为唯一输入另立计划。
## 附录 A:提示词四问(替代口径,原文缺失)
1. 职责边界:做什么、不做什么、输入来源是否成文?
2. 判定可执行:完成标准可机械判定,还是依赖模型自觉?
3. 合同一致:与《角色合同》的模型策略、工具权限一致吗?
4. 失败路径:越界或失败时的行为是否写明?
## 附录 B:技能七问(替代口径,原文缺失)
1. 触发命中:目录描述能让派发者命中该技能吗?
2. 边界成文:输入输出、做与不做是否明确?
3. 可复现:步骤确定可重复,该用脚本处是否用脚本?
4. 责任方:与角色槽位分工无重叠吗?
5. 证据留痕:执行后留什么、在哪查?
6. 失败恢复:中断后如何续跑?
7. 复利接入:接入 lesson 与范式卡升格链了吗?
## 边界与完成口径
- 本计划只检查、出报告与台账;修复另立计划;`git add`、`git commit` 一律需明确授权。
- 不动数据库与创作内容;不跑真实模型测试与备份恢复演练;数据库测试本轮不跑(CI 记录为证)。
- 完成 = 各方向目标达成且台账收口,机械证据齐(门禁退出码、链接校验结果、diff 结果),不以「看过了」作数。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "59 个技能的中文身份、作者自然语言入口、角色探针边界与数据库登记迁移结果", "使用场景": "后续修改技能身份、作者场景、角色模型、残留门或数据库登记时", "使用要求": "先核对作者旅程、固定 Opus 合同与探针状态,再修改现行合同"} -->
# 技能身份中文化迁移实现回顾
## 1. 交付结果

View File

@ -1,4 +1,7 @@
<!-- 导航元信息: {"内容描述": "功能落地对照、R2 历史留痕及验证边界", "使用场景": "后续改同一功能、交接、对照设计时", "使用要求": "功能合并后留回顾"} -->
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 技能身份中文化迁移实现回顾 | 技能身份中文化迁移实现回顾.md | 59 个技能的中文身份、作者自然语言入口、角色探针边界与数据库登记迁移结果 | 后续修改技能身份、作者场景、角色模型、残留门或数据库登记时 | 先核对作者旅程、固定 Opus 合同与探针状态,再修改现行合同 |
| 全仓专项检查计划 | [专项检查-计划.md](专项检查-计划.md) | | | |
| 全仓专项检查台账 | [专项检查-台账.md](专项检查-台账.md) | | | |
| 技能身份中文化迁移实现回顾 | [技能身份中文化迁移实现回顾.md](技能身份中文化迁移实现回顾.md) | 59 个技能的中文身份、作者自然语言入口、角色探针边界与数据库登记迁移结果 | 后续修改技能身份、作者场景、角色模型、残留门或数据库登记时 | 先核对作者旅程、固定 Opus 合同与探针状态,再修改现行合同 |
| R2 改造历史留痕 | [R2改造历史留痕.md](R2改造历史留痕.md) | 固定版本与验证边界 | 追溯 R2 时 | 不追认全部通过,不替代稳定合同 |

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "从已实现公开接口生成的合同", "使用场景": "联调与发布", "使用要求": "动态字段合同由 S04 提供"} -->
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| OpenAPI | [openapi.generated.json](openapi.generated.json) | 当前 HTTP 稳定外壳 | 客户端生成和接口核对 | 由工具/生成接口.py 生成,不手改 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "对外/对内接口契约", "使用场景": "改接口、联调、生成客户端时", "使用要求": "契约变化时"} -->
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 生成合同 | [生成/目录.md](生成/目录.md) | 从已实现公开接口生成的合同 | 联调与发布 | 动态字段合同由 S04 提供 |
| 生成 | [目录.md](生成/目录.md) | 从已实现公开接口生成的合同 | 联调与发布 | 动态字段合同由 S04 提供 |

View File

@ -1,21 +1,23 @@
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 系统架构 | [系统架构/目录.md](系统架构/目录.md) | 系统怎么切、依赖朝哪、为什么这样切;ADR 在 `决策/` | 跨模块、改边界、选技术底座、写 ADR 时 | 架构或架构决策变化时 |
| 领域模型 | 暂无 | 业务概念、词什么意思、概念边界;术语全文在 `术语表.md` | 改业务行为、起名、对术语有分歧时 | 新术语或概念边界确认时 |
| 数据模型 | 暂无 | 数据长什么样、存在哪、怎么一致 | 改存储、迁移、字段、一致性时 | schema / 数据生命周期变化时 |
| 模块设计 | 暂无 | 代码按什么模块分、职责与依赖 | 动模块边界、新代码往哪放拿不准时 | 模块职责或依赖变化时 |
| 功能规格 | 功能规格/目录.md | 功能方案、阶段0提示词探索的设计边界、验收标准与实施计划(spec) | 实现或评审某功能前 | 功能范围、方案或实施步骤确认时 |
| 接口契约 | [接口契约/目录.md](接口契约/目录.md) | 对外/对内接口契约 | 改接口、联调、生成客户端时 | 契约变化时 |
| 业务需求 | 暂无 | 要解决谁的什么问题、不做哪些 | 功能还没方案、对齐目标和范围时 | 需求确认或变更时 |
| 调用链路 | 暂无 | 一条真实路径经过哪些代码 | 改这条链路、排障、清理相关代码时 | 关键路径稳定或被改写后 |
| 系统架构目录 | [目录.md](系统架构/目录.md) | 系统怎么切、依赖朝哪、为什么这样切;ADR 在 `决策/` | 跨模块、改边界、选技术底座、写 ADR 时 | 架构或架构决策变化时 |
| 功能规格 | [目录.md](功能规格/目录.md) | 功能方案、阶段0提示词探索的设计边界、验收标准与实施计划(spec) | 实现或评审某功能前 | 功能范围、方案或实施步骤确认时 |
| 接口契约 | [目录.md](接口契约/目录.md) | 对外/对内接口契约 | 改接口、联调、生成客户端时 | 契约变化时 |
| 模块概要 | 暂无 | 某模块一页纸:干什么、入口在哪 | 第一次接触某模块、给别人指路时 | 模块对外形状变了 |
| 实现回顾 | [实现回顾/目录.md](实现回顾/目录.md) | 功能落地对照、R2 历史留痕及验证边界 | 后续改同一功能、交接、对照设计时 | 功能合并后留回顾 |
| 实现回顾 | [目录.md](实现回顾/目录.md) | 功能落地对照、R2 历史留痕及验证边界 | 后续改同一功能、交接、对照设计时 | 功能合并后留回顾 |
| 缺陷回顾 | 暂无 | bug 根因、修法、如何防再发 | 同类故障、改相关代码前 | 非平凡 bug 修完留根因时 |
| 2026-09-01 创作链路合同校准提交前四维审查报告 | 2026-09-01-创作链路合同校准提交前四维审查报告.md | 本次提交前对创作链 SoT/Skill/实现校准差异的四维审查结论与验证证据 | 提交前确认本轮变更是否可交付时 | 只对应本次合同校准提交,不替代长期 SoT |
| acceptance | acceptance/ | | | |
| design | design/ | | | |
| plans | plans/ | | | |
| research | research/ | | | |
| write-chapter | write-chapter/ | | | |
| 2026-09-01 创作链路合同校准提交前四维审查报告 | [2026-09-01-创作链路合同校准提交前四维审查报告.md](2026-09-01-创作链路合同校准提交前四维审查报告.md) | 本次提交前对创作链 SoT/Skill/实现校准差异的四维审查结论与验证证据 | 提交前确认本轮变更是否可交付时 | 只对应本次合同校准提交,不替代长期 SoT |
| acceptance | [acceptance/](acceptance/) | 旧实现阶段的验收记录 | 追溯原任务的输入、决定与证据时 | 仅代表记录时点;当前行为须查现行设计与实现 |
| design | [design/](design/) | 旧实现阶段的设计记录 | 追溯原任务的输入、决定与证据时 | 仅代表记录时点;当前行为须查现行设计与实现 |
| plans | [plans/](plans/) | 旧实现阶段的计划记录 | 追溯原任务的输入、决定与证据时 | 仅代表记录时点;当前行为须查现行设计与实现 |
| research | [research/](research/) | 旧实现阶段的研究快照 | 追溯原任务的输入、决定与证据时 | 仅代表记录时点;当前行为须查现行设计与实现 |
| 运行手册 | [运行手册.md](运行手册.md) | 系统组成、启动停止、备份恢复、资源更新与排障入口 | 日常启动/停止、备份恢复、更新资源、排障时 | 运行形态或运维入口变化时 |
<!-- my-skills-cli:index:v2 -->
| 参考书作品面数据入库方案 | [2026-07-14-参考书作品面数据入库方案.md](2026-07-14-参考书作品面数据入库方案.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| 升格卡改造设计(P0 补骨架记里程碑 · P1 串链语义判重) | [2026-07-16-升格卡改造设计.md](2026-07-16-升格卡改造设计.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| 落库与看板设计 v2(八张待落库表 + 只读看板) | [2026-07-30-落库与看板设计.md](2026-07-30-落库与看板设计.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| 评测 harness 改造设计(概念层) | [2026-08-01-评测harness改造设计.md](2026-08-01-评测harness改造设计.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| craft 蒸馏操作留痕(2026-08-19) | [2026-08-19-craft-distillation-trace.md](2026-08-19-craft-distillation-trace.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| Skill 质量审查与复利改造清单(2026-08-20) | [2026-08-20-skill-质量审查与复利改造清单.md](2026-08-20-skill-质量审查与复利改造清单.md) | 历史审查报告 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| 质量收敛环运行手册(实验性) | [2026-08-20-质量收敛环运行手册.md](2026-08-20-质量收敛环运行手册.md) | 历史设计与研究记录 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |
| 2026-08-30 提交前四维形而上审查报告 | [2026-08-30-提交前四维审查报告.md](2026-08-30-提交前四维审查报告.md) | 历史审查报告 | 追溯原阶段任务时 | 保留原时点,不作为当前能力或运行入口 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "要解决谁的什么问题、不做哪些\n业务需求的文件与材料索引", "使用场景": "功能还没方案、对齐目标和范围时\n设计、实现或评审对应主题", "使用要求": "需求确认或变更时\n与阅读指南的主题权威分工一致"} -->
# 业务需求目录
本目录文件按主题维护定义,索引只负责导航。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "目标系统完整功能清单", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 目标系统完整功能清单
版本:2026-09-08。状态:**目标目录草案,供确认范围;不表示当前实现状态,也不是首轮开发承诺。**

View File

@ -0,0 +1,39 @@
<!-- 导航元信息: {"内容描述": "已裁定范围与跨包接口、归属、验证及退出条件", "使用场景": "实施全仓优化时", "使用要求": "设计裁决不代表实现已验收"} -->
# 优化执行合同
2026-09-17 用户裁决后开始实施。本文固定跨包合同和范围,不代表功能已通过验收;各能力的当前行为仍由所属模块说明、源码与测试证明。O00~O13按各自完整结果交付,O14验证跨包接缝;未通过独立四维审查的L3批次不登记完成。
## 已裁定范围
- 独立两名初评及第三仲裁保留。用户候选为 `glm5.3flash`、`minimaxm3`、`qwen3.8flash`,精确API身份与独立性尚待核验,不直接替换角色策略白名单。
- 方法按用途评价,目标收益与保护维度分开;既有样本底线保留,未经标定的目标政策保持draft。
- 在线升级既有结构对象单独立项,本期只处理在用版本、绑定与投影。
- 云OSS备份单列后续,本期只处理raw工作文件及发布缓存生命周期;不新建本地或内网备份策略,也不自动迁移或删除现存备份。
- 旧知识缺可靠作品、用途或授权映射时隔离;不伪造源表列,不把空输入核对称为成功迁移。
- 工程采用源派生索引、分层验证、共享迁移底座与隔离测试库、有界连接。实施不授予Git暂存提交、真实数据迁移、生产切换或外部模型调用权限。
## 跨包合同
这些合同由O00的集成维护者形成一份简短执行决定,后续源码和测试只消费这一决定,不各自建立平行规则。
|合同|明确选择|负责人/消费者|
|---|---|---|
|C1 调用事实与任务执行|调用可在任务取消后补费用/证据;结算入口不发模型请求、不改变任务终态。执行最终游标与账目accounting_revision分开,终态关闭执行SSE后费用可按回执/显式刷新读回。配置草案探针只获零工具、限额度的验证能力,复用正常调用治理核心|S02;配置管理、HTTP/CLI、恢复UI|
|C2 多种身份的职责|构建身份=安装完整性与追溯;效果依赖指纹=资格适用性;来源授权版本=未来读取权限;业务revision=内容变化。不能一个全局hash兼任全部失效条件|发布、B10、B03、S01共同签定,各自单一owner|
|C3 资源提供接缝|生产启动只接受实际包资源;隔离测试显式注入小包/源资源。测试身份不成为正式发布资格,缺生产资源不隐式fallback。提供器接口先冻结,O04和O06不互相等待实现|发布资源维护者;启动、测试与运行资源|
|C4 读取合同|摘要只含身份/状态/版本/必要大小;详情才取正文/diff。游标绑定稳定排序、过滤与作用域;当前授权逐阶段复核。整体结构/字节损坏blocked,单项不可消费明确partial/排除;常规方法写入经同事务派生参与者自动维护索引,不以全局catalog_revision变化阻塞无关搜索,不伪装完整结果|各数据owner;B09、B05/B08、Web|
|C5 测试与验收来源|Python case_id写在源marker/参数行;前端稳定ID写在既有test声明或明确元信息。当前位置从收集派生;人工语义逐字段保全,不自动编造then。旧ID与结果仍可查|测试身份唯一维护者;工具/CI|
|C6 数据回收|保留/过期/撤权/物理删除分开;回收计划绑定对象ID、版本、哈希、策略版本与受保护引用集合,执行前再核对;未知对象和未解决迁移状态不盲删|各资产owner,维护命令统一呈现|
|C7 接口与数据库演进|新读接口增量接入、同一发布内迁客户端;需要兼容旧标签页/待确认命令时提供有期限的明确桥。新DDL由唯一集成者编号;旧45条字节冻结;有新数据状态后不能承诺任意旧程序写兼容|集成维护者;接口生成、DB迁移、各域|
## 共享文件归属
工程发布维护者独占Makefile、CI、pyproject、资源登记与生成器、测试身份发现及顶层fixture;运行维护者独占启动与连接provider;前端维护者独占候选审阅与编辑缓冲;数据库集成者分配新DDL编号,原45个SQL字节冻结。各线在可核验相同基线的隔离工作树修改,总集成者三方承接差异。
## 证据与退出
开发期只验受影响行为;批次稳定后集中门禁和独立四维审查。离线替身、隔离PG、安装包、浏览器、真实模型及恢复证据分别记录,任何一种均不冒充另一种。整体验收必须覆盖调用取消补账、分支缓冲、撤权与有界读取、默认评测可满足性、无包开发测试、真实wheel及迁移隔离等完整结果。
新机制迁完消费者后清除被替代路径、无用途配置与测试;历史目标文件镜像冻结为追溯,不再要求随当前文件移动逐项同步。旧任务、凭据、草稿、授权和回执不静默重绑或重写。数据已产生后采用前向修复或只读维护,不用源码回退许诺任意旧程序写兼容。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0001-模块化单体", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0001-模块化单体
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0002-统一持久化", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0002-统一持久化
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0003-Skill与业务实现分离", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0003-Skill与业务实现分离
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0004-保留元数据驱动的内容结构", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0004-保留元数据驱动的内容结构
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0005-正文段落与版本合同", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0005-正文段落与版本合同
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0006-持久化流程与受控槽位", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0006-持久化流程与受控槽位
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "0007-评测与生产用途隔离", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 0007-评测与生产用途隔离
状态:新版目标设计。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "决策的文件与材料索引", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 决策目录
本目录文件按主题维护定义,索引只负责导航。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "功能覆盖矩阵", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 功能覆盖矩阵
功能定义只在[目标系统完整功能清单](业务需求/目标系统完整功能清单.md)维护。下表记录 129 项功能的牵头模块、目标入口、规格和测试去向,不代表相应代码已经实现。本表保留功能—规格—测试映射,测试身份以 [tests/用例清单.json](../../../tests/用例清单.json) 为准;映射或文件存在不能替代功能验证。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P01-作品创建与连续写作", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P01-作品创建与连续写作
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P02-选段修订与回退", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P02-选段修订与回退
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P03-资料研究与方法复用", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P03-资料研究与方法复用
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P04-声音诊断与受控修订", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P04-声音诊断与受控修订
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P05-章后处理与事实复核", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P05-章后处理与事实复核
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P06-经验验证与启用", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P06-经验验证与启用
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P07-定稿交付与恢复", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P07-定稿交付与恢复
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "P08-元数据扩展与结构升级", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# P08-元数据扩展与结构升级
## 问题

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "功能规格的文件与材料索引", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 功能规格目录
本目录文件按主题维护定义,索引只负责导航。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "作者工作台设计", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 作者工作台设计
工作台围绕作者任务组织,采用暖纸张阅读、章节树、正文编辑、资料与 AI 对话分栏。布局和受控控件可参考 StoryForge;页面容器按新版接口实现。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "新版 agent-example 总体架构", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 新版 agent-example 总体架构
系统服务单个作者、多部作品和不同小说题材。实现形态是一个 Python 业务包、一个 React 工作台,以及同包启动的 HTTP 与任务执行进程。PostgreSQL 保存服务端业务与运行状态;私人探索稿通过受控文件接口保存。

View File

@ -1,6 +1,7 @@
<!-- 导航元信息: {"内容描述": "现有 Skill 承接表", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 现有 Skill 承接表
以当前 skills.json 登记的 59 个技能为输入,逐项定义新版位置。方法与作者操作保留在 .agent/skills;内部保护、调用、派生和工程职责收进对应实现或工程入口。删除旧脚本必须先验证原行为与失败反例,不能仅按名称合并。
本表保留旧实现 59 项技能的迁移目标和原路径,仅作历史承接记录;不表示当前物理技能数量,旧 `skills.json` 不再是现行发现源。当前入口以[技能目录](../../../.agent/skills/目录.md)和各 `SKILL.md` 为准,发布能力集合由资源登记维护,二者用途不同。以下“新版位置/目标文件”指当时的迁移目标,可能与当前位置不同。方法与作者操作保留在 .agent/skills;内部保护、调用、派生和工程职责收进对应实现或工程入口。删除旧脚本必须先验证原行为与失败反例,不能仅按名称合并。
Skill 的参考资料也逐文件承接:现有方法目录中的 125 个参考文件分别进入目标路径,保留原来源映射并同步内部链接;不只迁移 SKILL.md。具体文件的职责与范围见[方法技能文件设计](文件设计/执行知识-方法技能.md)。引用中的稳定 Skill、类型与规则身份不因中文文件名调整而改变。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "任务、工具与事件", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 任务、工具与事件
## 任务冻结输入

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "元数据投影与版本", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 元数据投影与版本
新实例可由业务owner在作者创建事务中建立初始结构绑定,使用已发布的固定结构与表单投影;初次绑定不伪造审阅记录,也不能覆盖已有绑定。已有实例的结构升级仍按S01审阅、版本和影响处理合同执行。绑定创建与实例写入使用同一事务,任一校验失败共同回滚。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "原文证据生命周期", "使用场景": "设计、重写或迁移核对", "使用要求": "以本主题合同为准"} -->
# 原文、证据与归档生命周期
本文是 S02 原文授权、保留和恢复的目标合同。它承接旧 raw vault 的有效保护,并将持久状态收进 PostgreSQL;临时文件的物理布局不成为新版必须复刻的接口。
@ -67,7 +68,7 @@ S02只允许由固定初始输入、本会话已经核对的模型输出及具
同一应用实例、同一用途的HTTP与worker使用同一个共享暂存根。迁移根须停下相关消费并整体迁移标记与对象;不能把一个根的清理完成当作任意额外物理副本也已删除。
无租约清理先枚举本根候选,再在新事务中查询已登记租约。利用“先提交租约再创建字节”的顺序,候选在被查询时已能看到对应登记,不会把刚生成对象当作孤儿。所有已登记对象(包括migrating)都保留。未知资料不删除。确定无租约后先在PG保存清理意图,再删除文件并确认回执;确认失败时恢复同一意图,实际已不存在就如实记录,不补造删除动作。
无租约清理先枚举本根候选,再在新事务中查询已登记租约。利用“先提交租约再创建字节”的顺序,候选在被查询时已能看到对应登记,不会把刚生成对象当作孤儿。所有已登记对象(包括migrating)都保留。未知资料不删除。无租约既不证明授权也不证明可删:旧「清理无租约暂存」入口只盘点,把无租约对象列为 `needs_recovery` 交人工核对,不写清理意图、不删除文件,也不伪造清理回执。物理清理只走具名到期回收两段式:先按租约元数据与命名空间发现候选(`as_of`/游标/上限,调度默认关闭),再由作者对具名计划执行;执行段复用租约状态机与 `cleanup_receipt`,覆盖有效open、migrating、已migrated 与未知对象各自的保留理由,重试沿用同一回执,实际已不存在就如实记录,不补造删除动作。
旧状态 open、closed、migrating、migrated 与原授权、截止时间、内容哈希、归档回执原样进入迁移清单。旧 migrate 的同文件系统 rename 改为完整 PG 事务归档;保留的是“原文不丢、回执可信、恢复不误删”,不再要求重写相同 rename 调用。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "命令与作者决策", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 命令与作者决策
本文定义目标业务协议,路径与字段是实施合同,不表示当前服务器已提供这些接口。HTTP、CLI 和主会话进入同一应用用例;公开请求按运行时类型校验。JSON Schema、OpenAPI 与 TypeScript 从同一合同生成并检查差异。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "正文结构与中文选区", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 正文结构与中文选区
## 正式结构

View File

@ -1,11 +1,12 @@
<!-- 导航元信息: {"内容描述": "接口契约的文件与材料索引", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 接口契约目录
本目录文件按主题维护定义,索引只负责导航。
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 任务工具与事件 | [任务工具与事件.md](任务工具与事件.md) | 任务、工具与事件 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 任务、工具与事件 | [任务工具与事件.md](任务工具与事件.md) | 任务、工具与事件 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 元数据投影与版本 | [元数据投影与版本.md](元数据投影与版本.md) | 元数据投影与版本 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 命令与作者决策 | [命令与作者决策.md](命令与作者决策.md) | 命令与作者决策 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 正文结构与中文选区 | [正文结构与中文选区.md](正文结构与中文选区.md) | 正文结构与中文选区 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 原文证据生命周期 | [原文证据生命周期.md](原文证据生命周期.md) | 原文证据生命周期 | 设计、重写或迁移核对 | 以本主题合同为准 |
| 原文、证据与归档生命周期 | [原文证据生命周期.md](原文证据生命周期.md) | 原文证据生命周期 | 设计、重写或迁移核对 | 以本主题合同为准 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "元数据与结构演进", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 元数据与结构演进
元数据是新版的共用能力。类型和内容字段是开放集;身份、归属、状态、授权、正式写入和已登记业务行为受代码合同保护。该选择的背景与取舍见[决策 0004](../决策/0004-保留元数据驱动的内容结构.md)。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "内置类型与原字段承接", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 内置类型与原字段承接
原设计列出 23 个基础类型,当前代码树另有 fine_outline 章级细纲合同,共 24 份 YAML、216 条逐型字段定义。此计数来自本次文件读取,不代表数据库已装入或这些字段已在新版实现。原定义全文保存在[原结构快照](../研究依据/原结构快照/目录.md)。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "存储与对象关系", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 存储与对象关系
## 存储职责

View File

@ -1,10 +1,11 @@
<!-- 导航元信息: {"内容描述": "旧知识记录分流", "使用场景": "设计、重写或迁移核对", "使用要求": "以本主题合同为准"} -->
# 旧知识记录分流
本文定义混合知识记录的迁移规则。输入是隔离快照中的旧表、结构版本、作品用途映射和确认依据;不查询或改写正式库。迁移不使用模型推断归属,也不以 work_id=0 或 draft_type=entity 单独确定业务含义。
## 先固定源身份
每条输入保留来源数据库、表、主键、revision、完整 payload、源哈希、删除状态、来源状态、授权策略及确认引用。映射键包含来源命名空间,PG 与 SQLite 中同号记录不能合并。
每条输入保留来源数据库、表、主键、revision、完整 payload 与源哈希;删除状态、来源状态、授权策略及确认引用只保留源中实际存在的列。不得为满足转换条件向原行补写旧DDL不存在的列。映射键包含来源命名空间,PG 与 SQLite 中同号记录不能合并。
先建立显式 legacy_work_map:作者作品映射 B01 work,参考作品映射 B03 source;同一本书同时具有两种用途时分别登记两个对象和关联。example_reference_work 等档案是用途证据,歧义需要列入差异清单;不按书名、作品号大小或当前脚本入口猜测。work_id=0 是旧公共范围哨兵,目标中使用作者方法库作用域,不创建“作品 0”。
@ -89,7 +90,11 @@ character/character_relation没有brief或description目标字段,归一描述
| K05 | draft_type=relation,端点为 source/target 或甲方/乙方,关系类型为 type/关系类型 | 同样进入 B02 或 B03 的关系对象;先解析端点再写关系,不能与 K04 因行类型不同而重复建立同一来源对象 |
| K06 | 已确认 muse_knowledge_entity / relation 及对应草稿的 entity_id / target_object_id | 根据用途进入 B02 正式对象、B03 已确认分析或 B04 方法版本;草稿保留确认历史并指向同一个目标对象,不能再次复制为新候选 |
| K07 | character 公共写法、style/pacing 或其他可复用模具 | 只有明确方法用途及证据才进入 B04;本书 style 属 B06 声音,pacing 规划属 B01。类型名本身不足以判定用途 |
| K08 | SQLite cards、向量镜像和 snapshots | 内容按已确认来源映射到相应对象;仅含 embedding 指针的行只承接 B09 来源与索引身份,不造空知识卡、不提升正式状态 |
| K08 | 具备明确作用域与端点的向量记录;SQLite cards、snapshots另核原列条件 | PG向量记录只承接 B09 来源与索引身份,不造知识卡、不提升正式状态。普通cards缺当前授权,snapshots缺作品身份,现行默认隔离;不能以旧确认引用代替缺失的身份与用途授权 |
SQLite `cards` 的实际列为 `id/kind/title/payload_json/embedding/work_id/source_path/content_hash/created_at`;`snapshots` 只有 `id/kind/payload_json/created_at`。正常payload的snapshots报 `unknown_use`,即使payload内带作品提示也不据此补work_id;已知作品用途的普通cards仍报 `permission_conflict`。坏payload先报 `payload_invalid`。以PG身份伪称cards/snapshots报 `unknown_table`,向镜像快照注入授权等非原列报 `unknown_fields`,原行与源哈希仍保留。
以后承接镜像内容须先获准独立作品、用途及授权映射合同,映射绑定 `source_key/source_hash`,另有映射版本与哈希;原快照始终不补授权字段。当前尚未提供该映射入口,增加确认引用不会自动解除隔离。向量身份用例不代表普通内容镜像迁移成功。
其他已登记类型按[内置类型承接表](内置类型承接表.md)及明确实例用途扩展规则。没有对应生命周期的旧值先隔离,不以“元数据可扩展”为由创建无行为归属的新实体。
@ -309,7 +314,7 @@ T4复用V0025通用表,无需新增DDL;若发现确需结构改变,必须
每条旧输入都必须有“已映射到一个或多个明确关联目标 / 保留历史 / 隔离待裁决”之一;多目标只允许拆分已明确定义的对象与来源关系。不得出现输入无归宿、两个正式 owner、静默丢弃字段或自动补批准。重复导入按 source_key、revision 与源哈希幂等;相同记录身份不同内容报告漂移。同一旧对象跨版本出现不同目标、业务 owner 或目标作用域时,整批该对象的记录进入 `identity_conflict` 隔离,并在 `conflicts` 保留冲突目标;不等到导入顺序抢占后再发现。相同目标的多个版本不因此隔离。
知识记录分流.py 负责纯判定及别名冲突;转换业务对象.py 调用各所属模块的迁移入口;建立映射.py 保存旧新身份;核对结果.py 对账状态、来源、动态字段和引用。代码职责见目标文件清单;测试身份以[现行用例清单](../../../../tests/用例清单.json)登记,登记不表示通过。
知识记录分流.py 负责纯判定及别名冲突;转换业务对象.py 调用各所属模块的迁移入口;建立映射.py 保存旧新身份;核对结果.py 对账状态、来源、动态字段和引用。PG承接由 `PG作品映射.py` 固定清单与原生父子身份,`转换PG作品.py`、`转换PG正文.py` 负责转换,`PG台账接线.py` 对接同一迁移台账;不绕过B01/B03/B05 owner。历史目标文件清单与逐文件设计冻结为当时目标,不再逐项手工同步当前工具;现行导航以实际源码与派生目录为准。测试身份以[现行用例清单](../../../../tests/用例清单.json)登记,登记不表示通过。
验收至少包括 K01 中文公共范式、K02 英文作品卡、K03 同模具参考实体、K04 entity 形状的关系、K05 关系两端缺失、K06 已确认重复导入、双键冲突、work_id=0 非范式、跨书归并实例、软删不复活、未知字段隔离和 PG/SQLite 同号不同来源。纯转换和隔离 PG 导入分别验证,不能只检查导入行数。
@ -344,3 +349,61 @@ reference不进入B01。复用B03公开来源导入保存按清单拼接的原
分片继续判定取导入报告`fragment_wait`,不能仅依据CLI退出2或台账state=reserved。`can_continue=true`只在全部受影响reserved均未冻结请求、按固定清单实缺原源、已到源哈希吻合,且受影响集合无quarantined或缺台账时成立;此时`reason_code=pg_dependency_missing`、`classified_pending_count=pending_record_count>0`、`missing_source_count>0`。`affected_states`覆盖本轮处理的既有依赖与输入;其他情况code=not_fragment_wait、can_continue=false。台账reserved的reason_code不改成终态原因,报告是基于本轮已提供及库内已有原源的机械诊断。异常中断、已冻结但未完成、哈希漂移或任何隔离都不允许按分片等待继续。报告只含计数,不嵌入正文、冻结请求或重复展开整书成员。
B03导入请求只要求非空content,没有字符串长度上限;V0007来源版本content为text,V0025迁移根frozen_request为jsonb,均未另设16MiB长度约束。16MiB限制仍只施加于CLI所读的每个快照/映射文件;总映射只含身份/哈希,需事先验证自身不超限。聚合的B03请求、根冻结和重放都在应用进程及PG台账内流转,不要求写成CLI输入文件。根包含原文与结构对照,进程内存和驱动序列化可能为文本大小的多倍;此实现不是流式大文件导入,真实DB写入、读取和内存峰值须按目标规模另行验收,不由字段无业务长度限制推断无限容量。不得截断原文或自动提高CLI上限。
## 非空范围与现行承接边界
`导入目标`、`核对目标`及对应服务在创建目标连接前检查非空快照与完整来源身份。`切换检查`同时检查基线和当前两份范围;双空、单空均以 `snapshot_empty` 拒绝,无身份记录拒绝为 `snapshot_invalid`,CLI退出1且不生成成功报告。入口先检查两份快照,再读映射、配置并装配应用。记录的来源身份和哈希证明的范围仅为本次明确输入集合,不证明源库所有表已经扫描;合法空源须另有表覆盖与扫描凭据合同,现行不接受空数组作为该凭据。
切换检查仅组合源新增、删除、变更与目标逐项对账,没有执行生产切换、生产回退或判定回退可行性的入口。`production_switch_authorized` 与 `package_acceptance_claimed` 始终为false;没有增量和本次数据对账通过不授予上线权限。
冻结旧DDL登记66个表名,分流器 `已登记表` 明确处理26个:其中包括历史保留、延期隔离、需要映射与身份授权的分支,26不等于26张表均能成功导入。差集40张在分流前统一 `unknown_table` 隔离;旧status=deleted或伪造其他生命周期信息也不能让未承接表转为成功。以下逐表登记当前差集,不为补齐计数增加空转换。
| 冻结旧表 | 当前处置 |
| --- | --- |
| `example_agent_event` | `unknown_table` 隔离 |
| `example_agent_role` | `unknown_table` 隔离 |
| `example_ai_flavor_revalidation` | `unknown_table` 隔离 |
| `example_ai_flavor_revalidation_batch` | `unknown_table` 隔离 |
| `example_clean_log` | `unknown_table` 隔离 |
| `example_context_freeze` | `unknown_table` 隔离 |
| `example_fact_delta` | `unknown_table` 隔离 |
| `example_fact_ledger` | `unknown_table` 隔离 |
| `example_llm_quota` | `unknown_table` 隔离 |
| `example_parse_outline` | `unknown_table` 隔离 |
| `example_parse_scaffold` | `unknown_table` 隔离 |
| `example_parse_task` | `unknown_table` 隔离 |
| `example_planning_section` | `unknown_table` 隔离 |
| `example_projection_run` | `unknown_table` 隔离 |
| `example_raw_content` | `unknown_table` 隔离 |
| `example_raw_lease` | `unknown_table` 隔离 |
| `example_reference_authorization_snapshot` | `unknown_table` 隔离 |
| `example_reference_work` | `unknown_table` 隔离 |
| `example_skill` | `unknown_table` 隔离 |
| `example_upgrade_alias` | `unknown_table` 隔离 |
| `example_upgrade_audit` | `unknown_table` 隔离 |
| `example_upgrade_card_state` | `unknown_table` 隔离 |
| `example_upgrade_presence` | `unknown_table` 隔离 |
| `example_upgrade_window` | `unknown_table` 隔离 |
| `example_voice_baseline` | `unknown_table` 隔离 |
| `muse_content_block_source_attribution` | `unknown_table` 隔离 |
| `muse_content_command_log` | `unknown_table` 隔离 |
| `muse_content_export_task` | `unknown_table` 隔离 |
| `muse_content_import_task` | `unknown_table` 隔离 |
| `muse_knowledge_base` | `unknown_table` 隔离 |
| `muse_knowledge_binding` | `unknown_table` 隔离 |
| `muse_knowledge_document` | `unknown_table` 隔离 |
| `muse_knowledge_document_version` | `unknown_table` 隔离 |
| `muse_meta_field` | `unknown_table` 隔离 |
| `muse_meta_function_chain` | `unknown_table` 隔离 |
| `muse_meta_protection_node` | `unknown_table` 隔离 |
| `muse_meta_schema` | `unknown_table` 隔离 |
| `muse_meta_schema_version` | `unknown_table` 隔离 |
| `muse_meta_visibility_policy` | `unknown_table` 隔离 |
| `schema_migrations` | `unknown_table` 隔离 |
## 历史迁移编号与执行合同
2026-09-17优化实施基线含45个SQL,最高V0055;缺号为V0008、V0010、V0011、V0012、V0013、V0014、V0015、V0017、V0018、V0019。历史文件设计曾列出 `V0013__上下文与检索索引.sql` 与 `V0015__运行配置版本.sql`,但两者不存在于基线,不能把目标列举视为已经落地。各空号的历史取舍原因尚无可核依据,保留待核,不补空SQL、不重编号、不推断丢失迁移。
迁移执行器 `src/muse/基础设施/数据库/迁移.py` 以实际资源文件、唯一版本号、内容校验和及 `muse_migration` 账本为准;不要求编号连续。必须经维护入口获取会话锁,并将每版SQL与登记放入同一事务,失败回滚;不直接逐文件裸跑。已有45条SQL及冻结旧DDL连注释也不回改,后续扩展只新增前向迁移。原SQL的DROP约束、权限授予与初始枚举按历史字节保留;后续枚举/空值等变化由后续迁移解释,发现真实权限或兼容失败另立新迁移,不通过重写历史“修整”校验和。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "状态与来源有效性", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 状态与来源有效性
## 分开的状态轴

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "数据长什么样、存在哪、怎么一致\n数据模型的文件与材料索引", "使用场景": "改存储、迁移、字段、一致性时\n设计、实现或评审对应主题", "使用要求": "schema / 数据生命周期变化时\n与阅读指南的主题权威分工一致"} -->
# 数据模型目录
本目录文件按主题维护定义,索引只负责导航。
@ -5,7 +6,7 @@
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 元数据与结构演进 | [元数据与结构演进.md](元数据与结构演进.md) | 元数据与结构演进 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 内置类型承接表 | [内置类型承接表.md](内置类型承接表.md) | 内置类型与原字段承接 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 内置类型与原字段承接 | [内置类型承接表.md](内置类型承接表.md) | 内置类型与原字段承接 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 存储与对象关系 | [存储与对象关系.md](存储与对象关系.md) | 存储与对象关系 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 状态与来源有效性 | [状态与来源有效性.md](状态与来源有效性.md) | 状态与来源有效性 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 旧知识记录分流 | [旧知识记录分流.md](旧知识记录分流.md) | 旧知识记录分流 | 设计、重写或迁移核对 | 以本主题合同为准 |

View File

@ -167,7 +167,7 @@ agent-example/
### `src/muse/作品规划/提示词/细化章节计划.md`
- 归属与种类:B01;源码。
- 意图:为作品规划的“细化章节计划”任务提供可版本化表达。
- 意图:为作品规划的“章级细纲”任务提供可版本化表达;沿用文件名 `细化章节计划.md`,发布资源身份为 `规划/细化章节计划.md`。
- 职责:章级细纲任务模板。
- 边界:仅定义本任务提示;角色身份、字段结构、权限和预算从各自权威装配。
- 目标:模板可随发布包加载且记录哈希,不含固定作品内容或测试答案。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "各部分文件树与每个目标的意图、职责、边界、目标", "使用场景": "确定文件去向和实施边界", "使用要求": "清单是目标合同,退出须满足实际验收"} -->
# 文件设计目录
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B01 作品规划", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B01 作品规划
## 职责与对象
@ -33,12 +34,12 @@
| 探索草稿.py | 受控私人稿件身份、原子保存和内容哈希 |
| 探索交接.py | 最终格式检查与正式规划候选 |
| 分层规划.py | 全书、卷、章、场景和节奏安排 |
| 近期细化.py | 近期章节计划与可写条件 |
| 近期细化.py | 章级细纲与可写条件 |
| 目录调整.py | 稳定章节身份、重排、节点视图与影响 |
| 规划版本.py | 规划候选、确认、分支及合并 |
| 进度查询.py | 正文、任务和决策的真实进度查询 |
| 提示词/生成作品规划.md | 书级规划任务模板 |
| 提示词/细化章节计划.md | 章级细纲任务模板 |
| 提示词/细化章节计划.md | 章级细纲任务模板;兼容文件名及资源名 `规划/细化章节计划.md` |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B01-作品规划.md)。
@ -80,3 +81,7 @@
- 细纲源变化后不能直接复用。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
## 节奏能力边界
当前节奏标注、题材档位和节奏分布是离线纯函数,已有单元用例;尚未接入CLI/HTTP或编排用户旅程。保留公开函数及模型,空场景明确报RHYTHM_INVALID,不把零消费者当作删库或开放新流程的依据。开放节奏旅程须先确定消费者、输入语义、兼容和验收,再独立实施。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B02 故事世界", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B02 故事世界
## 职责与对象

View File

@ -1,10 +1,11 @@
<!-- 导航元信息: {"内容描述": "B03 资料研究", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B03 资料研究
## 案例证据与参考作品归属
参考来源可在导入时登记稳定的reference_work_ref,保存于不可变版本导入元信息。它是作者对来源作品的明确归属声明;同一来源已登记后不能改成另一作品,同内容重放不能改元信息,新版本默认承接既有归属。没有归属的旧资料保持未知,不凭文件数或片段数认定跨书。
读取案例证据由B03核对版本导入者、analysis或sample用途、完整内容哈希及码点范围;只有当前具备sample用途才返回原文片段,否则只返回实际定位、哈希及未知/已登记作品归属。B06不直读B03私表,也不凭请求中的许可标记扩权。同来源导入在调用方事务内串行核对身份与元信息,拒绝前不更新授权,合并用途不会因竞争丢失。
读取案例证据由B03核对版本导入者、analysis或sample用途、完整内容哈希及码点范围;只有当前具备sample用途才返回原文片段,否则只返回实际定位、哈希及未知/已登记作品归属。B06不直读B03私表,也不凭请求中的许可标记扩权。同来源导入在调用方事务内串行核对身份与元信息,拒绝前不更新授权;已有来源重导入的用途集合须与当前一致,不允许隐式增减。
## 职责与对象
@ -41,14 +42,13 @@
| 分章切窗.py | 分章、窗口划分及输入漂移 |
| 榜单快照.py | 来源、时间、质量、排名及观察差异 |
| 样本选题.py | 样本比较、选题依据及选书交接 |
| 拆书分析.py | 章节、阶段、实体与写法分析 |
| 拆书分析.py | 当前逐窗分析的内联系统提示、输出合同与执行;提取章节、阶段、实体及写法 |
| 实体归并.py | 参考作品内专名、别名及歧义 |
| 分析版本.py | 完整模型成果登记、旧检查点承接及运行摘要 |
| 分析保存.py | 分析不可变存储合同、S04校验与S01未决旧卡写入 |
| 提示词/分析参考作品.md | 参考作品分析任务模板 |
| 提示词/核对实体歧义.md | 疑似同名和别名核对模板 |
| 提示词/核对实体歧义.md | 作者人工核对歧义的参考说明;未接入自动核对任务 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B03-资料研究.md)。
当前文件以[资料研究源码](../../../../src/muse/资料研究/)为准;原[目标文件清单](../项目目录与文件职责.md)及[文件合同](../文件设计/后端-B03-资料研究.md)保留历史设计目标,未消费的分析模板已退出。
## 实现约束
@ -73,7 +73,7 @@ S02检查点是执行证据而非第二分析读取路径。运行中的完成
## 协作与失败
来源读取实现由基础设施注入;任务归 S02,方法候选转 B04,本书设定候选转 B02,统一检索交 B09。
当前仅提供 B03 榜单读取器注入协议,没有内置真实网页或榜单抓取实现;未注入读取器时 HTTP 采集端点返回 503。任务归 S02,方法候选转 B04,本书设定候选转 B02,统一检索交 B09。
来源不可用、分章歧义、窗失败和部分完成分别可见;修复仅重做选定失败范围。
@ -85,3 +85,23 @@ S02检查点是执行证据而非第二分析读取路径。运行中的完成
- 选题依据与资料来源可回查。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
## 当前用途授权
`变更来源用途`经S01命令回执、作者归属和来源行锁更新当前用途集合;接受空集合。请求包含source_id、expected_authorization_revision、uses和reason;授权版本独立于内容revision,无变化命令保留回执且不增加授权版本。HTTP为POST /api/v1/sources/{source_id}/authorized-uses,CLI为`muse 研究 <配置> 授权 <请求JSON>`。
已存在来源重导入不能增减用途,旧请求无法复活撤回的sample或analysis。返回原文须当前用途:浏览原文使用reference_reading;研究和证据读取使用analysis;案例原文只在sample允许时返回。拆书逐窗派发、恢复及分析最终登记重验授权;已外发调用保留原证据,不重发。撤回不删除来源版本、既有分析或作者决定。发生真实撤权后不得回退到只增不减授权的旧写程序。
## 榜单地址与读取边界
登记与采集旧登记项之前均核 URL 形状:只接受 http/https、合法主机与端口,不接受内嵌凭据、片段、控制字符或反斜杠。登记本身不解析 DNS、不访问网络,也不等于允许访问该目标。未来真实读取器必须接入受控 HTTP 出口,另行明确目标授权、重定向、DNS/目标核验、超时、退避、编码与抓取礼貌合同;当前不引入空实现或自行直连。
基础设施旧 `资料来源/网页读取.py` 和 `榜单读取.py` 两份未消费协议已移除,唯一现用榜单协议是 `资料研究/榜单快照.py` 的 `榜单读取器`。采集成功或失败时刻均取数据库 captured_at,失败不由模型或旧榜单补造。
## 旧 Python 辅助符号的兼容范围
`分析版本.待重试窗口` 和 `分析版本.基准引用` 已列在旧子模块 `__all__`,但不在域 `接口.py` 公开面,仓内也没有调用者。当前保留这些已可从安装包直接导入的符号及原输出,供旧 Python 调用兼容;没有证据证明存在外部使用者,也没有证据证明可以无损删除。
`待重试窗口` 只按冻结窗计划排出未记录结果的窗口,或读取旧 `输入.拆书.重跑窗`;不会检查产物哈希和漂移。当前生产恢复读取顶层 `输入.重跑窗` 并核 `漂移重建`,二者不等价,不能用该兼容函数替换生产恢复。`基准引用` 仅组装旧 `基准版本` 字典并转换 revision 为整数;不验证来源、当前许可或分析存在。当前实际消费必须通过域入口核 `analysis_id`、`analysis_hash` 和当前授权,不能以此旧字典充当证明。
`实体归并.归并哈希` 同样保留旧子模块导出及原摘要算法,仓内没有消费者;只摘要合并组名/类型及歧义名,不涵盖别名、窗口或证据,并截断中间摘要。它只能保持旧调用返回兼容,不得用作完整性或授权证明。当前分析登记实际用完整归并结果的 `固定哈希` 复检。三个符号的执行状态均为“保留”,不是“已消除”;删除重开须先核已发布 Python API 范围和外部使用方,再按具体符号确认删除及迁移方式。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B04 知识方法", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B04 知识方法
## 职责与对象
@ -28,14 +29,14 @@
| 接口.py | 知识方法公开用例和可导入合同 |
| 模型.py | 知识方法稳定对象、外壳及内部状态 |
| 存储.py | 知识方法所属记录的 SQL 与版本读写 |
| 方法卡.py | 六类范式、条件、去重与冲突 |
| 方法卡.py | S04 method 实例族、条件、去重与冲突 |
| 证据反例.py | 来源、样例、例外及反例 |
| 方法版本.py | 确认、修订、启用、停用和撤回 |
| 方法绑定.py | 作品与规划固定方法版本 |
| 消费记录.py | 实际上下文使用与结果关联 |
| 提示词/提炼写作方法.md | 跨作品方法候选模板 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B04-知识方法.md)。
上表列关键职责;当前公开能力以接口.py及其行为测试为准。[R2逐文件设计](../文件设计/后端-B04-知识方法.md)保留历史目标,不承担当前文件位置镜像。
## 实现约束

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B05 正文写作", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B05 正文写作
## 通用选段写作授权
@ -54,6 +55,10 @@ B05拥有选段定位和重放,B06复用受控模型修订链、声音保护
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B05-正文写作.md)。
## 写作粒度边界
领域合同保留 `new_chapter`、`expand_scene`、`edit_selection` 三种粒度。当前正文生成编排及 HTTP/CLI 新生成请求仅接受 `new_chapter`;其余粒度不是该生成入口已接通的能力。已发布的 `expand_scene` 合同允许已有基线且无选区,`edit_selection` 必须明确选区;不以本次文档修正改变兼容输入。选段修订仍走其独立授权入口。
## 实现约束
- 正文格式、哈希和码点位置由专门协议定义。允许手写、生成、扩写、压缩、润色和明确结构改写。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B06 审校修订", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B06 审校修订
## 职责与对象
@ -27,12 +28,13 @@
| choose_revision | 本轮结果、原文和剩余预算 | 停止、保留原文或下一次有限返修建议 |
| 准备返修会话 / 读取返修派发 / 登记返修轮任务 | 作者、固定修订授权、配置及预注册轮数;真实S02任务快照 | 持久会话与轮任务引用;登记不执行模型、不制造候选 |
| 决定返修会话 / 读取返修会话 | 作者具名命令、预期轮次、当前候选及original/candidate/retry选择 | CAS记录作者选择并恢复全部真实轮次、候选和停止原因;candidate不自动采纳 |
| 读取返修比较来源 / 读取返修比较证明 | 确切会话、轮次、候选及B10导出的证明ID | 前者只向维护侧交付固定原文对及可核来源;后者只读复核比较结论,绝不派发、采纳或改正文 |
| 读取返修比较来源 / 读取返修比较来源于 / 读取返修比较证明 | 确切会话、轮次、候选及B10导出的证明ID | 独立读取入口负责建立只读连接;“于”入口沿用调用方连接与事务,供B10同快照核对;证明入口不派发、采纳或改正文 |
| 读取必需检查结论于 | 同一正式提交事务、已核归属的候选ID和确切版本 | 只读该版本的verdict或None;B05负责候选归属、缺报告/未通过拒绝及提交决定 |
| change_rule_state | 具体已测版本和作者批准 | 规则生效回执 |
所有接口在本模块的接口.py 暴露。输入输出类型由同一公开表面导出,外部不导入私有模型或 SQL。
## 内部职责
## 内部职责(关键文件节选)
| 文件 | 职责 |
|------|------|
@ -48,7 +50,10 @@
| 声音确认.py | 真实来源、S04声音内容、S01提案/确认及当前用途投影 |
| 机器味规则.py | 规则候选、适用范围和版本启停 |
| 规则启用.py | B10专用凭据核验、S01规则状态参与者与精确版本消费 |
| 机器味诊断.py | 定位并区分修、留、问 |
| 机器味诊断.py | 确定性规则定位并区分修、留、问;空规则库明确无已执行覆盖 |
| 诊断服务.py | 当前规则资格复检、诊断保存及报告读取 |
| 模型修订.py | 受控模型修改派发、输出核验及候选登记 |
| 离线回放.py | 固定输入的确定性回放,不授予生产启用
| 受控修订.py | 诊断对应、授权范围及最小修改 |
| 保真校验.py | 数字、引文、情态、事实和保护区 |
| 返修策略.py | 轮数、停止、原文胜出和回退选择 |
@ -56,11 +61,15 @@
| 案例回流.py | 误杀、有效修改、拒绝与事故 |
| 提示词/连续性审阅.md | 带证据的一致性审阅 |
| 提示词/创作质量审阅.md | 多维质量审阅 |
| 提示词/提取作品声音.md | 从认可样张建立声音候选 |
| 提示词/诊断机器味.md | 结合语境诊断模板 |
| 提示词/生成最小修订.md | 最小修改候选模板 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B06-审校修订.md)。
当前完整文件位置以[审校修订源码目录](../../../../src/muse/审校修订/)为准;[目标文件清单](../项目目录与文件职责.md)与[文件合同](../文件设计/后端-B06-审校修订.md)保留历史设计目标,不作为当前文件枚举。
## 旧规则材料与当前启用
内置规则的 `evidence` 中仍保留“2026-08-16 跳过 holdout 激活”和“129 条研究目录”字样。它们是旧实现来源记录,旧出处及当时授权尚待在固定历史基线核对,不能作为新版豁免或已完成 holdout 的证据。本次不改同版本规则载荷与指纹。
当前[规则加载](../../../../src/muse/审校修订/机器味规则.py)强制安装包规则为 `candidate`;正式[规则启用](../../../../src/muse/审校修订/规则启用.py)仍需 B10 的确切规则诊断凭据、当前版本及 S01 作者决定。未补齐当前证据就保持候选,不继承旧豁免。
## 实现约束
@ -68,6 +77,8 @@
- 长文按段落和语境处理,记录覆盖及未审区;禁止截取开头后显示整章通过。
- 数字、引文、情态、视角和受保护区分别检查;不把禁词命中当作必须修改。
- 声音、规则及案例有来源与版本。允许零修改、原文胜出和回退。
- 声音采样由确定性统计产生草案,机器味由确定性规则生成只读发现,不为二者加载未消费的模型提示词。诊断分别记录`rule_count`、`empty_library`与`coverage.rules_executed`;没有执行确定性规则时覆盖区间为空,语义未审规则不计入已执行覆盖。
- 旧`核对规则启用`签名仅作失败关闭兼容,传入评测依据也不能启用;真实启用仍经B10凭据和S01作者决定。
## 全文分片与覆盖合同

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B07 作者经验", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B07 作者经验
## 职责与对象
@ -40,9 +41,8 @@
| 验证申请.py | 方法实验或规则专用验证与原结果定位关联 |
| 启用回执.py | 目标模块启停意向、既有审阅定位及原回执 |
| 长期观察.py | 人审时间、返工、误杀与退化 |
| 提示词/整理偏好与改进建议.md | 保留原话及区分推断的提案模板 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B07-作者经验.md)。
当前入口见[作者经验源码](../../../../src/muse/作者经验/)。原[目标文件清单](../项目目录与文件职责.md)和[文件合同](../文件设计/后端-B07-作者经验.md)保留历史设计意图;其中 `提示词/整理偏好与改进建议.md` 未实现。当前改进提案核对已有目标及反馈,不提供自动生成偏好或分析质量短板的提示词执行链。
## 实现约束
@ -54,7 +54,7 @@
反馈对只接受B05已存在的确切正文或候选版本,核对作者、作品、章节、分支及内容哈希后保存引用、作者原话和决定;不复制正文或修改原候选决定,不把自报反馈当S01采纳证明。反馈幂等键改变内容时拒绝。B07通过公开读取接口恢复版本对;缺失来源不得伪造。
物理迁移使用追加的V0044承接原预留V0011,已执行的其他迁移保持不变。该段工程完成不代替具体改进评测、目标owner启停、长期观察或完整经验闭环验证。
物理迁移使用追加的V0044承接原预留V0011,已执行的其他迁移保持不变。偏好、反馈、改进与观察版本由数据库不可变守卫(V0044–V0046、V0055 的 BEFORE UPDATE OR DELETE 触发器)保证只追加;读路径按已存内容返回,不重算内容哈希——内容身份在写入与边界核对时确认,只报警不恢复的读时重算不进入读路径。该段工程完成不代替具体改进评测、目标owner启停、长期观察或完整经验闭环验证。
### 具体方法改进与用途交接

View File

@ -1,8 +1,9 @@
<!-- 导航元信息: {"内容描述": "B08 交付连载", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B08 交付连载
## 职责与对象
全书整理、冻结交付稿、导出和版本化发布反馈。
全书确定性检查、作者定版材料打包、冻结交付稿、导出和版本化发布反馈。当前没有跨章模型审阅或交付材料自动起草流程。
实例归属以[总体架构](../总体架构.md)为准;结构、状态和公开外壳分别引用数据模型与接口契约。
@ -37,8 +38,6 @@
| 导出格式/Markdown.py | Markdown 正文导出 |
| 导出格式/Word.py | DOCX 结构与排版导出 |
| 导出格式/EPUB.py | EPUB 目录、内容与打包 |
| 提示词/全书审阅.md | 跨章审阅任务模板 |
| 提示词/整理交付材料.md | 固定正文版本的材料生成 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B08-交付连载.md)。
@ -79,3 +78,13 @@ B01 提供目录,B05 提供正式版本,B06 审校,S02 执行任务,基
- 完整备份包含原文及结构关系。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
### 成品复用与显式审计
普通下载和发布/连载准备只核作者、定稿清单哈希与归属,不读取源正文。下载只取指定格式成品一次,并核字节哈希和绑定定稿、格式器版本的 `delivery-validation-v2` 成功证明。证明不足返回 `EXPORT_VERIFICATION_UPGRADE_REQUIRED`;清单或成品损坏明确拒绝。合法成品不因源正文暂不可读而失去下载能力。
导出准备与恢复只核元数据;执行批读产物头,以持久化成品为权威,不信检查点。已有成品逐个核验,缺失格式共享一次全源内容视图;渲染与深度校验在连接和事务之外,保存前核当前租约。没有缺失格式时不读正文、不重新渲染。
作者可显式调用 `POST /deliveries/{delivery_id}/files/{format}/audit` 全源审计。默认只返回审计结果;`supplement_verification=true` 才追加不可变补充验证回执。审计会逐源核对真实文本并深度读取成品,失败不补证。旧成品字节、哈希、身份及原始 verification 均保留;仅支持当前已实现的历史格式器,未知版本拒绝。该接口不自动批量回填作品。
CLI 下载先在目标同目录完整写入临时文件,再以排他硬链接发布;已有目标不覆盖,写入或发布失败清理本次临时文件。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B09 上下文", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B09 上下文
## 职责与对象
@ -29,7 +30,7 @@
| 任务范围.py | 作品、用途、时点和来源权限 |
| 来源读取.py | 按业务公开接口读取固定来源 |
| 声音材料.py | 经B06读取已认可声音,冻结身份/用途投影并核逐键材料 |
| 混合检索.py | 专名精确、关键词与向量合并 |
| 混合检索.py | 关键词与向量两路倒数排名融合 |
| 材料装配.py | 必读、预算、取舍及字段投影 |
| 探索回放.py | 按同一范围重放工具读取 |
| 冻结快照.py | 来源、结构、投影和消费片段 |
@ -38,6 +39,10 @@
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B09-上下文.md)。
## 当前检索底座
[基础设施向量评分](../../../../src/muse/基础设施/检索/向量.py)提供 Python 余弦相似打分,[混合检索](../../../../src/muse/上下文/混合检索.py)负责倒数排名融合。当前不依赖 pgvector 或外部嵌入服务;旧逐文件设计中的 pgvector 是历史目标,代码注释里的“裁决 A”因缺原文不作为现行决定依据。
## 实现约束
- 预组装、探索、回放和采纳复检使用一致范围,不能仅保护预组装。
@ -83,3 +88,15 @@ A使用连续历史基线及一般关键词补充原文,B仅使用时点卡片
### 方法检索的空结果
混合检索只读取可用的新鲜方法索引,不自动写入规划选择。空白查询在读取索引前以`CONTEXT_INPUT_INVALID`拒绝。结果保留索引身份;索引无条目时`empty_reason=empty_index`,有索引但两路都无命中时`empty_reason=no_match`并给出作者可读说明。有命中时该字段为null。此合同不改变B04固定绑定材料的列表返回值。
### 读取前预算与摘要分页
新建任务在 `source_scope` 冻结 `context_policy_version=2` 和 `context_read_budget`。预算唯一默认值在 S02 `上下文预算.py`;输入字节与模型输出 token 分开核算。旧任务不补字段、不改回放哈希,超过部署硬上界返回 `CONTEXT_POLICY_REAUTH_REQUIRED`,由作者重新授权。
B09先通过 B01/B02/B05 公开元数据面检查目录数量、载荷字节和当前版本,再取得载荷。正文依赖复检不读取 `document`、不恢复草稿;事实当前依据检查只比正文版本与哈希,原文引文仍在事实确认入口验证。元数据大小在数据库侧计算,仅保证应用传输和物化上界,不代表数据库物理读取量相同。细纲和事实过大明确拒绝;事实工具可点名冻结范围内的有界对象集合,不把被省略材料冒充完整结果。
v2历史正文未指定结束位置时返回有界片段及 `has_more/next_cursor/omitted_reason`。游标绑定任务、冻结范围、正文版本及投影,不能跨任务或版本续用。S02在结果进入模型历史前分别检查单工具及累计工具字节;完整模型请求的系统提示、工具定义、输入、历史和序列化开销共同受 envelope 上界约束。读前预留和耗时使用现有工具事件持久化,恢复取该步骤最近累计量;失败读取与实际重复读取保留成本,不以进程重启清零。拒绝保留错误码、消费量和调用身份,不保存失败候选内容。
`读取并核对快照` 同时返回历史快照与当前依赖状态,消费入口无需重复整轮检查;发送、恢复、采纳仍分别复检当前授权。新 HTTP `context-snapshots/page` 使用绑定任务和用途的稳定游标,默认20、最多100条,只选择摘要字段而不读取装配正文,同页相同冻结范围与绑定只核验一次。旧无分页入口兼容保留,不静默截断。
离线机制回归见 `test_上下文读取上界.py` 的 `NC-O07-*` 用例;真实 PostgreSQL、生成合同与跨包端到端证据由集成验收记录。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "B10 效果评测", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# B10 效果评测
## 职责与对象
@ -27,7 +28,7 @@
所有接口在本模块的接口.py 暴露。输入输出类型由同一公开表面导出,外部不导入私有模型或 SQL。
## 内部职责
## 内部职责(关键文件节选)
| 文件 | 职责 |
|------|------|
@ -43,10 +44,14 @@
| 返修比较.py | B06固定原文对封存、专用实验条件与public只读证明 |
| 指标汇总.py | 逐例结果、缺失项、覆盖及成本 |
| 启用判据.py | 核对实际启用的是已测版本 |
| 启用凭据.py | 从合格实验导出、核对、停止最小公开凭据 |
| 标定.py / 标定消费.py | 标定记录及资格消费复检 |
| 条件第三.py | 初评分歧后的独立第三评委执行 |
| 文学执行.py / 文学评分.py | 文学单元执行与逐例评分核验 |
| 规则诊断.py | B06非语义规则的样本封存、真实核心逐例、完整硬门与最小凭据 |
| 提示词/独立评审.md | 固定条件的独立评审模板 |
完整路径及运行模板见[目标文件清单](../项目目录与文件职责.md)。逐文件意图、边界与目标见[文件合同](../文件设计/后端-B10-效果评测.md)。
当前完整文件位置以[效果评测源码目录](../../../../src/muse/效果评测/)为准;[目标文件清单](../项目目录与文件职责.md)与[文件合同](../文件设计/后端-B10-效果评测.md)保留历史设计目标,不作为当前文件枚举。
## 实现约束

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "S01 正式变更", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# S01 正式变更
## 职责与对象
@ -61,3 +62,7 @@
- 迟到批准。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
## 无变化保存
B01档案参与者在目标锁、作者及版本CAS、S04绑定和当前投影校验后比较规范值与有效绑定。完全相同返回did_change=false/no_change=true,保留独立命令回执及当前revision,不新增业务历史或profile_changed。不同命令同值可成功;旧revision仍拒绝;A→B→A保留真实历史。S01依据每个参与者结果过滤归属于该参与者的影响,不跳过其他参与者;回执汇总did_change与no_change。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "S02 任务运行", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# S02 任务运行
## 职责与对象

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "S03 工作台与系统管理", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# S03 工作台与系统管理
## 职责

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "S04 元数据", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# S04 元数据
## 职责与对象
@ -58,3 +59,9 @@
- M04—M08 版本、用途、迁移与并发。
验收入口和替换条件见[迁移与验收](../迁移与验收.md);这些条目是目标行为,不是已通过测试的声明。
## 当前公开范围
当前接入只开放登记候选、发布结构版本、兼容检查,以及业务owner对既有绑定的读写。发布v2不会自动升级固定绑定v1的实例。已有对象在线升级、作品扩展发布及在线策略更新单独立项,本期不提供公共启用工作流;既有低层API保留内部兼容。当前projection_version和类型锁协议保持不变;未来升级需独立转换、审阅、当前绑定CAS和恢复验收。
已发布种子的字段说明也参与结构内容哈希。`power_system`、`narrative_state` v1中的历史尾注是冻结说明,不是当前开发待办;本期保留原YAML字节。说明修订须发布新结构版本,既有实例是否升级另按在线升级项目处理,不以清理注释名义重写同版本身份。

View File

@ -1,20 +1,21 @@
<!-- 导航元信息: {"内容描述": "代码按什么模块分、职责与依赖\n模块设计的文件与材料索引", "使用场景": "动模块边界、新代码往哪放拿不准时\n设计、实现或评审对应主题", "使用要求": "模块职责或依赖变化时\n与阅读指南的主题权威分工一致"} -->
# 模块设计目录
本目录文件按主题维护定义,索引只负责导航。
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| B01-作品规划 | [B01-作品规划.md](B01-作品规划.md) | B01 作品规划 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B02-故事世界 | [B02-故事世界.md](B02-故事世界.md) | B02 故事世界 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B03-资料研究 | [B03-资料研究.md](B03-资料研究.md) | B03 资料研究 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B04-知识方法 | [B04-知识方法.md](B04-知识方法.md) | B04 知识方法 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B05-正文写作 | [B05-正文写作.md](B05-正文写作.md) | B05 正文写作 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B06-审校修订 | [B06-审校修订.md](B06-审校修订.md) | B06 审校修订 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B07-作者经验 | [B07-作者经验.md](B07-作者经验.md) | B07 作者经验 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B08-交付连载 | [B08-交付连载.md](B08-交付连载.md) | B08 交付连载 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B09-上下文 | [B09-上下文.md](B09-上下文.md) | B09 上下文 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B10-效果评测 | [B10-效果评测.md](B10-效果评测.md) | B10 效果评测 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S01-正式变更 | [S01-正式变更.md](S01-正式变更.md) | S01 正式变更 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S02-任务运行 | [S02-任务运行.md](S02-任务运行.md) | S02 任务运行 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S03-工作台与系统管理 | [S03-工作台与系统管理.md](S03-工作台与系统管理.md) | S03 工作台与系统管理 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S04-元数据 | [S04-元数据.md](S04-元数据.md) | S04 元数据 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B01 作品规划 | [B01-作品规划.md](B01-作品规划.md) | B01 作品规划 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B02 故事世界 | [B02-故事世界.md](B02-故事世界.md) | B02 故事世界 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B03 资料研究 | [B03-资料研究.md](B03-资料研究.md) | B03 资料研究 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B04 知识方法 | [B04-知识方法.md](B04-知识方法.md) | B04 知识方法 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B05 正文写作 | [B05-正文写作.md](B05-正文写作.md) | B05 正文写作 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B06 审校修订 | [B06-审校修订.md](B06-审校修订.md) | B06 审校修订 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B07 作者经验 | [B07-作者经验.md](B07-作者经验.md) | B07 作者经验 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B08 交付连载 | [B08-交付连载.md](B08-交付连载.md) | B08 交付连载 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B09 上下文 | [B09-上下文.md](B09-上下文.md) | B09 上下文 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| B10 效果评测 | [B10-效果评测.md](B10-效果评测.md) | B10 效果评测 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S01 正式变更 | [S01-正式变更.md](S01-正式变更.md) | S01 正式变更 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S02 任务运行 | [S02-任务运行.md](S02-任务运行.md) | S02 任务运行 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S03 工作台与系统管理 | [S03-工作台与系统管理.md](S03-工作台与系统管理.md) | S03 工作台与系统管理 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| S04 元数据 | [S04-元数据.md](S04-元数据.md) | S04 元数据 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |

View File

@ -1,27 +1,30 @@
<!-- 导航元信息: {"内容描述": "主体重写目标、完整文件树、元数据与研究依据", "使用场景": "设计、重写与评审新版主体", "使用要求": "目标设计不代表现行代码和运行状态"} -->
# 新版 agent-example 设计目录
新版目标设计与原研究的统一入口。建议先读阅读指南,再按主题展开。源码、配置与数据库目录仅在目标树中定义,本目录不代表实现完成。
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 业务需求 | [业务需求/目录.md](业务需求/目录.md) | 业务需求的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 决策 | [决策/目录.md](决策/目录.md) | 决策的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 功能规格 | [功能规格/目录.md](功能规格/目录.md) | 功能规格的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 接口契约 | [接口契约/目录.md](接口契约/目录.md) | 接口契约的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 数据模型 | [数据模型/目录.md](数据模型/目录.md) | 数据模型的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 模块设计 | [模块设计/目录.md](模块设计/目录.md) | 模块设计的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 研究依据 | [研究依据/目录.md](研究依据/目录.md) | 研究依据的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 调用链路 | [调用链路/目录.md](调用链路/目录.md) | 调用链路的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 领域模型 | [领域模型/目录.md](领域模型/目录.md) | 领域模型的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 业务需求目录 | [目录.md](业务需求/目录.md) | 要解决谁的什么问题、不做哪些 业务需求的文件与材料索引 | 功能还没方案、对齐目标和范围时 设计、实现或评审对应主题 | 需求确认或变更时 与阅读指南的主题权威分工一致 |
| 决策目录 | [目录.md](决策/目录.md) | 决策的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 功能规格目录 | [目录.md](功能规格/目录.md) | 功能规格的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 接口契约目录 | [目录.md](接口契约/目录.md) | 接口契约的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 数据模型目录 | [目录.md](数据模型/目录.md) | 数据长什么样、存在哪、怎么一致 数据模型的文件与材料索引 | 改存储、迁移、字段、一致性时 设计、实现或评审对应主题 | schema / 数据生命周期变化时 与阅读指南的主题权威分工一致 |
| 模块设计目录 | [目录.md](模块设计/目录.md) | 代码按什么模块分、职责与依赖 模块设计的文件与材料索引 | 动模块边界、新代码往哪放拿不准时 设计、实现或评审对应主题 | 模块职责或依赖变化时 与阅读指南的主题权威分工一致 |
| 研究依据目录 | [目录.md](研究依据/目录.md) | 研究依据的文件与材料索引 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 调用链路目录 | [目录.md](调用链路/目录.md) | 一条真实路径经过哪些代码 调用链路的文件与材料索引 | 改这条链路、排障、清理相关代码时 设计、实现或评审对应主题 | 关键路径稳定或被改写后 与阅读指南的主题权威分工一致 |
| 领域模型目录 | [目录.md](领域模型/目录.md) | 业务概念、词什么意思、概念边界;术语全文在 `术语表.md` 领域模型的文件与材料索引 | 改业务行为、起名、对术语有分歧时 设计、实现或评审对应主题 | 新术语或概念边界确认时 与阅读指南的主题权威分工一致 |
| 功能覆盖矩阵 | [功能覆盖矩阵.md](功能覆盖矩阵.md) | 功能覆盖矩阵 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 工作台设计 | [工作台设计.md](工作台设计.md) | 作者工作台设计 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 总体架构 | [总体架构.md](总体架构.md) | 新版 agent-example 总体架构 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 技能承接表 | [技能承接表.md](技能承接表.md) | 现有 Skill 承接表 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 作者工作台设计 | [工作台设计.md](工作台设计.md) | 作者工作台设计 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 新版 agent-example 总体架构 | [总体架构.md](总体架构.md) | 新版 agent-example 总体架构 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 现有 Skill 承接表 | [技能承接表.md](技能承接表.md) | 现有 Skill 承接表 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 目标文件清单 | [目标文件清单.json](目标文件清单.json) | 逐文件路径、归属、意图、职责、边界和目标 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 编排与能力资源 | [编排与能力资源.md](编排与能力资源.md) | 编排与能力资源 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 迁移与验收 | [迁移与验收.md](迁移与验收.md) | 迁移与验收 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 阅读指南 | [阅读指南.md](阅读指南.md) | 新版 agent-example 设计阅读指南 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 新版 agent-example 设计阅读指南 | [阅读指南.md](阅读指南.md) | 新版 agent-example 设计阅读指南 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 项目目录与文件职责 | [项目目录与文件职责.md](项目目录与文件职责.md) | 项目目录与文件职责 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 逐文件设计 | [文件设计/目录.md](文件设计/目录.md) | 各部分文件树与每个目标的意图、职责、边界、目标 | 确定文件去向和实施边界 | 清单是目标合同,退出须满足实际验收 |
| 验证设计 | [验证设计/目录.md](验证设计/目录.md) | 诊断行为场景与现行测试登记导航 | 维护测试及行为评测 | 各执行模式独立取证 |
| 文件设计目录 | [目录.md](文件设计/目录.md) | 各部分文件树与每个目标的意图、职责、边界、目标 | 确定文件去向和实施边界 | 清单是目标合同,退出须满足实际验收 |
| 验证设计目录 | [目录.md](验证设计/目录.md) | 诊断行为场景与现行测试登记导航 | 维护测试及行为评测 | 各执行模式独立取证 |
| R2 改造历史留痕 | [R2改造历史留痕.md](../../实现回顾/R2改造历史留痕.md) | 固定版本与验证边界 | 历史追溯 | 不作为当前全量通过证明 |
| 优化执行合同 | [优化执行合同.md](优化执行合同.md) | 已裁定范围与跨包接口、归属、验证及退出条件 | 实施全仓优化时 | 设计裁决不代表实现已验收 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "研究依据的文件与材料索引", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 研究依据目录
研究快照、前序审计和历史方案。各项测试与提交只代表原核对时点,不能算作新版已验证结果。

View File

@ -4,7 +4,7 @@
使用范围:个人自用。
- 功能比较基准:`docs/业务需求/小说创作共性功能清单.md`,20 个功能域、117 个功能点;原本地草稿已移走。
- 现行功能比较入口:[目标系统完整功能清单](../../业务需求/目标系统完整功能清单.md),按其中稳定功能 ID 对照。旧清单已退出,原“20 域 / 117 点”不作为当前可核计数;本页其余研究结论仍保留原快照边界。
- 两条轴独立排序:理念接近程度;功能广度与完成度。个人自用的适配说明侧重单用户工作流、数据自持有、运行成本和改造负担。
- 仓库集合:`git/项目更新记录-2026-09-07.json` 中 46 个独立仓库;版本和许可入口见同目录 `仓库快照与许可证入口.json`。
- 区分源码存在、静态接线、本轮实际验证和未验证。局部测试通过不能提升为全链生产可用。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "编排与能力资源", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 编排与能力资源
## 各层职责

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "关键旅程与责任交接", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 关键旅程与责任交接
本页只展示调用关系,行为和字段定义分别引用[功能规格](../功能规格/目录.md)与[接口契约](../接口契约/目录.md)。所有箭头都通过公开接口,跨模块写入需要 S01 的同事务参与者。
@ -12,7 +13,7 @@
## 资料、拆书与方法
B03 来源与榜单 → 固定原文 → S02 分窗分析 → B03 版本与原文对照 → 作者选用途 → B02 事实确认或 B04 方法确认 → 固定绑定 → B09 实际消费。
B03 来源与榜单 → 明确有效分析配置 → 原子创建并冻结任务配置 → 固定原文 → S02 分窗分析 → B03 版本与原文对照 → 作者选用途 → B02 事实确认或 B04 方法确认 → 固定绑定 → B09 实际消费。
## 审校与声音
@ -20,7 +21,7 @@ B03 来源与榜单 → 固定原文 → S02 分窗分析 → B03 版本与原
## 章后处理
S01 事务登记派生任务 → S02 租约执行 → 固定正文版本 → 摘要/B02 事实提案/B09 索引 → 完成前来源复检。事实提案由作者独立确认,失败不回滚正文。
S01 事务登记派生任务 → S02 租约执行 → 入口复检当前正文与冻结来源 → 按冻结revision产生摘要/B02事实提案/B09索引;恢复时再次复检来源。后续步骤消费对应历史版本,不承诺完成前再次核对当前正文。事实提案由作者独立确认,失败不回滚正文。
## 经验与评测
@ -37,3 +38,5 @@ B08 全书检查 → 作者冻结章节清单 → 导出与内容核对 → 发
## 流程版本与恢复
每条可执行流程固定步骤和开放槽位版本;S02 记录实际尝试、检查点和证据。流程状态、作者决定和内容有效性不同轴,等待或失败不会通过自动重试改变作者授权。
当前作者任务由HTTP或CLI点名推进,每次最多执行一个步骤;服务启动只装配处理器,不自动后台领取。`接入/执行器.py`保留给已存在的租约/停机合同测试与显式集成,不视为已经上线的常驻入口。`task.waiting`仍保留为持久事件协议兼容项;未核对历史库消费前不删除枚举。

View File

@ -1,7 +1,8 @@
<!-- 导航元信息: {"内容描述": "一条真实路径经过哪些代码\n调用链路的文件与材料索引", "使用场景": "改这条链路、排障、清理相关代码时\n设计、实现或评审对应主题", "使用要求": "关键路径稳定或被改写后\n与阅读指南的主题权威分工一致"} -->
# 调用链路目录
本目录文件按主题维护定义,索引只负责导航。
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 关键旅程 | [关键旅程.md](关键旅程.md) | 关键旅程与责任交接 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 关键旅程与责任交接 | [关键旅程.md](关键旅程.md) | 关键旅程与责任交接 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "迁移与验收", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 迁移与验收
本文保留数据迁移、唯一写入切换及备份恢复的长期安全合同,不是 R2 当前执行计划或验收回执。历史见[R2 改造历史留痕](../../实现回顾/R2改造历史留痕.md)。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "新版 agent-example 设计阅读指南", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 新版 agent-example 设计阅读指南
本目录定义新版 agent-example 的目标设计及其研究依据,适用于日常维护和设计评审。当前运行行为仍由项目现行入口、合同和实测证据说明;目标设计不代表相关能力已经实现。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "项目目录与文件职责", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 项目目录与文件职责
本文件是[目标文件清单](目标文件清单.json)的可读投影。每个文件的意图、职责、边界和目标见[逐文件设计目录](文件设计/目录.md)。全部条目相对 agent-example 根目录,仅定义目标位置与职责;不据此宣称实现或验证通过。

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "新版 agent-example 领域术语", "使用场景": "设计、实现或评审对应主题", "使用要求": "与阅读指南的主题权威分工一致"} -->
# 新版 agent-example 领域术语
本表是本设计包的术语全文,定义作品内容、结构、作者选择和创作证据的区别。

View File

@ -1,7 +1,8 @@
<!-- 导航元信息: {"内容描述": "业务概念、词什么意思、概念边界;术语全文在 `术语表.md`\n领域模型的文件与材料索引", "使用场景": "改业务行为、起名、对术语有分歧时\n设计、实现或评审对应主题", "使用要求": "新术语或概念边界确认时\n与阅读指南的主题权威分工一致"} -->
# 领域模型目录
本目录文件按主题维护定义,索引只负责导航。
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 术语表 | [术语表.md](术语表.md) | 新版 agent-example 领域术语 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |
| 新版 agent-example 领域术语 | [术语表.md](术语表.md) | 新版 agent-example 领域术语 | 设计、实现或评审对应主题 | 与阅读指南的主题权威分工一致 |

View File

@ -1,7 +1,8 @@
<!-- 导航元信息: {"内容描述": "诊断行为场景与现行测试登记导航", "使用场景": "维护测试及行为评测", "使用要求": "各执行模式独立取证"} -->
# 验证设计目录
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 诊断行为场景 | [诊断行为场景.md](诊断行为场景.md) | 六类诊断行为与证据边界 | 维护行为评测时 | 各执行模式独立取证,不以登记代替通过 |
| 诊断 Skill 的行为场景 | [诊断行为场景.md](诊断行为场景.md) | 六类诊断行为与证据边界 | 维护行为评测时 | 各执行模式独立取证,不以登记代替通过 |
| 现行用例登记 | [用例清单](../../../../tests/用例清单.json) | 身份、参数、环境与行为合同 | 选择、收集及核对测试时 | 与实际符号双向一致 |
| 测试隔离规则 | [测试隔离](../../../../.agent/rules/测试隔离.md) | 隔离、行为和执行证据原则 | 测试维护时 | 外部环境显式选择 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "六类诊断行为与证据边界", "使用场景": "维护行为评测时", "使用要求": "各执行模式独立取证,不以登记代替通过"} -->
# 诊断 Skill 的行为场景
六个场景属于 B10 行为评测资料,不属于索引维护。固定输入与语义断言见[现行场景夹具](../../../../tests/夹具/行为评测/诊断机器味场景.json),行为场景.py 校验并裁决;角色行为.py从真实工具证据重建观察,编排/行为评测.py通过S02有限会话执行。

View File

@ -1,5 +1,6 @@
<!-- 导航元信息: {"内容描述": "系统怎么切、依赖朝哪、为什么这样切;ADR 在 `决策/`", "使用场景": "跨模块、改边界、选技术底座、写 ADR 时", "使用要求": "架构或架构决策变化时"} -->
# 系统架构目录
| 名称 | 相对地址 | 内容描述 | 使用场景 | 使用要求 |
|------|----------|----------|----------|----------|
| 新版 agent-example 设计 | [新版设计/目录.md](新版设计/目录.md) | 主体重写目标、完整文件树、元数据与研究依据 | 设计、重写与评审新版主体 | 目标设计不代表现行代码和运行状态 |
| 新版 agent-example 设计目录 | [目录.md](新版设计/目录.md) | 主体重写目标、完整文件树、元数据与研究依据 | 设计、重写与评审新版主体 | 目标设计不代表现行代码和运行状态 |

View File

@ -1,3 +1,4 @@
<!-- 导航元信息: {"内容描述": "系统组成、启动停止、备份恢复、资源更新与排障入口", "使用场景": "日常启动/停止、备份恢复、更新资源、排障时", "使用要求": "运行形态或运维入口变化时"} -->
# 运行手册
> 新版 Muse(agent-example 单用户作者工作台)的日常运行、备份与排障入口。能力状态与边界见文末。