# v7 完整 PRD：webnovel-writer 重构

> 状态：brainstorm 草稿（持续更新中）
> 最终交付物：`docs/architecture/v7-prd.md`（完整产品需求文档）
> 上游文档：story-repo-spec 0.5（格式法律文本）、multi-agent-adaptation-spec v3.1（多宿主）、v7-design-discussion-notes（设计纪要）、story-repo-spec-feedback（差异意见，已吸收）

## Goal

为 v7 重构写一份完整 PRD——**从头重新设计，spec 0.5 的既有决策也在重审范围内**（作者 2026-06-11 决定：感觉 spec 仍有设计问题，0.5 的"冻结"解除，PRD 先行、spec 随 PRD 修订）。PRD 是 RFC 的母本，也是实施计划和 spec 下一版的输入。

## What I already know（spec 0.5 / 纪要的现有结论——降级为"候选设计"，可被 PRD 推翻）

- **定位**：长篇网文创作插件，200 万字级别，开源给非工程师写手，全中文化，Windows 中文编码优先。
- **架构已定**（spec 0.5）：一书一 git 仓库；定稿/大纲/文风/工作区四区；承诺系统是心脏；章事务八阶段+settle 原子 commit；盘面状态机单入口；决策卡是作者唯一界面；`.cache/index.db` 唯一派生物。
- **运行时已定**：Node 零依赖脚本；无 Python/pip/.env/DB/RAG。
- **自动模式已入规**（§8.1）：自动拍板/自动验收两开关，体检加密 8 章，三停止条件。
- **多宿主已定**（v3.1）：SKILL.md 开放标准零适配；角色单源生成三平台壳；hook 语义 ask 不 deny；npx 安装器；support.md+registry 分级（一级 Claude Code+Codex）。
- **迁移已定**：spec §12 有 v6→v7 完整映射表，`/migrate` 一次性脚本。
- **问题空间 16 项已盘**（纪要 §4）：优先级分层——1/2/5/7/14（客观事实记账/时间线/摘要分层/改稿三档/控制点滑杆）进骨架；3/8/9/11（信息差/反和解/桥段冷却/文风锚定）是差异化卖点；4/10/12（人设语气/情绪节奏/口癖）体检类后置。
- **诚实边界**：承诺"读者不出戏"，不承诺过 AI 检测器；合规/敏感词不进 v1。
- **流程已定**：先发 RFC 让用户拍砖，v7 新 major，v6 留 master 只修致命 bug。
- **Trellis 调研结论**（2026-06-11）：模板上下文+条件块编译降级路径；AGENTS.md 公约数层；update 哈希追踪——可吸收进多宿主实现。

## Assumptions (temporary)

- PRD 面向两类读者：开发实施者（含 AI）+ issue 区用户（RFC 改写母本），中文撰写。
- 章节结构假设：背景与目标 / 用户画像与作者旅程 / 功能需求（按问题空间映射）/ 非功能需求 / 范围切分 / 发布判据 / 风险与开放问题。

## Open Questions

（无——Q0~Q4 已全部收口，2026-06-12。结论见 Decision 各条：Q0→术语/账本/机制系列，Q1→范围-1，Q2→旅程-1，Q3→发布-1，Q4→流程-1。）

## Requirements (evolving)

- PRD 必须完整覆盖问题空间 16 项的产品化映射（每项：解法、所属版本、验收方式）。
- PRD 从产品视角重审 spec 0.5 全部设计；确认保留的引用章节号，推翻的记入 ADR-lite。
- **术语全面重审（Q0 第一项发现，作者提出）**：spec 0.5 大量名词有机翻感/行业黑话感（结转=会计、盘面=炒股、棘轮=机械、事务=数据库、镜头评审=lens 直译、retcon=英文）。PRD 附完整术语表，spec 随之修订。
- **命名原则（作者裁决）**：①网文圈原生词优先（伏笔/吃书/钩子/审稿）；②圈内没有的用自然大白话；③财务/工程/数据库隐喻禁止出现在作者界面；④**不自造两字精简词**——宁可用自然的长短语，不要为了"术语感"硬压缩（作者反馈：「你很喜欢精简词」，案头/入册这类生造压缩词也属此列）。

