@oh-story/dsh 0.1.8 → 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 (360) hide show
  1. package/README.md +14 -14
  2. package/lib/client.js +237 -84
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +183 -77
  5. package/lib/drama/skills/short-drama/SKILL.md +5 -1
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +140 -9
  7. package/lib/drama/skills/short-drama/scripts/project_tool.py +11 -0
  8. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +28 -0
  9. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +8 -2
  10. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  11. package/lib/drama/skills/short-drama-edit/SKILL.md +146 -0
  12. package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
  13. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
  14. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
  15. package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
  16. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
  17. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
  18. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
  19. package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
  20. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
  21. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
  22. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
  23. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +38 -0
  24. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +29 -0
  25. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +54 -0
  26. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +60 -0
  27. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +51 -0
  28. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1156 -0
  29. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +520 -0
  30. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  31. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
  32. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
  33. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  34. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
  35. package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
  36. package/lib/drama/skills/short-drama-produce/SKILL.md +29 -4
  37. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +22 -0
  38. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +13 -12
  39. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  40. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
  41. package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
  42. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
  43. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +199 -3
  44. package/lib/drama/skills/short-drama-review/SKILL.md +2 -0
  45. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +7 -0
  46. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +10 -0
  47. package/lib/drama/skills/short-drama-storyboard/SKILL.md +12 -1
  48. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
  49. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  50. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +78 -2
  51. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +12 -5
  53. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
  54. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +76 -7
  55. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +5 -2
  56. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +21 -0
  57. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -17
  58. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +12 -3
  59. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +61 -5
  60. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -3
  61. package/lib/drama/skills/short-drama-write/SKILL.md +11 -2
  62. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
  63. package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
  64. package/lib/index.js +290 -90
  65. package/lib/index.js.map +4 -4
  66. package/lib/novel-to-game/README.md +299 -59
  67. package/lib/novel-to-game/README_ZH.md +299 -56
  68. package/lib/novel-to-game/VERSION +1 -1
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  78. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  79. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  80. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  81. package/lib/novel-to-game/manifest.json +77 -87
  82. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +9 -35
  83. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  84. package/lib/novel-to-game/skills/game-build/SKILL.md +17 -35
  85. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  86. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  87. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  88. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  89. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  90. package/lib/novel-to-game/skills/game-concept/SKILL.md +16 -34
  91. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  92. package/lib/novel-to-game/skills/game-qa/SKILL.md +9 -20
  93. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +10 -6
  94. package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -32
  95. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  96. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  97. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  98. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +9 -18
  99. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  100. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +10 -27
  101. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -6
  102. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +6 -11
  103. package/lib/oh-story/manifest.json +419 -254
  104. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  105. package/lib/oh-story/roles/character-designer.md +1 -1
  106. package/lib/oh-story/roles/consistency-checker.md +4 -4
  107. package/lib/oh-story/roles/narrative-writer.md +56 -243
  108. package/lib/oh-story/roles/story-architect.md +6 -6
  109. package/lib/oh-story/roles/story-explorer.md +11 -11
  110. package/lib/oh-story/skills/story/SKILL.md +13 -7
  111. package/lib/oh-story/skills/story/VERSION +1 -1
  112. package/lib/oh-story/skills/story/references/author-memory.md +61 -29
  113. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  114. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  115. package/lib/oh-story/skills/story-deslop/SKILL.md +54 -229
  116. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +29 -56
  117. package/lib/oh-story/skills/story-deslop/references/author-memory.md +61 -29
  118. package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
  119. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
  120. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
  121. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  122. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
  123. package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
  124. package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
  125. package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
  126. package/lib/oh-story/skills/story-import/SKILL.md +78 -82
  127. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  128. package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
  129. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  130. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
  131. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
  132. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +9 -34
  133. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +197 -15
  134. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
  135. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
  136. package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
  137. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
  139. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
  141. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
  142. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
  143. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  144. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
  145. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
  146. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  147. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  148. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  149. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
  150. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  151. package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
  152. package/lib/oh-story/skills/story-long-write/SKILL.md +52 -216
  153. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +29 -56
  154. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +72 -12
  155. package/lib/oh-story/skills/story-long-write/references/author-memory.md +61 -29
  156. package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
  157. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
  158. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  159. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +10 -4
  160. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  161. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +6 -15
  162. package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
  163. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
  164. package/lib/oh-story/skills/story-long-write/references/project-files.md +110 -0
  165. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
  166. package/lib/oh-story/skills/story-long-write/references/reference-index.md +86 -0
  167. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
  168. package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
  169. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  170. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
  171. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
  172. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +9 -34
  173. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +88 -118
  174. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -119
  175. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
  176. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +73 -54
  177. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
  178. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +63 -4
  179. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  180. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +531 -0
  181. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
  182. package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
  183. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +197 -15
  184. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
  185. package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
  186. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +285 -0
  187. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
  188. package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
  189. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
  190. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
  191. package/lib/oh-story/skills/story-review/SKILL.md +80 -87
  192. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +29 -56
  193. package/lib/oh-story/skills/story-review/references/author-memory.md +61 -29
  194. package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
  195. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +10 -4
  196. package/lib/oh-story/skills/story-review/references/review-quality.md +6 -12
  197. package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
  198. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
  199. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +9 -34
  200. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  201. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
  202. package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
  203. package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
  204. package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
  205. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
  206. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
  207. package/lib/oh-story/skills/story-setup/SKILL.md +58 -43
  208. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +29 -56
  209. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
  210. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
  211. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +10 -4
  212. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
  213. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  214. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
  215. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
  216. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
  217. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  218. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +27 -0
  219. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +63 -4
  220. package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
  221. package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
  222. package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
  223. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
  224. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
  225. package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
  226. package/lib/oh-story/skills/story-short-write/SKILL.md +15 -324
  227. package/lib/oh-story/skills/story-short-write/references/author-memory.md +61 -29
  228. package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
  229. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
  230. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +10 -4
  231. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +2 -2
  232. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
  233. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
  234. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +3 -3
  235. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
  236. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +5 -5
  237. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +4 -4
  238. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
  239. package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
  240. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +1 -1
  241. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
  242. package/lib/oh-story/skills/story-short-write/references/reference-index.md +55 -0
  243. package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
  244. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
  245. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
  246. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
  247. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
  248. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +78 -0
  249. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
  250. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
  251. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
  252. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  253. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
  254. package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
  255. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
  256. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
  257. package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
  258. package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
  259. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  260. package/lib/types/client/file-activity.d.ts +19 -1
  261. package/lib/types/client/file-activity.d.ts.map +1 -1
  262. package/lib/types/client/index.d.ts.map +1 -1
  263. package/lib/types/client/production-prompts.d.ts +7 -0
  264. package/lib/types/client/production-prompts.d.ts.map +1 -1
  265. package/lib/types/client/production-runtime.d.ts +33 -0
  266. package/lib/types/client/production-runtime.d.ts.map +1 -1
  267. package/lib/types/drama-adapters.d.ts +5 -3
  268. package/lib/types/drama-adapters.d.ts.map +1 -1
  269. package/lib/types/native-hooks.d.ts +52 -0
  270. package/lib/types/native-hooks.d.ts.map +1 -1
  271. package/lib/types/role-identity.d.ts +17 -0
  272. package/lib/types/role-identity.d.ts.map +1 -0
  273. package/lib/types/role-tool.d.ts.map +1 -1
  274. package/lib/types/skill-provider.d.ts.map +1 -1
  275. package/lib/video-recap/CHANGELOG.md +31 -1
  276. package/lib/video-recap/manifest.json +162 -162
  277. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
  278. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
  279. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
  280. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
  281. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
  282. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
  283. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
  284. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
  285. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
  286. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
  287. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
  288. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
  289. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
  290. package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
  291. package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
  292. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
  293. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
  294. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
  295. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
  296. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
  297. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
  298. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
  299. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
  300. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
  301. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
  302. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
  303. package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
  304. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
  305. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
  306. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
  307. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
  308. package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
  309. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
  310. package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
  311. package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
  312. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
  313. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
  314. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
  315. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
  316. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
  317. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
  318. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
  319. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
  320. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
  321. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
  322. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
  323. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
  324. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
  325. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
  326. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
  327. package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
  328. package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
  329. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
  330. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
  331. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
  332. package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
  333. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
  334. package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
  335. package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
  336. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
  337. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
  338. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
  339. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
  340. package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
  341. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
  342. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
  343. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
  344. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
  345. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
  346. package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
  347. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
  348. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
  349. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
  350. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
  351. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
  352. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
  353. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
  354. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
  355. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
  356. package/package.json +45 -45
  357. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -59
  358. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  359. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -42
  360. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
@@ -1,145 +1,115 @@
1
1
  # workflow-chapter.md:单章正文工作流(Phase 4-5)
2
2
 
3
- 本文件是「写一章正文」的完整流程。SKILL.md 路由到 Phase 4 后按本文件执行;日更批量由 `workflow-daily.md` 控制批次与追踪事务,每章正文仍走本文件。
3
+ 「写一章正文」的完整流程。日更批量由 `workflow-daily.md` 控制批次,每章仍走本文件。项目文件结构、缺失处理和对标权威顺序见 [project-files.md](project-files.md),首次定位或文件缺失时才读。
4
4
 
5
- 项目文件结构、产物映射表、缺失文件处理、对标分析权威优先级在 `SKILL.md` Phase 4 开头,本文件不重复(SKILL.md 恒在上下文里)。
5
+ **工作目录**:本章临时文件(前组.md、后组.md、writer_prompt.md、tracking.json)只放书目录下 `.story/work/第NNN章/`,不写系统 `/tmp`、`正文/`、`大纲/` 或书根;`chapter commit` / `accept-current-length` 成功后脚本自动删除该目录,失败时保留供重跑。
6
6
 
7
- 本文件提到的 agent 都只检查当前端 canonical 目录;Antigravity 使用 `.agents/agents/agent-name/agent.md`(`agent-name` 为目标 agent 名)和 `invoke_subagent` + 同名 `TypeName`,其余端使用各自 Agent 工具。
7
+ agent 只查当前端 canonical 目录;Antigravity 用 `.agents/agents/agent-name/agent.md` 与 `invoke_subagent` + 同名 `TypeName`,其余端用各自 Agent 工具。
8
8
 
9
9
  ---
10
10
 
11
11
  ## 单章写作流程
12
12
 
