Просмотр исходного кода

refactor: webnovel-write SKILL.md v6——7步流程,单reviewer,合并风格适配

lingfengQAQ 2 месяцев назад
Родитель
Сommit
17cfa80351

+ 56 - 156
webnovel-writer/skills/webnovel-write/SKILL.md

@@ -24,13 +24,13 @@ allowed-tools: Read Write Edit Grep Bash Task
 
 ## 模式定义
 
-- `/webnovel-write`:Step 0.5 → Step 1 → Step 2A → Step 2B → Step 3 → Step 4 → Step 5 → Step 6
-- `/webnovel-write --fast`:Step 0.5 → Step 1 → Step 2A → Step 3 → Step 4 → Step 5 → Step 6
-- `/webnovel-write --minimal`:Step 0.5 → Step 1 → Step 2A → Step 2B → Step 3(仅核心 3 个审查器)→ Step 4 → Step 5 → Step 6
+- `/webnovel-write`:Step 0.5 → Step 1 → Step 2 → Step 3 → Step 4 → Step 5 → Step 6
+- `/webnovel-write --fast`:Step 0.5 → Step 1 → Step 2 → Step 3(轻量) → Step 4 → Step 5 → Step 6
+- `/webnovel-write --minimal`:Step 0.5 → Step 1 → Step 2 → Step 4(仅排版) → Step 5 → Step 6
 
 最小产物:
 - 章节正文文件
-- `index.db.review_metrics` 新记录
+- `index.db.review_metrics` 新记录(`--minimal` 除外)
 - `.webnovel/summaries/ch{NNNN}.md`
 - `.webnovel/state.json` 的进度与 `chapter_meta`
 - `.webnovel/memory_scratchpad.json` 的长期记忆事实
@@ -42,7 +42,6 @@ allowed-tools: Read Write Edit Grep Bash Task
 - 禁止改名:标准产物文件名和格式不得私自改写。
 - 禁止伪造审查:Step 3 必须由 Task 子代理执行。
 - 禁止源码探测:CLI 调用方式以本文档和 agent 文档为准,命令失败优先查日志。
-- Workflow step-id 必须使用实现侧真实编号:`Step 0.5`、`Step 1`、`Step 2A`、`Step 2B`、`Step 3`、`Step 4`、`Step 5`、`Step 6`。
 
 ## 引用加载等级
 
@@ -52,18 +51,16 @@ allowed-tools: Read Write Edit Grep Bash Task
 
 ## References
 
-- `references/step-3-review-gate.md`
-  - 用途:Step 3 审查调用模板与落库规范。
-- `references/step-5-debt-switch.md`
-  - 用途:Step 5 债务利息开关规则。
+- `../../references/review-schema.md`
+  - 用途:Step 3 审查输出 schema 定义。
 - `../../references/shared/core-constraints.md`
-  - 用途:Step 2A 起草硬约束。
+  - 用途:Step 2 起草硬约束。
 - `references/polish-guide.md`
   - 用途:Step 4 润色与终检规则。
 - `references/writing/typesetting.md`
   - 用途:Step 4 排版检查。
 - `references/style-adapter.md`
-  - 用途:Step 2B 风格适配规则。
+  - 用途:Step 4 风格适配规则。
 - `references/style-variants.md`
   - 用途:Step 1 差异化设计。
 - `../../references/reading-power-taxonomy.md`
@@ -84,7 +81,7 @@ allowed-tools: Read Write Edit Grep Bash Task
 
 - `Read/Grep`:读取大纲、状态、正文与参考资料。
 - `Bash`:运行 `webnovel.py` 与相关脚本。
-- `Task`:调用 `context-agent`、审查器与 `data-agent`。
+- `Task`:调用 `context-agent`、`reviewer` 与 `data-agent`。
 
 ## 执行流程
 
@@ -108,22 +105,10 @@ export PROJECT_ROOT="$(python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-roo
 - `preflight` 必须成功。
 - 任一核心输入缺失立即阻断。
 
-任务记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-task --command webnovel-write --chapter {chapter_num} || true
-```
-
 ### Step 0.5:轻量节点预检
 
 目的:在不阻断流程的前提下,对章纲中的结构化节点做轻量一致性提醒。
 
-执行前记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 0.5" --step-name "节点预检" || true
-```
-
 规则:
 - 只在当前章详细大纲存在 `CBN/CEN` 时执行。
 - 只检查主角或 POV 角色相关节点。
@@ -137,20 +122,8 @@ python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" wor
 - `[NODE_WARNING] CBN 地点与当前状态不一致: 章纲=迦南学院入口, 实际=乌坦城`
 - `[NODE_WARNING] CBN 强度要求与当前境界不一致: 章纲=斗师级压制, 实际=斗者三星`
 
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 0.5" --artifacts '{"node_precheck":true}' || true
-```
-
 ### Step 1:调用 Context Agent 生成执行包
 
-记录开始:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 1" --step-name "Context Agent" || true
-```
-
 使用 Task 调用 `context-agent`,输入:
 - `chapter`
 - `project_root`