## Decision (ADR-lite)

### 术语-1：统一概念「承诺」改为「伏笔」（2026-06-11，作者拍板）

- **Context**: 「承诺」是 promise 直译，生硬；候选「坑」在圈内指整本书（挖坑=开新书、弃坑=断更），指单条线索会撞车。
- **Decision**: 采用方案 A「伏笔」：编号 伏-031；操作动词 埋下/推进/回收/放弃（"埋伏笔""回收伏笔"为圈内最高频原生短语）；「节奏债」改为"悬了太久"预警。~~悬念/感情线/立旗/爽点铺垫统一登记为伏笔~~（**2026-06-12 修订**：大一统外延被作者推翻——承诺是承诺，伏笔是伏笔，爽点/钩子是 v6 已有的独立体系，见 账本-1）。
- **Consequences**: 目录 `大纲/承诺/` → `大纲/伏笔/`；commit 协议前缀不变（机器域）。

### 账本-1：账本拆分——统一引擎、分类型目录（2026-06-12，修正 术语-1 的大一统外延）

- **Context**: 作者指出「伏笔」吞掉悬念/感情线/爽点是和「承诺」大一统同一个错误。查 v6 资料证实：爽点根本不是账本条目——追读力分类（危机钩/悬念钩/渴望钩/情绪钩/选择钩）、爽点与节奏.csv（压抑爆发/微反转补刀/黄金三章等几十种，按题材有偏好和毒点）是指导每章怎么写的**知识体系**，不是能登记"铺垫→兑现"的流水账。
- **Decision**（三层各归各位）:
  - **账本层**（有生命周期的才进账本，引擎一套共用：每条一文件、"悬了太久"预警、定稿结转；机器内部状态同构 open/advance/resolve/drop）：`大纲/伏笔/`（埋下→回收）、`大纲/悬念/`（设下→揭晓）、`大纲/感情线/`（开启→推进→修成正果/无疾而终）。冲突、立旗不设类（冲突每章都有不是条目；立旗是黑话直译，可归悬念或爽点知识）。
  - **知识层**：v6 references 体系（追读力分类、爽点与节奏 CSV、题材模板）**平移继承**，喂给细纲（按题材推荐本章钩子类型/情绪定位/爽点节拍）和三审读者审。
  - **每章属性**（章 front matter）：本章钩子类型与强弱、情绪定位（压抑/铺垫/小爽/大爽/转折）——单章的事不进账本。
  - "装逼打脸蓄积了多少章"（原"爽点库存"）= 信息差的派生报表，不需要独立机制。
- **同步拍板（2026-06-12，作者确认）**：plot_threads（剧情线）不进账本、并入卷纲正文（主线支线推进本来就是总纲/卷纲内容，再开一类账=重复记账）；v6→v7 迁移映射 foreshadowing→伏笔、plot_threads→并入卷纲、chase_debt/reading_power→知识层与章属性；"悬了太久"阈值分类型默认（感情线宽如 30 章、悬念/伏笔紧如 10 章量级，具体数值 spec 定）。

### 术语-2：全套术语表（2026-06-11，作者逐项裁决）

- **Context**: 命名四原则确立后，对 spec 0.5 全部作者可见术语重审。
- **Decision**:
  | spec 0.5 | v7 定名 |
  |---|---|
  | 承诺（P-031）| 伏笔（伏-031），埋下/推进/回收/放弃 |
  | 节奏债 | "悬了太久"预警 |
  | retcon 事务 | 吃书（吃书-87，commit 前缀仍 retcon）|
  | settle / 结转 | 定稿（动词，与 `定稿/` 目录一致）|
  | 章事务 | 写章流程 |
  | 盘面 | 全书近况 |
  | 上下文包 | 本章写作材料 |
  | 合同 | 本章要写到的事 |
  | 镜头评审 | 三审（读者审/编辑审/设定校对，出版业原生）|
  | 棘轮 | 删除该比喻，直接说"定稿前/定稿后" |
  | 风格宪法 | 文风铁律 |
  | 决策卡 | **取消"卡"概念**：环节叫"确认细纲"，文件 `工作区/细纲.md` |
  | 验收（卡）| 审稿，文件 `工作区/审稿.md` |
  | 修复卡 | 修复确认（同理去掉"卡"）|
  | 信息差/时间线/名册/金句库/体检/钩子/强弱钩 | 保留（原生或大白话）|
