@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
@@ -18,23 +18,25 @@ Markdown 只负责给作者和 Agent 阅读,工具不再反向解析 Markdown
18
18
  先按运行环境探测 Python 3 解释器(依次尝试 `python3`、`python`、`py -3`)。追踪事务脚本使用当前 skill 根目录;字数与章节闭环统一使用 `story-long-write` skill 根目录:
19
19
 
20
20
  ```text
21
- {PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {初始化事务.json}
21
+ {PYTHON} {当前 skill 根}/scripts/tracking_commit.py init --project {书项目根} --input {书项目根}/.story/work/init.json
22
22
  {PYTHON} {当前 skill 根}/scripts/tracking_commit.py check --project {书项目根}
23
+ {PYTHON} {当前 skill 根}/scripts/tracking_commit.py draft --project {书项目根} --chapter {N}
23
24
  {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter check --project {书项目根} --chapter {N}
24
- {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {逐章事务.json}
25
- {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {逐章事务.json}
25
+ {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json
26
+ {PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json
26
27
  ```
27
28
 
28
29
  - `init`:只在 `_tracking-state.json` 不存在时执行,绝不覆盖已初始化项目。
29
- - `wordcount measure` / `wordcount checkpoint`:纯测量入口;不写正文、不写 tracking、不做语义判断。长篇正文流程一次写完整章,**不在章中调用测量**,长度由 `chapter check` 一次收口;这两个入口供导入、审查等其他场景使用。
30
- - `chapter check`:重新读取当前正文与细纲目标,返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作,不保存 approval。`under` 不提供自动补写;`over` 额外返回一次净删型 `compress-once` 及进入内带/用户带所需的机器删除区间。
30
+ - `draft`:按当前 state 把逐章事务预填到 `.story/work/第NNN章/tracking.json`(修订号、模式、章名、`context` 四项当前值),并输出各文本字段的字数上限与在场核心角色的当前快照;调用方只填 `delta` 与有变化角色的快照。
31
+ - `wordcount measure` / `wordcount checkpoint`:纯测量入口;不写正文、不写 tracking、不做语义判断。长篇正文只在前组写完后由父流程调用一次 `checkpoint`(见 workflow-chapter 步骤 6),整章长度由 `chapter check` 收口。
32
+ - `chapter check`:重新读取当前正文与细纲目标,返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作,不保存 approval。`under` 不提供自动补写;`over` 额外返回一次净删型 `compress-once` 及回到内部区间或作者给定区间所需的删除字数。
31
33
  - `chapter commit`:再次读取当前文件、重新计数并重跑 blocking quality;只接受用户带内章节,把简短字数记录与逐章事务一起原子提交。
32
34
  - `chapter accept-current-length`:只接受带外但 quality pass 的章节;接受动作发生时重新读取、重新计数并立即原子提交,不保存可陈旧的历史决议。
33
35
  - `check`:严格验证 state schema、逐章记录连续性/规范名/体积、固定 7 栏、角色快照硬上限、派生文件集合,以及所有派生视图与 state 的逐字一致性。
34
36
 
35
37
  每本书由 `追踪/.tracking-commit.lock` 串行写事务,`expected_state_revision` 再拒绝基于旧状态构造的 stale transaction。两个不同事务并发时至多一个修订成功。字数记录也在锁内对当前正文和目标重新验证,正文或目标变化会让预先构造的记录直接失败。
36
38
 