13
- 当用户准备写某一章时:
14
-
15
- 1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,并从对应 `大纲/卷纲_第X卷.md` 读取当前剧情单元(单元ID/位置、卷契约、本卷主推线/战果、终局底牌边界、风险等级)。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。补建后按 `artifact-protocols.md` 跑 `check-outline-contract.js` 结构验收,失败只补点名字段再复验。
16
- 2. **读取上下文**(按需选择;缺失时遵循各项及SKILL.md Phase 4 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:对应 agent 已部署时 spawn story-explorer 一次获取上下文。Prompt:`项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={check 的值},state_revision={check 的值}`):
17
- - (1) `正文/第{N-1}章_*.md` — 上一章正文
18
- - (2) `大纲/细纲_第{N}章.md` — 本章细纲(含钩子设计)
19
- - (2a) `大纲/卷纲_第X卷.md` — 当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)
20
- - (3) `tracking_commit.py check` + `追踪/上下文.md` — `check` 无 ERROR 输出即通过,从它的紧凑 JSON 取 `last_committed_chapter` / `state_revision`,不把完整 state 加入 prompt;待回收伏笔取 `## 活跃伏笔`,角色当前状态取 `## 核心角色状态`,下一章硬承诺取 `## 下一章承诺`
21
- - (4) `设定/角色/{相关角色}.md`、`设定/势力/{相关势力}.md`(如存在)— 本章涉及的角色与势力(按细纲出场筛选)
22
- - (5) 对标书路径下 `拆文报告.md`(按对标书路径查找)— 对标参考
23
- - (6) `对标/{对标书名}/原文/第{N}章_*.md`(如存在)— 同位置章节参考
24
- - (7) `参考资料/{topic}.md`(如存在)— 历史研究资料(由 story-researcher 产出)
25
- - (8) 对标书路径下 `剧情/故事线.md`(按对标书路径查找)— 剧情单元索引,用于确定本章涉及哪些剧情单元
26
- - (9) 对标书路径下 `剧情/{相关剧情单元}.md`(按对标书路径查找)— 从索引中选择与本章相关的剧情单元文件
27
- - (10) 对标书路径下 `设定/世界观/*.md`(glob,按对标书路径查找)— 从当前拆文产出的主题化设定中获取参考;目录缺失则记录缺口并跳过本项,不读取扁平历史路径
28
- - (11) 对标书路径下 `剧情/情绪模块.md`(按对标书路径查找)— 读者需求 / 情绪引擎、爽文套路框架、可复现模块;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
29
- - (12) 对标书路径下 `剧情/节奏.md`(按对标书路径查找)— 关键信息推进、情绪触动点、爆发节奏;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
30
- - (13) `设定/题材正文提示卡.md`(如存在)— 本书正文层题材卡;缺失时从 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先)+ `references/style-genre-modules.md`(兜底)即时生成 `genre_prose_card`,不阻塞写作
31
- 3. **写前准备**(下面的 3 步是核心方法在单章写作中的落地:筛选状态 → 召回模块 → 确认意图):
32
- - **状态筛选**:从 `追踪/上下文.md` 的 `## 核心角色状态` 取当前角色,从 `## 活跃伏笔` 取需回收/推进项,从 `## 下一章承诺` 取本章必须履行项,输出本节速记(参考 state-tracking.md)。久别角色按名读取 `追踪/角色状态/{名}.md`;只有追查变化原因时才定点查逐章增量。续写状态卡或 meta 不存在时按 workflow-daily 的当前协议处理,不手写替代文件
33
- - **模块召回、题材卡与文风召回**:
34
- - ① 本章目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 用在哪些段落?答不出 → 先回读参考再动笔
35
- - (a) **情绪模块召回**:按「对标书路径查找」规则读 `{对标书路径}/剧情/情绪模块.md`,选出 1 个与本章目标情绪最贴近的 `selected_emotion_module`(读者需求、触发器、戏剧单元、可替换要素、反抄袭提醒)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
36
- - (b) **节奏召回**:读 `{对标书路径}/剧情/节奏.md`,选出 1 条 `rhythm_reference`(关键信息 → 扩写技法 → 情绪触动点 → 爆发/冷却)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
37
- - (c) **题材正文提示卡召回**:优先读 `设定/题材正文提示卡.md`;缺失则先读 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引,按主题材精确匹配后只读取 `references/genre-prose-cards/` 中对应单题材卡(如 都市脑洞 / 豪门总裁 / 年代 / 双男主;低置信卡必须在意图确认标注低置信,并要求同题材对标校准),无命中再读 `references/style-genre-modules.md` 通用流派模块。跨题材时主题材抽 3-5 条、辅题材抽 1-2 条,生成短 `genre_prose_card`(题材边界、核心逻辑、读者期待、核心爽点/情绪、正文落点、前中后期打法、节奏密度、场景颗粒、禁止漂移、本章取舍、卡片置信度)。题材卡只约束正文层题材味,不改细纲剧情、不覆盖 `selected_emotion_module` / `rhythm_reference` / `设定/文风.md`;只在内部校准取舍,正文里不得出现卡名/标签/置信度/条目/合规自评
38
- - (d) **文风召回**:先直接读 `设定/文风.md`(不经 explorer):含实质内容(去空白 ≥200 字,或含 句长 / 标点 / 对话 / 锚点 / 笔调 小节且小节内有可执行约束:比例 / 例句 / 禁止或偏好描述)则置 `custom_style=true`、进入「自定义文风模式」,它作权威风格基(句长 / 软标点 / 潜台词 / 情绪交替),对标 / 拆文 `文风.md` 降为参考(锚点 + 句长兜底);空 / 仅空白 / 仅标题 / 占位 stub(待办 / 待补充 / ___)视为不存在。否则按「对标书路径查找」规则读 `{对标书路径}/文风.md`(路径优先 `{项目}/对标/{书名}/`,回退 `拆文库/{书名}/`);多本对标书时从 `设定/题材定位.md` 读 `主对标书` 字段。**未进入自定义文风模式且**文风文件不存在 → **fail-fast 报错**:「对标书 X 缺少 文风.md。请用 `/story-long-analyze` 跑 Stage 6 生成文风,再 `/story-import` 同步。」不 inline 生成(自定义文风模式则不 fail-fast;情绪 / 节奏轴 `missing_primary_contract` 仍独立阻塞)
39
- - (e) **匹配章节挑选**:从 `{对标书路径}/章节/*_摘要.md` grep `基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)`(全角冒号),按本章目标情绪挑章 K——多章同基调时选择规则:先看爽点类型是否接近,再看情节点数量/原文章节估算字数是否接近本章目标字数,最后取章节号最小者;必读 `{对标书路径}/章节/第K章_摘要.md`,若同章存在 `第K章_深度拆解.md` 则加读,否则回退黄金三章深度拆解/文风文件里的可借鉴技巧,不因非黄金三章缺少深度拆解而失败
40
- - (f) **结构化模块召回**:从对标的结构化子目录(角色/剧情/设定)中按本章情节检索相关模块;若与 `剧情/情绪模块.md` / `剧情/节奏.md` 冲突,权威文件优先,记录 `conflict`
41
- - (g) 输出"主对标召回摘要 + 副对标召回摘要 + selected_emotion_module + rhythm_reference + genre_prose_card + 文风召回指令 + 原文锚点片段引用",作为 narrative-writer 的输入。**多对标书时**参 `references/cross-book-recall.md`:主对标提供文风、原文锚点与 selected_emotion_module / rhythm_reference;副对标/参考对标按阶段预算提供结构化摘要,不限制登记书目,不读取副书 `文风.md` / 原文,超过预算时裁条目不裁书目记录。
42
- - **快捷路径**:项目已部署 story-explorer agent 时,可一次性召回文风/模块材料。
43
- - 按本文件顶部规则确认 story-explorer 已部署。
44
- - 查询类型:`benchmark_style_load`;传入项目目录、章节号、目标基调/字数和爽点类型。
45
- - 需要返回:`style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、来源路径、匹配章节、锚点片段、`gaps`。
46
- - `gaps.missing_primary_contract` 为 true 时先按 `repair_action` 修复,不进入正文生成。
47
- - 主会话另行直接读 `设定/文风.md`:含实质内容时作为本书风格基准;但不豁免情绪/节奏缺失。
48
- - **指令确认**:综合细纲、本节速记和模块召回结果,用一句话写清本章意图。
49
- - 新版细纲必须消费:阶段位置、单元ID/位置、主角目标/关键选择、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾钩子,并对照当前剧情单元的卷契约、本卷主推线/战果、终局底牌边界。
50
- - **细纲优先边界**:正文只能展开本章细纲已有事件、人物、冲突、伏笔和结尾钩子;不得为了凑字或"更精彩"自造新主线、新角色、新反转、提前写后续章剧情,必要的过渡动作只能服务于细纲已列情节点。后续阶段真相、底牌、关系结论和终局矛盾不得因为章尾钩子提前泄露。反过来,细纲是"要发生什么"的契约、不是正文的形状:正文可自由编排叙述顺序、合并/穿插情节点,不必一个情节点一段、也不必按五段式顺写,把每个点演成场景而不是照抄概括语(见 writing-craft.md「从细纲到正文」)。
51
- - **细纲语义去重**:同一要求在核心事件、五段式、情节安排和情节点中重复,只算一个语义点;生成前合并,不把重复次数当强调,不沿用提纲原句逐项复述。比如多处都写“不带摄像机、先听完再决定拍不拍”,正文只通过一个自然动作或一句人物判断兑现,不能拆成「至于拍不拍,怎么拍…」「不带摄像机,不带采访灯」两轮说明。
52
- - 爽点出手前要有可指认的危机/期待铺垫;装逼/打脸/揭露章要写在场配角的差异反应。
53
- - 高压/生死/悲痛节拍 要收紧对话声线:搞笑担当让位,信息型角色不当科普嘴,对话逐句承接对方情绪。
54
- - 检查任务卡点:本章如果有“办事被卡住”,它必须卡出信息、关系、代价、选择或伏笔变化;没有就不强补。
55
- - 契约风险检查:按 `references/reader-contract-and-progression.md` 判定 契约安全 / 需补强 / 契约破坏;若高光/收益被配角、机构或偶然性拿走且没有可见交换,先修纲再写。
56
- - 例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」
57
- 4. **资料研究**(按需):遇到需查证的外部事实且 story-researcher 已部署时,spawn 搜索并输出到 `参考资料/`;不可用则主线程直接执行。研究完成后再继续写作。
58
- 5. **标题预检**:写正文前从细纲读取章名;如与既有章节同名或明显重复,先按本章核心事件改名,并同步细纲标题与正文文件名。
59
- 6. **写作与唯一 checkpoint**:将批准情节点按叙事顺序分成连续两组,同一 session 先写前组临时 segment,再且只运行一次 `{PYTHON} {skill 根}/scripts/storyctl.py wordcount checkpoint --file {前组临时文件} --target {字数目标} --chapter {N}`。把 `actual`、`remaining_user_range` 和后组原始情节点交回 writer,并明确:
60
- - 只完成剩余情节点,不得为字数新增独立事件、人物决定、关系变化、揭示或支线。
61
- - 剩余情节点完成即停,即使仍欠长也不加剧情。
62
- 两段完成后一次组装最终正文;不做逐点配额、字数 retry、完整重写或落盘后扩写。
63
- - **正文元信息隔离**:`章节:第{N}章`、`上一章:正文/第{N-1}章_*.md`、`匹配第K章`、`细纲文件` 等只用于定位材料。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词。需要承接前文时,改成角色能感知的事件锚点或相对时间,例如“比第一章那三秒开火更疼”必须写成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
64
- 7. **正文执行**:
65
- - 按本文件顶部规则确认 narrative-writer 已部署。
66
- - 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,prompt 只传本章必需材料:
67
- - 项目目录、章节、细纲文件、上一章、输出路径。
68
- - 写前准备输出:本节速记、情绪目标、涉及角色、参考技法。
69
- - 主对标/拆文路径、主/副对标召回摘要。
70
- - `selected_emotion_module`、`rhythm_reference` 及来源路径。
71
- - `genre_prose_card`(题材正文提示卡摘要,只含本章相关条目)。
72
- - 文风路径、文风召回指令、原文锚点片段。
73
- - `author_preferences`:作者记忆 `query` 结果中匹配本章的 `prose_style` / `story_design` 项;无则不传,禁止把完整画像或待确认项塞进 prompt;作为低优先级倾向自然吸收,不逐条展示或最大化命中,不牺牲连贯、节奏和字数。
74
- - 阶段位置、本章结构公式、本章可释放信息、本章禁止提前释放信息。
75
- - 字数目标、`visible_chars_v1` 口径、格式硬约束;前组后由机器给出一次剩余用户区间,不让 writer 心算或填写逐情节点配额。
76
- - 细纲优先边界(内容层):只展开本章细纲,不自造新剧情;每条情节点都要独立落地,不许漏、不许两条并一句。不得仅为追字数自动补纲、扩写或重写;实际长度统一留到步骤 8 测量。
77
- - 正文形状(形状层):落地位置、顺序、拆成几处由子代理编排,可打散重排、把相邻几条缝进同一个连续动作;不要一条一段平推,不把细纲措辞原样搬进叙述。
78
- - 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
79
- - agent 在同一 session 内按上述流程写两个临时 segment;主会话确认二者只消费批准情节点后,组装并写入 `正文/第XXX章_章名.md` 一次。如 agent 未部署,由主线程执行同一流程。
80
- 8. **非对称收口**:运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N}`;文件变更重跑,不存决议。
81
- - 带内 + pass → `chapter commit`;fail / `invalid` → 停止。
82
- - `under` + pass → 展示 `accept-current-length / revise-outline-or-target / discard`,不补/重试;接受命令会重读、重数、原子提交。
83
- - `over` + pass → 删除区间随 `compress-once` 交 narrative-writer;一次净删,零新语义/契约改动。会话核对情节点与钩子后复检;带内提交,否则上述三动作。
84
- 9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→只修复细纲已批准内容):① 爽点前是否有可指认的危机/期待段落?② 装逼/打脸/揭露章,在场配角是否有差异化反应?质量修复后重跑步骤 8,但不得借质量修复补新剧情追字数。
85
- 10. **元信息扫描**:检查标题行以外的正文,命中 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 时必须改写为场景内表达;只有角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时例外。
86
- 11. **禁用词扫描**:先过**最毒句式速查**(实测最易漏,命中即改):①「不是A,(而)是B」全家族——含「没有X,没有Y(,只是Z)」排比否定、「是B,不是A」反序、「他没X,也没有Y。他只是Z」先抑后扬,;②声线反差「声音不大/不高…却…」;③「,带着……」万能状语;④预告/总结收尾「没人知道…」「(这)才刚刚开始/开头」「正朝着…压过去」「即将拉开序幕」「这一刻…」;⑤叙述里短词加引号强调(他是被请来"把关"的)。再复核 detector 的 `formulaic-parallelism` advisory:跨段「不是A。/也不是B。/只是C。」、`至于X不X,怎么X`、同动词 `不V A,不V B` 即使写在台词里也不能跳过,确属人物当场的功能性表达才保留。然后对照 `references/banned-words.md` 全表:一级词(高频AI腔)命中即替换;二级词(低频/语境相关)高频出现时替换,偶发可参考 `references/anti-ai-writing.md` 定性裁定
87
- 12. **更新追踪**:最终 `chapter check` 后取最新 `state_revision`,按 workflow-daily 构造不含 `wordcount` 的逐章 JSON。长度在用户带内执行 `storyctl.py chapter commit`;用户接受当前自然长度则执行 `storyctl.py chapter accept-current-length`。两条命令都在提交前重新读取正文和目标、重新计数、重跑 blocking quality,并把简短字数记录与追踪事务一起原子提交。写入失败保留原事务重跑;校验失败重构事务。派生视图损坏按 tracking 文档用 revision 修复,禁止手改。本章首次引入复用角色/势力时,仍按 workflow-setup Phase 3 补建静态档案。
88
- 13. **中途快照**(长篇写作安全网):每连续写完 3 章,在继续前执行以下快照操作:
89
- - 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288 字节;通过后删除本章逐章事务 JSON 与临时 segment,失败时保留事务 JSON 供原样重跑
90
- - 用 `ls -la 正文/` 确认最近 3 个章节文件已成功写入磁盘且大小正常(>100 bytes)
91
- - 如果发现文件缺失或大小异常,立即重新写入
92
- - 快照完成后可继续写作
93
-
94
- > **日更模式**:此步骤自动跳过——workflow-daily Step 2 已按章更新上下文.md。
95
-
96
- ## 写作技巧提醒
97
-
98
- | 场景 | 技巧 |
99
- |------|------|
100
- | 开篇 500 字 | 必须有钩子,不能从天气/风景开始(除非反差极大) |
101
- | 对话 | 推进剧情或揭示性格,不能只为了凑字数 |
102
- | 打斗 | 不要流水账,写策略和反转,不写「你一拳我一脚」 |
103
- | 日常 | 日常要有人物互动和伏笔,不能只是「吃饭睡觉」 |
104
- | 任务卡点 | 角色办事被卡住,必须卡出信息/关系/代价/选择/伏笔变化;删掉无损就压缩或删除 |
105
- | 爽点释放 | 铺垫要充分、释放要干脆,读者等得越久释放越要爽 |
106
- | 爽点密度 | 高压/推进章每 3000-5000 字一个「爽」的情绪节点;低压/关系/修炼/信息整理章不强求,但每章仍要有往下看的理由(见 references/outline-structure-theory.md「章节定位与张弛」) |
107
- | 长篇结构约束 | 参考 genre-prose-cards.md 与当前题材卡的长线约束 |
108
- | 章尾 | 每章结尾都要有让读者想翻下一页的东西 |
109
- | 情绪验证 | 写完每章回头检查:读者到这里应该感受到什么?感受到了吗?没感受到 → 按章节定位补:高压/推进章补冲突或钩子,低压/关系章补关系或情绪质感,别一律加爽点 |
13
+ 缺 `_tracking-state.json` 时先按 workflow-daily「首次初始化」处理,`check` 通过才往下走。
14
+
15
+ 1. **检查细纲**:读 `大纲/细纲_第{N}章.md` 全文,取「单元ID/位置」,跑 `outline_view.py --unit {单元ID} {卷纲路径}` 取卷契约、全卷常任裁定、当前剧情单元与终局底牌边界——**不整读卷纲**;exit 1 按提示修,不改用整读。细纲缺失或缺必需字段时**先补建再写**:按 workflow-setup 细纲模板补齐必填项(核心事件、字数目标、字数口径、单元ID/位置、目标情绪、主角目标/关键选择、章首钩子、爽点、本章禁止提前释放)和四个小节,无证据的写 `[待补充]`,补完跑 `check-outline-contract.js` 验收。
16
+ 2. **读取上下文**:`tracking_commit.py check`(取 `last_committed_chapter` / `state_revision`,完整 state 不进 prompt)→ `追踪/上下文.md` 全 7 栏 → 细纲点名或出场的 `设定/角色/`、`设定/势力/`、`设定/世界观/` 相关文件。上一章结尾由脚本代读,承接存疑才自己读。久别角色读 `追踪/角色状态/{名}.md`;更旧的信息按 workflow-daily「旧信息查找步骤」定点查。
17
+ 3. **写前准备**:
18
+ - **先跑组装脚本**:`{PYTHON} {skill 根}/scripts/build_writer_prompt.py --project {项目根} --chapter {N} --out`。`====` 以上是 prompt、以下是核对报告;退出码 2 =数据问题,修完重跑,不手拼绕过。
19
+ - **状态筛选**:从续写状态卡取本章在场角色、要碰/要避的伏笔、必须履行的下一章承诺与相关长期约束,写成本节速记。
20
+ - **召回**:核对报告写「召回降档:成立」时直接用脚本给的情绪/节奏;不成立时才完整读取 [benchmark-recall.md](benchmark-recall.md) 执行全量召回。
21
+ - **意图确认**:一句话写清本章意图(例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」)。确认时对照:细纲是唯一剧情蓝图,新增物按写手铁律 3 的三级(直接写 / 写了要报 / 先问作者);后续阶段真相与底牌不因章尾钩子提前泄露;细纲多处重复的同一要求只算一个语义点,正文兑现一次;爽点前有可指认的危机/期待铺垫,打脸/揭露章写在场配角的差异反应;高压节拍收紧对话声线。
22
+ - **契约四问**:主角是否靠自己的选择挣到本章结果?收益是否被配角、机构或巧合无交换地拿走?有没有提前动用后面的底牌?旧期待付利息、留新期待了吗?任一问不过(没靠自己挣到、收益被拿走、提前动了底牌、旧期待没付利息),读 `references/reader-contract-and-progression.md` 对应小节,先修纲再写。
23
+ 4. **资料研究**(按需):需查证外部事实时 spawn story-researcher 输出到 `参考资料/`,不可用则主线程查。
24
+ 5. **标题预检**:看核对报告的重名结论;重名或明显重复才按核心事件改名,并同步细纲标题与正文文件名。
25
+ 6. **写作准备**:全章细纲先交给 writer 统筹编排,默认同一 session 按前后两组交付。
26
+ - 按实际叙述顺序在自然转场或因果停顿处分组,不在一句对话或同一动作中间截断;可交错情节点,但不增删批准内容,不拆逐点字数配额。
27
+ - writer 先把前组写到工作目录 `前组.md`;主会话只调用一次 `storyctl.py wordcount checkpoint --file {segment} --target {目标} --chapter {N}`,把 `actual / remaining_user_range` 连同后组交回同一 writer。两组按原文拼接,不回改前组追字数。
28
+ - 用户明确要求一次成文时执行安排填「全章」,直接落盘,不跑 checkpoint。批准内容写完即停,不为字数加剧情;实际长度由步骤 8 收口。
29
+ - **正文元信息隔离**:章号、上一章、匹配章、细纲文件只用于定位。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类工程词,承接前文改成角色能感知的事件锚点或相对时间(「比第一章那三秒开火更疼」→「比那三秒开火更疼」)。例外:角色在故事内真实阅读/讨论「第X章」文本,或真实身为作者/读者。
30
+ 7. **正文执行**:确认 narrative-writer 已部署;骨架已由脚本生成,细纲全文、卷纲、续写状态卡都不进 prompt。**主会话填八槽**(搜 `[主会话填]`):执行安排 / 本章意图 / 参考技法 / 本节速记 / 涉及角色 / `genre_prose_card` / 必读设定 / `style_resolution`;降档不成立时情绪与节奏槽也要填。`author_preferences` 由脚本查询注入(查询失败才成空槽,按 author-memory.md 手动查),只作低优先级倾向,不逐条展示或最大化命中。空槽以外一字不改,整份照抄进 Agent prompt。脚本**跑不起来**时读 [writer-prompt-fallback.md](writer-prompt-fallback.md) 手动组装并报 `Fallback: build_writer_prompt -> 手动组装`;退出码 2 不是回落,是修数据。agent 交付后主会话核对它只消费了批准情节点;agent 未部署则主线程按同一流程写。
31
+ 8. **核情节点落点,再一次检测收口**:
32
+ - 细纲每个情节点**至少出现一次**,漏即退回补写批准内容。这类退回不以字数为由。
33
+ - 运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N} --fix-punctuation`:一次调用整理标点,再跑 AI 句式、`check-degeneration.js` 退化、细纲照搬与字数检测。文件改动后重跑,不存决议,不再分别调各检测脚本。
34
+ - 带内 + pass → 完成步骤 9-12 再提交;fail / `invalid` → 停止修。`under` + pass → 不补不重试,按「向作者汇报」的字数问法请作者选。`over` + pass → 删除区间随 `compress-once` 交 narrative-writer 一次净删、零新语义,复检后带内提交,否则同样请作者选。
35
+ 9. **检查钩子与爽点**:章尾有往下看的理由(低压/过场章留阶段目标即可);高压/推进章爽点到位。不达标只修复批准内容,修后重跑步骤 8,不借质量修复补新剧情追字数。
36
+ 10. **元信息扫描**:按步骤 6 的规则清掉标题行以外的工程词。
37
+ 11. **检测结果处理**:严重度统一读作必须修 / 建议看 / 仅提示——检测器 blocking 与 checker 的 S1/S2 是必须修,advisory 与 S3 是建议看,S4 仅提示。`quality.blocking_findings` 就地改到净;`advisories` 逐条读原文判断,确属问题才改,功能性写法保留,不为归零机械改写。`formulaic-parallelism` 连同台词一起复核;细纲照搬里判定保留的补进细纲「复沓锚句」。禁用词表不整读,拿不准的二级词才查 `references/banned-words.md` 对应条目。改完只重跑步骤 8,不另安排全篇去味。
38
+ 12. **更新追踪**:运行 `{PYTHON} {skill 根}/scripts/tracking_commit.py draft --project {项目根} --chapter {N}`,它把修订号、模式、章名和上下文当前值预填进工作目录 `tracking.json`,并给出字数上限与在场核心角色的当前快照。只填 `delta` 与留空的本章结尾时间、场景:本章变化的核心角色把快照整份改好放进 `character_snapshots`;撤下的长期约束或风险从 `context` 删掉并把原文列进 `delta.retired_context_items`。不读脚本源码或 state 文件找格式;schema 细节、修订与修复见 [tracking-transaction.md](tracking-transaction.md),只在出错或 `mode=revision` 时读。带内执行 `storyctl.py chapter commit`,作者接受当前长度执行 `chapter accept-current-length`(两者都重读正文、重数、重跑 quality 后原子提交)。报错会一次列全要改的字段,按提示改完重跑同一命令。作者选「这章不要了」时删本章正文与工作目录,不提交。判为「登记」的申报项在这次事务里一并登记;有「先问作者」项时暂停提交与下一章。
39
+ 13. **提交后核对**:返回 `tracking_committed: true` 即本章完成,工作目录已删;连续写多章不另做快照。
40
+
41
+ ## 向作者汇报
42
+
43
+ 按 SKILL.md「面向作者的汇报」,下列时机照模板说;`{}` 换成故事里的话,其余内部结论不说给作者。提交成功、本章完成后(日更批量改用 workflow-daily 批末汇报):
44
+
45
+ <!-- author-report -->
46
+ ```md
47
+ 第{N}章《{章名}》写好了,约 {字数} 字。
48
+ 这章:{两三句讲发生了什么,停在哪个钩子上}。
49
+ {有需作者留意的新人物/新设定就一句话,如「加了个跑腿的小厮阿福,后面可能还会用」;没有就删掉此行}
50
+ {自查结论一句话:「自查过设定和前文,没发现冲突」或「发现一处前后不一:{什么},已按前文改正」}
51
+ 下一章:第{N+1}章《{章名}》,要接着写吗?
52
+ ```
53
+
54
+ 字数一次处理后仍不在范围内时,请作者选,不自行补写:
55
+
56
+ <!-- author-report -->
57
+ ```md
58
+ 第{N}章《{章名}》写完了,比目标{少/多}了约 {差额} 字(目标约 {目标} 字,现在 {实际} 字)。{一句原因,如「细纲的事写完就到这儿了,硬凑会注水」}
59
+ 你想怎么处理?
60
+ 1. 就按现在的长度收下(推荐)
61
+ 2. 我改细纲或字数目标,再重写这章
62
+ 3. 这章不要了
63
+ ```
64
+
65
+ 作者选 1 → `chapter accept-current-length`;选 2 → 等作者改完细纲/目标后回步骤 8;选 3 → 删本章正文与工作目录,不提交。新增内容需要作者拍板(下方处置表「先问作者」)时:
66
+
67
+ <!-- author-report -->
68
+ ```md
69
+ 第{N}章写的时候多出了一样东西,需要你定:{用故事话说新增了什么}。
70
+ 它会牵动{后面哪段剧情或哪个已定安排,如「原定第三卷才揭开的那封信」}。
71
+ 1. 留下,我把后面的大纲一起改过来
72
+ 2. 删掉,按原细纲写
73
+ 我建议选 {1/2}:{一句理由}。
74
+ 这章先不算写完,等你定了再往下。
75
+ ```
76
+
77
+ 写不下去、要停下时:
78
+
79
+ <!-- author-report -->
80
+ ```md
81
+ 第{N}章还没法写:{白话说缺什么,如「这一章还没有细纲」}。
82
+ 建议{一个动作,如「我先按卷纲把这章细纲补出来给你看」},可以吗?
83
+ ```
110
84
 
111
85
  ## 字数测量权威
112
86
 
113
- 字数权威默认是细纲 `字数目标` + `visible_chars_v1`:内带 ±12%,用户带 ±15%;**本轮用户明确给出上下限时,原样范围优先于自动比例带**。无节奏下限,缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由用户接受、改目标/细纲或放弃。下一章只看 tracking 提交。
87
+ 细纲 `字数目标` + `visible_chars_v1`,默认范围 ±15%(`internal_pass`、`borderline` 都算在内);**用户本轮明确给出上下限时原样优先**。缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由作者接受、改目标/细纲或放弃。
114
88
 
115
89
  ---
116
90
 
117
91
  ## 质量检查
118
92
 
119
- 检查三个维度:(1) **情绪交付**——每章是否交付了细纲中规划的目标情绪?(2) **契约风险**——按 `references/reader-contract-and-progression.md` 检查因果权 + 结算权、关键节点四问、期待所有权、期待债、终局储备(透支两问)与换书债;章级推进按权威文件的七类状态分档(快节奏保留可见事件/爽点下限),强弱相对本书题材与对标判断,标记 契约安全 / 需补强 / 契约破坏;契约破坏 先修正文或修后续纲。(3) **技术质量**——一致性、格式、禁用词。参考 [references/long-chapter-quality.md](long-chapter-quality.md) 中的通用检查和长篇专项清单。
93
+ 三个维度:**情绪交付**(交付了细纲规划的目标情绪吗)、**契约风险**(步骤 3 契约四问)、**技术质量**(一致性、格式、禁用词;清单见 [long-chapter-quality.md](long-chapter-quality.md),主会话自己写正文或排查具体问题时才读)。
120
94
 
121
- **新增独立剧情 blocking**:新饭局、承诺、选择、关系变化、支线或后续义务均阻断;闲话、微连接允许。命中不自动修、不重试、不提交,并提示偏纲。
95
+ **写后同轮清零**:正文落盘不是汇报时机,同一轮内完成步骤 8-11,blocking 清零才算本章完成。写后 hook 推回的毒句式当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"时,在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 与下一章前的欠账拦截都认它)。退化类 blocking(复读、截断、拒绝语、工程词泄漏)只重写受影响段落,最多 2 次,仍失败按停下问法请作者定夺;故事内系统用语、弹幕、有功能的重复台词保留。
122
96
 
123
- **正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
124
-
125
- **写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
97
+ ### Agent 调用:consistency-checker
126
98
 
127
- **确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文/第XXX章_*.md` 与 `node scripts/check-outline-copy.js 正文/第XXX章_*.md`(细纲照搬复扫)。blocking 命中先回正文改写并复扫;advisory 与细纲重合逐条读原文判断,确属问题才改,功能性写法标 `[需复核]`——每条都要有结论,不为归零机械改写;细纲重合里判定保留的补进细纲「复沓锚句」,下章起不再复报。其中 `formulaic-parallelism` 必须连同对话一起复核,不能因为 hook 不阻断台词就略过;`stock-reaction-tic` 必须按 `writing-craft.md`「反套话四问」逐处做删除测试,交付摘要写明候选数、删除数及每个保留项的叙事功能,不能只写“已检查”。
128
- 随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。narrative-writer agent 不运行这些脚本。
99
+ **按需调用**:writer 申报表非 `0`,或核对细纲时发现未申报的跨章事实(新证词、证据、承诺、关系变化)才在本章 spawn;否则日更由批末整批查一次(workflow-daily Step 3),非日更的单章写作在步骤 12 提交前对本章查一次。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致\n本章新增申报:{申报表原样粘贴,无则写 0};同时核对正文有无未申报的跨章事实,逐处列原文和细纲出处。只读与新增项和本章出场角色相关的设定、角色卡与追踪条目。冲突按 S1-S4 报出`。不可用则主线程参照 long-chapter-quality.md 检查。
129
100
 
130
- **退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
131
- advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界面用语、弹幕刷屏、重复台词等有功能则保留。
101
+ **「写了要报」的处置**(正文定稿、追踪未提交时做)。checker 只给事实证据,归哪一栏由主会话判:
132
102
 
133
- ### Agent 调用:consistency-checker
103
+ | 处置 | 判据 | 出口 |
104
+ |---|---|---|
105
+ | **登记** | 无必须修的冲突;不需要在卷纲占 F/L 编号或新增反转/打脸债行;不碰主推线与终局底牌边界,不与活跃伏笔、下一章承诺打架 | 进步骤 12 的事务:角色/势力按 workflow-setup Phase 3 补建静态档案;可复用设定补进 `设定/世界观/{主题}.md`;伏笔、关系、约束、下章承诺进对应 delta 字段 |
106
+ | **修复** | 有必须修的冲突 | 退回 writer 就地改正文或删掉该新增物,最多一次 |
107
+ | **先问作者** | 要在卷纲新增编号或条目、碰主推线/终局边界、可能与既有承诺冲突,或需创作决策 | 按拍板问法问作者;本章暂停提交及下一章。作者接受则按授权改卷纲/设定后提交,不接受则删改后提交 |
134
108
 
135
- 质量检查阶段,consistency-checker 已部署时,仅按当前运行时的 canonical agent 目录检查并 spawn,获取 S1-S4 报告。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致`。不可用则主线程参照 long-chapter-quality.md 直接检查。
109
+ 拿不准归「先问作者」。申报为 `0` 仍做正文与细纲的正常核对,发现漏报照本表处置。
136
110
 