- **Consequences**: "卡"隐喻整体退场，每个环节用作者动作命名；spec 0.5 全文术语改写（§5、§7、§8、§10 重点）；机器协议（commit 前缀、book.yaml、编号格式）不动。「细纲」与传统细纲心智完全对齐：AI 拟细纲→作者点头或改。

### 安装-1：工作目录嵌套 + 强制项目级 + npx 单渠道（2026-06-11，作者拍板）

- **Context**: spec 0.5 只定义书仓库内容，没定义插件装到哪。v6 安装类 issue（#90/#103/#69）一半根源是用户级/项目级并存的歧义；插件市场渠道本身体验也不好（作者原话）。
- **Decision**:
  - 沿用 v6 的嵌套：**工作目录 ⊃ 书目录**。工程文件（`.claude/`、`.codex/`、`.webnovel/` 脚本与角色定义、AGENTS.md）全部住工作目录；书仓库（独立 git repo）里零工程文件，可多本书共用一套安装。
  - **强制安装到工作目录（项目级）**，不再支持用户级安装——所有用户目录结构一字不差，可诊断性优先于灵活性。
  - **分发只走 npx**（`npx webnovel-writer init` / `update`）：Claude Code 插件市场渠道放弃，市场版停在 v6 并指引 v7 新装法。
  - 配套：①脚本支持从书目录向上定位工作目录（定位规则进 spec）；②update 用 Trellis 式哈希追踪（没改过的直接更新，改过的提示）；③工作目录本身不是 git 仓库。
- **Consequences**: 多宿主 spec 的安装器章节重写；v6→v7 迁移要处理"市场版插件卸载+npx 重装"的引导；14 种宿主的安装拉平为同一张目录图。

### 格式-1：正文保留 front matter + 干净导出脚本（2026-06-11，作者拍板）

- **Context**: 章节文件头部的结构化档案（章号/视角/书内时间/本章要写到的事/伏笔结转）与"作者界面无机器味"的原则冲突。
- **Decision**: 保留完整 front matter（文件自包含、审计不依赖外部表的优势成立）；新增**导出命令**：一键导出去掉 front matter 的干净正文（单章/范围/全书），作者发布到平台（起点/番茄）本来就需要纯文本，一个脚本同时解决两件事。
- **Consequences**: 导出是零 token Node 脚本；导出目录默认 `工作区/导出/`（不进 git）；spec §4.1 补充导出命令。

### 格式-2：`定稿/记忆/` 改名 `定稿/摘要/`（2026-06-11）

- "记忆"是 AI 视角词，作者视角就是章摘要/卷摘要。机制不变。

### 技术-1：要求 Node ≥ 22（2026-06-11，作者拍板）

- 用内置 `node:sqlite` 实现 `.cache/index.db`，零依赖承诺保住；安装器检测 Node 版本，不足时人话提示升级。

### 机制-1：机检与三审职责重划（2026-06-11，作者确认，对抗性审查 #1+#3）

- **原则（作者强调，入宪）**：脚本能做的归脚本，做不到的归 AI 语义判断，**一定要分清楚；禁止用正则硬凑语义判断**（一点用没有）。
- 机检只留可计数项：字数、禁词/禁句式、复读、高频意象、句式体检、新专名比对名册、front matter 格式、伏笔文件是否变动（只查形式）。
- 语义判断移给三审设定校对：①"本章要写到的事"逐条核对；②信息差关键词命中的真泄密判断（机检只出候选清单，不拦截）。

