@oh-story/dsh 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +12 -12
  2. package/lib/client.js +204 -72
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +84 -74
  5. package/lib/drama/skills/short-drama/SKILL.md +2 -2
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
  7. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
  8. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
  9. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  10. package/lib/drama/skills/short-drama-edit/SKILL.md +27 -29
  11. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +2 -2
  12. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +24 -67
  13. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +27 -56
  14. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +37 -79
  15. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +39 -92
  16. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +12 -16
  17. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +126 -11
  18. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +64 -0
  19. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  20. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  21. package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
  22. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
  23. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
  24. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  25. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
  26. package/lib/drama/skills/short-drama-review/SKILL.md +2 -3
  27. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
  28. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +9 -35
  29. package/lib/drama/skills/short-drama-storyboard/SKILL.md +10 -6
  30. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  31. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +58 -21
  32. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +1 -1
  33. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +10 -9
  34. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
  35. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +12 -38
  36. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +4 -7
  37. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -22
  38. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -19
  39. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
  40. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
  41. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +2 -2
  42. package/lib/drama/skills/short-drama-write/SKILL.md +2 -4
  43. package/lib/index.js +289 -91
  44. package/lib/index.js.map +4 -4
  45. package/lib/novel-to-game/README.md +299 -59
  46. package/lib/novel-to-game/README_ZH.md +299 -56
  47. package/lib/novel-to-game/VERSION +1 -1
  48. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  49. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  50. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  51. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  52. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  53. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  54. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  55. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  56. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  57. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  58. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  59. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  60. package/lib/novel-to-game/manifest.json +77 -87
  61. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
  62. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  63. package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
  64. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  65. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  66. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  67. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  68. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  69. package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
  70. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  71. package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
  72. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
  73. package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
  74. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  75. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  76. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  77. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
  78. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  79. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
  80. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
  81. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
  82. package/lib/oh-story/manifest.json +230 -185
  83. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  84. package/lib/oh-story/roles/consistency-checker.md +4 -4
  85. package/lib/oh-story/roles/narrative-writer.md +24 -25
  86. package/lib/oh-story/roles/story-architect.md +5 -5
  87. package/lib/oh-story/roles/story-explorer.md +11 -11
  88. package/lib/oh-story/skills/story/SKILL.md +13 -7
  89. package/lib/oh-story/skills/story/VERSION +1 -1
  90. package/lib/oh-story/skills/story/references/author-memory.md +54 -24
  91. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  92. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  93. package/lib/oh-story/skills/story-deslop/SKILL.md +40 -53
  94. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +11 -10
  95. package/lib/oh-story/skills/story-deslop/references/author-memory.md +54 -24
  96. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +1 -1
  97. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  98. package/lib/oh-story/skills/story-import/SKILL.md +77 -81
  99. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  100. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  101. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
  102. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +8 -6
  103. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +34 -16
  104. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
  105. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
  106. package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
  107. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
  108. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
  109. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  110. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
  111. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
  112. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
  113. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  114. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
  115. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
  116. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  117. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  118. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  119. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
  120. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  121. package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
  122. package/lib/oh-story/skills/story-long-write/SKILL.md +38 -29
  123. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +11 -10
  124. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +25 -20
  125. package/lib/oh-story/skills/story-long-write/references/author-memory.md +54 -24
  126. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +3 -3
  127. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  128. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
  129. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  130. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +4 -13
  131. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  132. package/lib/oh-story/skills/story-long-write/references/project-files.md +9 -7
  133. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
  134. package/lib/oh-story/skills/story-long-write/references/reference-index.md +1 -2
  135. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +8 -6
  136. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +86 -115
  137. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -120
  138. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
  139. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +66 -68
  140. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +3 -3
  141. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +4 -12
  142. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  143. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +139 -18
  144. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +34 -16
  145. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +5 -3
  146. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
  147. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
  148. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
  149. package/lib/oh-story/skills/story-review/SKILL.md +68 -85
  150. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +11 -10
  151. package/lib/oh-story/skills/story-review/references/author-memory.md +54 -24
  152. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
  153. package/lib/oh-story/skills/story-review/references/review-quality.md +4 -10
  154. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +8 -6
  155. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  156. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
  157. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
  158. package/lib/oh-story/skills/story-setup/SKILL.md +50 -42
  159. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +11 -10
  160. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +1 -1
  161. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
  162. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  163. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
  164. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +4 -12
  165. package/lib/oh-story/skills/story-setup/references/diagnostics.md +1 -1
  166. package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
  167. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
  168. package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
  169. package/lib/oh-story/skills/story-short-write/SKILL.md +6 -147
  170. package/lib/oh-story/skills/story-short-write/references/author-memory.md +54 -24
  171. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
  172. package/lib/oh-story/skills/story-short-write/references/reference-index.md +2 -0
  173. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +3 -2
  174. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
  175. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
  176. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  177. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  178. package/lib/types/client/file-activity.d.ts +19 -1
  179. package/lib/types/client/file-activity.d.ts.map +1 -1
  180. package/lib/types/client/index.d.ts.map +1 -1
  181. package/lib/types/client/production-prompts.d.ts +7 -0
  182. package/lib/types/client/production-prompts.d.ts.map +1 -1
  183. package/lib/types/client/production-runtime.d.ts +16 -0
  184. package/lib/types/client/production-runtime.d.ts.map +1 -1
  185. package/lib/types/drama-adapters.d.ts +5 -3
  186. package/lib/types/drama-adapters.d.ts.map +1 -1
  187. package/lib/types/native-hooks.d.ts +52 -0
  188. package/lib/types/native-hooks.d.ts.map +1 -1
  189. package/lib/types/role-identity.d.ts +17 -0
  190. package/lib/types/role-identity.d.ts.map +1 -0
  191. package/lib/types/role-tool.d.ts.map +1 -1
  192. package/lib/types/skill-provider.d.ts.map +1 -1
  193. package/package.json +45 -45
  194. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
  195. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  196. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
  197. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
