Pārlūkot izejas kodu

docs: 重写 webnovel-review 与 webnovel-plan 并补齐关键 references

- review: 加入常见误区/优先级链/决策树,引用改为绑定表
- plan: 加入常见误区/优先级链/决策树,References 改为 Step+trigger 绑定
- 新增 blocking-override-guidelines.md (review Step 6)
- 新增 plot-signal-vs-spoiler.md (plan 章纲拆分)
lingfengQAQ 2 mēneši atpakaļ
vecāks
revīzija
26b2bfaa5e

+ 53 - 0
webnovel-writer/references/outlining/plot-signal-vs-spoiler.md

@@ -0,0 +1,53 @@
+---
+name: plot-signal-vs-spoiler
+purpose: plan 章纲拆分时区分"信号"与"剧透"
+---
+
+# Plot Signal vs Spoiler
+
+> 主服务 skill: `webnovel-plan` 章纲拆分(Step 7)
+> 内容层级: 提醒层 / 缺陷补偿层 / 知识补充层
+
+---
+
+## 提醒层
+
+- 章纲要给写作方向,不是把读者体验提前讲完
+- 章纲是写给**作者**的执行指令,不是写给**读者**的预告
+- 结构化节点(CBN/CPNs/CEN)描述的是"发生什么",不是"读者感受什么"
+
+## 缺陷补偿层
+
+### 禁止的剧透式写法
+
+- ❌ 用揭底句做普通章纲信号:`主角意识到一切都是骗局`(这是高潮揭示,不应在章纲中暴露)
+- ❌ 用读者视角总结情感:`读者会为主角的选择感到震撼`(章纲不写读者反应)
+- ❌ 在早期章纲中泄露后期反转:`这个角色其实是卧底`(应在反转章才出现)
+
+### 必须区分的两类信息
+
+| 类型 | 定义 | 章纲中的表达方式 |
+|------|------|----------------|
+| **信号**(Signal) | 读者可感知的承诺——暗示有事要发生 | `主角注意到老者的异常举动` |
+| **剧透**(Spoiler) | 作者内部真相——直接揭示结果 | `老者是隐藏的大宗师` |
+
+章纲中只写**信号**,不写**剧透**。例外:当章纲本身就是揭示章时,可以写真相。
+
+## 知识补充层
+
+### 正反例对比
+
+**例 1:伏笔设置**
+
+- ✅ 信号写法:`萧炎在药材铺发现一枚奇怪的戒指,戒指微微发烫`
+- ❌ 剧透写法:`萧炎获得药老戒指,戒指中封印着斗尊级强者的灵魂`
+
+**例 2:角色动机**
+
+- ✅ 信号写法:`云韵主动邀请萧炎参加比赛,态度反常地热情`
+- ❌ 剧透写法:`云韵想利用萧炎的异火来解除自己的寒毒`
+
+**例 3:冲突升级**
+
+- ✅ 信号写法:`纳兰嫣然的侍从出现在城门口,阻止萧炎通行`
+- ❌ 剧透写法:`纳兰家族决定提前毁约,派人拦截萧炎以防他到达约定地点`

+ 47 - 0
webnovel-writer/references/review/blocking-override-guidelines.md