### 机制-2：伏笔门检改声明制（2026-06-11，作者确认，对抗性审查 #2）

- 细纲声明本章定位（推进/过渡/日常），过渡章合法，消除模型撒谎动机。
- 伏笔履历行必须引用章内证据，设定校对核对。
- 自动模式连续 3 章（可配）无伏笔变动触发停止；体检统计伏笔活跃率。
- **态度（作者定调）**："悬了太久"是提醒不是错误，**有些伏笔收不了可以接受**——大神作家也有一堆填不上的坑。系统不逼作者填所有坑。

### 机制-3：自动模式的错误连锁处理（2026-06-11，对抗性审查 #5）

- 攒批审稿与体检周期对齐（默认 8 章），建议存稿期完成补审。
- 已发布后发现错误：影响分析脚本列出受影响章节 → 吃书（未发布部分）或顺势圆（已发布，主路径）。
- 新增人话命令"回到第 N 章"（git 回滚的包装）。

### 机制-4：git 隐身铁律（2026-06-11，作者确认，对抗性审查 #6）

- 入宪不变量：**作者永远不需要亲手敲 git 命令——真需要 git 操作时，由 AI 代为运行**；任何 git 异常都有人话修复流程。
- 状态机第 0 步前加 git 健康检查（半提交/冲突/锁文件/.git 损坏），每种配自动修复或人话指引；检测网盘冲突副本并人话警告。

### 格式-3：时间线按卷拆分（2026-06-11，作者确认，对抗性审查 #7）

- `定稿/设定/时间线/第NN卷.md`；写作材料默认只带当前卷+上一卷；跨卷查询走 `.cache`。

### 机制-5：金句库收割改保守 + 对话触发（2026-06-11，作者确认+补充，对抗性审查 #8）

- 自动判定只产生**候选**（作者改写且字数相近；净删减不算）。
- **新增触发（作者提出）**：作者在对话中夸某段（"那儿写得不错"之类）也触发收割候选。
- 最终入库一律经作者审核（审稿时顺手勾选），品味决策不交给阈值。

### 范围-1：v7.0 MVP 切分（2026-06-11，作者拍板）

- **切线原则**：已设计完且实现成本低的进 7.0；需要新设计或调参的体检类全部 7.x。
- **v7.0**：状态机单入口、写章流程八阶段（机检/三审新分工）、伏笔系统（声明制）、客观事实记账、时间线（按卷）、分层摘要、改稿三档、git 隐身全套、精准读取接口；自动模式（含"回到第 N 章"）、反和解规则、信息差登记（候选制）；npx 安装器、`/migrate`、干净导出、AGENTS.md；文风铁律 + 禁词/句式机检；金句库目录与手动放入（自动收割不进）。
- **v7.x**：金句库自动收割（含对话触发）、文风锚定、桥段冷却、语气盲测、情绪波形、口癖卡；多宿主二级平台（Gemini/Cursor）。
- **不做**：RAG/向量库、常驻服务、敏感词、AI 检测器承诺。
- 7.0 宿主范围：一级（Claude Code + Codex）。

### 术语-3：条目编号用全称（2026-06-12，作者拍板，消解 O6）

- **Decision**: 编号前缀不压缩，用全称：伏笔-031、悬念-008、感情线-012、信息差-021（原 P-031/S-021 与单字前缀方案废止）。理由：减少作者心智压力，与命名原则④（不过度压缩）一致。commit 前缀（ch/vol/retcon/fix）等机器协议不变。
- **Consequences**: spec §2"条目编号保留 ASCII"条款废止；文件名、履历、对话引用全部用全称编号。

### 机制-6：自动模式不直接定稿，按批次定稿（2026-06-12，作者拍板，消解 O7）