137
111
  ### Agent 调用:narrative-writer(去AI味审查)
138
112
 
139
- 质量检查阶段,narrative-writer 已部署时可 spawn 文字质量与去AI味检查。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查范围:{本次写作的章节}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过`。不可用则主线程按 `references/anti-ai-writing.md` 与 `references/banned-words.md` 执行。
113
+ **按需调用**:步骤 8 里需要语义判断的 advisory(`stock-reaction-tic`、`formulaic-parallelism` 等)合计 ≥3 条,或 blocking 一次就地修改后仍未清零,才 spawn 一次;否则主会话按步骤 11 处理。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查分工:你负责语义去味及原定自检;最终文件扫描由主会话执行\n检查范围:{本次写作的章节}\n文风路径:{设定/文风.md 全文路径}\nstyle_resolution:{与写作一致的裁决}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除,删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色\n按你的 7 Gate 与对话自检执行,台词里的工整否定不因脚本豁免而跳过\n删除测试:stock-reaction-tic 候选按 writing-craft.md「套式反应删除测试」逐处过,爽点段与 detector 标记处按同文件「写法抽查」表查,只指认已有问题、不补内容;报告列候选数/删改数/保留理由`。不可用则主线程按 `references/anti-ai-writing.md` 执行。
140
114
 
