Kaynağa Gözat

docs(spec): D3 未登记伏笔检测 + D4 设定大纲单向依赖 → spec 0.8 / v3.4

依据 Discussion #118 深度核验(shuimushanjia 06-22、freezero2020 06-26):

- D3 未登记伏笔检测:事实审查搭整章通读反查"正文疑似伏笔但无条目",
  产 unregistered_thread 候选,门槛保守、恒非阻断、作者裁决——给纯声明制补漏网
- D4 设定大纲单向依赖:入宪为不变量 13,设定层只记客观事实不写排程,
  依赖单向(大纲 → 设定),回应"改一处牵连多文件"

落点:story-repo-spec 0.7→0.8(§1/§4.2/§8/§14)、
multi-agent-spec v3.3→v3.4(§5.4 category)、实施计划同步指针与 M4

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
lingfengQAQ 1 gün önce
ebeveyn
işleme
68b5aa1199

+ 8 - 7
docs/architecture/multi-agent-adaptation-spec-2026-06-05.md

@@ -1,9 +1,9 @@
 # Webnovel Writer 多宿主与多智能体适配 Spec
 
-> 日期:2026-06-05(v3 修订:2026-06-11;v3.1:同日,hook 语义 deny → ask,依据 #113;v3.2:2026-06-12,按 PRD 1.0 §10.2 修订——安装器重写为工作目录布局、AGENTS.md 公约数层、SessionStart 注入、模板条件块、放弃插件市场;v3.3:2026-06-26,RFC 后续决策——两审模式、审稿清单定义)
-> 状态:草案 v3.3
-> 基线:**v7 story repo**(`story-repo-spec-2026-06-10.md` 0.7)+ **PRD**(`v7-prd.md` 1.0,产品法律文本,冲突时以 PRD 为准)。v2 的基线是 v6.1.0 Python runtime,该架构已被 v7 推翻;本版继承 v2 的元层纪律,重写全部基座层。
-> 来源:v2(基于 PR #110 review 重写)+ 2026-06 多平台调研核验 + Trellis 多宿主机制调研(2026-06-11)+ PRD 1.0 + RFC 后续决策(2026-06-26)
+> 日期:2026-06-05(v3 修订:2026-06-11;v3.1:同日,hook 语义 deny → ask,依据 #113;v3.2:2026-06-12,按 PRD 1.0 §10.2 修订——安装器重写为工作目录布局、AGENTS.md 公约数层、SessionStart 注入、模板条件块、放弃插件市场;v3.3:2026-06-26,RFC 后续决策——两审模式、审稿清单定义;v3.4:2026-06-27,RFC 深度核验——事实审查增 D3 未登记伏笔检测 category
+> 状态:草案 v3.4
+> 基线:**v7 story repo**(`story-repo-spec-2026-06-10.md` 0.8)+ **PRD**(`v7-prd.md` 1.0,产品法律文本,冲突时以 PRD 为准)。v2 的基线是 v6.1.0 Python runtime,该架构已被 v7 推翻;本版继承 v2 的元层纪律,重写全部基座层。
+> 来源:v2(基于 PR #110 review 重写)+ 2026-06 多平台调研核验 + Trellis 多宿主机制调研(2026-06-11)+ PRD 1.0 + RFC 后续决策(2026-06-26)+ RFC 深度核验(2026-06-27)
 > 定位:把 v7 的格式层(story repo)原封不动地暴露给多个 agent 宿主——格式平台无关,本 spec 只管入口怎么落、角色怎么生成、安装怎么零门槛、支持等级怎么诚实。
 
 ---
@@ -110,11 +110,11 @@ Claude Code 的使用体验是其他宿主的对照基准。**插件市场渠道
 
 ### 5.4 Subagent 只做增强,不做依赖
 
-### 5.4 两审模式与降级诚实(RFC 决策 D1/D2)
+### 5.4 两审模式与降级诚实(RFC 决策 D1/D2/D3
 
 **完整模式**(推荐):
 - 两审(story repo spec §8 第 6 步:事实审查/编辑审)在支持 subagent 的宿主上用独立 subagent 保证"各自新鲜上下文"。
-- 事实审查:v6 的 5 维度(设定一致性、时间线、叙事连贯、角色一致性、逻辑)+ v7 特有项("要写到的事"核对、泄密候选判断、履历证据验证)
+- 事实审查:v6 的 5 维度(设定一致性、时间线、叙事连贯、角色一致性、逻辑)+ v7 特有项("要写到的事"核对、泄密候选判断、履历证据验证、未登记伏笔检测 `unregistered_thread` 候选
 - 编辑审:结构、节奏、商业性、主角动机
 - 输出格式:结构化问题清单(severity + category + blocking),参考 v6 review schema
 
@@ -130,7 +130,7 @@ Claude Code 的使用体验是其他宿主的对照基准。**插件市场渠道
   "issues": [
     {
       "severity": "critical | high | medium | low",
-      "category": "setting | timeline | continuity | character | logic | requirement | leak | evidence | structure | pacing | commercial | motivation",
+      "category": "setting | timeline | continuity | character | logic | requirement | leak | evidence | unregistered_thread | structure | pacing | commercial | motivation",
       "location": "第N段 或 具体引用",
       "description": "问题描述",
       "evidence": "原文引用 vs 数据记录",
@@ -148,6 +148,7 @@ Claude Code 的使用体验是其他宿主的对照基准。**插件市场渠道
 **阻断规则**:
 - `severity=critical` 自动 `blocking=true`
 - 其他 severity 由 AI 根据上下文判断是否 blocking
+- `category=unregistered_thread`(D3 未登记伏笔候选)**恒为 `blocking=false`**——即兴伏笔可能是神来之笔,非缺陷;判定门槛保守,只出候选交作者裁决(登记成条目/忽略/删掉),详见 story repo spec §8
 - 存在 `blocking=true` 的问题 → 作者审稿时看到明确标识
 - 作者可选择:接受当前版本(即使有非阻断问题)/ 改完接受 / 打回重写
 

+ 28 - 7
docs/architecture/story-repo-spec-2026-06-10.md

@@ -1,6 +1,10 @@
-# Story Repo 格式规格(v7 草案 0.7
+# Story Repo 格式规格(v7 草案 0.8
 
-> 状态:0.7。相对 0.6 的变更:
+> 状态:0.8。相对 0.7 的变更:
+> - 新增 D3 决策:未登记伏笔检测——事实审查增 `unregistered_thread` 候选项(§8 第 6 步),声明制补漏网,非阻断
+> - 新增 D4 决策:设定↔大纲单向依赖入宪(不变量 13,§4.2 角色卡说明)
+>
+> 0.7 相对 0.6 的变更:
 > - 补充 A1 决策:自动模式待定稿批次的版本链叠加机制(§8.1)
 > - 更新 A2 决策:Node >= 22.13.0 运行时要求(§2.2)
 > - 明确 A3 决策:履历证据的章节级验证范围(§5 线索条目格式,§11 缓存重建器职责)
@@ -8,9 +12,9 @@
 > - 补充审稿终止机制:severity + blocking 规则(§8 第 6-7 步)
 > - 澄清 B 类问题:缓存删除代价(§11)、关键词扫描边界(§4.3)、两审模式(§8 第 6 步)
 > 
-> 来源:2026-06-10「最正确架构」讨论 + PRD 1.0(2026-06-12 定稿)+ RFC 后续决策(2026-06-26)。
+> 来源:2026-06-10「最正确架构」讨论 + PRD 1.0(2026-06-12 定稿)+ RFC 后续决策(2026-06-26)+ RFC 深度核验(2026-06-27,Discussion #118 第 8 条评论与 v7 逐条核验)
 > 地位:`v7-prd.md` 是产品法律文本,本规格是**格式法律文本**——两者冲突时以 PRD 为准并修订本规格。代码是格式的派生物:任何实现与本规格冲突时,改实现或改规格,不允许"代码里悄悄多存一份"。
-> 范围:本规格管**格式层**(工作目录与 story repo 里有什么、长什么样、怎么变更),平台无关。宿主适配(SKILL.md 入口、subagent 壳、安装器)由 `multi-agent-adaptation-spec-2026-06-05.md`(v3.3)承接。
+> 范围:本规格管**格式层**(工作目录与 story repo 里有什么、长什么样、怎么变更),平台无关。宿主适配(SKILL.md 入口、subagent 壳、安装器)由 `multi-agent-adaptation-spec-2026-06-05.md`(v3.4)承接。
 
 ---
 
@@ -32,6 +36,7 @@
 10. **对话即编辑器**:任何结构化数据的修改都可以用一句自然语言完成("把伏笔-031 放弃了,理由是改走暗线")。作者无须学习任何文件格式;手改文件永远只是逃生门。
 11. **精准读取**:每类数据文件都有"精准读到所需一段"的脚本命令(§11.1);AI 非必要不整文件读取,写作材料默认用精准片段。
 12. **作者界面零机器味**:作者可见的目录、文件名、字段、文案遵守 PRD §8 术语表与命名四原则;财务/工程/数据库隐喻与自造精简词禁止出现。
+13. **设定大纲单向依赖**:`定稿/设定/` 只记已发生的客观事实,不写排程或章节安排;依赖方向单向——`大纲/` 引用设定(正名),设定不反向引用大纲的条目编号或卷号排程。改文风/进度只动 `大纲/` 与 `文风/`,不牵连设定,避免双向交叉导致的"改一处牵连多文件"。
 
 ## 2. 目录总览(全中文)
 
@@ -180,7 +185,7 @@ spec_version: "7.0"
 
 ### 4.2 角色卡 `定稿/设定/角色/<正名>.md`
 
-front matter 是机检消费的结构化字段(平铺、块列表);正文是自由设定文本。客观事实(境界/位置/持有/状态)由定稿步骤增量更新——这是"客观事实记账"的落点。
+front matter 是机检消费的结构化字段(平铺、块列表);正文是自由设定文本。客观事实(境界/位置/持有/状态)由定稿步骤增量更新——这是"客观事实记账"的落点。**只记设定原意与已发生事实,不写"第 N 章登场/第 M 卷洗白"这类排程**(不变量 13)——排程归 `大纲/卷纲`,角色的未来走向归感情线等线索条目。
 
 ```markdown
 ---
@@ -367,7 +372,7 @@ B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推
 | 3 | 备料 | 脚本 | 组装 `工作区/本章写作材料.md`:全书近况+要写到的事+事实切片+信息差边界+近章结尾+反复读清单+文风锚点+反和解规则。**默认精准片段**(当前卷+上一卷时间线、按编号取条目、按需取正文段,§11.1) |
 | 4 | 写稿 | AI(干净上下文) | `工作区/草稿-*.md`;关键章 best-of-N |
 | 5 | 机检 | 脚本(零 token) | **只做可计数项**:字数、禁词/禁句式、复读检测、跨章高频意象统计("空气仿佛凝固"全书 47 次这类)、句式体检(句长方差/段落长度分布/高频句式开头)、新专名比对名册、front matter 格式完整性、条目文件是否变动(只查形式不判内容)、信息差关键词命中(**只出候选清单,不拦截**)。不过关直接打回第 4 步,不打扰作者 |
-| 6 | 两审 | AI ×2(各自新鲜上下文) | **事实审查**(v6 的 5 维度:设定一致性、时间线、叙事连贯、角色一致性、逻辑 + v7 特有项:①"要写到的事"逐条核对正文;②机检泄密候选是否真泄密;③条目履历引用的章内证据是否属实)、**编辑审**(结构、节奏、商业性、主角动机:主角每个主要行动是否有即时驱动、可见压力、预期收益、情绪原因,或明确标注为非理性行为)→ `工作区/评审报告/`。输出格式:结构化问题清单(severity + category + blocking),参考 v6 review schema。|
+| 6 | 两审 | AI ×2(各自新鲜上下文) | **事实审查**(v6 的 5 维度:设定一致性、时间线、叙事连贯、角色一致性、逻辑 + v7 特有项:①"要写到的事"逐条核对正文;②机检泄密候选是否真泄密;③条目履历引用的章内证据是否属实;④**未登记伏笔检测**:搭整章通读反查"正文里出现疑似伏笔但无对应条目",只出候选不拦截,见下)、**编辑审**(结构、节奏、商业性、主角动机:主角每个主要行动是否有即时驱动、可见压力、预期收益、情绪原因,或明确标注为非理性行为)→ `工作区/评审报告/`。输出格式:结构化问题清单(severity + category + blocking),参考 v6 review schema。|
 | 7 | 审稿 | **作者** | `工作区/审稿.md` = 草稿 + 三句话审意见 + 待确认新专名 + 章摘要(扫一眼可改)。动作:接受 / 改完接受 / 打回。手动模式逐章审;自动模式按批次审(§8.1)。**定稿永远需要作者敲定**(不变量 5) |
 | 8 | 定稿 | 脚本,**原子** | 见下 |
 
@@ -375,7 +380,7 @@ B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推
 
 - 两审输出结构化问题清单,每个问题包含:
   - `severity`: critical / high / medium / low
-  - `category`: 问题分类(事实审查:setting/timeline/continuity/character/logic/requirement/leak/evidence;编辑审:structure/pacing/commercial/motivation)
+  - `category`: 问题分类(事实审查:setting/timeline/continuity/character/logic/requirement/leak/evidence/unregistered_thread;编辑审:structure/pacing/commercial/motivation)
   - `blocking`: 是否阻断定稿(boolean)
   - `description`: 问题描述
   - `evidence`: 原文引用或数据对比
@@ -390,6 +395,15 @@ B 方案:本章纯感情线过渡(定位改"过渡章"),伏笔-031 推
   - 打回重写
 - **系统不强制完美**:非阻断问题作为"优化建议",作者可以在审稿单上标注"已知问题,接受现状"并定稿。
 
+**未登记伏笔检测**(D3,给纯声明制补漏网):
+
+v7 的伏笔/悬念/感情线是**声明制**——系统只跟踪细纲「本章要写到的事」声明、front matter 登记过的条目(§5/§7)。但写稿(第 4 步)是 AI 干净上下文,可能在正文里即兴埋钩子;这类坑无对应条目,不进"悬了太久"、卷复盘也扫不到,容易烂尾(Discussion #118 shuimushanjia 反馈)。
+
+- **机制**:事实审查本就通读整章(验证履历证据),顺带反查——正文里出现**疑似伏笔信号但无对应条目**的,产出 `category=unregistered_thread` 候选。与信息差泄密扫描同款(§4.3):**只出候选清单,永不拦截**。
+- **判定门槛保守**:仅捞同时满足"刻意强调 + 明显悬置 + 本章无即时解释 + 结构像 setup"者。`severity` 取 low/medium,**`blocking` 恒为 false**——即兴伏笔可能是神来之笔,不是缺陷。
+- **作者裁决**(第 7 步审稿单):登记成条目(触发"开新条目必须写收尾计划",自动防悬空)/ 忽略(普通描写)/ 删掉。
+- 边界:系统只负责"像伏笔但没登记"的提醒,不判断"这个伏笔好不好"。
+
 **定稿的一次 commit 包含**:草稿 → `定稿/正文/`(front matter 写入章档案与条目变动);`设定/` 变更(位置/状态/境界/持有/信息差/名册/时间线追加);涉及的三类条目文件更新(front matter + 履历追加);`摘要/章摘要/`(审稿单定稿版);工作区清空。
 
 **commit message 约定**(前缀 ASCII 是机器协议,便于 `git log --grep`):
@@ -501,6 +515,13 @@ v6 的 8 个命令全部内化为以上状态。作者只需要一个入口和"
 
 ## 14. 决策记录
 
+### 0.7 → 0.8(依据:RFC 深度核验 2026-06-27,Discussion #118 第 8 条评论 + v7 逐条核验)
+
+| # | 变更 | 落点 | 来源 |
+|---|------|------|------|
+| 25 | D3 未登记伏笔检测:事实审查增 `unregistered_thread` 候选项,搭整章通读反查"正文疑似伏笔但无条目",门槛保守、恒非阻断、作者裁决 | §8 第 6 步 | Discussion #118 shuimushanjia(06-22) |
+| 26 | D4 设定大纲单向依赖入宪:设定层只记客观事实不写排程,依赖单向(大纲→设定) | 不变量 13、§4.2 | Discussion #118 freezero2020(06-26) |
+
 ### 0.1 → 0.5
 
 历史决策 1-15 见 git 历史中的 0.5 版(要点:全中文目录;工作区默认不入 git;信息差轻量登记;章摘要作者过目;每条一文件 + 防呆方言 + 修复确认;「正典」→「定稿」;自动模式入规;运行时 Node;多宿主分层留白;机检扩充;反和解入律)。其中"每章必须结转承诺 + 豁免"已被 0.6 的声明制取代(见 16-18)。

+ 7 - 6
docs/architecture/v7-implementation-plan.md

@@ -1,7 +1,7 @@
 # webnovel-writer v7 实施计划(里程碑路线图)
 
-> 状态:草案 0.2(2026-06-26,反映 RFC 后续决策)
-> 上游:`v7-prd.md` 1.0、`story-repo-spec-2026-06-10.md` 0.7、`multi-agent-adaptation-spec-2026-06-05.md` v3.3、`.trellis/spec/backend/` 基线 1.0
+> 状态:草案 0.2(2026-06-26,反映 RFC 后续决策;2026-06-27 同步 D3/D4
+> 上游:`v7-prd.md` 1.0、`story-repo-spec-2026-06-10.md` 0.8、`multi-agent-adaptation-spec-2026-06-05.md` v3.4、`.trellis/spec/backend/` 基线 1.0
 > 地位:本文档管**实施排程**——把 PRD §6 的 v7.0 范围切成有依赖顺序、有出口判据的里程碑。范围与行为以 PRD/spec 为准,两者冲突时改本文档。
 
 ---
@@ -11,8 +11,8 @@
 | 事项 | 状态 |
 |---|---|
 | PRD 1.0 | ✅ 定稿(06-12,作者逐项确认) |
-| story-repo-spec 0.7 / multi-agent-spec v3.3 | ✅ 按 PRD §10 修订指令完成,RFC 后续决策已落地(06-26) |
-| RFC | ✅ 已发 Discussions(06-12),~06-19 收口,06-26 完成后续决策(A1/A2/A3/D1/D2) |
+| story-repo-spec 0.8 / multi-agent-spec v3.4 | ✅ 按 PRD §10 修订指令完成,RFC 后续决策已落地(06-26)+ RFC 深度核验 D3/D4(06-27) |
+| RFC | ✅ 已发 Discussions(06-12),~06-19 收口,06-26 完成后续决策(A1/A2/A3/D1/D2),06-27 深度核验补 D3/D4 |
 | 后端开发规范基线 1.0 | ✅ `.trellis/spec/backend/` |
 | v7 代码 | ❌ 0 行(`webnovel-writer/` 目录是 v6 遗产,冻结) |
 | PRD 开放问题 | O2/O3 已消解;**O4(精准读取接口完整清单 + `.cache` 表设计)归 M1 第一步**(不在 RFC 后续任务范围,需单独任务) |
@@ -135,14 +135,15 @@ steps:
 
 ### M4 AI 角色层 + 一级宿主壳(可与 M2/M3 部分并行)
 
-- SKILL.md 入口、角色单源生成三平台壳 + drift check(multi-agent-spec v3.3
+- SKILL.md 入口、角色单源生成三平台壳 + drift check(multi-agent-spec v3.4
 - 两审任务书单源(事实审查/编辑审,RFC 决策 D1/D2)、写评分离的上下文编排、降级模式(无 subagent 顺序执行,诚实声明隔离度下降)
 - 两审输出格式:结构化问题清单(severity + category + blocking),参考 v6 review schema
+- **D3 未登记伏笔检测**:事实审查搭整章通读,反查"正文疑似伏笔但无条目",产 `unregistered_thread` 候选,恒非阻断,作者裁决(spec 0.8 §8 第 6 步)
 - SessionStart 注入(读 `books.jsonl`);无 hook 宿主状态机入口等价路径
 - 知识层平移:37 题材模板、追读力分类、爽点节奏库(纯搬运,可提前并行做)
 - **架构实施**(§1.5 原则):AI 只吃 DTO(CharacterContext、ChapterBrief、ReviewInput),只吐结构化输出
 - **出口**:Claude Code + Codex 各跑一次真模型 smoke(建书引导→写 1 章→定稿→导出)
-- **出口**:Claude Code 与 Codex 各跑一次真模型 smoke——建书 → 写 1 章 → 审 → 定稿
+- **出口**:Claude Code 与 Codex 各跑一次真模型 smoke——建书 → 写 1 章 → 审 → 定稿
 
 ### M5 安装器与多本书