- **Context**: spec 0.5 §8.1 的"自动验收过线即 settle"让错误能不经人眼溜进定稿区，且攒批审稿单会被定稿清空工作区（O7 设计洞）。
- **Decision**:
  - **入宪**：定稿永远需要作者敲定，系统没有任何不经作者确认就写入定稿区的路径。"自动验收"开关删除。
  - 自动模式与手动模式的差异只是**确认粒度**：手动逐章审、逐章定稿；自动模式攒一个批次（默认与连写体检周期一致 8 章，可配）批量审稿、作者敲定后逐章按序定稿（原子性按章保留）。
  - 连写中草稿与预入账数据攒在工作区不定稿；写后续章的材料组装支持"定稿 + 待定稿批次"叠加视图（脚本提供）。
- **Consequences**: spec §8.1 重写；O7 消解（待审材料不再跨定稿存在）；错误最多污染一个批次且未定稿可直接改；机制-3 的"已发布后发现错误→顺势圆"路径保留，"自动验收溜进定稿"场景消失。

### 安装-2：工作目录书目录登记（jsonl）+ hook 注入，支持多本书切换（2026-06-12，作者提出并修订，消解 O3）

- **Decision**（修订：原"单行指针文件"升级为书目录登记）:
  - 工作目录放一个 **jsonl 登记文件**（候选 `.webnovel/books.jsonl`，机器域），每行一本书：书名/目录/是否当前在写/最后打开时间。脚本由它解析"当前书"与全部书单。
  - **SessionStart hook 注入上下文**（Claude Code）：会话启动时自动注入"当前在写哪本、工作目录共几本书、全书近况入口"。无 hook 宿主由状态机入口启动时读同一文件，行为等价（多宿主 spec §5.5 原则）。
  - 切换书 = 作者一句话（"换到《另一本》"），AI 改登记文件（对话即编辑器）；作者不需要手编 jsonl。
- **启动点规则**（修订 2，2026-06-12，作者指正）: **只支持从工作目录启动**——各宿主只在启动目录自动加载 skills/配置（`.claude/`、`.codex/` 都住工作目录），在书目录启动插件根本不会加载，原"所在书目录优先"规则不可达，废止；安装-1 配套①"从书目录向上定位工作目录"一并废止。当前书一律由登记文件决定。脚本启动时校验当前目录含 `.webnovel/`，否则人话提示"请从工作目录启动"。
- **优先级规则**: ~~启动位置已在某书目录内（向上定位命中）→ 以所在书为准~~（废止，见启动点规则）；登记文件缺失/损坏 → **扫描工作目录下含 book.yaml 的子目录重建书单**（书单是可重建派生物），"当前在写"标记请作者选一次。
- **Consequences**: 工作目录布局图与两份 spec 的安装/hook 章节加该文件；同时写两本按"一书一会话"自然成立。

### 安装-3：书仓库根部放指路 AGENTS.md（2026-06-12，作者确认，消解 O1）

- **Context**: 限制工作目录启动后，误在书目录启动 AI 工具会一片寂静（什么都不加载）；单独 clone 书仓库同理。
- **Decision**: 书仓库根部放 `AGENTS.md`（建书/迁移时自动生成），内容一段中文："这是 webnovel-writer 管理的小说仓库，请回上一层工作目录启动 AI 工具；若单独 clone 了本仓库，运行 `npx webnovel-writer init` 重建工作目录。"选 AGENTS.md 而非自造中文文件名，因为误启动场景里能救场的是 AI 工具会**自动读**的文件（30+ 工具认的开放标准）。
- **Consequences**: "书仓库零工程文件"原则收一个显式例外（仅此一个文件）；目录图与 spec §2 更新。

### 范围-2：按需静态 HTML 简报保留，归 7.x（2026-06-12，作者反问拍板）