141
- 检查后若正文修订改变了连续性事实,必须构造 `mode=revision` 的同章追踪事务并执行 `scripts/tracking_commit.py commit`:
142
- - 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;
143
- - 时间线变化写入 `timeline_events`,由 `_tracking-state.json` 统一派生 `作者真相.md` 与 `读者已知.md`,不得把作者秘密泄露到读者视图;
144
- - 核心角色状态变化同时提交该角色截至当前章的完整快照;
145
- - 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state 与全部派生视图一致,删除该临时事务 JSON 后再继续写作。
115
+ 审查在本章首次提交前改动的连续性事实,直接写进步骤 12 的 `mode=append` 事务;本章提交后再改连续性事实,才按 tracking-transaction.md 提交 `mode=revision` 事务(`draft --chapter {N}` 同样可生成预填草稿)。
@@ -1,172 +1,108 @@
1
1
  # workflow-daily.md:日更续写工作流
2
2
 
3
- 本文件为"日更续写"场景的完整指引。SKILL.md 路由到本文件后,按以下流程执行。
3
+ SKILL.md 路由到「日更续写」后按本文件控制批次;每章正文走 [workflow-chapter.md](workflow-chapter.md)。写前资料、对标路径与缺失处理按 [project-files.md](project-files.md) 与 [benchmark-recall.md](benchmark-recall.md),本文件不另立一套。
4
4
 