37
- 事务 JSON 是临时输入,不是项目产物:成功前必须保留;提交成功且紧随其后的 `check` 通过后立即删除,不能把 `init_transaction.json`、`chapter_*_transaction.json` 等输入长期留在书项目根目录。若文件写入失败,`_tracking-state.json` 尚未推进;修正环境后直接重跑**同一份** `commit`。append 重跑只接受内容完全相同的既有逐章记录,不维护 `dirty/pending/repair` 状态机。
39
+ 事务 JSON 是临时输入,不是项目产物:只写在书目录 `.story/work/` 下(逐章事务放 `.story/work/第NNN章/tracking.json`),不写系统 `/tmp`、书根、`大纲/` 或 `正文/`;成功前必须保留,提交成功后即可删除(`storyctl.py chapter commit` / `accept-current-length` 成功时自动删除该章目录;直接调用 `tracking_commit.py commit` 时由调用方删除)——之后 `check` 失败按下文提交 `mode=revision` 新事务修复,不需要原事务。若文件写入失败,`_tracking-state.json` 尚未推进;修正环境后直接重跑**同一份** `commit`。append 重跑只接受内容完全相同的既有逐章记录,不维护 `dirty/pending/repair` 状态机。
38
40
 
39
41
  校验失败与写入失败处理方式不同:校验失败(字段非法、退役结构、容量超限)要按报错改事务本身,重跑同一份结果不变。派生视图被手改或外部改动导致 `check` 报 `derived view differs from _tracking-state.json` 时,重新提交**该章**的 `mode=revision` 事务让工具整份重建,`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON;不手改派生文件,也不删 `_tracking-state.json` 重来。手写出的逐章记录会让同章 `append` 永久报 `chapter delta N already exists with different content`——删掉那个手写文件后重跑原事务即可。
40
42
 
@@ -1,144 +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
- 项目文件结构、产物映射、缺失处理和对标权威顺序见 [project-files.md](project-files.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`,取本章「单元ID/位置」的单元ID,再按 SKILL.md「卷纲不整读(取段器)」跑 `outline_view.py --unit {单元ID} --stage write {卷纲路径}` 拿当前剧情单元、卷契约、全卷常任裁定、本卷主推线/战果、终局底牌边界与风险等级——**不整读卷纲**;**写正文一律 `--stage write`**,批次底稿(供给自查/建纲追加/批次级复检)是排纲期底稿,不进写作回路。脚本 exit 1 时按它的提示修,不改用整读绕过。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。补建后按 `artifact-protocols.md` 跑 `check-outline-contract.js` 结构验收,失败只补点名字段再复验。
16
- 2. **读取上下文**(按需选择;缺失时遵循各项及 `project-files.md` 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:对应 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) 卷纲 — **走 `outline_view.py --unit {单元ID} --stage write`,不整读**(见 SKILL.md「卷纲不整读」):当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)、全卷常任裁定
20
- - (3) `tracking_commit.py check` + `追踪/上下文.md` — `check` 无 ERROR 输出即通过,从它的紧凑 JSON 取 `last_committed_chapter` / `state_revision`,不把完整 state 加入 prompt。**续写状态卡整份不注入 prompt**:脚本只校验 7 栏完整,状态由主会话读全 7 栏后筛进步骤 7 的「本节速记」槽
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`(按对标书路径查找)— 仅全量召回时读取;读者需求 / 情绪引擎、爽文套路框架、可复现模块;缺失按 `project-files.md` 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
29
- - (12) 对标书路径下 `剧情/节奏.md`(按对标书路径查找)— 仅全量召回时读取;关键信息推进、情绪触动点、爆发节奏;缺失按 `project-files.md` 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
30
- - (13) `设定/题材正文提示卡.md`(如存在)— 本书正文层题材卡。**加工在 3(c),本项只列路径与兜底链**,读一次就直接产出 `genre_prose_card`,不在这里先读一遍再去 3(c) 召回一遍;缺失时从 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先)+ `references/style-genre-modules.md`(兜底)即时生成 `genre_prose_card`,不阻塞写作
31
- 3. **写前准备**(下面的 3 步是核心方法在单章写作中的落地:筛选状态 → 召回模块 → 确认意图):
32
- - **第 0 步:先跑组装脚本**(可用时)。`{PYTHON} {skill 根}/scripts/build_writer_prompt.py --project {项目根} --chapter {N} --out {留档文件}`,脚本统一输出 UTF-8。stdout 的 `====` 分隔线以上是 prompt 正文、以下是核对报告。主会话只填 `[主会话填]` 空槽。退出码 2 = 数据问题,先修数据再重跑,不得手拼绕过;脚本跑不起来才按步骤 7 回落。
33
- - **状态筛选**:从 `追踪/上下文.md` 的 `## 核心角色状态` 取当前角色,从 `## 活跃伏笔` 取需回收/推进项,从 `## 下一章承诺` 取本章必须履行项,输出本节速记(参考 state-tracking.md)。久别角色按名读取 `追踪/角色状态/{名}.md`;只有追查变化原因时才定点查逐章增量。续写状态卡或 meta 不存在时按 workflow-daily 的当前协议处理,不手写替代文件
34
- - **模块召回、题材卡与文风召回**:写前完整读取 [benchmark-recall.md](benchmark-recall.md),执行其中 (a)-(g)、成熟项目降档与 explorer 快捷路径。组装脚本的降档结论、情绪/节奏缺失阻断、本书文风全文及主副对标预算均按该文件执行。
35
-
36
- - **指令确认**:综合细纲、本节速记和模块召回结果,用一句话写清本章意图。
37
- - 新版细纲必须消费:阶段位置、单元ID/位置、主角目标/关键选择、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾钩子,并对照当前剧情单元的卷契约、本卷主推线/战果、终局底牌边界。
38
- - **细纲优先边界**:正文以本章细纲为唯一剧情蓝图;新增物按三档授权(档表见步骤 7)——一档现场材料直接写、二档写并申报、三档(新主线事件、新反转、新金手指规则、提前写后续章剧情、改变细纲已定结果)不写,**不要用「不自造新剧情」一刀切**。后续阶段真相、底牌、关系结论和终局矛盾不得因为章尾钩子提前泄露。反过来,细纲是"要发生什么"的契约、不是正文的形状:正文可自由编排叙述顺序、合并/穿插情节点,不必一个情节点一段、也不必按五段式顺写,把每个点演成场景而不是照抄概括语(见 writing-craft.md「从细纲到正文」)。
39
- - **细纲语义去重**:同一要求在核心事件、五段式、情节安排和情节点中重复,只算一个语义点;生成前合并,不把重复次数当强调,不沿用提纲原句逐项复述。比如多处都写“不带摄像机、先听完再决定拍不拍”,正文只通过一个自然动作或一句人物判断兑现,不能拆成「至于拍不拍,怎么拍…」「不带摄像机,不带采访灯」两轮说明。
40
- - 爽点出手前要有可指认的危机/期待铺垫;装逼/打脸/揭露章要写在场配角的差异反应。
41
- - 高压/生死/悲痛节拍 要收紧对话声线:搞笑担当让位,信息型角色不当科普嘴,对话逐句承接对方情绪。
42
- - 检查任务卡点:本章如果有“办事被卡住”,它必须卡出信息、关系、代价、选择或伏笔变化;没有就不强补。
43
- - 契约风险检查:按 `references/reader-contract-and-progression.md` 判定 契约安全 / 需补强 / 契约破坏;若高光/收益被配角、机构或偶然性拿走且没有可见交换,先修纲再写。
44
- - 例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」
45
- 4. **资料研究**(按需):遇到需查证的外部事实且 story-researcher 已部署时,spawn 搜索并输出到 `参考资料/`;不可用则主线程直接执行。研究完成后再继续写作。
46
- 5. **标题预检**:看脚本核对报告里的重名结论,不重做。报出重名或明显重复时才按本章核心事件改名,并同步细纲标题与正文文件名;脚本不可用时自己比对。
47
- 6. **写作准备**:全章细纲先交给 writer,供它统筹编排;默认同一 session 按前后两组交付。
48
- - 依实际叙述顺序,在自然转场或因果停顿处分组,不在一句对话或同一动作中间截断。可交错情节点,但不增删批准内容;分组写清当前要完成的片段,不拆逐点字数配额。
49
- - writer 先写前组临时 segment;主会话只调用一次 `storyctl.py wordcount checkpoint --file {segment} --target {目标} --chapter {N}`,把 `actual / remaining_user_range` 连同尚未完成的后组交回同一 writer。两组完成后按原文拼接,不回改前组追字数。
50
- - 用户明确要求一次成文时,执行安排填「全章」,直接落盘;不额外跑 checkpoint。无论哪种方式,批准内容写完即停,不为字数加剧情。
51
- - 组装后的实际长度由步骤 8 的 `chapter check` 收口;欠长不补、超长只净删一次,仍带外交用户决定。
52
- - **正文元信息隔离**:`章节:第{N}章`、`上一章:正文/第{N-1}章_*.md`、`匹配第K章`、`细纲文件` 等只用于定位材料。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词。需要承接前文时,改成角色能感知的事件锚点或相对时间,例如“比第一章那三秒开火更疼”必须写成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
53
- 7. **正文执行**:
54
- - 按本文件顶部规则确认 narrative-writer 已部署。
55
- - **组装走脚本,不逐条手拼**:骨架在步骤 3 第 0 步已生成。脚本提供首行、路径、沿用既有格式的标题、文风、上章结尾与可用的情绪/节拍;主会话核对报告后填槽。**细纲全文、卷纲单元卡、续写状态卡都不进 prompt**;agent 已有规则只传指针。可选块缺失留标题并写明原因。
56
- - **主会话填八槽**(搜 `[主会话填]`):执行安排 / 本章意图 / 参考技法 / 本节速记 / 涉及角色 / `genre_prose_card` / 必读设定 / `author_preferences`。填法见槽内提示。作者偏好仅作低优先级倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数。降档不成立时情绪与节奏槽也是空槽。填完**空槽以外一字不改,整份照抄进 Agent prompt**;`--out` 留档文件供事后比对。
57
- - **回落分两种**:①脚本**跑不起来**(python 缺失、脚本报错、用户指定不走脚本)→ 主会话按手动组装规格补齐脚本负责的材料,报告里声明 `Fallback: build_writer_prompt -> 手动组装`。②脚本**退出码 2**(细纲缺失、续写状态卡缺栏、上一章找不到)→ 不是回落,是停下修数据,修完重跑脚本。
58
- - 仅在上述手动回落时加载 [writer-prompt-fallback.md](writer-prompt-fallback.md),按规格组装同样的输入。
59
- - 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
60
- - agent 按执行安排交付,主会话将最终正文写入 `正文/第XXX章_章名.md`;主会话核对它只消费了批准情节点。如 agent 未部署,由主线程执行同一流程。
61
- 8. **先核时空表,再非对称收口**:
62
- - **核时空表**(交付确认):细纲每个情节点是否**至少出现一次**——有漏即退回补写(补的是批准内容,不是加戏);横跨多个时空的点须标注,每一处都要有实在内容。若同一场戏被机械切成逐点清单,按形状层判据核对后局部重织;不同场景或因果依赖所需的串行不因表形退回。这些退回属于覆盖/形状修复,不以字数为由发起。
63
- - 运行 `{PYTHON} {skill 根}/scripts/storyctl.py chapter check --project {项目根} --chapter {N}`;文件变更重跑,不存决议。
64
- - 带内 + pass → 完成步骤 9-12 的语义核对与新增物裁定后再 `chapter commit`;fail / `invalid` → 停止。
65
- - `under` + pass → 展示 `accept-current-length / revise-outline-or-target / discard`,不补/重试;接受命令会重读、重数、原子提交。
66
- - `over` + pass → 删除区间随 `compress-once` 交 narrative-writer;一次净删,零新语义/契约改动。会话核对情节点与钩子后复检;带内提交,否则上述三动作。
67
- 9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→只修复细纲已批准内容):① 爽点前是否有可指认的危机/期待段落?② 装逼/打脸/揭露章,在场配角是否有差异化反应?质量修复后重跑步骤 8,但不得借质量修复补新剧情追字数。
68
- 10. **元信息扫描**:检查标题行以外的正文,命中 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 时必须改写为场景内表达;只有角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时例外。
69
- 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` 定性裁定
70
- 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 补建静态档案。**判为「收编」的申报项在这一次事务里一并登记**(映射见「Agent 调用:consistency-checker」的三档表):漏登记等于没写。有「提请作者确认」项时本章暂停提交、不得继续下一章,裁定后按下表处理;判为「修复」的按修复后的结果登记。
71
- 13. **中途快照**(长篇写作安全网):每连续写完 3 章,在继续前执行以下快照操作:
72
- - 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288 字节;通过后删除本章逐章事务 JSON 与临时 segment,失败时保留事务 JSON 供原样重跑
73
- - 用 `ls -la 正文/` 确认最近 3 个章节文件已成功写入磁盘且大小正常(>100 bytes)
74
- - 如果发现文件缺失或大小异常,立即重新写入
75
- - 快照完成后可继续写作
76
-
77
- > **日更模式**:此步骤自动跳过——workflow-daily Step 2 已按章更新上下文.md。
78
-
79
- ## 检查分工
80
-
81
- 步骤 7 写手负责编排、内容覆盖和格式自检;步骤 9–11 及本文件质量检查阶段由主会话统筹,语义去味交给一个执行者(已部署的 narrative-writer 审查者或主会话),完成原 Gate、三遍法与抽查项目。确定性收尾由主会话对最终文件运行;其后若修改正文或白名单,只重跑受影响检查和最终 chapter check,不重新安排一轮全篇语义去味。手动组装时也须把此分工传给写手。
82
-
83
- ## 写作技巧提醒
84
-
85
- | 场景 | 技巧 |
86
- |------|------|
87
- | 开篇 500 字 | 必须有钩子,不能从天气/风景开始(除非反差极大) |
88
- | 对话 | 推进剧情或揭示性格,不能只为了凑字数 |
89
- | 打斗 | 不要流水账,写策略和反转,不写「你一拳我一脚」 |
90
- | 日常 | 日常要有人物互动和伏笔,不能只是「吃饭睡觉」 |
91
- | 任务卡点 | 角色办事被卡住,必须卡出信息/关系/代价/选择/伏笔变化;删掉无损就压缩或删除 |
92
- | 爽点释放 | 铺垫要充分、释放要干脆,读者等得越久释放越要爽 |
93
- | 爽点密度 | 高压/推进章每 3000-5000 字一个「爽」的情绪节点;低压/关系/修炼/信息整理章不强求,但每章仍要有往下看的理由(见 references/outline-structure-theory.md「章节定位与张弛」) |
94
- | 长篇结构约束 | 参考 genre-prose-cards.md 与当前题材卡的长线约束 |
95
- | 章尾 | 每章结尾都要有让读者想翻下一页的东西 |
96
- | 情绪验证 | 写完每章回头检查:读者到这里应该感受到什么?感受到了吗?没感受到 → 按章节定位补:高压/推进章补冲突或钩子,低压/关系章补关系或情绪质感,别一律加爽点 |
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
+ ```
97
84
 