@@ -4,79 +4,79 @@
4
4
 
5
5
  ## 拆解流程 5 阶段
6
6
 
7
- ### 阶段 1:章节解析
7
+ ### 阶段 1:章节解析与机械索引
8
8
 
9
- - 识别章节分隔符(第X章、Chapter X、数字编号等)
10
- - 提取章节标题,记录每章字数
9
+ - 使用 `"{PYTHON}" "{story-long-analyze skill 根}/scripts/build_chapter_index.py"` 识别章界、标题、卷、本地章号、物理行号和正文字符数
10
+ - 在 `chapter_index.csv` 记录逐章 hash、全源 hash 与解析器版本;相同来源复用,不重复解析
11
+ - 机械索引不包含剧情、人物、情绪、钩子或模型推断
11
12
 
12
- ### 阶段 2:原子提取(并行 Agent 处理每章)
13
+ ### 阶段 2:连续章节块与已有成果二次提取
13
14
 
14
- 并行/降级策略见 SKILL.md「Stage 2 并行 Agent 策略」。
15
+ 先运行 `manage_analysis_run.py plan`,只执行标准输出中的内存计划。Stage 2 不再存在逐章独立调用,也不落盘计划文件。
15
16
 
16
- Agent 输出格式严格对齐本阶段 A/B/C 三部分的合并输出,详见 output-templates.md 的 Stage 2 模板。
17
+ #### A. 已有成果批次
17
18
 
18
- #### A. 章节摘要
19
+ 对 `existing-results` 批次只读取计划列出的旧拆文文件:
19
20
 
20
- - 章节概要(100-300 字,按时序连贯讲清事件、原因、结果;写法与自检见 output-templates.md「Stage 2 章节摘要+情节点」)
21
- - 关键事件(3-5 个,按时间顺序)
22
- - 出场人物、主题标签、章节基调
23
- - 剧情推进度(大转折/日常过渡/铺垫伏笔)
21
+ 1. 上游 `章节/第N章_摘要.md` 优先;
22
+ 2. 没有摘要时复用黄金三章;
23
+ 3. 同一章只选择一个优先来源。
24
24
 
25
- #### B. 情节点提取(每章 10-40 个,按字数动态调节)
25
+ 从旧成果二次提取剧情点、关键事件与披露候选、关系和三维节奏。不得打开原文,不得为了统一格式重写旧逐章文件。旧资料没有的信息留空或写“旧资料未提供”。
26
26
 
27
- 密度公式:字数÷200(下限)到 字数÷150(上限),即 150-200 字/个情节点。当公式计算超出 [10, 40] 范围时,以硬约束为准。
27
+ #### B. 未拆原文章节块
28
28
 
29
- | 字数 | 目标范围 | 说明 |
30
- |------|---------|------|
31
- | ≤1000 | 10 个 | 短章按硬下限拆足关键步骤(公式建议 5-7,硬下限 10) |
32
- | 3000 | 15-20 个 | 标准密度 |
33
- | 5000 | 25-34 个 | 中长章 |
34
- | 8000+ | ≤40 个 | 长章上限 |
29
+ 对 `raw-original` 批次一次读取一个不重叠的连续块:
35
30
 
36
- 写入章节摘要 .md 的情节点子章节(不单独输出 .json)。每个情节点:
31
+ - 普通短章通常 3 章;
32
+ - 长章或信息密集时 1-2 章;
33
+ - 每块最多 3 章,默认同时受 25,000 字符上限约束;
34
+ - 遇到卷界、来源缺口或空章必须断开;
35
+ - 每章在全书运行计划中只属于一个原文块。
37
36
 
38
- | 字段 | 说明 |
39
- |------|------|
40
- | 序号 | 严格时间顺序 |
41
- | 标题 | ≤15 字短标签,与描述不写成同一句 |
42
- | 类型 | 转折点/信息揭示/冲突/解决/铺垫/行动/对话/状态变化 |
43
- | 描述 | 客观白描:谁做了什么、结果如何,原文给出的起因一并写入,埋伏笔的写出伏笔线索(禁止叙事框架词、禁止推测动机) |
44
- | 原文引用 | 精选,不逐点铺满:只给关键转折 / 关键台词 / 写法样本保留,每章至多 8 条,<=400 字连续切片;过长或分散时改用 `原文定位:{5-15字原句片段}` |
45
- | 涉及人物 | 全名,不用代词 |
46
- | 地点 | 地理位置信息 |
47
- | 关键物品 | 与剧情相关的物品 |
48
- | 时间标记 | 相对时间(次日、半月后、同时) |
37
+ 同一次理解产生两层结果:
38
+
39
+ 1. 每章紧凑事实:概要、因果、信息变化、状态变化、三维分数、钩子、证据和 10–20 个情节点(长章最多 30);
40
+ 2. 批次观察:剧情点、关键事件与披露候选、关系、三维异常点和跨批状态。
49
41
 