5
- > **日更准备步骤**:每章写作前 4 步——状态筛选 + 题材正文提示卡召回 + 文风召回 + 意图确认,嵌入 Step 2 逐章循环。
6
- >
7
- > 写前资料清单、对标书路径查找、题材正文提示卡、自定义文风模式、文风缺失 fail-fast、模块/节奏缺失停止、权威冲突规则、无对标项目处理,一律按 `SKILL.md` Phase 4 的「缺失文件处理」「对标分析权威优先级」和 workflow-chapter.md 写前准备 (a)-(g) 执行;本文件不另立一套。读者契约、主角代理权、期待债、终局储备参 `reader-contract-and-progression.md`。
8
- >
9
- > **多本对标书**:从 `设定/题材定位.md` 读 `主对标书` 字段;字段指向当前作品时按缺失处理(老项目可能把本书自身登记成了主对标)。缺失时用 `对标/` 下字典序第一本并提示用户补字段——先按当前项目目录名、`.active-book` 和 `设定/题材定位.md` 中的本书信息识别当前作品,排除同名或来源指向当前正文的 `对标/{当前书}/`;排除后为空则按无对标处理。
5
+ **多本对标书**:主对标取 `设定/题材定位.md` 的 `主对标书` 字段;字段指向本书自身或缺失时,用 `对标/` 下字典序第一本(排除本书同名目录)并提示用户补字段,排除后为空按无对标处理。
10
6
 
11
7
  ---
12
8
 
13
9
  ## 适用条件
14
10
 
15
- - 项目已有 `正文/` 和 `追踪/` 目录
16
- - 用户明确说"日更""续写""继续写",或明确指定"写第 N-M 章"
17
- - 目标:每次会话写 2-3 章(4000-9000 字)
18
-
19
- > **裸调用不进日更**:如果用户只是触发 `/story-long-write` / `$story-long-write`,没有说"日更/续写/继续写/写第N章/只写1章/逐章确认",不得进入本 workflow。回到 `SKILL.md` 的"裸调用与停靠点",只展示当前进度与可选命令,避免重启会话后自动写 3 章。
11
+ - 项目已有 `正文/` 和 `追踪/`;用户明确说"日更""续写""继续写/接着写"或指定"写第 N-M 章";上一轮在规划时,"继续写"先按 SKILL.md「规划续接」一句话确认
12
+ - 每次会话写 2-3 章。裸调用、只规划或只改细纲不进本流程
20
13
 
21
14
  ---
22
15
 
23
16
  ## Step 1:快速上下文加载
24
17
 
25
- **可选:使用 story-explorer agent 批量加载上下文**。如果项目已部署 story-explorer agent(检查 `.claude/agents/story-explorer.md` 是否存在),可以用 `Agent(subagent_type: "story-explorer", prompt: "项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={上一步 check 的值},state_revision={上一步 check 的值}")` 执行 `context_load` 查询,一次获取全部写作上下文。spawn 返回后直接使用其 results,跳过下方手动加载步骤。如果 agent 不可用或返回不完整,回退到下方手动加载。
26
-
27
- 手动加载(默认方式):
28
-
29
- | 序号 | 文件 | 用途 | 如果不存在 |
30
- |------|------|------|-----------|
31
- | 1 | `tracking_commit.py check` | 校验唯一结构化 state 与全部派生视图,并取得最后提交章和修订号;不把完整 state 加入 prompt | state 缺失且新书尚无正文时执行初始化;已有正文则停止并要求由 `story-import` 重新导入为标准项目 |
32
- | 2 | `追踪/上下文.md` | 续写状态卡(≤12KB,固定 7 栏,每章整份读) | 不手写;由初始化/逐章事务生成 |
33
- | 3 | `大纲/细纲_第{N}章.md` | 本章写作计划 | **必须先补建**,不允许跳过 |
34
- | 4 | `大纲/卷纲_第X卷.md` | 卷契约、当前剧情单元、终局储备与未来揭示计划 | 缺必需字段时先补齐;锁定卷纲绝不自动修改 |
35
- | 5 | `设定/角色/{角色名}.md` | 本章涉及角色的静态原始人设 | 只为核心复用角色按 Phase 3 规则补建 |
36
- | 6 | `追踪/角色状态/{角色名}.md` | 久别核心角色的派生当前快照;只按细纲涉及角色加载 | 缺失即视为派生视图损坏:先运行 `tracking_commit.py check`,再重跑产生当前状态的完整事务;已有正文却无 state 时重新 `story-import` |
37
-
38
- `追踪/伏笔.md`、`追踪/时间线/`、`追踪/逐章记录/` 默认不整份读取。续写状态卡没有某个旧信息时,才按「旧信息查找步骤」定点查询。
39
-
40
- **按需加载**:需要期待感、爽点或信息差约束时,加载 `references/plot-emotion-system.md`、`references/plot-core-methods.md` 或当前 `references/genre-prose-cards/` 题材卡。默认不全量加载。
18
+ 运行 `tracking_commit.py check`,取 `last_committed_chapter + 1` 作本批首章 N、`state_revision` 作修订号,并核对 `追踪/上下文.md` 的当前位置;章号不一致先修,不扫描正文猜编号。每章要读的上下文按 workflow-chapter 步骤 2;`追踪/伏笔.md`、`时间线/`、`逐章记录/` 默认不整读,缺旧信息按下方「旧信息查找步骤」定点查。
41
19
 