@@ -159,23 +132,16 @@ python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" wor
 - 若存在 `NODE_WARNING`,一并传入
 
 硬要求:
-- 输出必须包含任务书、Context Contract、Step 2A 直写提示词。
+- 输出必须包含任务书、Context Contract、Step 2 直写提示词。
 - 执行包中必须纳入长期记忆约束与时间约束。
-- 若章纲提供结构化节点,执行包中必须包含“情节结构”板块与节拍映射。
-
-记录完成:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 1" --artifacts '{"context_package":true}' || true
-```
+- 若章纲提供结构化节点,执行包中必须包含"情节结构"板块与节拍映射。
 
-### Step 2A:起草正文
+### Step 2:起草正文
 
 执行前必须加载:
 
 ```bash
 cat "${SKILL_ROOT}/../../references/shared/core-constraints.md"
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 2A" --step-name "正文起草" || true
 ```
 
 硬要求:
@@ -185,123 +151,75 @@ python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" wor
 - 中文思维写作,不使用英文框架骨架驱动正文。
 - 若存在结构化节点:正文必须围绕 `CBN -> CPNs -> CEN` 展开,不得跳过必须节点。
 
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 2A" --artifacts '{"chapter_draft":true}' || true
-```
-
-### Step 2B:风格适配(`--fast` 跳过)
-
-执行前加载:
-
-```bash
-cat "${SKILL_ROOT}/references/style-adapter.md"
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 2B" --step-name "风格适配" || true
-```
-
-硬要求:
-- 只改表达,不改事实、事件顺序、人物行为结果、设定规则。
-- 重点消除模板腔、说明腔、机械腔。
-- 若存在结构化节点,不得因风格改写破坏节点顺序和收束方向。
-
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 2B" --artifacts '{"style_adapted":true}' || true
-```
-
-### Step 3:执行审查并落库
+### Step 3:执行审查
 
-执行前加载:
-
-```bash
-cat "${SKILL_ROOT}/references/step-3-review-gate.md"
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 3" --step-name "审查" || true
-```
-
-调用约束:
-- 必须用 Task 调用审查子代理。
-- 默认使用 `auto` 路由动态选择检查器。
-
-核心审查器:
-- `consistency-checker`
-- `continuity-checker`
-- `ooc-checker`
+使用 Task 调用 `reviewer` agent,输入:
+- `chapter`
+- `chapter_file`(正文文件路径)
+- `project_root`
+- `scripts_dir`
 
-条件审查器:
-- `reader-pull-checker`
-- `high-point-checker`
-- `pacing-checker`
-
-模式规则:
-- 标准模式与 `--fast`:核心 3 个 + auto 命中的条件审查器
-- `--minimal`:只跑核心 3 个
+reviewer 输出为结构化问题清单 JSON(参见 `review-schema.md`),保存到中间产物路径。
 
 Step 3 中间产物约定:
-- checker 原始结果:`${PROJECT_ROOT}/.webnovel/tmp/review_results.json`
-- 聚合结果:`${PROJECT_ROOT}/.webnovel/tmp/review_aggregated.json`
+- reviewer 原始结果:`${PROJECT_ROOT}/.webnovel/tmp/review_results.json`
 - 落库指标:`${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json`
 
 标准文件流:
 
 ```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" review-pipeline   --chapter {chapter_num}   --review-results "${PROJECT_ROOT}/.webnovel/tmp/review_results.json"   --aggregated-out "${PROJECT_ROOT}/.webnovel/tmp/review_aggregated.json"   --review-metrics-out "${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json"   --report-file "审查报告/第{chapter_num}章审查报告.md"
-
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index save-review-metrics --data "@${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json"
+python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" review-pipeline \
+  --chapter {chapter_num} \
+  --review-results "${PROJECT_ROOT}/.webnovel/tmp/review_results.json" \
+  --metrics-out "${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json" \
+  --report-file "审查报告/第{chapter_num}章审查报告.md"
+
+python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index save-review-metrics \
+  --data "@${PROJECT_ROOT}/.webnovel/tmp/review_metrics.json"
 ```
 
-硬要求:
-- `review_results.json` 必须保留各 checker 原始结构化结果。
-- `review_aggregated.json` 必须包含 `overall_score`、`issues` 与 `timeline_gate`。
-- `review_metrics.json` 的 `notes` 必须是单个字符串。
-- 若 `review_aggregated.json.timeline_gate.blocked=true`,不得进入 Step 4/5。
-- Step 4 必须直接消费 `review_results.json` 与 `review_aggregated.json`。
-
-完成后记录:
+阻断规则:
+- 若存在任何 `blocking=true` 的 issue,不得进入 Step 4/5。
+- 必须先修复 blocking issue 后重新审查,或用户明确覆盖。
 
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 3" --artifacts '{"review_completed":true}' || true
-```
+模式规则:
+- 标准模式:完整审查(全维度)
+- `--fast`:轻量审查(reviewer 仅检查 setting/timeline/continuity 三个维度)
+- `--minimal`:跳过 Step 3
 
-### Step 4:润色与全文终检
+### Step 4:润色 + 风格适配 + Anti-AI 修复
 
 执行前必须加载:
 
 ```bash
 cat "${SKILL_ROOT}/references/polish-guide.md"
 cat "${SKILL_ROOT}/references/writing/typesetting.md"
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 4" --step-name "润色" || true
+cat "${SKILL_ROOT}/references/style-adapter.md"
 ```
 
 执行顺序:
-1. 修复已知严重问题
-2. 统一段落、节奏、排版
-3. 执行 Anti-AI 与 No-Poison 全文终检
+1. 消费 Step 3 的问题清单,逐条修复非 blocking issue(blocking 已在 Step 3 阻断)
+2. 风格适配:消除模板腔、说明腔、机械腔(原 Step 2B 的职责)
+3. 统一段落、节奏、排版
+4. Anti-AI 全文终检
 
-硬要求:
+风格适配硬要求:
+- 只改表达,不改事实、事件顺序、人物行为结果、设定规则。
+- 若存在结构化节点,不得因风格改写破坏节点顺序和收束方向。
+
+Anti-AI 硬要求:
 - 必须输出 `anti_ai_force_check=pass/fail`
 - `fail` 时不得进入 Step 5
 - 有节点时,不得在润色中删除必须节点对应的情节落点
 
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 4" --artifacts '{"anti_ai_force_check":"pass"}' || true
-```
+模式规则:
+- `--minimal`:仅排版,跳过问题修复、风格适配和 Anti-AI 终检
 
 ### Step 5:调用 Data Agent 回写结构化数据
 
-执行前记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 5" --step-name "Data Agent" || true
-```
-
 使用 Task 调用 `data-agent`,参数:
 - `chapter`
 - `chapter_file`
-- `review_score=Step 3 overall_score`
 - `project_root`
 - `storage_path=.webnovel/`
 - `state_file=.webnovel/state.json`
@@ -314,8 +232,7 @@ Data Agent 默认子步骤全部执行:
 - 提取长期记忆 `memory_facts`
 - 场景切片
 - RAG 向量索引
-- 风格样本评估(仅 `review_score >= 80`)
-- 债务利息(默认关闭)
+- 债务利息(默认关闭,仅用户明确要求或项目显式启用时开启)
 
 失败隔离规则:
 - state/index/summary/memory 写入失败:只重跑 Step 5
@@ -333,18 +250,9 @@ Data Agent 默认子步骤全部执行:
 - 读取最新 timing 记录
 - `TOTAL > 30000ms` 时,输出最慢 2-3 个环节与原因说明
 
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 5" --artifacts '{"state_json_modified":true,"entities_appeared":true}' || true
-```
-
 ### Step 6:Git 备份
 
-执行前记录:
-
 ```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow start-step --step-id "Step 6" --step-name "Git 备份" || true
 git add .
 git -c i18n.commitEncoding=UTF-8 commit -m "第{chapter_num}章: {title}"
 ```
@@ -353,25 +261,17 @@ git -c i18n.commitEncoding=UTF-8 commit -m "第{chapter_num}章: {title}"
 - 所有验证和回写完成后最后执行。
 - commit 失败时,必须说明失败原因与未提交文件范围。
 
-完成后记录:
-
-```bash
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-step --step-id "Step 6" --artifacts '{"git_status":{"committed":true}}' || true
-python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" workflow complete-task --artifacts '{"ok":true}' || true
-```
-
 ## 充分性闸门
 
 未满足以下条件前,不得结束流程:
 
 1. 章节正文文件存在且非空。
-2. Step 3 已产出 `${PROJECT_ROOT}/.webnovel/tmp/review_aggregated.json`,其中包含 `overall_score`。
-3. Step 3 的 `review_metrics` 已落库。
-4. 若存在 `timeline_gate.blocked=true`,流程必须停在 Step 3。
-5. Step 4 的 `anti_ai_force_check=pass`。
-6. Step 5 已更新 `state.json`、`index.db`、`summaries/ch{chapter_padded}.md`。
-7. Step 5 已写入 `.webnovel/memory_scratchpad.json`。
-8. 若启用观测,已读取最新 timing 记录并给出结论。
+2. Step 3 已产出审查结果并落库(`--minimal` 除外)。
+3. 若存在 `blocking=true` 的 issue,流程必须停在 Step 3。
+4. Step 4 的 `anti_ai_force_check=pass`(`--minimal` 除外)。
+5. Step 5 已更新 `state.json`、`index.db`、`summaries/ch{chapter_padded}.md`。
+6. Step 5 已写入 `.webnovel/memory_scratchpad.json`。
+7. 若启用观测,已读取最新 timing 记录并给出结论。
 
 ## 验证与交付
 
@@ -386,7 +286,7 @@ tail -n 1 "${PROJECT_ROOT}/.webnovel/observability/data_agent_timing.jsonl" || t
 
 成功标准:
 - 章节文件、摘要文件、状态文件、长期记忆暂存文件齐全且内容可读。
-- 审查分数可追溯,`overall_score` 与 Step 5 输入一致
+- 审查结果可追溯
 - 润色后未破坏大纲、设定与长期记忆约束。
 
 ## 失败处理

+ 0 - 49
webnovel-writer/skills/webnovel-write/references/step-1.5-contract.md

@@ -1,49 +0,0 @@
-# Step 1.5 Contract Template
-
-## 目标
-
-把 `extract_chapter_context.py` 的上下文与 guidance 收束成“可执行合同”,直接驱动 Step 2A。
-
-## 必填输出结构(Scene-Sequel 最小闭环)
-
-- 目标(20字内)
-- 阻力(20字内)
-- 代价(20字内)
-- 本章变化(30字内,优先可量化:关系/资源/风险/地位/能力)
-- 未闭合问题(30字内,后段或章末)
-- 核心冲突一句话
-- 开头类型(冲突/悬疑/动作/对话/氛围)
-- 情绪节奏(低→高/高→低/低→高→低/平稳)
-- 信息密度(low/medium/high)
-- 是否过渡章(true/false,必须按大纲判定,不按字数判定)
-- 追读力设计(钩子类型/强度、微兑现清单、爽点模式)
-
-过渡章判定规则(强制):
-- 依据章纲/卷纲中的章节功能标签与目标(铺垫/转场/承接/回收等)。
-- 若大纲未显式标注,由“本章核心目标是否以推进主冲突为主”判定。
-- 禁止使用字数阈值判定过渡章。
-
-## 差异化检查
-
-- 钩子类型优先避免与最近 3 章重复。
-- 开头类型优先避免与最近 3 章重复。
-- 爽点模式优先避免与最近 5 章重复。
-
-若必须重复,必须记录 Override 理由,并至少变更以下一项:
-- 对象
-- 代价
-- 结果
-
-## 题材快速调用(仅命中时)
-
-命中题材:`esports` / `livestream` / `cosmic-horror`
-
-执行:
-1. 从 `writing/genre-hook-payoff-library.md` 选 1 条期待锚点(优先章末,也可后段)。
-2. 选 1-2 条微兑现,优先与本章核心冲突同方向。
-
-## 读取优先级
-
-1. 必读:`writing_guidance.guidance_items`
-2. 条件必读:`rag_assist`(`invoked=true` 且 `hits` 非空)
-3. 选读:`reader_signal`、`genre_profile.reference_hints`

+ 0 - 20
webnovel-writer/skills/webnovel-write/references/step-5-debt-switch.md

@@ -1,20 +0,0 @@
-# Step 5 Debt Switch
-
-## 默认策略
-
-- 债务利息默认关闭。
-- 只有两种情况允许开启:
-  - 用户明确要求开启;
-  - 项目已显式启用债务追踪。
-
-## 执行命令
-
-```bash
-python "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" index accrue-interest --current-chapter {chapter_num}
-```
-
-## 执行后要求
-
-- 在 Step 5 输出中标注本次是否执行了利息计算。
-- 若执行,输出结果摘要:处理债务数、累计利息、是否出现逾期。
-- 若未执行,明确标注 `debt_interest: skipped (default off)`。

+ 0 - 15
webnovel-writer/skills/webnovel-write/references/workflow-details.md

@@ -1,15 +0,0 @@
-# Workflow Details(Deprecated)
-
-本文件已废弃,主流程请以 `SKILL.md` 为准,不再直接引用本文件。
-
-若需要按步骤查参考资料,请使用以下映射:
-
-- Step 1:`references/step-1.5-contract.md`
-- Step 2B:`references/style-adapter.md`
-- Step 3:`references/step-3-review-gate.md`
-- Step 4:`references/polish-guide.md`
-- Step 4:`references/writing/typesetting.md`
-- Step 5:`references/step-5-debt-switch.md`
-
-说明:
-- `step-1.5-contract.md` 是历史文件名,当前用于 Step 1 的内置合同,不单独作为 workflow step-id 使用。