98
85
  ## 字数测量权威
99
86
 
100
- 字数权威默认是细纲 `字数目标` + `visible_chars_v1`:内带 ±12%,用户带 ±15%;**本轮用户明确给出上下限时,原样范围优先于自动比例带**。无节奏下限,缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由用户接受、改目标/细纲或放弃。下一章只看 tracking 提交。
87
+ 细纲 `字数目标` + `visible_chars_v1`,默认范围 ±15%(`internal_pass`、`borderline` 都算在内);**用户本轮明确给出上下限时原样优先**。缺目标即 `invalid`。带内提交,`under` 不补,`over` 最多净删一次;仍带外由作者接受、改目标/细纲或放弃。
101
88
 
102
89
  ---
103
90
 
104
91
  ## 质量检查
105
92
 
106
- 检查三个维度:(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),主会话自己写正文或排查具体问题时才读)。
107
94
 
108
- **新增内容边界**:按 writer 三档执行。现场材料直接使用;既有框架内的新配角、设定或关系细节可写并申报,由下方处置表裁定。新主线事件、反转、金手指规则、伏笔结算、提前写后续剧情或改变细纲结果属于 blocking,停止提交并报告。不得把所有新增关系或具名配角一律判为偏纲。
109
-
110
- **正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
111
-
112
- **写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
113
-
114
- **确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `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` 的候选交下方 narrative-writer 质检 spawn 逐处做「反套话四问」删除测试并直接改——**写手不写验收短文**(验收由质检 spawn 的删除测试承担),质检报告列出候选数、删改数与保留理由即可。
115
- 随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。主会话以最终落盘文件复扫验收,不以 agent 自检代替。
116
-
117
- **退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
118
- advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界面用语、弹幕刷屏、重复台词等有功能则保留。
95
+ **写后同轮清零**:正文落盘不是汇报时机,同一轮内完成步骤 8-11,blocking 清零才算本章完成。写后 hook 推回的毒句式当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"时,在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 与下一章前的欠账拦截都认它)。退化类 blocking(复读、截断、拒绝语、工程词泄漏)只重写受影响段落,最多 2 次,仍失败按停下问法请作者定夺;故事内系统用语、弹幕、有功能的重复台词保留。
119
96
 