50
- #### C. 关键信息与扩写技法提取
42
+ 逐章兼容文件由脚本从紧凑事实机械生成;批次缓存保留全部逐章紧凑事实和跨章观察,作为恢复证据。全局聚合用 `digest` 取跨章观察与所需逐章字段,不整份读缓存,也不逐个打开章节文件。不得第二次读取该块来生成逐章文件,也不得把 50-60 章交给一个 agent 后让它自行拆成多个“批次”。
51
43
 
52
- 每章必须额外输出 `关键信息与扩写技法` 表,作为后续 `剧情/节奏.md` 和 `剧情/情绪模块.md` 的基础数据。它避免主观点评,负责把“本章必须传递的剧情信息”与“作者如何把它扩写成可读场景”拆开。
44
+ #### C. 剧情点是主要分析单位
53
45
 
54
- | 字段 | 提取方式 |
55
- |------|----------|
56
- | 关键信息/剧情走向 | 从关键事件与情节点中归纳本章必须让读者知道、误判、期待或确认的信息 |
57
- | 原文如何扩写 | 记录作者用了哪些事件、对话、反应层、细节、误导、回扣把信息扩成场景 |
58
- | 扩写技法 | 从铺垫后置/反应层放大/信息差/对比锚点/延迟揭示/身体反应/小目标嵌套/其他中选择或补充 |
59
- | 对读者情绪的作用 | 标注该扩写制造的好奇、期待、压抑、爽、心疼、紧张、甜、热血等效果 |
60
- | 可复用提醒 | 只抽象情绪逻辑和功能位,明确禁止照搬具体桥段、台词、专名、独特设定 |
46
+ 每个剧情点记录:
61
47
 
62
- 质量要求:每章至少 1 条;标准章节通常 2-5 条。若本章只是过渡,也要说明它维持了什么期待或冷却了什么情绪,而不是写“无”。
48
+ | 字段 | 说明 |
49
+ |---|---|
50
+ | 章节范围 | 当前可确认的起止章;允许跨批延续 |
51
+ | 起始目标 | 谁想做什么 |
52
+ | 阻碍 | 人物、规则、资源、信息或环境阻碍 |
53
+ | 变化来源 | 改变局面的选择、行动或外部事件 |
54
+ | 局面变化 | 目标、风险、资源、关系、知识或行动方向的前后差异 |
55
+ | 得失 | 收益归谁、代价由谁承担 |
56
+ | 后续影响 | 结果怎样促成或限制后续行动 |
57
+ | 状态 | `open` / `closed` |
58
+ | 证据 | 原文模式用 source locator;已有成果模式用资料路径 |
63
59
 
64
- #### D. 角色提取
60
+ 读取批次不等于剧情点。一个批次可以出现多个剧情点,一个剧情点也可以跨批次。跨批延续时继承剧情点 ID 和当前状态;Stage 3 再统一合并、拆分和校验边界。
65
61
 
66
- 每个角色提取:外在表现(身份/言行/外貌)、本章功能、别名。
67
- 只记录新出场角色或已有角色的新发展。
62
+ #### D. 兼容逐章资料
68
63
 
69
- **角色重要性分级**(按本章戏份):
64
+ 逐章投影只保留现有导入、写作与查询实际使用的内容:概要、关键事件、因果、局面结果、涉及、信息变化、状态变化、三维节奏、章尾钩子、证据和情节点序列(逐点带基调)。取消逐章重复的长篇写法公式、角色复述和扩写技法长表。写法机制、信息差、关系与节奏集中在剧情点及 Stage 3 权威产物中。
70
65
 
71
- | 等级 | 标准 |
72
- |------|------|
73
- | **major** | 本章核心:台词 ≥3 句 OR 推动本章主线 OR 有重要决策 |
74
- | **supporting** | 本章配角:台词 1-2 句 OR 参与互动但非核心 |
75
- | **minor** | 本章次要:仅被提及 OR 无台词但有名字 |
66
+ #### E. 跨章观察
67
+
68
+ 批次缓存固定包含:
69
+
70
+ 1. 剧情点;
71
+ 2. 仅限主线/关键转折的事件与披露候选;
72
+ 3. 有向关系变化;
73
+ 4. 事件、情绪、篇幅三维节奏的峰谷与分离点;
74
+ 5. 未闭合剧情点、悬念、关系状态和待核事项。
76
75
 
76
+ 角色实体只记录新别名和状态变化,不在每章重复生成人物小传。
77
77
  ### 阶段 3:聚合分析(跨章节)
78
78
 
79
- > **语料读取**:本阶段及阶段 4a/4c、散落情节兜底里的「全部章节摘要 / 全部情节点」统一从 `_章节摘要汇总.md`(Stage 2 收尾按章号无损拼接的全书摘要,见 SKILL.md「Stage 2 收尾:合并章节摘要」)**一次性读取、在上下文中复用**,不逐文件 glob 重扫——同一份语料的 4-5 次冷读降为 1 次。汇总文件缺失或语料超上下文时,回退原「扫描全部章节摘要」逐文件方式 / 分块策略,行为不变。
79
+ > **语料读取**:用 `manage_analysis_run.py digest --part observations` 读取全部批次已经降维的跨章观察;需要逐章字段(三维节奏、涉及、状态变化等)或情节点简表时用 `--part chapters` 按章节窗口取。只在关键证据冲突时定点读取对应逐章兼容文件,最多增加一次定点核验,不重新扫描原文。旧项目没有批次缓存时,直接复用现有剧情、节奏、情绪、关系和逐章资料;证据不足或冲突时标未知或待核。Stage 3–5 不回读原文;Stage 6 可以按索引定点读取 4–6 段文风锚点,但不得重新扫描整本原文。
80
80
 