@@ -0,0 +1,47 @@
+---
+name: blocking-override-guidelines
+purpose: review Step 6 blocking issue 用户裁决参考
+---
+
+# Blocking Override Guidelines
+
+> 主服务 skill: `webnovel-review` Step 6
+> 次服务 skill: `webnovel-write` Step 3(blocking 循环时参考)
+> 内容层级: 提醒层 / 缺陷补偿层 / 知识补充层
+
+---
+
+## 提醒层
+
+- 只有用户明确承担风险时才允许 override blocking issue
+- override 不等于"问题不存在",而是"用户决定接受后果"
+- override 后仍应在审查报告中保留原始 issue 记录
+
+## 缺陷补偿层
+
+以下情况**禁止建议 override**:
+
+- issue 涉及**设定冲突**(角色能力、世界规则、势力关系与设定集矛盾)
+- issue 涉及**时间线冲突**(事件顺序、时间跨度与已有章节矛盾)
+- issue 涉及**事实错误**(角色死亡后复活、已销毁道具再次出现等)
+- issue 涉及**连续性断裂**(上章结尾与本章开头无法衔接)
+
+以下情况**可以考虑 override**(但仍需用户确认):
+
+- issue 是**节奏偏差**(本章偏慢/偏快,但不影响剧情正确性)
+- issue 是**风格建议**(对话过于书面化、描写密度偏高等)
+- issue 是**结构化节点未完全覆盖**(可选节点未落地,但必须节点已覆盖)
+
+## 知识补充层
+
+### 可 override 的典型场景
+
+1. **过渡章节奏偏慢**:reviewer 报告 pacing_score 低,但本章是故意铺垫,用户确认后 override
+2. **对话风格偏书面**:reviewer 标记 ai_flavor,但角色设定就是学者/官员,书面语合理
+3. **可选节点未覆盖**:CPN 中某个可选推进节点在正文中隐含但未显式展开
+
+### 不可 override 的典型场景
+
+1. **角色能力超出当前境界**:主角使用了尚未觉醒的能力
+2. **地点穿越**:上章在 A 城,本章无交代突然在 B 城
+3. **已死角色复活**:被明确写死的角色在后续章节中出现

+ 52 - 11
webnovel-writer/skills/webnovel-plan/SKILL.md

@@ -20,6 +20,30 @@ description: 基于总纲生成卷纲、时间线和章纲,并把新增设定
 4. 若发现总纲与设定冲突,先阻断,再等用户裁决。
 5. 结构化节点服务于写作执行,不追求语法学上的严格 SVO 抽取。
 
+## 常见误区
+
+- ❌ 先拆章再想卷级目标
+- ❌ 时间线字段缺失但仍继续拆章
+- ❌ 把结构化节点写成空泛摘要句
+- ❌ 一次性读完全部 reference 再开始规划
+- ❌ 发现设定冲突后继续产出章纲而不阻断
+
+## 优先级链
+
+1. 用户明确要求(最高)
+2. 总纲核心冲突与卷末高潮(不可偏离)
+3. 时间线硬约束(单调递增、倒计时正确)
+4. skill 默认流程
+5. reference 建议(最低)
+
+## 决策树入口
+
+- 若项目根不合法或总纲缺失 → **阻断**
+- 若总纲缺少卷名/章节范围/核心冲突/卷末高潮 → **阻断**,请求用户补全
+- 若 Step 2 发现设定冲突 → **标记 BLOCKER**,等待用户裁决
+- 若批量拆章时时间回跳且未标注闪回 → **阻断**当前批次
+- 若 Step 9 验证失败 → 只重做失败批次,不覆盖整卷
+
 ## 环境准备
 
 ```bash
@@ -29,17 +53,34 @@ export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
 export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
 ```
 