120
97
  ### Agent 调用:consistency-checker
121
98
 
122
- 质量检查阶段,consistency-checker 已部署时,仅按当前运行时的 canonical agent 目录检查并 spawn,获取 S1-S4 报告。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致\n本章新增申报:{writer 交回的申报表原样粘贴,无则写 0};同时核对正文是否有未申报的跨章事实,尤其新增证词、证据、承诺与关系变化,逐处列出原文和细纲出处。对各新增项跑一遍你现有的实体/设定/时间线/规则边界/跨章因果/代价一致性扫描,冲突按 S1-S4 报出`。不可用则主线程参照 long-chapter-quality.md 直接检查。
99
+ **按需调用**:writer 申报表非 `0`,或核对细纲时发现未申报的跨章事实(新证词、证据、承诺、关系变化)才在本章 spawn;否则日更由批末整批查一次(workflow-daily Step 3),非日更的单章写作在步骤 12 提交前对本章查一次。Prompt:`项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致\n本章新增申报:{申报表原样粘贴,无则写 0};同时核对正文有无未申报的跨章事实,逐处列原文和细纲出处。只读与新增项和本章出场角色相关的设定、角色卡与追踪条目。冲突按 S1-S4 报出`。不可用则主线程参照 long-chapter-quality.md 检查。
123
100
 
124
- **新增申报三档处置**(在本节做:正文已定稿、tracking 未提交)。checker 只给事实层证据,**分档判定归主会话**——「能不能收编」「会不会偏离后续」是创作判断,checker 明文不做也判不了。逐条按下表处置:
101
+ **「写了要报」的处置**(正文定稿、追踪未提交时做)。checker 只给事实证据,归哪一栏由主会话判:
125
102
 
126
- | 档 | 判据 | 出口 |
103
+ | 处置 | 判据 | 出口 |
127
104
  |---|---|---|
128
- | **① 收编** | 无 S1/S2;**不需要在卷纲占编号或占行**——不占「本卷伏笔」的 F 编号、不占「本卷故事线」的 L 编号、不在「本卷反转」或「本卷打脸债」里新增行;且不碰卷纲「本卷主推线/战果」「终局底牌边界」,不与 `## 活跃伏笔` / `## 下一章承诺` 打架 | 进步骤 12 那次逐章事务:角色/势力按 workflow-setup Phase 3 补建静态档案;可复用设定增量补进 `设定/世界观/{主题}.md`;伏笔进 `foreshadow_changes`;关系/状态进 `character_changes` + 角色快照;跨章约束进 `constraints`;下章要接的进 `next_chapter_commitments` |
129
- | **② 修复** | S1 / S2 | 退回 writer 就地改正文或删掉该新增物。最多修复一次;首次写作尚未提交时按修后事实构造首次事务,已有提交的章才用 `mode=revision` |
130
- | **③ 提请作者确认** | 需要在卷纲新增 F/L 编号或反转/打脸债条目,碰主推线/终局边界、可能与既有承诺冲突,或需作者创作决策 | 在报告列新增物、正文落点、后续义务与冲突出处。本章保留为待审稿,暂停 tracking 提交及下一章;不将待裁定事实混入已提交状态 |
105
+ | **登记** | 无必须修的冲突;不需要在卷纲占 F/L 编号或新增反转/打脸债行;不碰主推线与终局底牌边界,不与活跃伏笔、下一章承诺打架 | 进步骤 12 的事务:角色/势力按 workflow-setup Phase 3 补建静态档案;可复用设定补进 `设定/世界观/{主题}.md`;伏笔、关系、约束、下章承诺进对应 delta 字段 |
106
+ | **修复** | 有必须修的冲突 | 退回 writer 就地改正文或删掉该新增物,最多一次 |
107
+ | **先问作者** | 要在卷纲新增编号或条目、碰主推线/终局边界、可能与既有承诺冲突,或需创作决策 | 按拍板问法问作者;本章暂停提交及下一章。作者接受则按授权改卷纲/设定后提交,不接受则删改后提交 |
131
108
 