81
81
  #### 0. 故事框架识别(聚合前置)
82
82
 
@@ -93,7 +93,7 @@ Agent 输出格式严格对齐本阶段 A/B/C 三部分的合并输出,详见
93
93
  识别方法:扫描概要.md(Stage 0 thin first-pass 足够,无需等 Stage 5 全书概要)+ 前3章摘要 + 后3章摘要,判断核心驱动模式。
94
94
  输出写入 `剧情/故事线.md` 的框架识别部分。
95
95
 
96
- **预期剧情数量引导**(强制参考,非建议):
96
+ **预期剧情数量引导**(仅用于发现明显粒度异常,不作为凑数目标):
97
97
 
98
98
  | 总章数 | 预期独立剧情数 | 依据 |
99
99
  |--------|--------------|------|
@@ -125,14 +125,17 @@ Agent 输出格式严格对齐本阶段 A/B/C 三部分的合并输出,详见
125
125
 
126
126
  **第一步:剧情大纲识别(从章节摘要)**
127
127
 
128
- 扫描全部章节摘要,识别每条独立剧情的大纲。每条大纲包含:
128
+ 基于批次候选单元合并独立剧情,边界或证据不清时再读取相关章节摘要。每条大纲包含:
129
129
 
130
130
  | 字段 | 说明 |
131
131
  |------|------|
132
132
  | 标题 | 简洁有力,15字以内 |
133
133
  | 概要 | 150-300字,按时序连贯叙述因果,不靠同一连接词反复串联;含核心角色、关键地点、事件发展 |
134
- | 核心目标 | 具体、可衡量的戏剧目标 |
135
- | 核心冲突 | 具体冲突对象+冲突事件 |
134
+ | 起始目标 | 谁在本单元开始时想做什么;目标早已建立时引用来源 |
135
+ | 主要阻碍 | 人物、规则、资源、信息或环境造成的阻碍 |
136
+ | 关键变化来源 | 谁的选择/行动或什么外部事件改变局面 |
137
+ | 局面变化 | 目标、风险、关系、资源、知识或行动方向的前后差异 |
138
+ | 得失与后续 | 收益归谁、代价由谁承担,怎样限制或促成后续行动 |
136
139
  | 类型 | 主线/爱情/成长/复仇/寻宝/悬疑/战斗/权谋/修炼/危机/谜团/日常/其他 |
137
140
  | 主题 | 不超过3个 |
138
141
  | 章节范围 | 起止章节号 |
@@ -217,15 +220,15 @@ Agent 输出格式严格对齐本阶段 A/B/C 三部分的合并输出,详见
217
220
  Stage 3 聚合后必须生成两个权威产物,供 Stage 5 报告摘要和 `story-long-write` 直接读取:
218
221
 
219
222
  1. **`剧情/节奏.md`(节奏权威)**
220
- - 输入:全部章节摘要的情节点、`关键信息与扩写技法` 表、剧情大纲、故事线。
221
- - 输出:关键信息推进表、爽点循环索引、情绪触动点索引、爆发节奏总结。
222
- - 生成法:按章节顺序扫描关键事件与关键信息,标出“信息进入读者视野 → 被延迟/误导/验证 → 情绪爆发 → 余波/新钩子”的链条。
223
- - 校验:每条爽点/触动点必须能回指章节或情节点;每个长间隔(连续 3 章以上无触动点)必须说明作者如何用小钩子或信息推进维持期待。
223
+ - 输入:批次关键事件与披露候选、三维节奏异常点、逐章紧凑事实、剧情单元和故事线。
224
+ - 输出:全书约 8–15 个节点的关键双时间线表、三维节奏表、关键信息推进、爽点循环、情绪触动点和爆发节奏。
225
+ - 生成法:只选择改变主线、关系、核心风险或读者判断的事件;客观事件只登记一次,异常、线索、解释和确认写进同一事件的披露路径。对关键区间分别判断事件状态变化、读者情绪触发和篇幅展开/压缩/省略。
226
+ - 校验:每条 `EV/RV/AX/RH/TR` 都能回指章节、情节点或定位;过程没有展示时写“文本未展示”,不推断作者有意省略。
224
227
 
225
228
  2. **`剧情/情绪模块.md`(模块权威)**
226
229
  - 输入:故事框架识别、剧情单元、`剧情/节奏.md`、读者需求判断、桥段标签。
227
- - 输出:读者需求 / 情绪引擎、故事框架与套路运行图、可复现模块卡、重组与复现指南。
228
- - 生成法:先抽象“读者想看什么”,再把具体剧情抽成情绪链和功能位;模块卡必须包含可替换项和不可照搬项。
230
+ - 输出:读者需求 / 情绪引擎、故事框架与套路运行图、完整模块卡(至少覆盖前三强,不设数量上限)、其他机制索引、重组与复现指南。
231
+ - 生成法:先抽象“读者为什么期待兑现”,再把具体剧情抽成情绪链和功能位;完整模块卡必须五个门禁字段齐全(读者想看什么、情绪链、戏剧单元、可替换项、不可照搬),必要铺垫、成立条件、失效情形、反例等按需增列,其他机制只留用途、范围和证据引用。
229
232
  - 校验:best-effort 为模块标注来源(关联 `剧情/节奏.md` 的 RH/TR 条目或章节情节点),无把握时留空、不硬凑、不删模块;禁止把原文专名、独特事件顺序、标志性台词写成可复用模板。
