--- allowed-tools: Read Write Edit Grep Bash Task argument-hint: [章节号] description: 按大纲创作指定章节的正文内容(3000-5000字),自动进行三大定律检查和爽点规划 --- # /webnovel-write > **System Prompt**: Write a webnovel chapter following the outline. Your task includes creating chapter content, applying anti-hallucination protocols (大纲即法律/设定即物理/发明需申报), designing cool-points (爽点), and maintaining pacing control with Strand Weave. ## CRITICAL WARNING ⚠️ **ABSOLUTE REQUIREMENTS - VIOLATION = FAILURE**: 1. 🚨 **MUST call update_state.py** after writing (NOT optional) 2. 🚨 **MUST call backup_manager.py** for Git commit (NOT optional) 3. 🚨 **MUST update strand_tracker** (NOT optional) 4. 🚨 **MUST run bi-chapter review** every 2 chapters (NOT optional) 5. 🚨 **MUST polish content** (Step 2.5) before entity extraction (NOT optional) **Why This Matters**: - Without state update → AI forgets protagonist's power → Plot collapse - Without Git backup → File corruption = ALL chapters lost - Without strand tracking → Pacing becomes monotonous → Reader churn - Without quality review → Accumulating defects → Unrecoverable errors - Without polishing → AI traces remain → Content feels robotic → Reader disengagement --- ## Arguments - `chapter_num`: Chapter number to write (e.g., "45"). - If user says "自动检测" or "下一章" → Auto-detect from state.json - If not provided → Ask the user --- ## Step -2: Load Knowledge Base (MANDATORY - FIRST) **YOU MUST read the skill knowledge base before any other action**: ``` Read .claude/skills/webnovel-writer/SKILL.md ``` **Purpose**: Load anti-hallucination protocols, cool-points strategy, and Strand Weave pacing control into context. --- ## Step -1: Environment Setup (MANDATORY - BEFORE ALL STEPS) ### 1. Locate Project Directory **YOU MUST find the `.webnovel/` directory first**: ``` Search order: 1. Current working directory: ./.webnovel/ 2. webnovel-project subdirectory: ./webnovel-project/.webnovel/ 3. Parent directory: ../.webnovel/ ``` **Set PROJECT_ROOT** to the directory containing `.webnovel/`: - If found at `./webnovel-project/.webnovel/` → `PROJECT_ROOT = ./webnovel-project` - All subsequent paths are relative to PROJECT_ROOT ### 2. Auto-detect Chapter Number (if requested) **IF user requested auto-detection** ("自动检测" / "下一章" / no chapter specified): ```bash # Read state.json to get current progress python -c "import json, os; p=os.path.join('$PROJECT_ROOT','.webnovel','state.json'); s=json.load(open(p, encoding='utf-8')); print(s['progress']['current_chapter'] + 1)" ``` **Set chapter_num** = current_chapter + 1 ### 3. Validate Before Proceeding **Before Step 0, confirm**: - [ ] PROJECT_ROOT is set (contains `.webnovel/state.json`) - [ ] chapter_num is determined (from user or auto-detected) - [ ] Volume number is calculated: `volume_num = (chapter_num - 1) // 50 + 1` **Example Output**: ``` 📍 项目目录: D:\wk\novel skill\webnovel-project 📖 目标章节: 第2章 (第1卷) ✅ 环境检查通过,开始执行 Step 0... ``` --- ## Execution Steps (SEQUENTIAL - DO NOT SKIP) ### Step 0: Initialize Workflow Tracking (MANDATORY) **BEFORE Step 1**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-task \ --command webnovel-write \ --chapter {chapter_num} ``` **Expected Output**: ``` ✅ 任务已启动: webnovel-write {"chapter_num": {N}} ``` **Purpose**: - 记录任务开始时间和参数 - 启用中断恢复功能 - 创建 `.webnovel/workflow_state.json` 状态追踪文件 **Why This Matters**: - Enables `/webnovel-resume` to detect interruptions - Allows safe recovery if Claude Code crashes or times out - Provides audit trail for task execution **FORBIDDEN**: Skipping this step or proceeding without successful initialization. --- ### Step 1: Load Context (MANDATORY) **Before executing Step 1**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 1" \ --step-name "Load Context" ``` **YOU MUST execute these reads in parallel**: 1. Read `.webnovel/state.json` - Get current protagonist state 2. Read `大纲/第X卷-详细大纲.md` - Find this chapter's outline 3. Read previous 2 chapters from `正文/` (if exist) - Get context 4. **[NEW] Load latest review report (if exists)** ⬅️ 新增步骤 5. **[REFERENCE] Load relevant reference files (if needed)** ⬅️ 新增步骤 --- **Step 1.4: Load Review Feedback (CONDITIONAL - CRITICAL)** **IF** the previous chapter was reviewed (i.e., `(chapter_num - 1) % 2 == 0`): **YOU MUST execute**: 1. **Read** `state.json` → Check `review_checkpoints` array 2. **Find** the latest review report path (e.g., `审查报告/Review_Ch{N-2}-{N-1}_YYYYMMDD.md`) 3. **Extract** from the report: - 🔴 **Critical Issues** (problems that MUST be avoided in current chapter) - 💡 **Top 3 Recommendations** (improvements to prioritize) 4. **Prepare feedback summary** to pass to chapter-writer agent **Example**: ```markdown 📋 Review Feedback Loaded (From Ch{N-2}-{N-1} Report): 🔴 Critical Issues to Avoid: - 连续3章打脸型爽点(需变化爽点类型) - Quest线已连续5章主导(需切换到Fire或Constellation) - 战斗描写过于简略(需增加细节) 💡 Priority Recommendations: 1. 增加Fire线(慕容雪情感戏)比重 2. 引入Constellation线(家族关系变化) 3. 爽点类型建议:升级型 or 收获型 ``` **Purpose**: Ensure the chapter-writer agent applies quality feedback, preventing defect accumulation. --- **Step 1.5: Load Reference Materials (CONDITIONAL - OPTIONAL)** **When to Load**: - **First time using this command** → Load `.claude/skills/webnovel-writer/references/cool-points-guide.md` for爽点type overview - **Unsure about pacing** → Load `.claude/skills/webnovel-writer/references/pacing-control.md` for Strand Weave rules - **Need genre-specific templates** → Load `.claude/skills/webnovel-writer/assets/templates/genres/修仙.md` (or相应题材) - **Designing golden finger** → Load `.claude/skills/webnovel-writer/assets/templates/golden-finger-templates.md` **How to Load** (Example): ```markdown 📚 Reference Materials Loaded: - cool-points-guide.md (Refreshed 5 types of cool points: 打脸/升级/收获/扮猪吃虎/装逼打脸) - golden-finger-templates.md (Reviewed system panel design for Lv.X → Lv.Y breakthrough) ``` **Purpose**: - Refresh memory on established patterns (爽点类型, 题材套路) - Ensure adherence to genre conventions - Avoid redundant cool-point types (e.g., 3 consecutive face-slapping chapters) **IMPORTANT**: - This step is **OPTIONAL** - only load when **actively needed** - Do NOT load all references every time (wastes tokens) - The webnovel-writer skill knowledge is already in context - references provide **deeper details** **FORBIDDEN**: - Skipping review report when it exists - Proceeding to Step 2 without extracting feedback - Starting to write without loading state.json first **After completing Step 1**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 1" ``` --- ### Step 2: Generate Chapter Content (MANDATORY - CRITICAL) **Before executing Step 2**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 2" \ --step-name "Generate Chapter Content" ``` **THIS STEP IS NOT OPTIONAL. YOU MUST EXECUTE IT.** **YOU MUST generate chapter content** following the webnovel-writer skill protocols: --- **The webnovel-writer skill will automatically guide you** to apply: - ✅ **Three Anti-Hallucination Laws** (大纲即法律/设定即物理/发明需申报) - ✅ **Cool-Points Design** (5 types strategy: 打脸/升级/收获/扮猪吃虎/装逼打脸) - ✅ **Strand Weave Pacing** (Quest/Fire/Constellation balance) - ✅ **Dialogue and Description Standards** --- **Context to Apply** (from Step 1): 1. **Outline Requirements** (from 大纲): - Goal: [本章必须完成的目标] - Cool Point: [必须交付的爽点] - New Entities: [必须引入的角色/地点/物品] - Foreshadowing: [必须埋设的伏笔] 2. **Protagonist State** (from state.json): - Power: [境界] [层数]层 → **CRITICAL: 不得超过此实力** - Location: [当前位置] → 章节场景必须符合 - Golden Finger: [金手指] Lv.[等级] 3. **Previous Context** (from 前2章): - 关键剧情点 - 人物关系变化 - 已埋伏笔 4. **Review Feedback** (if loaded in Step 1.4 - CRITICAL): - 🔴 **Critical Issues to AVOID**: [从审查报告提取的问题] - 💡 **Recommendations to APPLY**: [从审查报告提取的Top 3建议] --- **Generation Process**: **YOU MUST follow these steps** while generating: 1. **Pre-Writing Planning** (think before writing): ``` - 本章目标: [从大纲提取] - 爽点设计: [选择类型,避免连续3章同类型] - Strand选择: [Quest/Fire/Constellation,根据history避免连续5章] - 审查反馈应用: [如何规避Critical Issues + 应用Recommendations] ``` 2. **Content Generation** (3000-5000 Chinese characters): - ✅ Follow outline Goal 100% - ✅ Deliver Cool Point as promised - ✅ Introduce required Entities with `` tags(层级: 核心/支线/装饰) - ✅ Track new golden finger skills with `` - ✅ Plant Foreshadowing as planned with `` - ✅ **禁止自创"工作流标签"**:除 `` / `` / `` / `` 外,不要在正文里新增任何自定义标签;详见 `.claude/skills/webnovel-writer/references/tag-specification.md` - ✅ **禁用占位符正文**:正文里不要出现"???系统/???功能/???";未知信息用"代号/称呼"或"权限屏蔽/无法读取"等叙述句替代 - ✅ **都市异能(隐秘期)余波要求**:若出现"会被普通人注意到的大动静"(爆炸/坍塌/火光/多人伤亡),本章或下一章必须交代一个现实层面的"余波/遮蔽机制"细节(警戒线、监控调取、热搜/群聊传闻、官方说法等) - ✅ Protagonist power ≤ state.json (no power inflation) - ✅ Apply review feedback (avoid Critical Issues) --- > ⚠️ **标签格式警告 - 必须严格遵守(脚本依赖此格式)** > > **正确格式(XML 自闭合标签)**: > ```xml > > > > > > > ``` > > **推荐:读者版隐藏写法**:用 HTML 注释包裹,脚本仍可识别,渲染时不显示: > ```xml > > ``` > > **错误格式(脚本无法识别 ❌)**: > ```xml > ❌ 单引号(必须用双引号) > ❌ 未闭合(必须 />) > ❌ 大写标签名(必须小写) > [NEW_ENTITY: 角色, 陆辰, ...] ❌ 旧格式(已废弃,仅向后兼容) > ``` > > **标签放置位置**: 在角色/地点/物品首次出现的段落末尾,或章节末尾统一放置。为便于后处理,建议**标签单独成行**(不要把标签夹在一句正文里) > > **详细规范**: 见 `.claude/skills/webnovel-writer/references/tag-specification.md` --- 3. **Interactive Adjustment** (if user interrupts): - If user says "这段改一下" → Adjust immediately - If user says "Accept" → Continue - If user says "Reject" → Regenerate that section 4. **Self-Review** (before saving): - [ ] Word count: 3000-5000 chars? - [ ] Outline Goal achieved? - [ ] Cool-point delivered? - [ ] No power inflation (≤ state.json)? - [ ] New entities tagged with ``? - [ ] Golden finger skills tagged with `` (if learned new)? - [ ] Review feedback applied (if exists)? 5. **Save Output**: ``` File: 正文/第{volume_num}卷/第{N:03d}章-{标题}.md (也可先保存为:正文/第{volume_num}卷/第{N:03d}章.md,后续再补标题重命名) Format: # 第 {N} 章:{标题} {正文 3000-5000字} --- ## 本章统计 - **字数**: {实际字数} - **爽点**: {类型} - **主导Strand**: {quest/fire/constellation} - **新角色**: {列表或"无"} - **伏笔**: {列表或"无"} ``` --- **CRITICAL Requirements**: - ✅ 大纲即法律: 100% follow outline - ✅ 设定即物理: Protagonist power ≤ state.json - ✅ 发明需申报: All new entities tagged - ✅ Apply review feedback (if loaded in Step 1.4) **FORBIDDEN**: - ❌ Deviating from outline - ❌ Power inflation (exceeding state.json) - ❌ Missing `` or `` tags - ❌ Ignoring review feedback Critical Issues - ❌ Skipping self-review **After completing Step 2**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 2" \ --artifacts '{"chapter_file": {"path": "正文/第{volume_num}卷/第{N:03d}章-{标题}.md", "exists": true, "word_count": {实际字数}, "status": "draft"}}' ``` --- ### Step 2.5: Polish Content (MANDATORY - IN-PLACE) **Before executing Step 2.5**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 2.5" \ --step-name "Polish Content" ``` > ⚠️ **CRITICAL**: 此步骤在主流程中直接执行,**不使用独立代理**,确保润色不偏离大纲约束。 --- **润色必须遵循的核心原则**: ``` 🔒 大纲即法律:润色只调整表达方式,不改变情节内容 🔒 设定即物理:润色不得改变任何实力/能力描述 🔒 标签保护:`` 和 `` 标签必须原样保留 🔒 通用润色:所有改进技法均为通用技法,不依赖特定题材 ``` **详细参考**: `.claude/skills/webnovel-writer/references/polish-guide.md`(含量化标准和改写示例库) --- **润色六步骤(顺序执行)**: #### 2.5.0 量化基线抽检(润色前) 按 `.claude/skills/webnovel-writer/references/polish-guide.md` 的“AI痕迹/自然化”做一次快速计数(建议:首章/每10章/出现模板感时抽检即可)。 --- #### 2.5.1 AI痕迹检测与修正 **识别以下AI写作特征并修正**: | AI痕迹类型 | 识别特征 | 修正方法 | |-----------|---------|---------| | **过度总结** | "综合以上…"、"总而言之…" | 删除或改为自然过渡 | | **完美结构** | "首先…其次…最后…"、"第一…第二…" | 打散结构,变为自然叙述 | | **学术表达** | "而言"、"在某种程度上"、"从本质上看" | 替换为口语化表达 | | **排比过多** | 连续3个以上相同句式 | 保留1-2个,其余改写 | | **对偶堆砌** | 刻意对仗的形容词组 | 减少或打破对称 | | **因果过密** | 每句都有"因为…所以…" | 改用暗示或动作展现 | **修正示例**: ``` ❌ AI风格:综合以上分析,林天首先需要提升修为,其次需要获取资源,最后需要寻找盟友。 ✅ 自然风格:林天心里盘算着,修为是根本,资源也不能少,至于盟友……先走一步看一步吧。 ``` #### 2.5.2 语言五层优化 按以下顺序逐层优化(每层只处理对应问题): | 层级 | 优化目标 | 检查要点 | |-----|---------|---------| | **L1 准确性** | 词汇准确、语法正确 | 错别字、语病、逻辑矛盾 | | **L2 生动性** | 多感官描写 | 视觉+听觉+触觉,动作细节 | | **L3 流畅性** | 句式变化、段落过渡 | 长短句交替,自然衔接 | | **L4 表现力** | 情感张力、氛围营造 | 内心独白、环境烘托 | | **L5 一致性** | 风格统一 | 人称视角、叙事距离保持 | **优化示例(L2 生动性)**: ``` ❌ 单调:林天感到很紧张。 ✅ 生动:林天攥紧拳头,掌心渗出细密的汗珠,心跳如擂鼓般直冲耳膜。 ``` #### 2.5.3 风格四维检查 确保以下四个维度与前文保持统一: | 维度 | 检查内容 | 一致性要求 | |-----|---------|----------| | **语言风格** | 词汇选择、修辞手法 | 与前2章用词习惯一致 | | **叙事风格** | 视角、节奏、距离 | 第几人称、紧凑/舒缓 | | **角色风格** | 对话语气、行为模式 | 符合人设(state.json) | | **场景风格** | 环境描写、氛围基调 | 与题材模板风格匹配 | **检查示例(角色风格)**: ``` 林天人设:沉稳、少言 ❌ OOC:林天兴奋地大喊:"太棒了!我成功了!" ✅ 符合:林天嘴角微微上扬,眼中闪过一丝不易察觉的笑意。 ``` #### 2.5.4 自然化处理 **添加人类写作特有的自然元素**: | 元素类型 | 应用场景 | 示例 | |---------|---------|-----| | **停顿词** | 对话、内心独白 | "嗯"、"这个"、"怎么说呢" | | **不确定语气** | 推测、判断 | "大概"、"应该"、"似乎" | | **口语化** | 日常对话 | "咋回事"、"得了"、"行吧" | | **自我纠正** | 思考过程 | "不对,应该是…"、"等等…" | | **情绪词** | 感叹、反应 | "嘁"、"切"、"哼" | **自然化示例**: ``` ❌ 机械:林天分析了三种可能的策略,最终选择了第二种。 ✅ 自然:林天琢磨了半天——第一种太冒险,第三种太慢,嗯……就第二种吧。 ``` **改写技巧速查**: | 问题类型 | 改写方法 | |---------|---------| | 情绪直白 | 动作外化(拳头攥紧、额头冒汗) | | 逻辑完美 | 打断重组(加……和破折号) | | 比喻堆砌 | 只留一个最有力的 | | 形容过密 | 删除70%的形容词 | | 对话书面 | 口语化+省略主语 | --- #### 2.5.5 量化复检(润色后) 复检目标(详见 polish-guide):总结词=0、列举结构=0、学术词 <1次/1000字、短句占比 30-50%、停顿词 ≥2次/1000字;未达标则返回 2.5.1-2.5.4 针对性修正。 --- **润色后自检清单**: - [ ] 大纲目标未改变(情节、爽点、伏笔完整) - [ ] 主角实力未膨胀(≤ state.json) - [ ] `` 和 `` 标签保留完整 - [ ] AI痕迹量化达标(总结词=0,学术词<1次/1000字) - [ ] 自然化量化达标(停顿词≥2次/1000字,短句30-50%) - [ ] 风格与前文一致(语言/叙事/角色/场景) - [ ] 字数仍在 3000-5000 范围内 --- **润色前后对比输出(可选)**: ```markdown 📝 润色报告 ## AI痕迹修正 - 修正过度总结: 2处 - 打散完美结构: 1处 - 替换学术表达: 3处 ## 语言优化 - L2 生动性提升: 5处(新增感官描写) - L3 流畅性优化: 2处(句式调整) ## 风格统一 - 角色对话调整: 1处(符合林天沉稳人设) ## 自然化处理 - 添加停顿词: 3处 - 添加不确定语气: 2处 ✅ 润色完成,章节已更新 ``` --- **Save Polished Output**: 更新章节文件 `正文/第{volume_num}卷/第{N:03d}章-{标题}.md`,覆盖原草稿。 **After completing Step 2.5**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 2.5" \ --artifacts '{"polished": true, "ai_traces_fixed": {N}, "style_unified": true}' ``` --- ### Step 3: Extract Entities (CONDITIONAL) **Before executing Step 3** (if NEW_ENTITY tags exist), **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 3" \ --step-name "Extract Entities" ``` **IF** you used `` / `` / `` tags in the chapter: ```bash python .claude/skills/webnovel-writer/scripts/extract_entities.py --project-root "$PROJECT_ROOT" --chapter {chapter_num} --auto ``` **After completing Step 3**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 3" \ --artifacts '{"entities_extracted": true}' ``` --- ### Step 4: Update State (MANDATORY) **Before executing Step 4**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 4" \ --step-name "Update State" ``` > ⚠️ **命令格式警告 - 复制下方模板使用** **完整命令模板(有实力/位置变化时)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py \ --progress {chapter_num} {total_words} \ --protagonist-power "{新境界}" {新层数} "{新瓶颈}" \ --protagonist-location "{新地点}" {chapter_num} ``` **示例(第5章,突破到炼气二层,位置变更)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py \ --progress 5 18500 \ --protagonist-power "炼气期" 2 "无" \ --protagonist-location "天云宗内门" 5 ``` **最小命令(无实力/位置变化时)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py --progress {chapter_num} {total_words} ``` **示例(第3章,4200字,无变化)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py --progress 3 12600 ``` > ❌ **错误示例**: `--chapter-written 1 --words 2500` (参数名错误) **After completing Step 4**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 4" \ --artifacts '{"state_json_modified": true}' ``` --- ### Step 4.5: Update Structured Index (AUTO-TRIGGERED, 2 sub-steps) **CRITICAL**: After Step 4, **immediately update** structured index in TWO steps: --- #### Step 4.5.1: Extract Metadata with AI Agent **Use Task tool to call metadata-extractor agent**: ```python # Read chapter content (兼容卷目录命名:正文/第{volume_num}卷/第{N:03d}章-标题.md) from pathlib import Path volume_num = (chapter_num - 1) // 50 + 1 vol_dir = Path("正文") / f"第{volume_num}卷" matches = sorted(vol_dir.glob(f"第{chapter_num:03d}章*.md")) + sorted(vol_dir.glob(f"第{chapter_num:04d}章*.md")) if not matches: raise FileNotFoundError(f"Chapter file not found for ch{chapter_num} under {vol_dir}") chapter_file = matches[0] with open(chapter_file, 'r', encoding='utf-8') as f: chapter_content = f.read() # Call metadata-extractor agent agent_output = Task( subagent_type="metadata-extractor", description="Extract chapter metadata", prompt=f"Extract metadata from chapter {chapter_num}:\n\n{chapter_content}" ) # Parse agent output (agent returns JSON in text block) import re import json json_match = re.search(r'\{[\s\S]*\}', agent_output) if json_match: metadata_json = json_match.group(0) # Save to temporary file (Windows-compatible) import tempfile with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False, encoding='utf-8') as tmp: tmp.write(metadata_json) metadata_file = tmp.name else: raise ValueError("Agent output missing JSON block") ``` **What the agent does**: - Extracts title, location, characters from chapter content - Uses **semantic understanding** to identify location (vs regex) - Identifies **all named characters** (including NEW_ENTITY tags) - Calculates word count and MD5 hash - Returns JSON: `{"title": "...", "location": "...", "characters": [...], ...}` **Expected Output** (from agent): ```json { "title": "第七章 突破", "location": "慕容家族", "characters": ["林天", "慕容战天", "云长老"], "word_count": 4521, "hash": "abc123...", "metadata_quality": "high" } ``` **Performance**: ~1-2s (AI semantic analysis) --- #### Step 4.5.2: Write to Index Database **Pass agent's JSON file to structured_index.py** (Windows-compatible): ```bash python .claude/skills/webnovel-writer/scripts/structured_index.py \ --update-chapter {chapter_num} \ --metadata-file {metadata_file} ``` **Why use --metadata-file instead of --metadata-json?** - ✅ **Windows CLI 兼容性**:避免 JSON 字符串在 CMD/PowerShell 中的引号转义问题 - ✅ **跨平台一致性**:Linux/macOS/Windows 全部支持 - ✅ **大型 JSON 支持**:不受命令行长度限制 **What this does**: - Reads JSON from temporary file - Validates required fields - Inserts/updates chapter metadata in SQLite database - Syncs foreshadowing urgency from state.json - Stores content hash for Self-Healing detection **Expected Output**: ``` ✅ 章节索引已更新:Ch7 - 第七章 突破 ✅ 伏笔索引已同步:3 条活跃 + 2 条已回收 ``` **Performance**: ~10ms (SQLite write) **Cleanup** (after successful write): ```python import os os.unlink(metadata_file) # Delete temporary file ``` --- **Total Time**: Step 4.5.1 (~1-2s) + Step 4.5.2 (~10ms) = **~1-2s per chapter** **Accuracy Improvement**: - **Before** (regex): Location = "未知" (60% accuracy) - **After** (AI agent): Location = "慕容家族" (95% accuracy) **Alternative Modes**: 1. **Direct JSON string** (Linux/macOS only): ```bash python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --update-chapter {N} --metadata-json '{json_string}' ``` 2. **Fallback mode** (if agent unavailable): ```bash # Direct file-based extraction (legacy mode, 60% accuracy) python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --update-chapter {N} --metadata "正文/第{volume_num}卷/第{N:03d}章.md" ``` --- **Query Examples** (for future use): ```bash # 查询地点相关章节(O(log n) vs O(n) 文件遍历) python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --query-location "血煞秘境" # 查询紧急伏笔(超过 50 章未回收) python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --query-urgent-foreshadowing # 模糊查询角色 python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --fuzzy-search "姓李" "女弟子" # 查看索引统计 python .claude/skills/webnovel-writer/scripts/structured_index.py --project-root "$PROJECT_ROOT" --stats ``` **IMPORTANT**: - **不需要 workflow_manager 追踪**(内部维护操作) - 如报错,视为警告,不阻塞流程 - 索引失败降级为文件遍历(兼容性保障) - context_manager.py 已集成索引,查询时自动使用 --- ### Step 4.6: Data Archiving (AUTO-TRIGGERED) **CRITICAL**: After indexing, **automatically run** archive check: ```bash python .claude/skills/webnovel-writer/scripts/archive_manager.py --auto-check ``` **Purpose**: 防止 state.json 无限增长(200万字长跑保障) **Archiving Strategy**: - **角色归档**: 超过 50 章未出场的次要角色 → `.webnovel/archive/characters.json` - **伏笔归档**: status="已回收" 且超过 20 章的伏笔 → `.webnovel/archive/plot_threads.json` - **报告归档**: 超过 50 章的旧审查报告 → `.webnovel/archive/reviews.json` **Trigger Conditions** (满足任一即执行): - state.json 大小 ≥ 1 MB - 当前章节数是 10 的倍数(每 10 章检查一次) **Expected Output**: ``` ✅ 无需归档(触发条件未满足) 文件大小: 0.35 MB (阈值: 1.0 MB) 当前章节: 7 (每 10 章触发) ``` **OR** (if archiving triggered): ``` ✅ 归档完成: 角色归档: 12 → characters.json 伏笔归档: 8 → plot_threads.json 报告归档: 5 → reviews.json 💾 文件大小: 1.2 MB → 0.8 MB (节省 0.4 MB) ``` **IMPORTANT**: - **不需要 workflow_manager 追踪**(归档是内部维护操作) - 如报错(如文件不存在),视为警告,不阻塞流程 - 归档数据可随时使用 `--restore-character "角色名"` 恢复 - **归档发生在索引之后**,确保所有数据都被索引后再清理 --- ### Step 5: Update Strand Tracker (MANDATORY) **Before executing Step 5**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 5" \ --step-name "Update Strand Tracker" ``` **YOU MUST analyze** which story strand dominated this chapter: - **Quest Strand** (任务线): Protagonist pursuing external goals (quests, battles, leveling) - **Fire Strand** (情感线): Romance, friendship, emotional conflicts - **Constellation Strand** (人际线): Social dynamics, alliances, betrayals > ⚠️ **命令格式警告 - 复制下方模板使用** **命令模板**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py \ --strand-dominant {quest|fire|constellation} {chapter_num} ``` **示例(第3章,Quest线主导)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py --strand-dominant quest 3 ``` **示例(第7章,Fire线主导)**: ```bash python .claude/skills/webnovel-writer/scripts/update_state.py --strand-dominant fire 7 ``` **CRITICAL**: This updates `strand_tracker` in state.json, tracking pacing balance to prevent monotonous pacing. **FORBIDDEN**: Skipping strand_tracker update. **After completing Step 5**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 5" \ --artifacts '{"strand_tracker_updated": true, "dominant_strand": "{quest|fire|constellation}"}' ``` --- ### Step 6: Bi-Chapter Review (CONDITIONAL - CRITICAL) **Before executing Step 6** (if chapter_num % 2 == 0), **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 6" \ --step-name "Bi-Chapter Review" ``` **IF** `chapter_num % 2 == 0` (every 2 chapters): **YOU MUST launch 5 review subagents in parallel using the Task tool.** **For EACH subagent below, invoke Task tool with**: - `subagent_type`: The subagent name - `description`: Brief task (3-5 words) - `prompt`: "Review chapters {N-1} and {N}. Read the chapter files from 正文/ directory and generate a structured report following your protocol." **Required subagents** (invoke all 5 in parallel): 1. **high-point-checker** - Check cool-point (爽点) density and quality 2. **consistency-checker** - Verify setting consistency (设定一致性) 3. **pacing-checker** - Analyze strand balance (节奏检查) 4. **ooc-checker** - Detect character OOC (人物失真) 5. **continuity-checker** - Verify narrative flow (连贯性) **After ALL 5 subagents return their reports**: **Step 6.1: Consolidate Review Reports (MANDATORY)** 1. **Collect all 5 reports** from the subagents 2. **Create consolidated report file**: ```bash # Save to: 审查报告/Review_Ch{N-1}-{N}_YYYYMMDD.md ``` 3. **Report structure** (Markdown format): ```markdown # 双章审查报告 (Chapters {N-1}-{N}) > **审查日期**: YYYY-MM-DD > **审查章节**: 第 {N-1}-{N} 章 > **审查员**: 5 个(爽点/一致性/节奏/OOC/连贯性) ## 1. 爽点密度检查 (High-Point Checker) [Paste high-point-checker report here] ## 2. 设定一致性检查 (Consistency Checker) [Paste consistency-checker report here] ## 3. 节奏平衡检查 (Pacing Checker) [Paste pacing-checker report here] ## 4. 人物OOC检查 (OOC Checker) [Paste ooc-checker report here] ## 5. 连贯性检查 (Continuity Checker) [Paste continuity-checker report here] ## 综合评分 (Overall Score) - **爽点密度**: X/10 - **设定一致性**: X/10 - **节奏平衡**: X/10 - **人物一致性**: X/10 - **连贯性**: X/10 - **总分**: XX/50 ## 关键问题汇总 (Critical Issues) - [List all critical/high severity issues from 5 reports] ## 改进建议 (Recommendations) - [Top 3-5 actionable recommendations] ``` **Step 6.2: Update state.json Review Checkpoint (MANDATORY)** ```bash python .claude/skills/webnovel-writer/scripts/update_state.py \ --add-review "{N-1}-{N}" "审查报告/Review_Ch{N-1}-{N}_YYYYMMDD.md" ``` **Step 6.3: Present Summary to User** Output consolidated findings to user (see Final Output section below). **Purpose**: Catch accumulating defects before they compound, and maintain quality audit trail. **CRITICAL**: - This is NOT optional. You MUST use the Task tool, not generate reviews yourself. - You MUST save the consolidated report file. - You MUST update state.json review_checkpoints. --- **Step 6.4: Interactive Fix Option (CONDITIONAL - CRITICAL)** **IF** the consolidated review report contains **Critical Issues** (🔴 severity: critical/high): **YOU MUST execute**: 1. **Extract Critical Issues from report**: - Parse the "关键问题汇总 (Critical Issues)" section - Count issues with 🔴 critical or 🟠 high severity 2. **Ask user for immediate fix**: ``` 🔴 审查发现 {count} 个Critical问题: {列出Critical Issues清单} 是否立即修复当前章节? A) 是,立即修复并重新审查 B) 否,记录到待修复清单,继续下一章 ``` 3. **Handle user choice**: **Choice A - 立即修复流程**: ``` For each Critical Issue: 1. 定位问题章节段落 2. 应用修复(基于Recommendations) 3. 保存修改后的章节文件 4. 运行 backup_manager.py(新Git commit标记"修复版") 可选:重新调用5个审查员验证修复效果 输出: ✅ 修复完成:{count}个Critical Issues已解决 📋 新审查报告(如有):审查报告/Review_Ch{N-1}-{N}_FIXED_YYYYMMDD.md ``` **Choice B - 延迟修复流程**: ``` 输出: 📋 审查报告已保存:审查报告/Review_Ch{N-1}-{N}_YYYYMMDD.md 💡 建议在后续章节创作时注意规避这些问题 💡 或者稍后手动修复这些章节 ``` **Purpose**: 保存报告供后续参考,用户可选择稍后手动修复 **IF** no Critical Issues: - 跳过此步骤,流程结束 **FORBIDDEN**: - 发现Critical Issues却不询问用户 - 自动修复而不征求用户意见 **After completing Step 6**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 6" \ --artifacts '{"review_completed": true, "review_report_path": "审查报告/Review_Ch{N-1}-{N}_YYYYMMDD.md"}' ``` --- ### Step 7: Git Backup (MANDATORY) **Before executing Step 7**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py start-step \ --step-id "Step 7" \ --step-name "Git Backup" ``` > ⚠️ **命令格式警告 - 复制下方模板使用** **命令模板**: ```bash python .claude/skills/webnovel-writer/scripts/backup_manager.py \ --chapter {chapter_num} \ --chapter-title "{章节标题}" ``` **示例(第1章)**: ```bash python .claude/skills/webnovel-writer/scripts/backup_manager.py \ --chapter 1 \ --chapter-title "死亡降临" ``` > ❌ **错误示例**: `backup --message "完成第1章"` (不需要 backup 子命令和 --message 参数) **What this does**: `git add .` + `git commit` + `git tag ch{N:04d}` **After completing Step 7**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-step \ --step-id "Step 7" \ --artifacts '{"git_committed": true, "git_tag": "ch{N:04d}"}' ``` --- ### Final Step: Complete Workflow Tracking (MANDATORY) **AFTER all steps complete successfully**, **YOU MUST run**: ```bash python .claude/skills/webnovel-writer/scripts/workflow_manager.py complete-task ``` **Expected Output**: ``` 🎉 任务完成 ``` **Purpose**: - 标记任务完成,清除 `current_task` 状态 - 更新 `last_stable_state` 快照(for rollback reference) - 记录任务到 history **Why This Matters**: - Prevents `/webnovel-resume` from detecting false interruptions - Provides audit trail for completed tasks - Enables clean start for next chapter **FORBIDDEN**: Claiming chapter is complete without running this step. --- ## Final Output (MANDATORY Format) ``` ✅ 第 {chapter_num} 章《{标题}》创作完成 📝 章节信息 - 章节: 第 {chapter_num} 章 - 标题: {标题} - 字数: {实际字数} 字 - 爽点: {爽点类型} ✨ 润色处理 - AI痕迹修正: {N}处 - 语言优化: L1-L5 已完成 - 风格统一: ✅ 四维检查通过 - 自然化: 已添加停顿词/口语化表达 📊 状态更新 - 总进度: {current_chapter}/{target_chapters} 章 - 总字数: {total_words}/{target_words} 字 - 完成度: {完成百分比}% 💪 主角状态 - 实力: {realm} {layer}层 - 位置: {location} - 金手指: {golden_finger} Lv.{level} 🔧 系统操作 - ✅ state.json 已更新 - ✅ strand_tracker 已更新 (dominant: {dominant_strand}) - ✅ Git 备份已完成 (commit: {git_hash}) {IF chapter_num % 2 == 0} 🔍 双章审查 - ✅ 已调用5个审查员 (high-point/consistency/pacing/ooc/continuity) - 📋 审查报告已保存: 审查报告/Review_Ch{N-1}-{N}_YYYYMMDD.md - ✅ state.json review_checkpoints 已更新 {ENDIF} ``` --- ## Execution Checklist (VERIFY BEFORE CLAIMING "DONE") **Workflow Tracking**: - [ ] `workflow_manager.py start-task` executed successfully - [ ] All step tracking calls (`start-step`/`complete-step`) executed - [ ] `workflow_manager.py complete-task` executed successfully **Data Archiving** (200万字长跑保障): - [ ] `archive_manager.py --auto-check` executed after Step 4 - [ ] Archive check result confirmed (无需归档 OR 归档完成) **Chapter Content**: - [ ] Chapter file saved to `正文/第{volume_num}卷/第{N:03d}章-{标题}.md` (3,000-5,000 chars) - [ ] `` and `` tags extracted (if any) **Content Polishing** (Step 2.5): - [ ] AI traces detected and fixed (过度总结/完美结构/学术表达) - [ ] Language 5-layer optimization applied (准确性→生动性→流畅性→表现力→一致性) - [ ] Style 4-dimension check passed (语言/叙事/角色/场景风格统一) - [ ] Naturalization applied (停顿词/不确定语气/口语化) - [ ] Outline constraints preserved (情节、爽点、伏笔未改变) **State Management**: - [ ] `update_state.py` executed successfully - [ ] `backup_manager.py` executed successfully - [ ] `strand_tracker` updated in state.json **Quality Control**: - [ ] Bi-chapter review run (if chapter_num % 2 == 0) - [ ] Final output summary displayed to user **IF ANY CHECKBOX IS UNCHECKED → TASK IS NOT COMPLETE.** --- ## Error Handling **IF** any script fails: 1. **STOP immediately** - Do not proceed to next step 2. **OUTPUT the error** to user with full stack trace 3. **DO NOT claim** the chapter is complete 4. **WAIT** for user to fix the issue **FORBIDDEN**: Hiding script errors or claiming success when a step failed.