132
- - 拿不准归第三类。作者接受后,按其授权更新卷纲/设定,再将完整正文事实写入本章首次事务;已有提交的旧章用 `mode=revision`。作者不接受则删改该新增内容、复检后提交。不要先提交缺项 delta、等下批补账。
133
- - 申报与处置记录随本章报告留存;不自动改写锁定细纲。
134
- - 申报为 `0` 仍做正文与细纲的正常核对;发现漏报的跨章事实,照本表处置。确实无新增则跳过申报处置。
109
+ 拿不准归「先问作者」。申报为 `0` 仍做正文与细纲的正常核对,发现漏报照本表处置。
135
110
 
136
111
  ### Agent 调用:narrative-writer(去AI味审查)
137
112
 
138
- 质量检查阶段,narrative-writer 已部署时可 spawn 文字质量与去AI味检查。Prompt:`项目目录:{dir}\n任务描述:审查+去AI味\n检查分工:你负责本次语义去味及原定自检;最终文件扫描由主会话执行,不在子代理内重复\n检查范围:{本次写作的章节}\n文风路径:{与写作 spawn 同一口径——传 `设定/文风.md` 全文路径,摘要仅作索引}\nstyle_resolution:{与写作一致的本次文风裁决,含全文路径}\n作者偏好:{本章 query 命中的 prose_style/story_design 项}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过\n反套话删除测试:对 stock-reaction-tic 报出的每处候选按 writing-craft.md「反套话四问」做删除测试——删后不丢信息/选择/关系/物件变化/物理后果的直接删,保留的在报告里写明它新增了什么;报告列候选数/删改数/保留理由\n写法抽查(删除测试口径,只指认已有问题、不回头补内容):对爽点/高潮段与 detector 标记处抽查四项——状态台阶(强弱变化有没有台阶)、同类递减(并列同类项是否递减)、密处禁概括(慢镜头段有没有用概括句糊过去)、最重的一句最短;命中即改并在报告列出,不通读全文逐句追问`。不可用则主线程按 `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` 执行。
139
114
 
140
- 检查后若正文修订改变了连续性事实,必须构造 `mode=revision` 的同章追踪事务并执行 `scripts/tracking_commit.py commit`:
141
- - 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;
142
- - 时间线变化写入 `timeline_events`,由 `_tracking-state.json` 统一派生 `作者真相.md` 与 `读者已知.md`,不得把作者秘密泄露到读者视图;
143
- - 核心角色状态变化同时提交该角色截至当前章的完整快照;
144
- - 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state 与全部派生视图一致,删除该临时事务 JSON 后再继续写作。
115
+ 审查在本章首次提交前改动的连续性事实,直接写进步骤 12 的 `mode=append` 事务;本章提交后再改连续性事实,才按 tracking-transaction.md 提交 `mode=revision` 事务(`draft --chapter {N}` 同样可生成预填草稿)。