230
233
 
231
234
  **权威关系**:`剧情/节奏.md` 管节奏/触动点,`剧情/情绪模块.md` 管读者需求/模块复现。`拆文报告.md` 与 `剧情/故事线.md` 只能摘要或引用这两个文件,不能成为并列权威。
@@ -238,17 +241,19 @@ Stage 3 聚合后必须生成两个权威产物,供 Stage 5 报告摘要和 `s
238
241
 
239
242
  ### 阶段 4:世界观与设定提取
240
243
 
241
- Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
244
+ Stage 2 紧凑事实中的 `涉及人物`、`状态变化` 与批次 `关系变化` 在此阶段归一为完整档案。
242
245
 
243
246
  #### 角色两阶段模型
244
247
 
245
248
  **阶段 A:轻量提及(Stage 2 输出)**
246
- - 每个 agent 返回出场人物表(姓名/重要性/别名/本章表现)
247
- - 不做跨章分析,只记录本章可见信息
249
+ - 每章 `涉及人物` 记录关键人物,`状态变化` 记录本章可见净变化;
250
+ - 批次 `关系变化` 补充有方向的动作、触发与得失;
251
+ - 不另建出场人物表,不在单章内完成跨章人物定型。
248
252
 
249
253
  **阶段 B:完整档案(Stage 4 构建)**
250
- - 合并所有章节的角色提及数据
251
- - 跨章节别名解析
254
+ - 合并逐章 `涉及人物`、`状态变化` 和批次关系观察
255
+ - 跨章节别名解析(批次 `跨批状态` 的「已确认别名」是现成线索)
256
+ - 群体称呼、无名路人和泛称(亲属、社交、身份、年龄外貌类称呼,如大哥、掌柜、老师、小伙子)不建档,除非原文固定用它指代某一个人
252
257
  - 构建完整角色档案
253
258
 
254
259
  #### 一人一实体原则
@@ -324,17 +329,19 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
324
329
 
325
330
  | 字段 | 说明 |
326
331
  |------|------|
327
- | 角色A | 全名 |
328
- | 角色B | 全名 |
329
- | 关系类型 | 家人/师徒/朋友/敌人/恋人/同事/上下级/商业/其他 |
330
- | 情感倾向 | 正面/负面/中性/复杂 |
331
- | 描述 | 关系本质+建立过程+关键互动(50-200字) |
332
+ | 主体 → 客体 | 有向关系;反向动作存在时另记一条 |
333
+ | 关系动作/类型 | 保护、依赖、控制、服从、欺骗、竞争等动作及家人/师徒/朋友/敌人/恋人/同事/上下级/商业/其他类型 |
334
+ | 表面/真实状态 | 文本允许区分时分别记录;未证实的真实状态标推断等级 |
335
+ | 触发事件 | 导致关系建立或变化的具体行动/事件 |
336
+ | 双方得失 | 信任、资源、地位、行动空间、风险、债务、暴露或失控 |
337
+ | 变化后状态 | 本阶段结束时的状态及后续约束 |
338
+ | 证据 | A/B/C 强度、章节、情节点或 source locator |
332
339
 
333
340
  #### 关系提取策略
334
341
 
335
342
  **数据源**:从已提取的情节点描述中提取关系(不从原文提取),更高效、更聚焦。
336
343
 
337
- **批量提取**:每 5 章批量提取一次,只记录新关系或关系变化。
344
+ **批量提取**:复用 Stage 2 每个连续章节批次的关系观察,只记录新关系或关系变化;不为了固定章数单独重读原文。
338
345
 
339
346
  **关系演变追踪**:当同一对角色关系发生变化时,记录演变轨迹:
340
347
  ```
@@ -343,7 +350,7 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
343
350
  情感转变:{正面→负面/负面→正面/中立→复杂 等}