-## References
-
-- Step 4:`../../templates/output/大纲-卷节拍表.md`
-- Step 5:`../../templates/output/大纲-卷时间线.md`
-- Step 6:`../../references/genre-profiles.md`
-- Step 6:`../../references/shared/strand-weave-pattern.md`
-- Step 6:`../../references/shared/cool-points-guide.md`(按需)
-- Step 6/7:`references/outlining/conflict-design.md`(按需)
-- Step 7:`../../references/reading-power-taxonomy.md`(按需)
-- Step 7:`references/outlining/chapter-planning.md`(按需)
-- Step 6/7:`references/outlining/genre-volume-pacing.md`(特定题材按需)
+## 引用加载策略
+
+### md 必读
+
+| Step | Trigger | Reference |
+|------|---------|-----------|
+| Step 4 | always | `templates/output/大纲-卷节拍表.md` |
+| Step 5 | always | `templates/output/大纲-卷时间线.md` |
+| Step 6 | always | `references/genre-profiles.md` |
+| Step 6 | always | `references/shared/strand-weave-pattern.md` |
+| 章纲拆分 | always | `references/outlining/plot-signal-vs-spoiler.md` |
+
+### md 按需
+
+| Step | Trigger | Reference |
+|------|---------|-----------|
+| Step 6 | 需要爽点设计 | `references/shared/cool-points-guide.md` |
+| Step 6/7 | 需要冲突设计 | `references/outlining/conflict-design.md` |
+| Step 7 | 需要追读力分析 | `references/reading-power-taxonomy.md` |
+| Step 7 | 需要章纲细化 | `references/outlining/chapter-planning.md` |
+| Step 6/7 | 特定题材节奏 | `references/outlining/genre-volume-pacing.md` |
+
+### CSV 检索
+
+| Step | Trigger | 检索命令 |
+|------|---------|---------|
+| 卷级规划 | always | `python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill plan --table 场景写法 --query "卷级结构 叙事功能"` |
+| 章纲拆分 | 新增角色出现 | `... --skill plan --table 命名规则 --query "角色命名" --genre {题材}` |
 
 ## 执行流程
 

+ 39 - 15
webnovel-writer/skills/webnovel-review/SKILL.md

@@ -13,6 +13,29 @@ allowed-tools: Read Grep Write Edit Bash Task AskUserQuestion
 - 把审查指标写入 `index.db`,并把审查记录写回 `state.json`。
 - 若存在关键问题,明确交给用户决定是否立即返工。
 
+## 常见误区
+
+- ❌ 没看 reviewer 原始 JSON 就直接口头总结
+- ❌ 有 blocking issue 仍将流程视为通过
+- ❌ 把 report 文件生成等同于已落库(`save-review-metrics` 未跑)
+- ❌ 主流程伪造 `overall_score` 或审查结论
+- ❌ 按需参考一次性全部读完
+
+## 优先级链
+
+1. 用户明确要求(最高)
+2. `blocking=true` 硬门槛
+3. 项目私有约束(设定集、已有剧情)
+4. skill 默认流程
+5. reference 建议(最低)
+
+## 决策树入口
+
+- 若项目根不合法或缺少 `.webnovel/state.json` → **阻断**
+- 若正文文件不存在 → **阻断**
+- 若 reviewer 返回 `blocking=true` issue → 进入 Step 6 用户裁决
+- 若所有 issue 均为非 blocking → 正常落库,流程结束
+
 ## 执行流程
 
 ### Step 1:解析项目根目录并建立环境变量
@@ -30,25 +53,26 @@ export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WOR
 
 ### Step 2:按需加载参考资料
 
-必读
+#### md 必读
 
-```bash
-cat "${SKILL_ROOT}/../../references/shared/core-constraints.md"
-cat "${SKILL_ROOT}/../../references/review-schema.md"
-```
+| Trigger | Reference |
+|---------|-----------|
+| always | `references/shared/core-constraints.md` |
+| always | `references/review-schema.md` |
 
-按需加载:
+#### md 按需
 
-```bash
-cat "${SKILL_ROOT}/../../references/shared/cool-points-guide.md"
-cat "${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md"
-cat "${SKILL_ROOT}/references/common-mistakes.md"
-cat "${SKILL_ROOT}/references/pacing-control.md"
-```
+| Trigger | Reference |
+|---------|-----------|
+| 审查涉及爽点或钩子分析 | `references/shared/cool-points-guide.md` |
+| 审查涉及多线交织 | `references/shared/strand-weave-pattern.md` |
+| blocking issue 需用户决策 (Step 6) | `references/review/blocking-override-guidelines.md` |
+
+#### CSV 检索
 
-规则:
-- 先判定 Core 或 Full 审查深度,再加载对应参考
-- 不得在未触发时一次性读完全部资料
+| Trigger | 检索命令 |
+|---------|---------|
+| ai_flavor issue ≥ 3 | `python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill review --query "AI味 反例 替换"` |
 
 ### Step 3:加载项目状态与待审正文