- **Context**: Claude 曾建议砍掉 Dashboard 残余；作者反问"不用 HTML 渲染简报，全书近况的表达方式适合人类读吗"——成立。
- **Decision**: 全书近况与简报分工：全书近况是对话内 5-8 行文本，管"此刻决策"；**浏览级信息**（账本全貌、体检统计/情绪波形、时间线翻阅、卷复盘材料）归**按需静态简报**——零 token Node 脚本读 `.cache`/源文件，渲染**单文件 HTML**（内联样式、无外链、无服务器），作者一句"给我看全书简报"即生成。即 spec 0.5 §13 原案"Dashboard 改为按需静态简报"的落实。
- **版本**: 7.x（简报内容尚未设计，按切线原则不进 7.0）。

### 流程-2：不做术语禁用词 CI 检查（2026-06-12，作者拍板）

- Claude 曾建议把"作者界面禁用词清单"做成 CI 检查防术语回潮；作者裁决**不做**——术语一致性靠自审与评审把关，避免误杀与维护负担。

### 旅程-1：主旅程定为新书作者（2026-06-12，作者拍板，Q2）

- **Context**: 三条作者旅程（新书 / v6 迁移 / 连写党）都要完整覆盖，但需一条主旅程定 PRD 叙事主线、7.0 打磨深度排序与发布判据权重。
- **Decision**: **新书作者优先**。零基础新书旅程（npx 安装→建书→写第一章）是产品定义本身；v6 迁移作者排第二，连写党作为日常写作的一种模式（§8.1 开关）而非独立门面。
- **Consequences**: PRD 叙事主线按"一个没用过的作者从零到稳定日更"展开；迁移章节独立成节但不绑架主叙事；自动模式在"日常写作"内作为进阶小节出现。

### 发布-1：三阶段发布判据（2026-06-12，作者确认，Q3）

- **发 RFC**：PRD 定稿 + 术语表/目录图/三条作者旅程齐 → 征求意见至少开放 1 周。
- **beta**：用 v7 真实写一本书到 50 章（自用验证）+ Windows 中文路径全链路 CI 绿 + "删光 .cache 全量重建" CI 绿。
- **7.0.0**：`/migrate` 在 ≥3 个真实 v6 项目跑通 + beta 期无数据丢失级 bug + 迁移指引文档齐。

### 流程-1：PRD 落点与 RFC 渠道（2026-06-12，作者拍板，Q4）

- PRD 落盘 `docs/architecture/v7-prd.md`，PR 进 v7 分支。
- RFC 是 PRD 的大白话裁剪版，发 **GitHub Discussions**（需先给仓库开启 Discussions），按"issue 回复用大白话、面向写小说的用户"的口径撰写；可在 issue 区发一条置顶指引链接过去。

### 原则-1：精准读取，非必要不全文读（2026-06-11，作者提出）

- **所有数据文件的读取都应有"精准读到所需一段"的命令**：按章号/编号/小节定位提取（如"读伏-031 的履历""读第 5 卷卷纲的高潮节点""读 0152 章结尾 500 字"），由脚本提供。
- AI 非必要不整文件读取——包括参考资料、大纲、设定。这是 v6 token 失控病根（#58/#92/#106）的根治手段之一，与"分层摘要+Grep 正文"配套。
- **Consequences**: 每类文件的 spec 定义都要附"定位读取"的脚本接口；`.cache/index.db` 的表设计要支撑这些查询；写作材料组装默认用精准片段。

## Acceptance Criteria (evolving)

- [ ] 三条作者旅程完整（安装→建书/迁移→日常写作→卷复盘）
- [ ] 16 项问题空间每项有归属（v7.0 / v7.x / 不做）
- [ ] 发布判据可执行（每阶段有可验证的过线条件）
- [ ] RFC 可从 PRD 直接裁剪产出

## Definition of Done

- PRD 经作者（仓库 owner）逐节确认
- 落盘 `docs/architecture/v7-prd.md`，PR 进 v7 分支
- docs/README.md 索引更新

## Out of Scope (explicit)

- 不含实施计划（PRD 确认后另立任务）
- 合规/敏感词、AI 检测器承诺

## Technical Notes

- 素材：docs/architecture/ 四份文档；v6 issue 区（#58-#106 已在纪要盘点）
- 子代理不可用（API 429），研究全部内联