344
351
  ```
345
352
 
346
- **最终状态合并**:同一对角色的多阶段关系,保留最新状态作为主记录,历史变化写入演变轨迹。避免同一对出现多条重复关系。
353
+ **最终状态合并**:同一有向关系的多阶段状态保留最新状态作为主记录,历史变化写入演变轨迹。反向关系动作不能因角色对相同而被去重。
347
354
 
348
355
  **隐含关系推断**:当角色间没有直接互动但有间接证据时:
349
356
  - 通过第三方的评价/描述推断(置信度标 0.7)
@@ -359,7 +366,7 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
359
366
 
360
367
  ## 原子提取六大铁律
361
368
 
362
- 1. **绝对时序**:严格按事件发生的时间顺序排列
369
+ 1. **双序分离**:逐章事实按文本披露顺序排列;客观事件另标故事内发生顺序,不能把倒叙或回忆挪成当前事件
363
370
  2. **客观白描**:记录"发生了什么"和结果,原文明说的起因照写,不推测未写出的动机,不用叙事框架词
364
371
  3. **信息保真**:不遗漏改变语境的关键细节
365
372
  4. **高度浓缩**:一个情节点一句话概括
@@ -380,11 +387,11 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
380
387
 
381
388
  阶段 3-5 从章节摘要二次合成,离原文已两跳,最易把「摘要没说的」用合理推断补成「看似坐实的事实」——这是拆文事实错误的最大来源(典型:给「双系魔法师」凭空补第二系、把坐骑等级安到骑手头上、给原文没给的字段编一个数值、把出场区间填成连续跨度含没出场的章)。强模型也照样漂移,因为越远离原文,模型越靠世界知识与"合理性"填空。三条硬约束:
382
389
 
383
- 1. **硬事实必须可溯源**:力量等级、数值、距离、属性、势力数量、谁对谁说了什么、角色出场章节——这类硬事实写进设定/角色/报告前,回原文核对(摘要不足就直接读原文);核到才写。
390
+ 1. **硬事实必须可溯源**:力量等级、数值、距离、属性、势力数量、谁对谁说了什么、角色出场章节——先检查批次证据或已有事实的章节和定位;命中不到就改写为“资料未明确”或删除,不为聚合二次读取原文。
384
391
  2. **缺失写「原文未明确」,禁编造填空**:原文没给的字段,写「原文未明确/节选未涉及」,绝不用近义项、别处的范例或惯例补一个看似合理的值。
385
392
  3. **跨指代不串**:相邻实体的属性不互相挪用——坐骑等级≠骑手等级、A 的台词≠B 的台词、本章统计数字≠相邻章数字。
386
393
 
387
- 落盘后做一次**事实可溯源自检**:抽查设定/角色/报告里的硬事实,逐条能否 grep 回原文;命中即过,命中不到的改写为「原文未明确」或删除,不保留无源断言。此自检独立于下方三个比率——比率查归类质量,它查事实真伪。
394
+ 落盘后做一次**事实可溯源自检**:抽查设定、角色和报告里的硬事实,逐条核对到本次允许使用的证据源。`raw-original` 可按 `source_locator` 机械定位原文,`existing-results` 只能核对计划列出的旧成果文件;旧成果没有的细节改写为「旧资料未提供」或删除,不借核证之名回读已覆盖章节原文。此自检独立于下方三个比率——比率查归类质量,它查事实真伪。
388
395
 
389
396
  ---
390
397
 
@@ -400,8 +407,10 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
400
407
  |------|------|------|------------|
401
408
  | 置信度 | >= 0.85 | 有明确归属的情节点 / 剧情单元内情节点总数 | 低于 0.85 标记「待复核」 |
402
409
  | 覆盖率 | 85%-95% | 已归类情节点 / 总情节点数 | <85% 触发孤立情节二次分类;>95% 复核边界 |
403
- | 关键信息覆盖 | >= 每章1条 | 含 `关键信息与扩写技法` 的章节数 / 摘要章节数 | 缺失章节回到 Stage 2 补提取 |
410
+ | 关键信息覆盖 | 每章有结论 | 含有效信息行或明确“无独立信息变化”的章节数 / 摘要章节数 | 按原输入类型回到 Stage 2 补提取;旧成果章仍不得回读原文 |
404
411
  | 模块来源标注 | best-effort | 情绪模块卡尽量标注 RH/TR 或章节情节点来源 | 无把握的来源留空,不硬凑、不删模块(同桥段标签的 best-effort 处理)|
412
+ | 披露引用完整 | 100% | 关键双时间线中每个 `RV-*` 都属于同一行的 `EV-*` 披露路径,同一客观事件不因多次披露重复建档 | 缺引用或重复事件时回到批次观察合并 |
413
+ | 三维解释完整 | 100% | `AX-*` 的事件、情绪、篇幅三轴都有理由与证据 | 缺轴时补“无明显变化/文本未展示”及依据,不用分数占位 |
405
414
  | 重叠率 | <= 35% | 跨剧情单元共享情节点 / 总情节点数 | >35% 提示边界模糊,建议合并 |
406
415
 
407
416
  > **小体量节选(< 30 章、单主线连续叙事)的特例**:此类素材按时序连续切分时,覆盖率天然接近 100%、散落情节接近 0,这是线性结构的正常结果,不算过度归并。此时复核重点是「有无把不同剧情强行并进同一条」,而非覆盖率数值本身——不必为压到 95% 以下而人为拆分。
@@ -413,7 +422,7 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
413
422
  阶段 3 聚合完成后执行(6 步,含覆盖率验证):
414
423
 
415
424
  1. **计算孤立比例**:孤立情节点数 / 总情节点数。若比例 < 5%,跳过后续步骤,直接标记为「少量散落,无需处理」
416
- 2. **筛选未分配情节点**:从所有章节摘要中收集未归类到任何剧情单元的情节点
425
+ 2. **筛选未分配情节点**:用 `digest --part chapters --points brief` 按章节窗口列出情节点简表,收集未归类到任何剧情单元的情节点
417
426
  3. **三层置信度归入**:按角色重叠、地点重叠、因果关系三条线索计算相关性
418
427
  - **强相关**(0.8-1.0):角色匹配 + 主题相关 → 归入现有剧情单元,标记 `[孤立情节归入]`
419
428
  - **中等相关**(0.5-0.8):角色匹配 或 主题相关 → 归入并标记 `[低置信归入]`,待复核
@@ -432,32 +441,30 @@ Stage 2 的角色轻量提及数据在此阶段升级为完整档案。
432
441
 
433
442
  ---
434
443
 
435
- ## Claude Code 执行指引
444
+ ## 执行指引
436
445
 
437
446
  ### 分块策略
438
447
 
439
- Stage 2 使用 chapter-extractor agent 并行处理(每章一个 agent,每批 5-8 个),不分块。
440
- 其他阶段(0、1、3、4、5)的分块策略如下。
448
+ Stage 2 按运行计划分别建立旧成果批次和缺章原文块,每批调用一次 chapter-extractor;原文块同次返回逐章事实和跨章观察,旧成果批次只返回跨章观察。其他阶段只消费这些结果和可复用旧资料。
441
449
 
442
450
  > **先分清两个互不相干的轴**,本节此前把它们混在一个「块」字里,导致 >500 章出现「50-200 章/块」与「6-8K token/块」两套差 30-100 倍的规格:
443
451
  > - **语义分块**=*在哪里切*。按叙事弧切,产出「块元数据」用于组织分析结果,块可以很大(一个 914 章的书通常 5-10 个弧)。它不决定一次读多少。
444
- > - **处理批次**=*一次读多少*。受上下文容量约束,由摘要体积反推章数。下面表格的「块大小」列指的是**处理批次**。
452
+ > - **处理批次**=*一次读多少*。受上下文容量约束,原文块按索引字数切分,旧成果批次按资料体积切分。下面表格的「块大小」列指的是**处理批次**。
445
453
 
446
- | 规模 | 策略 | 块大小 |
454
+ | 单章与上下文情况 | 读取批次策略 | 常见章数 |
447
455
  |------|------|--------|
448
- | <50 章 | 按阶段整体处理 | 无需分块 |
449
- | 50-100 章 | 按阶段整体处理 | 无需分块(可选智能分块) |
450
- | 100-500 章 | 按章节分块 | 5-8 章/块 |
451
- | >500 章 | **子代理并行批次**(见下「处理批次」);语义分块只用于组织输出,不作为读取单位 | 10-20 章/批 |
456
+ | 普通章节、上下文充足 | 连续读取并保留跨章状态 | 3 章/批 |
457
+ | 长章、信息密集或上下文较小 | 缩小批次,不截断明显短因果链 | 1-2 章/批 |
458
+ | 超长书 | 批次数量增加;语义弧仍独立于读取批次 | 仍按上述字数与上下文判断 |
452
459
 
453
- ### 智能分块(>500 章)
460
+ ### 语义弧识别
454
461
 
455
- 对于大型小说,基于章节摘要识别自然分界,而非固定切分:
462
+ 基于批次观察和章节摘要识别自然分界。读取批次只是上下文单位,不能直接当成剧情单元:
456
463
 
457
464
  **分块原则(四大铁律)**:
458
465
  1. **语义连贯**:每块是一个相对独立的内容单元(大故事阶段或主要事件线)
459
466
  2. **自然分界**:在内容转折点、场景切换、时间跨越处切分,不在紧密剧情中间切
460
- 3. **大小适中**:每个语义块 50-200 章,语义完整性优先于大小均匀(这是叙事弧尺度,**不是**一次读进上下文的量——读取按下面「处理批次」切)
467
+ 3. **大小适中**:语义完整性优先于大小均匀;不设固定章数,也不要求一个语义弧一次读进上下文
461
468
  4. **避免割裂**:不在紧密剧情中间切分
462
469
 
463
470
  **题材特化分块参考**:
@@ -470,35 +477,36 @@ Stage 2 使用 chapter-extractor agent 并行处理(每章一个 agent,每
470
477
  | 玄幻 | 世界地图、势力变化 | 东域→中州→上界 |
471
478
  | 有卷/部/篇 | 优先按原结构 | 按作者划分的卷/部 |
472
479
 
473
- **无明显结构**时按固定章节数均匀切分。**硬约束**:所有章节必须被覆盖,块之间不能重叠(每章只属于一个块)。**语义块数量上限**:最多 10 块(超出时扩大块大小,保持语义完整性)。该上限只约束叙事弧划分,不限制处理批次数量——914 章按 15 章/批约 61 批是正常的。
480
+ **无明显结构**时保留连续批次边界,并把无法确认的语义归属标为待聚合。**硬约束**:所有确实需要读原文的章节都被唯一读取批次覆盖,已有成果章进入旧资料批次;两者互斥且各自不重叠。剧情单元可以跨批次,也可以在一个批次中出现多个。
474
481
 
475
482
  每块输出元数据:`块标题 | 起止章节 | 核心主题(2-5个) | 关键事件(2-5个) | 主角阶段`。
476
483
 
477
- 输出长度限制见 SKILL.md(Stage 2 agent 模式按密度公式输出,Stage 3-5 单阶段 ≤8000 中文字符)。每批完成后更新 _progress.md。
484
+ 每章只保存一组紧凑事实。每批先保存完整缓存,再补缺失摘要,最后只更新 `_progress.md` 受管状态;不生成收据或独立批次账本。
478
485
 
479
486
  ### 处理批次(一次读多少)
480
487
 
481
- Stage 3-5 的语料是 `章节/*_摘要.md`。**实测体积:中文章节摘要约 15KB/章 ≈ 5-7K tokens/章**(据大奉打更人 57 章样本,869,663 字节 / 57 ≈ 15,257 字节)。按这个体积,「把全书摘要一次读进主线程」在 >500 章时必然超上下文——所以大书不是"把块调大",而是**换成子代理并行 + 降维聚合**。
488
+ Stage 3-5 的语料是 `digest` 输出:全书跨章观察,加按窗口抽取的逐章字段与情节点简表;不整份读批次缓存(其中约七成是与逐章摘要重复的章节块)。只有关键冲突才定点读取对应 `章节/*_摘要.md`。旧项目没有缓存时直接读取已有剧情、节奏、情绪、关系资料;不要为了统一格式先把所有旧摘要重新压缩一遍。
482
489
 
483
- **A. 子代理并行模式(>500 章默认,Stage 3-5 通用)**
490
+ **A. 连续批次模式**
484
491
 
485
- 1. **切批**:按章号顺序切成 10-20 章/批(≈5-15 万 tokens/批,落在子代理单次上下文内)。单章摘要明显更长时,按「一批不超过约 15 万 tokens」反推章数。批次边界尽量对齐语义块边界,对不齐时以章号连续为准。
486
- 2. **并行分派**:每批 spawn 一个子代理(`general-purpose` 或本阶段对应的专业 agent),把该批摘要文件路径交给它,**由子代理在自己的上下文里读原文**,主线程不读。
487
- 3. **降维回传**:子代理只回传该批的中间聚合,**每份 ≤8K tokens**,字段随阶段而定(剧情线候选 / 情节点归属 / 关键信息推进 / 情绪节奏 / 角色表)。禁止回传原始摘要或逐章罗列。
488
- 4. **主线程合并**:主线程只消费这些聚合结果做跨批合成。若批数过多、聚合总量仍超上下文,再做一层**两两/分组合并**(把 N 份聚合先并成 √N 份),直到能一次装下。
489
- 5. **进度**:每批完成后更新 `_progress.md`,记录批次号、覆盖章节区间、聚合产出路径。中断可按批续跑。
492
+ 1. **切批**:按 `chapter_index.csv` 连续取 1-3 章,根据原文字数和上下文缩放;完整任务不跳章。
493
+ 2. **分派**:每批一个 chapter-extractor,只给该批 `source_locator`、边界、输出文件路径和交接缓存路径;子代理自己读原文与交接批的跨批状态。串行、有限并行或不限顺序由作者在 Stage 1 后选定(见 pipeline-ops「执行与提交一个批次」),并行时边界处的剧情点接续交给下方跨块合并。每个原文范围只有一个 owner。
494
+ 3. **双层落盘**:同次产出逐章紧凑事实与批次观察,由子代理直接写进批次输入文件、只回回执;主会话不转贴原文、不读输入文件,直接提交。禁止另起一次模型调用重复分析同一批原文;兼容文件由提交脚本机械生成。
495
+ 4. **主线程合并**:主线程用 `digest` 消费全书跨章观察和按窗口抽取的逐章字段做全局合成。全书仍超上下文时按章节窗口分组合并,中间层只保留剧情状态、关键候选和证据引用,不扩写内容。
496
+ 5. **进度**:计划阶段只读;完整缓存、所需摘要和输入范围 hash 全部核对后,最后在 `_progress.md` 登记 `completed`。失败不提前写完成,必要时把父块标 `superseded` 并持久化相邻子块;中断从完整缓存恢复。
490
497
 
491
- > 覆盖示例:914 章按 15 章/批 ≈ 61 批;主线程全程只处理 61 份 ≤8K tokens 的聚合,不触碰原始语料。
498
+ > 批次数由原文长度和上下文决定,不设“超过 500 章就固定 10-20 章/批”的第二套规则。
492
499
 
493
500
  **B. 主线程串行模式(agent 不可用时的降级)**
494
501
 
495
- 无法 spawn 子代理时退回主线程顺序处理:**输入 6-8K token/块、章节边界对齐**,逐块读取并滚动累积中间结论(每块处理完只保留结论、丢弃原文)。这是「6-8K token/块」这条规格的**唯一适用场景**——它描述的是主线程单次读取量,不是大书的语义块尺度。串行模式对 >500 章耗时很长,但结论质量与并行模式一致。
502
+ 无法 spawn 子代理时由主线程按同一连续批次契约顺序处理。批次可因主线程上下文更小而缩短,但仍须同次产生逐章事实和跨章观察,不能退回每章一次调用。
496
503
 
497
504
  **C. 不要做的事**
498
505
 
499
- - 不要为了"塞进上下文"而把 50-200 章的语义块整块读进主线程——那是 25-150 万 tokens,必然失败。
500
- - 不要把 6-8K token 当成大书的切批单位——914 章会切出 4000+ 批,聚合层数爆炸。
501
- - 主线程在并行模式下不读 `章节/*_摘要.md` 原文;一旦开始逐章读,预算模型就失效了。
506
+ - 不要把大语义弧整块塞进一次上下文。
507
+ - 不要固定章数而忽略原文字数、上下文容量和章界。
508
+ - 不要在 Stage 3、4、5 各自重新读取同一批原文。
509
+ - 不要用跳读锚点冒充完整语义覆盖。
502
510
 
503
511
  ### 跨块合并(大型小说 >500 章)
504
512
 
@@ -527,4 +535,4 @@ Stage 3-5 的语料是 `章节/*_摘要.md`。**实测体积:中文章节摘
527
535
 
528
536
  - 进度通过 _progress.md 追踪
529
537
  - 新会话读 _progress.md 定位断点
530
- - 从断点所在块的起始章节重新开始(覆盖该块已有输出)
538
+ - 先校验断点批次已有文件;完整且与来源一致则补记进度,缺失或损坏才从该批次起章重做