42
- ### 续写状态卡与追踪事务
43
-
44
- `追踪/上下文.md` 不是历史档案,而是当前语义检查点中的续写状态卡;顶层只能有以下 7 个栏目:`当前位置 / 长期约束 / 核心角色状态 / 活跃伏笔 / 近三章速记 / 下一章承诺 / 连贯性风险`。目标 8192 字节,硬上限 12288 字节。文风每章从 `设定/文风.md` / 对标文风读取;质量计数、普通待办、文件行数索引、参照章使用记录、去 AI 味统计都不进入续写状态卡。
45
-
46
- 所有追踪文件的 schema、事务 JSON、初始化和失败修复统一见 [tracking-transaction.md](tracking-transaction.md)。每章只向工具提交一次结构化事务,由 `scripts/tracking_commit.py` 确定性生成逐章增量、角色快照、伏笔当前视图、作者/读者时间线和续写状态卡;主会话和子 agent 都不得分别直接改这些最终文件。
20
+ `追踪/上下文.md` 是续写状态卡(7 栏,由 `tracking_commit.py` 派生,禁止手改);schema、修订与修复见 [tracking-transaction.md](tracking-transaction.md),出错时才读。
47
21
 
48
22
  **首次初始化**:
49
23
 
50
- 1. `_tracking-state.json` 不存在且项目尚无正文:构造 `last_chapter=0` 的初始化事务,执行 `tracking_commit.py init`。
51
- 2. `_tracking-state.json` 不存在但项目已有正文:停止日更。该目录停在旧追踪结构上,走 `/story-import` 的「旧追踪项目迁移」重建 `追踪/`——**不用重跑全书拆解**,只按最后完整章号和现有追踪文件构造初始化事务。本 workflow 自己不解析旧追踪结构、不推测状态。`init` 会把旧结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除也不参与解析。
52
- 3. `tracking_commit.py check` 报告派生视图与 state 不一致:重新提交该章的 `mode=revision` 事务让工具整份重建(`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON);不得手改 Markdown 或继续写下一章。手写出的逐章记录会让同章 append 永久报 `chapter delta N already exists with different content`,删掉那个手写文件后重跑原事务即可。
24
+ 1. `_tracking-state.json` 不存在且尚无正文:完整读取 [tracking-initialization.md](tracking-initialization.md),构造 `last_chapter=0` 的初始化事务存 `.story/work/init.json`,执行 `tracking_commit.py init`,`check` 过后删掉。
25
+ 2. 不存在但已有正文:停止日更,走 `/story-import` 的「旧追踪项目迁移」重建 `追踪/`(不用重跑全书拆解);`init` 会把旧结构整体移入 `追踪/_旧追踪存档/`。
26
+ 3. `check` 报派生视图与 state 不一致:为该章提交 `mode=revision` 事务整份重建(`expected_state_revision` 取 state 文件的 `state_revision`),不手改 Markdown、不继续下一章。
53
27
 
54
- **长期约束溢出**:工具最多接受 6 条。出现第 7 条时,在提交事务前先合并语义重叠项或请用户裁定取舍;不得自动删除旧约束,也不得把待办塞进派生视图。
28
+ **长期约束**最多 6 条,出现第 7 条先合并语义重叠项或请作者取舍,不自动删旧约束。永久生效的设定裁定进 `long_term_constraints`,短期强承诺进 `next_chapter_commitments`,过程决策不进续写状态卡。
55
29
 
56
- **退役必须显式声明**:`context.long_term_constraints` 和 `context.continuity_risks` 每章整份提交,因此每次都要把仍然成立的条目原样带上。凡是上一版有、本次不再提交的条目,必须逐条写进 `delta.retired_context_items`;漏写会被工具在任何写入前拒绝,不会被当成删除。不再复用的核心角色同理写进 `delta.retired_characters`;角色本章阵亡/退场时照常写 `character_changes`,不必再交一份马上要删的快照。两类退役都只能在 `mode=append` 提交——修订事务的记录属于被改写的旧章,写在那里会谎报退役章节;回炉必须原样重交当前全部上下文条目。两类退役都会留档在本章逐章记录,事后可回查。
30
+ 确定范围后直接进 Step 2,不做"是否继续"确认。K 默认 2-3 章,用户说"只写1章"/"日更3章"/"逐章确认"按用户;给出 N>3 时本轮只写前 3 章并在批末提示剩余下轮继续。只在章号冲突、细纲缺失、范围超出已有细纲、要改大纲/追踪等会写错的情况暂停确认。
57
31
 
58
- **与项目 rules 的关系**:永久生效的设定裁定进入事务 `context.long_term_constraints`;短期强承诺进入 `delta.next_chapter_commitments`;已完成或只影响本章的过程决策不进续写状态卡。
32
+ ---
59
33
 
60
- > **确定下一章编号 N 与状态修订号**:执行 `tracking_commit.py check`,从其紧凑 JSON 输出取 `last_committed_chapter + 1` 与 `state_revision`,同时核对 `上下文.md` 的当前位置。逐章事务必须把该修订号写进 `expected_state_revision`;若提交前状态已经变化,工具会在任何写入前拒绝旧事务,此时重新读取当前状态并重构。不要把会随历史增长的完整 state 读进 prompt;章号不一致时修复,不扫描正文猜测编号。
34
+ ## Step 2:串行批量写作
61
35
 
62
- 确定本轮写作范围后直接进入 Step 2,不做"是否继续"式确认。K 默认 2-3 章;用户明确说"只写1章"/"日更3章"/"逐章确认"时按用户要求调整。用户给出 N>3 时,本轮只写前 3 章并在 Step 4 进度摘要提示"剩余章节下轮继续"。仅在章节号冲突、细纲缺失、请求范围超过已有细纲、用户要求会改变大纲/追踪,或存在其他会导致写错的阻塞信息时暂停确认。
36
+ 多章细纲可一次加载,但**必须在主会话内串行逐章写**,不把多章并发交给多个子代理(上下文断裂、追踪覆盖、标题去重失效)。
63
37
 
64
- ---
38
+ **批量 continuation 规则**:未改变任务时,"继续/续写/日更"仍走完整批量流程,不逐章重复确认(用户要求或阻塞除外);用户转为只规划/改细纲时退出批量。到达本轮 K(最多 3 章)后必须进入 Step 3/4 收尾并停止,不因还有细纲续写下一批。
65
39
 
66
- ## Step 2:串行批量写作
40
+ 1. **读取写作计划**:按 卷契约 → 当前剧情单元 → 章节细纲 确定;`outline_view.py --unit {单元ID}` 取一次卷级与单元级内容,本批复用,不整读卷纲。写前明确本批推进目标、可释放与严禁提前释放的信息、章尾钩子不能越过的边界,别动用本阶段还不该解锁的终局底牌。批写完检查是否超前、拖慢或偏离阶段节奏(细节适配不算;已改变卷契约、单元承诺、推进线或兑现归属的,修正文或重规划后续细纲):下一章要补偿的进 `next_chapter_commitments`,跨章风险进 `continuity_risks`,不靠提前泄露后期信息提速。
41
+ 2. **逐章执行**:每章按 workflow-chapter「单章写作流程」步骤 1-13 走完,叠加:
42
+ - **上一章欠账**:写本章前上一章不得有未清 blocking 毒句式(写前 hook 会拦;hook 不可用时对上一章跑一次 `chapter check`),标了 `<!-- 去味:跳过 -->` 的除外。
43
+ - **状态来源**:不把完整 `_tracking-state.json` 读进上下文,缺的信息定点查,不用来源不明的聊天记忆替代。久别核心角色读 `追踪/角色状态/{名}.md`,重新活跃后放进本章事务的 `context.active_character_names`。
44
+ - **用 story-explorer 召回时**:`gaps` 按 [benchmark-recall.md](benchmark-recall.md)「快捷路径」分流。
45
+ - **写后清零不拖到批末**:hook 推回的命中当轮清零。
46
+ - **每章写完立即提交追踪**:按 workflow-chapter 步骤 12,提交成功才进下一章;只记会影响后续章节的变化,过程日志、质检计数、去味统计不进事务。narrative-writer 不写 `追踪/`。
47
+ 3. **不中断但不并发**:追踪已提交即进下一章;`under` 或一次压缩后仍带外,按 workflow-chapter 的字数问法请作者选,不静默推进。
67
48
 
68
- 一次加载多章细纲,但**必须在主会话内串行逐章写作**:不得把多章同时交给多个子代理并发写。长篇章节依赖上一章正文和追踪文件,并发会导致上下文断裂、追踪覆盖和标题去重失效。
69
-
70
- **批量 continuation 规则**:进入本 Step 后,"继续"/"续写"/"日更"只表示继续当前日更批量流程。不得把这些词解释为跳过「状态筛选」或「对标模块/节奏/题材卡/文风召回」的直接正文续写;也不得在每章之间重复询问是否继续,除非用户明确要求逐章确认或出现阻塞。到达本轮 K(最多 3 章)后必须进入 Step 3/4 收尾并停止,不能因为仍有后续细纲就继续写下一批。
71
-
72
- 1. **读取写作计划**:写作计划按 **卷契约 → 当前剧情单元 → 章节细纲** 的顺序确定;已写内容仍以正文与 `追踪/` 文件为准。先从 `大纲/卷纲_第X卷.md` 读取卷契约、当前剧情单元(单元ID/位置)、单元情绪引擎、本卷主推线/战果与终局底牌边界,再加载本次要写的 2-3 章细纲。卷纲或细纲缺少当前协议的必需字段时按既有流程先补齐,未知字段写 `[待补充]`;已锁定卷纲不得自动改动。细纲读取阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化的语义义务/执行边界及结尾钩子,不读取或心算逐点字数预算。只有真正影响后续连续性的结果才进入本章事务。
73
- - **批次定位与阶段约束**:写本批前先从 `大纲/大纲.md`、对应 `大纲/卷纲_第X卷.md` 和本批细纲提取:当前章节区间属于哪个阶段、本批推进目标、本批可释放的信息、本批严禁提前释放的信息、章尾钩子不能越过的边界。必须按终局储备确认本批主推线与战果,别动用本阶段还不该解锁的终局底牌(多线齐涨的战果允许);行动成本可无,不硬造代价。未来揭示计划留在大纲,不写入时间线事实;只有下一章必须消费的边界才进 `## 下一章承诺`。
74
- - **阶段进度自检**:每批写完或补完细纲后检查是否超前、拖慢或偏离阶段节奏;若偏离,把下一章必须执行的补偿动作放入事务 `next_chapter_commitments`,跨多章风险放入 `continuity_risks`;不得通过提前泄露后期信息强行提速。
75
- 2. **逐章执行**:每章按 [workflow-chapter.md](workflow-chapter.md) 的「单章写作流程」步骤 1-13 完整走一遍(写前准备、正文执行、字数验证、钩子/爽点检查、元信息与禁用词扫描、追踪事务)。批量模式下再叠加下列日更专属动作:
76
- - **上一章欠账检查**:写本章正文前,确认上一章正文无未清 blocking 毒句式欠账(写前 hook 会自动拦;hook 不可用时对上一章跑 `node scripts/check-ai-patterns.js --check --fail-on=blocking`);有欠账先清完再写本章,除非上一章标了 `<!-- 去味:跳过 -->`(用户显式豁免)
77
- - **状态来源纪律**:不要为取状态/章号把完整 `_tracking-state.json` 加载进 prompt;缺失内容按下方「旧信息查找步骤」定点查询,不得用未标明来源的聊天记忆替代,也不得为了方便通读所有逐章记录。
78
- - **久别角色交叉检查**:本章细纲列出的核心复用角色若不在 `## 核心角色状态`,直接读取小文件 `追踪/角色状态/{名}.md`;不存在即视为当前检查点损坏,运行 `tracking_commit.py check` 并通过完整事务修复,不能临时扫描增量后手写替代。`设定/角色/{名}.md` 只有静态原始人设,不能替代动态快照。角色重新活跃后,把名字放进本章事务 `context.active_character_names`,由工具更新续写状态卡。
79
- - **story-explorer 召回的 gaps 分支**(用 `benchmark_style_load` query_type 一次拿到 `{style_profile_path, style_profile_summary, selected_emotion_module, rhythm_reference, module_source_path, rhythm_source_path, matched_chapter_K, matched_chapter_techniques, anchor_excerpts, gaps}` 后按此分流):
80
- - 若 `gaps.no_benchmark: true` → `custom_style` 为真则进入「自定义文风模式」(用 `设定/文风.md` 写作;无对标可召回,情绪 / 节奏目标改从本书细纲「目标情绪」、卷纲、`设定/题材定位.md` 等内部材料取,`selected_emotion_module` / `rhythm_reference` 记为「无」,不声称从对标召回);否则跳过文风召回,在「意图确认」标记"无对标参考"
81
- - 若 `gaps.missing_primary_contract: true` → 停止本章准备,按 `repair_action` 提示重跑 `/story-long-analyze` Stage 3+ 或重新 `/story-import`;不得进入 narrative-writer(情绪 / 节奏轴独立于文风轴,**自定义文风模式不豁免此停止**——补 `剧情/情绪模块.md` / `剧情/节奏.md`,而非写 `设定/文风.md`)
82
- - 若 `gaps.benchmark_book_missing: true` → 停止,核对 `expected_path` 与 题材定位.md 登记名(逐字一致)后重查;不得换书
83
- - 若 `gaps.conflict` 或 `gaps.module_rhythm_conflict: true` → 意图确认必须说明冲突并按 `剧情/情绪模块.md` / `剧情/节奏.md` 的权威优先级执行;不得让 `文风.md` 覆盖情绪/节奏目标
84
- - 若 `gaps.profile_missing: true` → `custom_style` 为真则进入自定义文风模式继续;否则按上文 fail-fast 流程停止
85
- - 若 `gaps.profile_degenerate: true`(对标文风不可用) → `custom_style` 为真则用 `设定/文风.md` 写作;否则跳过文风、回到默认 Gates 写作
86
- - 若 `gaps.tone_match_failed: true` → 仅用整书文风写作,不喂 matched_chapter
87
- - 否则原样传给 `style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、`module_source_path`、`rhythm_source_path`、`matched_chapter_K`、`matched_chapter_techniques`、`anchor_excerpts` 和 `genre_prose_card` 给 Step 2 末尾的 narrative-writer spawn prompt;其中 `selected_emotion_module` 必须进入情绪目标,`rhythm_reference` 必须进入节奏/爆发安排,`genre_prose_card` 必须进入题材取舍,`matched_chapter_techniques` 必须进入「文风召回指令」。写前准备记录必须保留 `gaps` 原值,尤其 `gaps.module_missing`、`gaps.rhythm_missing`、`gaps.conflict`、`gaps.matched_deep_dive_missing`;若 `matched_deep_dive_missing` 为 true,文风召回指令中明确写“同章深度拆解缺失,已回退黄金三章/文风技巧”,不得在后续报告中反转为 false
88
- - **无 story-explorer 时直接执行**:主会话按 workflow-chapter.md 写前准备 (a)-(f) 手动依次召回情绪模块、节奏、题材卡、文风与匹配章 K;模块或节奏文件缺失时设置 `missing_primary_contract` 并停止修复
89
- - **写后清零不拖到批末**:写后 hook 推回的毒句式命中当轮清零,不得攒到 Step 3。
90
- - 每章写完后**立即提交一次追踪事务**:
91
- 1. 从刚落盘的正文、细纲和上一版续写状态卡提取 `result / character_changes / foreshadow_changes / timeline_events / constraints / next_chapter_commitments`。只记录会影响未来章节的变化;过程日志、质检计数、参照章和去 AI 味统计全部排除。
92
- 2. 需要长期复用的核心角色,把完整动态快照放进 `character_snapshots`,并在 `character_changes` 写对应变化;一次性路人只写变化、不交快照。已有动态快照的核心角色再次变化时必须提交新快照。静态人设继续以 `设定/角色/{名}.md` 为准。
93
- 3. `context.long_term_constraints`、当前卷/故事时间/场景、活跃核心角色名、连贯性风险提交当前完整值;活跃伏笔、近三章速记和下一章承诺由工具从当前视图/本章增量派生,不重复手填。
94
- 4. 运行 `storyctl.py chapter check`,取 `state_revision` 写入无 `wordcount` 的事务。带内 + quality pass → `chapter commit`;`under` 不补,`over` 按 workflow-chapter 步骤 8 净删一次并复检;仍带外走该步骤三动作。提交会重读、重数、重跑 quality;成功后删临时 JSON,tracking 提交后才继续。
95
- 5. 失败时 `_tracking-state.json` 尚未推进;保留临时 JSON,修正写入环境后重跑同一 `commit`。不得另写下一章、不得手工补派生视图、不得忽略返回码。
96
-
97
- `追踪/逐章记录/第NNN章.md` 由工具按 5 类变化生成,目标 ≤1536 字节、硬上限 3072 字节。它不是正文摘要大全,更不保存写作过程。`伏笔.md` 每个 ID 只有一行当前状态;角色状态按核心角色拆文件;时间线的客观事实和读者认知只在同一事件登记中维护,再派生作者/读者两个视图。
98
-
99
- 状态更新仍由主会话负责。narrative-writer 只写正文并回报必要的写作结果,不直接写 `追踪/`;主会话也不绕过事务工具直接修改最终追踪文件。
100
- - **质检提示**(可选):本章写作完成。如需一致性检查,运行 `/story-review lean`。批量写作模式跳过此步骤,全部写完后再统一审查。
101
- 3. **不中断但不并发**:tracking 已提交即进下一章(除非用户要求确认);`under` 或一次压缩后仍带外则展示证据/动作,不静默推进。下一章先读上一章正文与追踪更新。
102
-
103
- **资料研究(按需)**:如果写作中遇到需要查证的外部事实(历史年代、地理方位、职业细节等),暂停写作,spawn `story-researcher` agent 搜索并输出到 `参考资料/` 目录。研究完成后再继续写作。
49
+ **资料研究**(按需):需查证外部事实时暂停,spawn `story-researcher` 输出到 `参考资料/`,完成后继续。
104
50
 
105
51
  ### 旧信息查找步骤
106
52
 
107
- 状态摘要里没有、但本章确实需要的旧信息(20 章前埋的伏笔、久别角色的当前状态、某个时间锚点),按以下顺序查找,**每一步的读取量都有上限**。不允许因为"查着方便"退化成读历史记录文件全文。
108
-
109
- | 级别 | 手段 | 成本 |
110
- |------|------|------|
111
- | 1 | 续写状态卡已有 → 直接用 | 0 |
112
- | 2 | 伏笔 ID 查 `grep -n "F007" 追踪/伏笔.md`;角色查 `追踪/角色状态/{名}.md`;读者认知查 `时间线/读者已知.md`,作者真相查 `时间线/作者真相.md` | 一个当前行或一个有界小文件 |
113
- | 3 | 需要变化原因/历史时,调用 story-explorer 的 `foreshadow_status / character_status / timeline`;各 adapter 按自身 agent 调用方式,agent 不可用就直接 Grep/Read | 子代理/主会话只返回相关条目 |
114
- | 4 | explorer 不可用 → `grep -R -n --include='第*.md' "F007" 追踪/逐章记录/ 2>/dev/null \| tail -5`,只取最近 5 条匹配增量 | 只读取匹配行 |
115
- | 5 | 仍不够 → `Read` 对应增量或埋设章正文 | 1 个紧凑增量或单章正文 |
116
- | 6 | 全量读取所有逐章增量/正文 | **日更禁止**。只在 `/story-review` 或用户明确要求全面审计时 |
53
+ 续写状态卡没有、但本章确实需要的旧信息,由近到远查,查到就停:
117
54
 
118
- **查询次数限制**:单章执行步骤 3 和步骤 4 合计超过 3 次,说明细纲没写清本章要消费哪些旧信息。这时一次性让 story-explorer 查询多项,并在批末口头提示细纲需补清回收项,不另写过程日志。
55
+ 1. **定点读追踪**:伏笔 `grep -n "F007" 追踪/伏笔.md`;角色读 `追踪/角色状态/{名}.md`;读者认知读 `时间线/读者已知.md`,作者真相读 `时间线/作者真相.md`。
56
+ 2. **查变化原因或历史**:调 story-explorer 的 `foreshadow_status / character_status / timeline`(不可用则 `grep -R -n --include='第*.md' "F007" 追踪/逐章记录/ | tail -5`,只取最近 5 条)。
57
+ 3. **读一个原文件**:对应逐章记录或埋设章正文,只读 1 个。全量读逐章记录或正文属于 `/story-review` 或作者要求的全面审计,日更不做。
119
58
 
120
- 查询结果只有在本章结束后仍影响后续时才进入追踪事务;当前伏笔由 `foreshadow_changes` 更新,核心角色由快照更新,事实/认知由 `timeline_events` 更新。不要直接改续写状态卡某一行。
59
+ 单章第 2 级超过 3 次,说明细纲没写清要消费哪些旧信息:一次性让 story-explorer 查多项,并在批末提示细纲需补清回收项。
121
60
 
122
61
  ---
123
62
 
124
63
  ## Step 3:质量检查
125
64
 
126
- 每章的质量检查已在 Step 2 随 [workflow-chapter.md](workflow-chapter.md)「质量检查」节完成。批末只做下列**跨章**核对,不重复逐章项:
65
+ 逐章检查已在 Step 2 完成,批末只做**跨章**核对:
127
66
 
128
- 1. **标题去重检查**:汇总本轮新写章节与既有标题;发现同名或明显重复时,回到对应细纲和正文文件统一重命名
129
- 2. **契约与细纲双向核对**:先按 `reader-contract-and-progression.md` 检查读者契约、因果权 + 结算权、关键节点四问、期待所有权、期待债偿还、终局储备(透支两问);章级推进按权威文件七类状态分档(快节奏保留可见事件/爽点下限),相对本书题材与对标判断;高潮后允许短暂低压和小而可见的收益/奖励。新地图/机构/能力/敌人/谜团须检查换书债;履约爽文/能力幻想另查主角是否反复以可避免的无能制造灾难再由他人收拾。再核对正文是否消费了细纲的内容概括五段式、情节安排多线、人物关系变化/出场顺序、行动成本(可无)/收益归属;并加三条写作要求兑现核对(不达标→修复):① 爽点出手前是否有可指认的危机/期待铺垫段落?指不出=空洞 → 回 Step 2 补铺垫情节点(plot-emotion-system 倒推法);② 装逼/打脸/揭露章是否写出在场配角差异化反应(集体震惊/各异),还是只写主角动作?没有 → 补在场配角反应(plot-core-methods);③ 详略是否按目的词(爽点/卖点点展开、过渡点带过、信息密度交替),还是均匀注水?均匀 → 删过渡、扩爽点点。
130
- 3. **伏笔盘点(仅本轮增量)**:确认本批新增/推进/回收的每个 ID 在 `追踪/伏笔.md` 恰好有一行当前状态,并能在对应 `逐章记录/第NNN章.md` 找到本次变化;不得追加第二行历史,也不得在日更流程扫描全部正文做全量伏笔审计
67
+ 1. **标题去重**:本轮新写章与既有标题同名或明显重复时,统一改细纲与正文文件名。
68
+ 2. **契约与细纲双向核对**:按 `reader-contract-and-progression.md`「契约四问」过一遍本批(答不上来的那问再读对应小节);正文是否消费了细纲的内容概括、情节安排、人物关系变化与收益归属;爽点前有可指认的铺垫、打脸/揭露章写了在场配角差异反应、详略按目的分配而非均匀注水。不达标回 Step 2 修批准内容。
69
+ 3. **伏笔盘点(仅本轮增量)**:本批新增/推进/回收的每个 ID 在 `追踪/伏笔.md` 恰好一行当前状态,并能在对应逐章记录找到本次变化;不做全量伏笔审计。
70
+ 4. **一致性检查(整批一次)**:本批各章没有按需调用过 consistency-checker 的,在这里 spawn 一次,检查范围写本批全部章节,prompt 同 workflow-chapter「Agent 调用:consistency-checker」(申报栏写各章申报汇总);各章都已单独查过就跳过。冲突照该节处置表处理。
131
71
 
132
- 批末再对本批全部落盘正文整体跑一遍 workflow-chapter.md「质量检查」的确定性收尾三脚本(`check-ai-patterns.js` → `normalize-punctuation.js` → `check-degeneration.js`),确认逐章清零后没有回潮。
133
-
134
- > 若本步修文改变了会影响后续的事实、角色状态、伏笔、时间线或下一章承诺,必须在进入 Step 4 前为受影响章节提交 `mode=revision` 事务并通过 `check`;其中 `delta` 要重算修订后该章仍成立的完整当前记录,不能只传本次改动;纯措辞调整不重复提交。
72
+ 只对本步改过的章重跑 `chapter check --fix-punctuation`,没改过的不再整批复扫。本步修文若改变了会影响后续的事实、状态、伏笔或承诺,进入 Step 4 前为受影响章节提交 `mode=revision` 事务并通过 `check`(`delta` 重算修订后该章仍成立的完整记录);纯措辞调整不重复提交。
135
73
 
136
74
  ---
137
75
 
138
76
  ## Step 4:批末收尾
139
77
 
140
- **本步不再写任何追踪内容**——每章 Step 2 已完成事务。只做两项验证:
78
+ **本步不再写追踪内容**,只做:
141
79
 
142
- 1. 对项目运行 `tracking_commit.py check`;验证 state schema、逐章记录连续/规范/未超限、续写状态卡固定 7 栏且不超过 12288 字节,以及全部派生视图与 state 一致。
143
- 2. 确认本批每章都有对应 `追踪/逐章记录/第NNN章.md`,每个文件 ≤3072 字节。缺失或超限时不手工补文件,回到该章事务修正并重跑 `commit`。
80
+ 1. `tracking_commit.py check` 通过(state、逐章记录连续与体积、7 栏、派生视图一致);本批每章都有 `追踪/逐章记录/第NNN章.md`。缺失或超限回到该章事务修正重跑,不手补文件。
81
+ 2. **「本章没写成的」汇集**:各章申报表末行只分两路——「细纲没给」进下一批排纲的供给自查(workflow-setup「排纲自查与细纲」步骤 3)作扩产候选,涉及既有设定的先查设定、有既定值补进下一章 prompt;「要先问作者」并入 workflow-chapter「写了要报」处置表的「先问作者」一行。连同细纲里状态仍为 `待裁定` 的新增物,一并随批末汇报给出;全部为 `0` 记「无」。
144
82
 
145
- 然后向用户口头汇报本批完成情况(章数、字数、漂移、下一批建议),不另存为文件。
83
+ 然后按 SKILL.md「面向作者的汇报」口头汇报,不另存文件;内部核对翻成故事话再说:
146
84
 
147
- ---
148
-
149
- > **漂移处理**:aligned = 按计划推进;adaptive = 细节适配但不改契约;structural 漂移 / 结构性漂移 = 正文已经改变卷契约、单元承诺、推进线或兑现归属,必须修正文或重规划未来章节细纲,不能只在增量里备注。下一章必须修的漂移进入 `next_chapter_commitments`,跨章风险进入 `continuity_risks`;两者都受续写状态卡上限约束,完整语义以紧凑增量和大纲为准。
85
+ <!-- author-report -->
86
+ ```md
87
+ 这次写了 {K} 章,共约 {总字数} 字:
88
+ - 第{N}章《{章名}》:{一句发生了什么}
89
+ - 第{N+1}章《{章名}》:{一句发生了什么}
90
+ {偏离原计划的就一句话说偏在哪、打算怎么接,如「阿福比计划早露面一章,后面照常」;没有就删掉此行}
91
+ {要作者定的事:一句问题+白话选项+推荐,如「沈栀要不要在下一章就知道信的下落?1. 先瞒着(推荐)2. 这章就告诉她」;没有就删掉此行}
92
+ 下一批:第{M}到第{M+2}章,{细纲已备好 / 需要先补细纲}。接着写吗?
93
+ ```
150
94
 
151
95
  ## 细纲缺失补建流程
152
96
 
153
- 当检测到细纲不存在时,不能跳过。按以下步骤补建:
154
-
155
- 1. 加载 `大纲/卷纲_第{N}卷.md`(本章对应的事件规划),读取本章所属剧情单元卡;剧情单元卡含「对标剧情参照」时加读其指向的剧情单元文件(1 个),以其「结构分布」对应位置作本章功能参照;若本章起整个剧情单元均无细纲,按 outline-structure-theory.md「按剧情批出细纲」整批补建而非单章补。卷纲缺必需字段时先补齐,不绕过当前模板继续
156
- 2. 加载本章涉及的 `设定/角色/{角色名}.md`(角色状态)
157
- 3. 读取最新一章正文(情节衔接)
158
- 4. 按 SKILL.md Phase 3 的新版细纲模板补建本章细纲,补齐阶段位置、本章结构公式、本章禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从卷纲/正文/设定确认的字段写 `[待补充]`,不杜撰
159
- 5. 补建完成后继续 Step 2 写作
160
-
161
- ---
97
+ 1. `outline_view.py --unit {单元ID}` 取本章剧情单元卡与卷级常任;单元卡有「对标剧情参照」时加读其指向的 1 个剧情单元文件作功能参照。整个剧情单元都没细纲时,按 outline-structure-theory.md「按剧情批出细纲」整批补建。
98
+ 2. 读本章涉及角色的设定与最新一章正文。
99
+ 3. 按 workflow-setup.md「Phase 3:大纲搭建」的细纲模板补齐必需字段,无法确认的写 `[待补充]`,不杜撰;补完继续 Step 2。
162
100
 
163
101
  ## 常见问题
164
102
 
165
103
  | 问题 | 处理 |
166
104
  |------|------|
167
- | 细纲不存在 | 执行上方"细纲缺失补建流程" |
168
- | 细纲缺当前蓝图字段 | 先按当前模板补齐,未知项写 `[待补充]`;未补齐前不写正文 |
169
- | 追踪文件为空 | 正常继续,写作中逐步填充 |
170
- | 用户要求改大纲 | 提醒"改大纲会影响后续细纲",确认后修改,标记受影响的细纲 |
171
- | 写到卷末 | 提示用户"当前卷已完成,是否开新卷?" |
172
- | 用户中断批量写作 | 保存当前章节,已更新追踪文件,下次从断点继续 |
105
+ | 细纲不存在或缺当前蓝图字段 | 执行上方补建流程,补齐前不写正文 |
106
+ | 用户要求改大纲 | 提醒会影响后续细纲,确认后修改并标记受影响的细纲 |
107
+ | 写到卷末 | 提示「当前卷已完成,是否开新卷?」 |
108
+ | 用户中断批量写作 | 已提交的章保留,下次从断点继续 |