@oh-story/dsh 0.1.4 → 0.1.6

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 (479) hide show
  1. package/README.md +56 -12
  2. package/lib/client.js +2707 -268
  3. package/lib/client.js.map +4 -4
  4. package/lib/drama/manifest.json +136 -101
  5. package/lib/drama/skills/short-drama/SKILL.md +61 -1
  6. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +7 -4
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +133 -8
  8. package/lib/drama/skills/short-drama/references/creator-workflow.md +38 -2
  9. package/lib/drama/skills/short-drama/references/knowhow-index.md +3 -0
  10. package/lib/drama/skills/short-drama/references/reference-roles.md +10 -7
  11. package/lib/drama/skills/short-drama/references/runtime-preflight.md +3 -0
  12. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
  13. package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
  14. package/lib/drama/skills/short-drama-assets/SKILL.md +13 -3
  15. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
  16. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +2 -1
  17. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +19 -0
  18. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  19. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
  20. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +6 -2
  21. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +4 -3
  22. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +1 -1
  23. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +1 -1
  24. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +3 -1
  25. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
  26. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
  27. package/lib/drama/skills/short-drama-produce/SKILL.md +46 -10
  28. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
  29. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
  30. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
  31. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
  32. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
  33. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
  34. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +12 -0
  35. package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
  36. package/lib/drama/skills/short-drama-storyboard/SKILL.md +76 -7
  37. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
  38. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +6 -2
  39. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
  40. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +5 -2
  41. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +16 -0
  42. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +8 -3
  43. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
  44. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +81 -13
  45. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
  46. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
  47. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +21 -1
  48. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
  49. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -6
  50. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +11 -7
  51. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
  52. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
  53. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +5 -2
  54. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
  55. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
  56. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
  57. package/lib/drama/skills/short-drama-write/SKILL.md +3 -2
  58. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
  59. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
  60. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
  61. package/lib/index.js +865 -33
  62. package/lib/index.js.map +4 -4
  63. package/lib/novel-to-game/LICENSE +21 -0
  64. package/lib/novel-to-game/README.md +180 -0
  65. package/lib/novel-to-game/README_ZH.md +178 -0
  66. package/lib/novel-to-game/VERSION +1 -0
  67. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
  68. package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  78. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  79. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  80. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  81. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  82. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  83. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  84. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  85. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  86. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  87. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  88. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  89. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  90. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  91. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  92. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  93. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  94. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  95. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  96. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  97. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  98. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  99. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  100. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  101. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  102. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  103. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  104. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  105. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  106. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  107. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  108. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
  118. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
  119. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
  120. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
  121. package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
  122. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  123. package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
  124. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
  125. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
  126. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
  127. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
  128. package/lib/novel-to-game/manifest.json +508 -0
  129. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
  130. package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
  131. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
  132. package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
  133. package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
  134. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
  135. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
  136. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
  137. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
  138. package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
  139. package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
  140. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
  141. package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
  142. package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
  143. package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
  144. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
  145. package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
  146. package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
  147. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
  148. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
  149. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
  150. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
  151. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
  152. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
  153. package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
  154. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  155. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
  156. package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
  157. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
  158. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
  159. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
  160. package/lib/oh-story/manifest.json +415 -305
  161. package/lib/oh-story/roles/consistency-checker.md +1 -1
  162. package/lib/oh-story/roles/narrative-writer.md +32 -33
  163. package/lib/oh-story/roles/story-architect.md +16 -26
  164. package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
  165. package/lib/oh-story/skills/story/SKILL.md +16 -9
  166. package/lib/oh-story/skills/story/VERSION +1 -1
  167. package/lib/oh-story/skills/story/references/author-memory.md +163 -0
  168. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
  169. package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
  170. package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
  171. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
  172. package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
  173. package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
  174. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
  175. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
  176. package/lib/oh-story/skills/story-import/SKILL.md +19 -10
  177. package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
  178. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
  179. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
  180. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
  181. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
  182. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
  183. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
  184. package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
  185. package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
  186. package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
  187. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
  188. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
  189. package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
  190. package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
  191. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
  192. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  193. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
  194. package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
  195. package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
  196. package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
  197. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
  198. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-core-mechanics.md → story-long-write/references/long-genre-mechanics.md} +1 -1
  199. package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-long-write/references/long-reversal.md} +18 -32
  200. package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
  201. package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
  202. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  203. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  204. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
  205. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
  206. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +4 -4
  207. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
  208. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +14 -14
  209. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
  210. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
  211. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
  212. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
  213. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
  214. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
  215. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
  216. package/lib/oh-story/skills/story-review/SKILL.md +26 -17
  217. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
  218. package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
  219. package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
  220. package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
  221. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
  222. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
  223. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
  224. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
  225. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
  226. package/lib/oh-story/skills/story-setup/SKILL.md +74 -33
  227. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  228. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  229. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
  230. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
  234. package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  236. package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
  237. package/lib/oh-story/skills/{story-long-write/references/genre-core-mechanics.md → story-setup/references/agent-references/long-genre-mechanics.md} +1 -1
  238. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
  239. package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → long-reversal.md} +18 -32
  240. package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
  241. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
  242. package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
  243. package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
  244. package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
  245. package/lib/oh-story/skills/{story-long-write/references/reversal-toolkit.md → story-setup/references/agent-references/short-reversal.md} +29 -23
  246. package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
  247. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  248. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
  249. package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
  250. package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
  251. package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
  252. package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
  253. package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
  254. package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
  255. package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  257. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  258. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  259. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  260. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  261. package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
  262. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
  263. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
  264. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
  265. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
  266. package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
  267. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
  268. package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
  270. package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
  271. package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
  272. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
  273. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
  274. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
  276. 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
  277. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
  278. 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
  279. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
  280. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
  281. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
  282. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
  283. 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
  284. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
  285. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
  286. package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
  287. package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
  288. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
  289. package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
  290. package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
  291. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
  292. package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
  293. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
  294. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
  295. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
  296. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
  297. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
  298. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  299. package/lib/types/client/drama-production-view.d.ts +34 -0
  300. package/lib/types/client/drama-production-view.d.ts.map +1 -0
  301. package/lib/types/client/drama-production.d.ts +92 -0
  302. package/lib/types/client/drama-production.d.ts.map +1 -0
  303. package/lib/types/client/file-activity.d.ts +4 -2
  304. package/lib/types/client/file-activity.d.ts.map +1 -1
  305. package/lib/types/client/index.d.ts +1 -1
  306. package/lib/types/client/index.d.ts.map +1 -1
  307. package/lib/types/client/production-intents.d.ts +9 -0
  308. package/lib/types/client/production-intents.d.ts.map +1 -0
  309. package/lib/types/client/production-prompts.d.ts +9 -0
  310. package/lib/types/client/production-prompts.d.ts.map +1 -0
  311. package/lib/types/client/production-runtime.d.ts +58 -0
  312. package/lib/types/client/production-runtime.d.ts.map +1 -0
  313. package/lib/types/client/video-studio.d.ts +41 -0
  314. package/lib/types/client/video-studio.d.ts.map +1 -0
  315. package/lib/types/client/workbench-ui.d.ts +5 -0
  316. package/lib/types/client/workbench-ui.d.ts.map +1 -0
  317. package/lib/types/game-verification.d.ts +16 -0
  318. package/lib/types/game-verification.d.ts.map +1 -0
  319. package/lib/types/index.d.ts +3 -1
  320. package/lib/types/index.d.ts.map +1 -1
  321. package/lib/types/production-intent.d.ts +21 -0
  322. package/lib/types/production-intent.d.ts.map +1 -0
  323. package/lib/types/production-tool.d.ts +5 -0
  324. package/lib/types/production-tool.d.ts.map +1 -0
  325. package/lib/types/role-tool.d.ts.map +1 -1
  326. package/lib/types/skill-provider.d.ts +7 -0
  327. package/lib/types/skill-provider.d.ts.map +1 -1
  328. package/lib/types/video-project.d.ts +42 -0
  329. package/lib/types/video-project.d.ts.map +1 -0
  330. package/lib/types/workspace-request-trust.d.ts +6 -0
  331. package/lib/types/workspace-request-trust.d.ts.map +1 -1
  332. package/lib/types/workspace-route.d.ts +20 -0
  333. package/lib/types/workspace-route.d.ts.map +1 -1
  334. package/lib/video-recap/CHANGELOG.md +282 -0
  335. package/lib/video-recap/LICENSE +21 -0
  336. package/lib/video-recap/README.en.md +257 -0
  337. package/lib/video-recap/README.md +255 -0
  338. package/lib/video-recap/manifest.json +684 -0
  339. package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
  340. package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  341. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  342. package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  343. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  344. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  345. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  346. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  347. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  348. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  349. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  350. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  351. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  352. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  353. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
  354. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
  355. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
  356. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
  357. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
  358. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
  359. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
  360. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
  361. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
  362. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
  363. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
  364. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
  365. package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
  366. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
  367. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
  368. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
  369. package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
  370. package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
  371. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
  372. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
  373. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
  374. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
  375. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
  376. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
  377. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
  378. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
  379. package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
  380. package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
  381. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
  382. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
  383. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
  384. package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
  385. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
  386. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
  387. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
  388. package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
  389. package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
  390. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
  391. package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
  392. package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
  393. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  394. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
  395. package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
  396. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
  397. package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
  398. package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
  399. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
  400. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
  401. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
  402. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
  403. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
  404. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
  405. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
  406. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
  407. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
  408. package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
  409. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
  410. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
  411. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
  412. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
  413. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
  414. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
  415. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
  416. package/lib/video-recap/skills/video-script/SKILL.md +248 -0
  417. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
  418. package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
  419. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
  420. package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
  421. package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
  422. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
  423. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
  424. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
  425. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
  426. package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
  427. package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
  428. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
  429. package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
  430. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
  431. package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
  432. package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
  433. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
  434. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
  435. package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
  436. package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
  437. package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
  438. package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
  439. package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
  440. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
  441. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
  442. package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
  443. package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
  444. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
  445. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
  446. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
  447. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
  448. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
  449. package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
  450. package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
  451. package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
  452. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
  453. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
  454. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
  455. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
  456. package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
  457. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
  458. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
  459. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
  460. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
  461. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
  462. package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
  463. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
  464. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
  465. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
  466. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
  467. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
  468. package/package.json +55 -40
  469. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
  470. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
  471. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
  472. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
  473. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
  474. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
  475. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
  476. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
  477. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
  478. /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
  479. /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
@@ -0,0 +1,355 @@
1
+ # 短篇反转设计
2
+ > 操作手册:反转类型、嵌套反转、误导技巧、打脸节奏。按决策路由选用,按设置/揭示步骤执行,用自检清单验收。
3
+ > 反转类型枚举与拆文 `_meta.json.reversal_type` 字段一致:视角/身份/动机/时间线/信息/认知/无反转。
4
+
5
+ ## 决策路由
6
+
7
+ | 你要设计什么 | 用哪种反转 | 关键操作 |
8
+ |-------------|-----------|---------|
9
+ | 角色不是你以为的人 | 身份反转 | 埋3处行为细节暗示 |
10
+ | 真相从另一个角度完全不同 | 视角反转 | 引入另一角色视角打破认知 |
11
+ | 角色做某事的原因不是你以为的 | 动机反转 | 高压场景中二选一暴露真动机 |
12
+ | 时间顺序跟读者理解不同 | 时间线反转 | 不撒谎只调叙述顺序 |
13
+ | 读者掌握了错误信息 | 信息反转 | 新证据直接否定旧"事实" |
14
+ | 读者对整个角色/关系的理解被颠覆 | 认知反转 | 全程铺感情色彩,结尾翻转色彩 |
15
+ | 甜宠/喜剧/报应型,本就没有反转 | 无反转 | 走报应兑现或甜度递进,不硬塞反转 |
16
+ | 要叠多层反转 | 嵌套反转 | 主次分明,间隔递减 |
17
+
18
+ ---
19
+
20
+ ## 反转类型
21
+
22
+ ### 1. 身份反转
23
+
24
+ **触发条件**:角色真实身份与读者认知不同。
25
+
26
+ **设置步骤**:
27
+ 1. 确定表面身份和隐藏身份
28
+ 2. 通过行为细节泄露(禁止用叙述者直接说明)
29
+ 3. 回看至少埋3处暗示
30
+
31
+ **揭示步骤**:
32
+ 1. 用场景同时揭示身份和动机
33
+ 2. 禁止让角色自说"其实我是XX"
34
+ 3. 选在读者最不期待揭示的时机
35
+
36
+ | 表面身份 | 隐藏身份 | 铺垫线索 |
37
+ |----------|----------|----------|
38
+ | 乖巧继女 | 幕后操控者 | 总在关键时刻「恰好」不在场 |
39
+ | 热心邻居 | 伤害主角的人 | 对主角家里的布局太熟悉了 |
40
+ | 死去的恋人 | 还活着 | 「遗物」里有一件不该存在的东西 |
41
+ | 陌生人 | 主角失忆前的至亲 | 叫出了主角只有至亲才知道的小名 |
42
+
43
+ 示例铺排:
44
+ ```
45
+ 铺垫1(5%):邻居帮修水管,对水管走向异常熟悉
46
+ 铺垫2(25%):邻居「随口」提到主角家灯每天几点关
47
+ 铺垫3(50%):梦到有人站床前,醒来闻到烟味——邻居抽烟
48
+ 揭示(75%):监控里,每晚站床前的人穿邻居那件灰色外套
49
+ ```
50
+
51
+ ### 2. 视角反转
52
+
53
+ **触发条件**:叙事者视角是片面的,真相从另一个角度完全不同。
54
+
55
+ **设置步骤**:
56
+ 1. 确保所有叙述都是事实,但不是全部事实
57
+ 2. 叙述者解读引导读者走错方向
58
+ 3. 关键信息被「合理地」跳过或淡化
59
+ 4. 叙述者自己也真诚地相信这套叙事——他不是在骗读者,他自己也被骗了
60
+
61
+ **揭示步骤**:
62
+ 1. 引入另一角色视角/证词
63
+ 2. 展示主角「没看到」的场景
64
+ 3. 用证据打破认知
65
+
66
+ | 主角视角 | 真实视角 | 关键差异 |
67
+ |----------|----------|----------|
68
+ | 丈夫出轨对不起我 | 我才是被蒙在鼓里的第三者 | 时间线上的空白 |
69
+ | 同事在排挤我 | 我的「好心」一直在伤害别人 | 别人视角下我的行为 |
70
+ | 我在拯救这段关系 | 我在控制对方 | 对方的反应其实是在自保 |
71
+ | 我是受害者 | 我是施害者 | 记忆被叙述者篡改了 |
72
+
73
+ **铁律**:叙述者必须真诚地相信自己的视角,禁止叙述者明知真相而故意误导读者。
74
+
75
+ ### 3. 动机反转
76
+
77
+ **触发条件**:角色做某事的真正原因与读者以为的不同。
78
+
79
+ **设置步骤**:
80
+ 1. 给角色一个「表面动机」让读者觉得合理
81
+ 2. 真正动机藏在表面之下
82
+ 3. 埋下行为细节与表面动机的微小矛盾(矛盾不要太大)
83
+
84
+ **揭示步骤**:
85
+ 1. 制造高压场景迫使角色二选一
86
+ 2. 表面动机指向选A,但角色选了B
87
+ 3. 选择行为直接暴露真正动机
88
+
89
+ | 表面动机 | 真正动机 | 行为矛盾线索 |
90
+ |----------|----------|-------------|
91
+ | 想和前夫复婚 | 想拿回藏在婚房里的东西 | 从不关心他的生活,只关心那套房子 |
92
+ | 保护妹妹 | 嫉妒妹妹,想控制她 | 每次「保护」都让妹妹更孤立 |
93
+ | 追求公平正义 | 报个人私仇 | 目标人物恰好和当年的事有关 |
94
+ | 害怕失去朋友 | 害怕朋友发现自己背叛了她 | 每次朋友接近真相就制造新危机 |
95
+
96
+ ### 4. 时间线反转
97
+
98
+ **触发条件**:故事的实际时间顺序与读者理解的顺序不同。
99
+
100
+ **设置步骤**:
101
+ 1. 确定真实时间顺序和读者理解的顺序
102
+ 2. 用叙述技巧让读者以为A在B之前,实际B在A之前
103
+ 3. 不撒谎,只调整叙述顺序
104
+ 4. 用时态、季节、物品新旧作为天然时间线索
105
+
106
+ **揭示步骤**:
107
+ 1. 找一个不可能存在的时间矛盾
108
+ 2. 或让角色提到「还没发生」的事
109
+ 3. 或展示物品状态与时间线不符
110
+
111
+ | 读者以为的时间线 | 真实时间线 | 揭示方式 |
112
+ |------------------|-----------|----------|
113
+ | 丈夫丧妻后变质 | 妻子「死后」还活着 | 时间戳对不上的消息 |
114
+ | 姐姐在弟弟出事后崩溃 | 弟弟出事因姐姐先做了某事 | 医院记录上的时间 |
115
+ | 两人正在恋爱 | 这是一段回忆,已分开 | 「我当时不知道那是最后一次」 |
116
+ | 重生后第二天 | 重生前的最后一天循环 | 镜子里倒影和之前不一样 |
117
+
118
+ **铁律**:写完必须画时间线图自查。
119
+
120
+ ### 5. 信息反转
121
+
122
+ **触发条件**:读者(和主角)掌握了错误的关键信息。
123
+
124
+ **设置步骤**:
125
+ 1. 给读者一个来自可靠来源的「事实」
126
+ 2. 所有人物基于此「事实」行动
127
+ 3. 在后果中埋下矛盾证据
128
+
129
+ **揭示步骤**:
130
+ 1. 新证据直接否定旧「事实」
131
+ 2. 读者和主角同时发现被骗
132
+ 3. 前面所有剧情获得新解读
133
+
134
+ | 错误信息 | 真实信息 | 揭示的连锁反应 |
135
+ |----------|----------|---------------|
136
+ | 遗嘱遗产给长子 | 遗嘱被调包,本给次子 | 长子所有「孝心」都是演戏 |
137
+ | 医生说孩子亲生 | DNA报告被篡改 | 配偶从受害者变加害者 |
138
+ | 朋友说看到他出轨 | 朋友在撒谎 | 朋友的「安慰」其实是操控 |
139
+ | 老板说提拔我 | 岗位已取消 | 老板画饼为让我多干活 |
140
+
141
+ **核心区别**:信息反转是认知层面的——你以为世界是A,其实是B。核心是「一条假信息」。
142
+
143
+ ### 6. 认知反转
144
+
145
+ **触发条件**:读者对某个角色/关系的整体理解被颠覆;重点在整段感情色彩翻转,而非单条信息纠错。
146
+
147
+ **与信息反转的区别**:信息反转翻一条事实(遗嘱归属、亲子关系真伪);认知反转翻读者对整个角色/关系的感情判断(恨了全程的妈其实一直在护着她)。信息反转改事实答案,认知反转改"我对他的感觉"。
148
+
149
+ **设置步骤**:
150
+ 1. 全程让读者积累一种感情色彩(这个妈狠心/这个丈夫凉薄/这个对手纯坏)
151
+ 2. 每个负面场景都埋一个被忽略的反向细节(狠话之后多塞了钱、转身擦了眼泪)
152
+ 3. 细节要小到读者当时不在意,回看才发现处处都是
153
+
154
+ **揭示步骤**:
155
+ 1. 用一个场景或一件遗物,让所有负面行为同时获得反向解读
156
+ 2. 不解释,让读者自己把全程重新过一遍
157
+ 3. 揭示后情绪从"恨/怨"翻成"亏欠/意难平"
158
+
159
+ | 全程认知 | 翻转后认知 | 反向细节铺垫 |
160
+ |----------|-----------|-------------|
161
+ | 后妈刻薄赶我走 | 她赶我走是怕她仇家牵连我 | 每次骂完都往我包里塞钱 |
162
+ | 丈夫冷漠不管家 | 他在外面替我扛了所有债 | 深夜接的"应酬"电话都是催债 |
163
+ | 师父偏心打压我 | 他压我是知道我会被盯上 | 每次罚我都安排在别人看得见的地方 |
164
+
165
+ **追妻/世情主力反转**:这是追妻火葬场、世情最常用的反转——男主/婆婆/亲人全程被恨,结尾翻成"原来一直在爱/在护",意难平拉满。
166
+
167
+ ### 7. 无反转
168
+
169
+ **触发条件**:甜宠、喜剧、反差萌、报应型复仇/重生——这类故事本就没有传统反转,硬塞反转反而毁节奏。
170
+
171
+ **爽感来源(替代反转)**:
172
+ - **报应兑现型**(复仇/重生爽文):爽点不在"真相翻转",在反派一步步走向毁灭、每条恶行精确对应一条报应(以彼之道还施彼身)。用报应设计表:恶行→报应→爽感来源。
173
+ - **甜度递进型**(甜宠/青春):爽点在关系一步步升温,反差萌反复"装失败"。全程正向情绪阶梯上升,不经历反转的负向回落。
174
+
175
+ **写法要点**:
176
+ 1. 不为"显得有设计感"硬加反转
177
+ 2. 报应型:每个报应要让读者等过、铺过,兑现时才解气
178
+ 3. 甜宠型:升温节拍保持连续变化;若多个叙事单元都没有心动、试探、选择或关系后果,再检查是否停滞,不为逐节达标硬塞甜点
179
+
180
+ > 拆文时遇到此类,`reversal_type` 填「无反转」,`setup_clues`(反转铺垫)一项跳过阈值(见 analyze output-contract 的「structure_counts 数值校验」)。
181
+
182
+ ---
183
+
184
+ ## 嵌套反转
185
+
186
+ 一篇短篇可叠 2-3 层反转,必须主次分明。
187
+
188
+ 每层都按同一条可执行链设计:`铺垫事实 → 当时的错误解释 → 触发证据 → 真相揭示 → 行动/关系后果`。第一层必须是能暂时结案的可信阶段答案;第二层不仅推翻第一层,还要解释读者为什么曾相信表层答案。
189
+
190
+ ### 双层嵌套
191
+
192
+ ```
193
+ 读者以为:A(铺垫阶段)
194
+ 第一层反转:其实是 B!(中后段阶段答案)
195
+ 第二层反转:B 仍不完整,其实是 C!(终局前揭示)
196
+ ```
197
+
198
+ **执行要求**:
199
+ - 第一层反转必须足够有说服力,让读者接受B就是真相
200
+ - 第一层后给1-2段「消化时间」
201
+ - 第二层要能同时解释A和B,比第一层更震撼
202
+
203
+ 示例:
204
+ ```
205
+ 铺垫:丈夫出轨了,妻子收集证据准备离婚
206
+ 第一层:丈夫没出轨,那女人是他线人——他在调查妻子的公司
207
+ 第二层:妻子公司确实有问题;举报人换成妻子自己,丈夫只是被引导发现
208
+ ——她故意让丈夫发现,只有丈夫「不经意」揭发她才能拿到保险赔偿
209
+ ```
210
+
211
+ ### 三层嵌套(慎用)
212
+
213
+ **使用条件**:只有篇幅、线索容量和情绪结算空间都足够时才用;多数短篇优先把一至两层做透。
214
+
215
+ **执行要求**:
216
+ - 间隔通常递减,但按小节功能和结算欠账定位,不套固定全文百分比
217
+ - 第三层必须最短最狠——一句话就够
218
+ - 最后一层必须回答前面所有疑问
219
+ - 每层都要有情感冲击,不只是信息冲击
220
+ - 题材限制:只适合高智商悬疑、精心设计的复仇
221
+
222
+ ---
223
+
224
+ ## 反转时机
225
+
226
+ ### 揭示位置判断
227
+
228
+ | 反转类型 | 揭示前必须积累什么 | 揭示后必须留下什么 |
229
+ |----------|-------------------|-------------------|
230
+ | 身份反转 | 表面身份成立且行为有裂缝 | 新身份带来的选择与关系后果 |
231
+ | 视角反转 | 单一视角已形成稳定误判 | 另一视角触发的新行动 |
232
+ | 动机反转 | 表面动机能解释大多数行为 | 真动机导致的关键选择 |
233
+ | 时间线反转 | 两套顺序都能回看成立 | 时间重排后的责任变化 |
234
+ | 信息反转 | 错误事实已真正影响决策 | 纠错后的连锁反应 |
235
+ | 认知反转 | 感情色彩已经积累 | 关系判断和情绪结算 |
236
+
237
+ ### 时机原则
238
+
239
+ - 用功能而非固定百分比定位:先让误判参与至少一次重要决策,再揭示。
240
+ - 揭示不能晚到只剩解释;必须给行动、关系或代价留出结算空间。
241
+ - 双层反转间至少发生一次基于阶段答案的新行动,否则只是连续口供。
242
+ - 平台付费断点优先卡在未完成动作、证据归属变化或两难选择。先选一个主断点,再按载体需求选择少量支撑断点,不把每节都标成强钩子。
243
+
244
+ ---
245
+
246
+ ## 误导技巧
247
+
248
+ 误导要引导读者自己走向错误结论,不能欺骗读者。
249
+
250
+ ### 两大底层路径
251
+
252
+ - **加法路径(分层法)**:在真实信息上叠加假信息。线索既可用逻辑线A解释为A',也可用B解释为B'。A'是误导方向(常见故事),B'是真相(不常见故事)。误导读者以为是A'时,必须同时暗埋与B'相关的线索。
253
+ - **减法路径(信息残缺法)**:不添加假信息,隐藏关键信息的一部分。只让主角得知成功的部分。导致下行的最好不是主角主动行动获得的,可以让配角获得那半信息后交给主角时发生意外。
254
+
255
+ ### 五种技巧速查
256
+
257
+ | 技巧 | 操作方法 | 示例 |
258
+ |------|---------|------|
259
+ | 选择性叙述 | 主角只关注某些信息,读者跟着走 | 主角在意丈夫和女同事暧昧,忽略「客户」的奇怪电话 |
260
+ | 情绪引导 | 用情绪场景引导判断 | 暖的父女戏→其实是愧疚,他做了对不起女儿的事 |
261
+ | 假线索(红鲱鱼) | 给可疑角色/事件吸引注意力 | 诡异邻居和主线无关,真正威胁是一直正常的人 |
262
+ | 刻板印象利用 | 利用社会认知偏见 | 强势婆婆其实是保护儿媳,她知道一些儿媳不知道的事 |
263
+ | 信息分层 | 真相同假信息混在一起 | 丈夫确实秘密联系人(真)→前女友(假)→亲妹妹(真) |
264
+
265
+ **红鲱鱼铁律**:红鲱鱼必须在故事里有自己的功能(推进情节/增加趣味),只是不是反转的答案。
266
+
267
+ ---
268
+
269
+ ## 反转自检清单
270
+
271
+ ### 合理性
272
+ - [ ] 回看铺垫至少有3处暗示指向反转
273
+ - [ ] 反转不依赖巧合——角色选择推动了反转
274
+ - [ ] 没有引入前面完全没提过的新信息
275
+
276
+ ### 冲击力
277
+ - [ ] 反转后情绪强度高于反转前
278
+ - [ ] 反转改变了读者对前面所有剧情的理解
279
+ - [ ] 反转让读者想翻回开头重看
280
+
281
+ ### 公平性
282
+ - [ ] 读者有可能在反转前猜到(不是必须,但有可能)
283
+ - [ ] 没有对读者撒谎——只是没说出全部真相
284
+ - [ ] 揭示方式自然,不靠角色大段独白解释
285
+
286
+ ### 节奏
287
+ - [ ] 反转揭示以一个集中场景完成,长度服从证据复杂度,不靠长篇口供拖延
288
+ - [ ] 揭示后有足够篇幅展示反转影响
289
+ - [ ] 反转后结尾在反转产生的情绪上收束
290
+
291
+ ### 逐节落表
292
+
293
+ 设计完成后,用一张表检查每节的 `功能 / 新证据或误判 / 主动者 / 节尾钩子 / 是否主付费点`。没有改变证据归属、嫌疑判断、关系立场或风险等级的节,应合并或改写;强钩子只标真正改变读者预期的节点。
294
+
295
+ ---
296
+
297
+ ## 常见反转错误
298
+
299
+ | 错误 | 问题 | 修正 |
300
+ |------|------|------|
301
+ | 天降反转 | 前面完全没铺垫 | 至少埋3条线索 |
302
+ | 解释过多 | 大段文字解释反转 | 用行动/场景让读者自己明白 |
303
+ | 反转太弱 | 读者早就猜到了 | 加误导或换反转类型 |
304
+ | 反转太多 | 3个以上反转堆在一起 | 砍到1-2个做到极致 |
305
+ | 反转无感 | 只改变信息没改变情绪 | 反转必须同时改变读者情感判断 |
306
+ | 反转作弊 | 引入前面不存在的信息 | 所有反转要素必须在前文中出现过 |
307
+
308
+ ---
309
+
310
+ ## 特殊反转技法
311
+
312
+ ### 虚晃一枪反转法
313
+
314
+ 先给出"应该不会发生"的预期让读者放松,然后意外以反转形式发生。类似鬼片推开门什么都没有->松口气->回头撞鬼。
315
+
316
+ ### 超额收获反转
317
+
318
+ 反转后收获超出预期,产生二次惊喜:
319
+ - 短篇:主角以为只解决一个问题,结果连带解决了隐藏的更大问题
320
+ - 网游文模式:Boss爆三样——立刻能用的 / 送人拉关系的 / 暂时用不到但一看很厉害的
321
+
322
+ ### 情绪拉扯反转标准流程
323
+
324
+ 1. 展示物品/能力强大,读者期待+1
325
+ 2. 配角因信息差认为鸡肋,读者期待打脸+1
326
+ 3. 展示反派特性恰好克制,读者期待+1
327
+ 4. 配角拿更强装备打反派失败,期待+1
328
+ 5. 众人看衰主角,期待继续+1
329
+ 6. 主角秒杀,期待满足
330
+ 7. 众人震惊,配角马后炮分析,期待满足
331
+ 8. 新一轮收获,满足+新期待产生
332
+
333
+ ---
334
+
335
+ ## 打脸的深层节奏
336
+
337
+ ### 三种打脸方式
338
+
339
+ | 方式 | 特点 | 适用场景 |
340
+ |------|------|----------|
341
+ | 主动挑衅->打脸 | 简单粗暴 | 小白文最常见 |
342
+ | 对手挑衅->被打脸 | 压主角同时给读者安全感和反击暗示 | 需要积蓄仇恨时 |
343
+ | 借他人之手打脸 | 支持者代为回击,无损主角形象 | 保持主角高逼格时 |
344
+
345
+ ### 打脸节奏铁律
346
+
347
+ - 压抑不能太长——连输8场写3万字不行,改成连输4场+略写
348
+ - 压的同时必须给读者信心暗示(主角自信到自大:"我们还是联赛前四!")
349
+ - 比起主角被欺负,读者更厌恶主角自暴自弃
350
+ - 高潮部分要拉长,最大化利用(球迷反应、解说员、赛后跟进)
351
+ - 大高潮不要险胜——充分铺垫后要尽情碾压,干净利落的大胜
352
+
353
+ ### 高潮间过渡
354
+
355
+ 升级练功也有爽点,但大爽点落在升级后打脸,读者期待升级后的兑现。
@@ -1,4 +1,4 @@
1
- # 悬念编排操作手册
1
+ # 短篇悬念编排
2
2
 
3
3
  悬念构建、强度分级、多线周期、分层钩子、期待接力、震惊分层的完整操作指南。
4
4
 
@@ -8,9 +8,9 @@
8
8
 
9
9
  | 你在写什么 | 用什么方法 |
10
10
  |------------|------------|
11
- | 设计悬念体系 | 多线悬念周期 + 强度5级分级 |
12
- | 单章悬念 | 四种信息顺序模板 + 触发型分层钩子 |
13
- | 跨卷悬念 | 期待接力法 + 震惊分层 |
11
+ | 设计悬念体系 | 主悬念/副悬念 + 强度5级分级 |
12
+ | 单节悬念 | 四种信息顺序模板 + 触发型分层钩子 |
13
+ | 全文悬念 | 期待接力法 + 震惊分层 |
14
14
  | 判断悬念强度 | 强度5级分级表 |
15
15
 
16
16
  使用方法:先看左列定位你的当前任务,再用右列指定的方法。
@@ -28,7 +28,7 @@
28
28
  | 维度 | 悬念 | 伏笔 |
29
29
  |------|------|------|
30
30
  | 目的 | 让读者猜测接下来会怎样 | 为后面的揭示埋下前期线索 |
31
- | 位置 | 章节结尾/段落结尾 | 叙事中自然带出 |
31
+ | 位置 | 小节结尾/段落结尾 | 叙事中自然带出 |
32
32
  | 揭示时机 | 短期内揭晓 | 长期后才揭示 |
33
33
  | 情绪效果 | 紧张/好奇/期待 | 震惊/恍然大悟 |
34
34
 
@@ -47,7 +47,7 @@
47
47
 
48
48
  ### 触发型钩子(分层钩子)
49
49
 
50
- 单章内多层递进悬念,按以下步骤操作:
50
+ 单节内多层递进悬念,按以下步骤操作:
51
51
 
52
52
  ```
53
53
  第1层:展示初步成果 → 观众初步反应
@@ -64,27 +64,27 @@
64
64
 
65
65
  | 等级 | 名称 | 效果 | 适用 |
66
66
  |------|------|------|------|
67
- | 1 | 微悬念 | 好奇 | 过渡章 |
68
- | 2 | 小悬念 | 想看下一段 | 正文章 |
69
- | 3 | 中悬念 | 想看下一章 | 关键章 |
70
- | 4 | 大悬念 | 放不下书 | 爆发章 |
71
- | 5 | 极悬念 | 睡不着 | 卷末高潮 |
67
+ | 1 | 微悬念 | 好奇 | 过渡节 |
68
+ | 2 | 小悬念 | 想看下一段 | 推进节 |
69
+ | 3 | 中悬念 | 想看下一节 | 关键节 |
70
+ | 4 | 大悬念 | 愿意付费继续 | 付费断点/爆发节 |
71
+ | 5 | 极悬念 | 必须知道真相 | 终局前 |
72
72
 
73
- 使用方法:写完每章后对照此表判断悬念等级。过渡章至少要达到1级,正文章至少2级,关键章至少3级。不达标则需要补强。
73
+ 使用方法:用此表描述当前悬念效果,不给每类小节设置最低等级。若连续多个叙事单元既没有未完成动作、身份/证据变化、两难选择,也没有局部兑现或明确下一步,再检查牵引是否中断;付费点须由真实变化形成,不靠空喊危险。
74
74
 
75
75
  ---
76
76
 
77
- ## 多线悬念周期
77
+ ## 短篇悬念层级
78
78
 
79
- | 弧线长度 | 跨度 | 示例 |
80
- |----------|------|------|
81
- | 短弧 | 2-3 章 | 一场打斗、一次冲突 |
82
- | 中弧 | 5-8 章 | 一段关系变化、一个小谜题 |
83
- | 长弧 | 整卷 | 终极秘密、主线大反转 |
79
+ | 层级 | 跨度 | 示例 |
80
+ |------|------|------|
81
+ | 即时钩子 | 当前段到下一段 | 一条证据、一句没说完的话 |
82
+ | 节间钩子 | 1-2 节 | 一次取证、关系异常或行动后果 |
83
+ | 全文主悬念 | 开篇到终局 | 谁在操盘、角色真正隐瞒了什么 |
84
84
 
85
- 规划时同时铺设三种弧线,保证任何时刻都有至少两条悬念线在运行。
85
+ 全文保持一个主悬念,最多搭配一个副悬念。副悬念必须给主悬念提供证据、误导或情绪代价,不另开长篇式支线。
86
86
 
87
- ### 三段钩子设计(单章内)
87
+ ### 三段钩子设计(单节内)
88
88
 
89
89
  按章节进度分配悬念节奏:
90
90
 
@@ -92,7 +92,7 @@
92
92
  2. **养**(中 50%):逐步加压,让读者意识到不对劲
93
93
  3. **收**(末 20%):引爆或延迟引爆
94
94
 
95
- 延迟引爆 = 比引爆更强的钩子,用于拉到下一章。
95
+ 延迟引爆 = 比当前答案更强的问题,用于拉到下一节;终局前不得靠无关新谜题续命。
96
96
 
97
97
  ---
98
98
 
@@ -106,9 +106,9 @@
106
106
 
107
107
  ### 持续拉期待操作框架
108
108
 
109
- 1. 每章结尾必须有至少一个未解的问题或未达成的期待
110
- 2. 期待分三层同时运作:短期(下章)、中期(本卷)、远期(全书)
111
- 3. 当一层即将满足时,先铺好下一层的期待,形成"期待链"不断裂
109
+ 1. 关键节结尾必须有至少一个未解的问题、未完成动作或关系变化;呼吸节可用弱钩子,不机械强卡。
110
+ 2. 期待分两层运作:短期(下一节/付费点)与全文(终局真相或关系结算)。
111
+ 3. 当短期问题解决时,答案必须推进全文主悬念,不能只换一个同级谜语。
112
112
 
113
113
  ### 不间断期待与钩子链
114
114
 
@@ -318,15 +318,15 @@
318
318
 
319
319
  ### 章末断章留悬念
320
320
 
321
- 每章结尾让人物面临未解决的危险,读者不得不回来。
321
+ 章末牵引可以来自未完成动作、身份/证据变化、两难选择、关系变化或局部兑现后的新后果;不要求每章都制造危险。
322
322
 
323
323
  ### 时间锁
324
324
 
325
325
  故事前期设置必须在限定时间内发生的事件,压缩时间增强紧张感。
326
326
 
327
- ### 期待 > 爽点
327
+ ### 期待与兑现并行
328
328
 
329
- 铺垫期待远比展现爽点更重要。爽是释放过程,不是情绪本身——紧张/好奇/担忧/愤怒/憋屈比"爽"更持久。长篇关键 = 延迟满足。
329
+ 短篇没有无限延迟满足的篇幅。每次延迟都要支付一笔可见收益:新证据、关系撕裂、误判修正或一次局部反击;连续两节只抬问题不交答案,会让读者感觉拖延。
330
330
 
331
331
  ### "麻烦消失"是失去读者的根本原因
332
332
 
@@ -336,17 +336,17 @@
336
336
 
337
337
  ## 质量检查清单
338
338
 
339
- 写完每一章/每一卷后,逐项检查:
339
+ 写完每一节/全文后,逐项检查:
340
340
 
341
- - [ ] **悬念等级达标**:对照强度5级分级表,本章悬念等级是否符合章节定位
341
+ - [ ] **悬念等级达标**:对照强度5级分级表,本节悬念等级是否符合小节功能
342
342
  - [ ] **期待链不断裂**:是否至少有一条未解的期待线在运行
343
343
  - [ ] **角色反应到位**:每个悬念点是否有角色反应来验证力度
344
344
  - [ ] **信息差存在**:读者与角色之间、角色与角色之间是否有信息差
345
- - [ ] **章末有钩子**:每章结尾是否有至少一个未解决的问题或未达成的期待
345
+ - [ ] **节末有钩子**:关键节结尾是否有未解决问题、未完成动作或关系变化;弱节是否至少有明确承接
346
346
  - [ ] **下行力度适中**:挫折是否控制在"小波折"范围,没有导致节奏断裂
347
347
  - [ ] **震惊有层次**:震惊是否从点 → 网 → 深度递进,而非一次性爆发
348
348
  - [ ] **道具变化可视化**:震惊递进是否有明确的视觉/物理变化支撑
349
349
  - [ ] **爽感递增**:每次释放后的爽感是否比上一次更强
350
350
  - [ ] **麻烦没有消失**:主角解决问题后是否有新的困境或挑战出现
351
- - [ ] **多线并行**:是否保持至少两条期待线同时运行
351
+ - [ ] **主副线克制**:是否只有一个全文主悬念,副悬念是否服务主线而非扩成新故事
352
352
  - [ ] **底牌有压制**:展示底牌后反派是否受到对应压制
@@ -30,6 +30,6 @@
30
30
  短篇按"免费试读 + 付费点 + 付费正文"投稿(投稿语境的"章"即本 skill 的"节")。付费点是免费段和付费段的分界,卡不好读者不付费,卡对了转化高。
31
31
 
32
32
  - **断点位置**:付费点卡在一个章末的卡脖子断点上——一个即将揭晓、读者必须付费才能看到的反转或对决瞬间(亲子鉴定撕开一半、底牌刚要拍上桌、名字念到一半)。别把核心大爽点在免费段全放完。
33
- - **剧情点密度**:付费点前每章 2-3 个剧情点(快速立处境、埋钩、层层加压);付费点后每章比之前多 1-2 个(集中兑现打脸/反转/爽点)。剧情点适度加,太多会乱。
33
+ - **剧情点密度**:付费点前完成处境、选择与代价的因果链,付费点后集中兑现已经承诺的打脸、反转或爽点。相关变化可由同一动作链完成,不按每章数量补剧情点;连续单元没有状态变化才复核是否停滞。
34
34
  - **反推法排细纲**:先定付费点卡在第几节章末,先把那一节的剧情想透(如复仇虐爽:前几节情绪递进越来越虐,付费点节章末预示反击),再倒推安排前面各节"情绪冲突逐渐递进",最后排付费点之后的兑现段。
35
- - **投稿成品形态**:标题 + 导语(不写"导语"二字,只留那几句)+ 数字分节的正文(含付费点断点)。投稿建议区间比 SKILL 框架(8000-20000)更收敛:整篇约 8000-12000 字,每章约 1000-1300 字,章数据此约 7-12 章。
35
+ - **投稿成品形态**:标题 + 导语(不写"导语"二字,只留那几句)+ 数字分节的正文(含付费点断点)。投稿建议区间比 SKILL 框架(8000-20000)更收敛:整篇约 8000-12000 字;分节数量与长度服从动作链、转场和付费断点,不设统一章长。
@@ -6,14 +6,14 @@
6
6
 
7
7
  ## Phase 2 设计任务(框架确定后执行)
8
8
 
9
- ### 开始前先加载 references(逐项检查,不能跳过)
9
+ ### 开始前先通过 Reference Gate(逐项检查,不能跳过)
10
10
 
11
- - 定题材腔调/招式 → 加载 `genre-styles/{题材}.md` + `short-craft.md` ✅/❌
12
- - 写反派/揭露方式 → 加载 `villain-and-reveal.md` ✅/❌
13
- - 写大纲 → 题材包 `genre-styles/{题材}.md` 的节奏骨架 +(冷门题材)`genre-writing-formulas.md` 速查表 ✅/❌
14
- - 反转信息差验证 → 需加载 `reversal-toolkit.md` ✅/❌
11
+ - 工作流与投稿结构 → 加载 `writing-workflow.md`(本文件)+ `submission-craft.md` ✅/❌
12
+ - 定题材腔调/招式 → 加载一个精确的 `genre-styles/{题材}.md` + `short-craft.md`;冷门题材改用 `genre-writing-formulas.md` ✅/❌
13
+ - 写反派/揭露方式 → 加载 `villain-and-reveal.md`;不适用时写明原因 ✅/❌
14
+ - 反转信息差验证 → 加载 `short-reversal.md` ✅/❌
15
15
  - 伏笔回查 → 见下方「伏笔回查清单」 ✅/❌
16
- - 如某项不适用(如无反派),标注原因后可跳过
16
+ - 精确路径缺失或不可读时按 SKILL.md 首屏门禁停止,不创建/修改故事产物
17
17
 
18
18
  ### 设计步骤
19
19
 
@@ -22,25 +22,28 @@
22
22
  2. **设计反派**(如有):用 villain-and-reveal.md 反派模板
23
23
  - 填写:`{身份} + {动机} + {作恶方式} + {致命弱点} + {报应}`
24
24
  3. **确定揭露方式**:从 villain-and-reveal.md 4 种真相揭露机制中选一种
25
- 4. **编写 小节大纲.md**:每节 1 行,格式如下:
26
- `结构段/五段功能 | 主事件 | 子事件×3-5 | 情绪 | 人物/关系变化 | 因果/逻辑链 | 读者新获知什么 | 结尾承接/钩子 | 伏笔/物件 | 动静 | 对话密度 | 目标字数`
25
+ 4. **编写 小节大纲.md**:使用固定 12 列 Markdown 表格,每节 1 行,表头如下(列名和顺序不可改):
26
+
27
+ `| 结构段/五段功能 | 主事件 | 情节推进 | 情绪 | 人物/关系变化 | 因果/逻辑链 | 读者新获知什么 | 结尾承接/钩子 | 伏笔/物件 | 场景形态 | 对白作用 | 目标字数 |`
28
+
29
+ 下一行写 Markdown 分隔行,再逐节填写数据行。
27
30
  - `结构段/五段功能` 使用开头/铺垫/升级/反转/结尾(或起因/发展/转折/高潮/结尾),用于轻量对应长篇的内容概括,但不要套长篇完整章节蓝图
28
- - `人物/关系变化` 写本节前后变化;没有显性变化写“无显性,但关系压力/误解/距离变化为…”或 `[待补充]`
31
+ - `人物/关系变化` 写本节前后变化;没有人物或关系变化时,写 `无(本节改变:信息/风险/资源/决定/行动/读者理解中的具体一项)`,不为填表硬造关系波动
29
32
  - `因果/逻辑链` 写 `原因 → 行动 → 结果 → 后果/新问题`,避免小节只是情绪堆叠
30
33
  - `结尾承接/钩子` 写本节如何接下一节;最后一节写结尾落点
31
- - 子事件必须功能明确(推动剧情/铺垫反转/升级情绪),禁止装饰性子事件
32
- - 子事件不足 3 个时用扩展规则(加阻碍 / 配角反应 / 移动中发现 / 简短倒叙 / 动作递进;见 short-craft.md 第 10-11 节)
33
- - 子事件用 `->` 连接,每个子事件包含具体情节点描述+功能标签:
34
+ - `情节推进` 写本节一个或多个真实改变;不设数量下限,相关情节点允许由同一动作链或对话同时兑现,禁止为凑数量加入阻碍、配角反应、短回忆或意外
35
+ - 有先后关系的推进单元用 `->` 连接,每个单元包含具体情节点描述+功能标签:
34
36
  `具体发生了什么{功能标签}` 如 `发现账单上多了一笔4800{发现}` / `把戒指冲进马桶{冲突}` / `他笑了{递进}`
35
37
  功能标签:`对话` / `冲突` / `伏笔` / `回忆` / `发现` / `递进`
36
38
  情节点描述要具体到"谁做了什么",不能只写标签如`对话`或`冲突`
37
- - 动静标记:`动` 或 `静` 或 `动静`,相邻两节尽量交替;如因题材需要连续同标记,需确保节内有情绪变化(如:两节都是"静",但第一节"疑惑→心酸"、第二节"心碎→崩溃",情绪曲线仍在上升)
38
- - 对话密度:`高`(3+轮)/ `中`(1-2轮)/ `零`(全节无对话),尽量不连续 2 节标 `零`;翻阅日记、独自发现等场景允许例外,但连续零对话段落的情绪必须通过揉进感官细节和身体反应来推进
39
+ - `场景形态` 写主要推进引擎,如行动、对话权力、证据核验、手艺、等待、空间压力或关系回落;不要求动静交替
40
+ - `对白作用` 写对白实际改变的信息、策略、权力、关系或下一步行动;无对白时写明由哪种动作、证据、物件或任务推进,不设占比或话轮数量
39
41
  5. **反转信息差验证**(outline 写完后、写作前必须验证):
40
- - 回答:读者在第几节知道真相?用「揭穿节号 ÷ 全文总节数」计算位置百分比
41
- - < 50% → 延迟揭露,反转无效(读者已知真相太早,后续缺少震撼)
42
- - 50-60% → 灰区,需审视反转力度是否足够(前文误导线索是否充分)
43
- - > 60% → 反转位置合理(读者等得够久,冲击力最大化)
42
+ - `short-reversal.md` 判为无反转 → 写明理由,改查报应因果或甜度期待是否经过铺垫并得到兑现;跳过以下揭示检查
43
+ - 记录:读者在第几节知道真相?用「揭穿节号 ÷ 全文总节数」计算位置百分比,供核对节次和篇幅分配;百分比本身不是通过阈值
44
+ - 揭示前:错误解释是否已影响至少一次重要决定?还没有 → 误判尚未参与剧情,应补行动后果或调整揭示位置
45
+ - 揭示后:是否留出新的行动、关系变化或代价结算?只剩口头解释 → 提前揭示或压缩说明
46
+ - 双层反转:第一层阶段答案后是否发生基于该答案的新行动?没有 → 两层只是连续口供,应拉开功能距离
44
47
  - 检查:至少有 1 条读者被成功误导的假线索(不是读者猜到后等角色追上来)
45
48
  - 检查:反转前是否铺垫了 ≥3 条指向真相的线索(线索要隐蔽,不是明示)
46
49
  - 验证:找一个人(或自我模拟)只看 outline,能否在反转前猜到真相?猜到 = 失败
@@ -50,6 +53,12 @@
50
53
  - 贯穿道具三次出现完整?(第 1 次出现在铺垫段,第 2 次出现在反转段,第 3 次出现在结尾段)
51
54
  - 铺垫节号与揭穿节号的间距 ≥ 3 节(间距太短铺垫无效)
52
55
 
56
+ ### Phase 2 设计校验与确定性验收
57
+
58
+ `设定.md` 写入 `## Phase 2 设计校验`,至少包含:一个真实的题材 reference 路径、2-3 个核心招式、反派五字段或带原因的不适用声明、反转类型、`反转位置:第 X 节 ÷ 共 Y 节 = Z%`、`付费点:第 N 节末`。`short-reversal.md` 判为无反转时,位置改写为带原因的“不适用”。付费点同时写入 `小节大纲.md` 对应节的“结尾承接/钩子”单元格。
59
+
60
+ 生成两份文件后按 SKILL.md 的 Phase 2 完成门禁运行 `node scripts/check-phase2-contract.js --json {短篇目录}`。失败时只按 JSON 的 `repair_scope` 做最小修改并复验,不做无目标整稿重写。
61
+
53
62
  ### 写作前加载(按需,同时 ≤ 3 个)
54
63
 
55
64
  - 必读:`short-format.md`(正文格式)+ `short-craft.md`(通用底座)
@@ -103,11 +112,11 @@
103
112
  - [ ] 对话独立成行、引号风格符合项目/平台约定?
104
113
  - [ ] 标点节奏匹配语气/人物声线:没有通篇句号化,也没有随机堆砌问号/感叹号,或用 `……`/`——` 硬造停顿?
105
114
  - [ ] 正文(含对话)里的 `……`、`——`、`—`、`--` 已改成动作、短句、逗号或句号?
106
- - [ ] 无「他说/她道」?
115
+ - [ ] 对话标签是否避免高频、公式化重复;普通「说/道」低频使用可保留?
107
116
 
108
117
  ### 钩子
109
- - [ ] 每 2-3 小节有钩子?
110
- - [ ] 章末有钩子(悬念或余韵)?
118
+ - [ ] 钩子是否出现在读者预期、行动方向或关系判断发生变化的位置;有没有连续提问却不局部兑现?
119
+ - [ ] 章末是否有未完成动作、新信息、局部兑现、关系变化、余韵或明确下一步之一?
111
120
 
112
121
  ### AI 腔
113
122
  - [ ] 无禁止比喻:「命运的齿轮」「如潮水般」「仿佛春风」「心猛地一沉」「眼眶泛红」
@@ -118,7 +127,7 @@
118
127
  ### 技法
119
128
  - [ ] 情绪外化:直给的情绪词后面是否接了场景里的具体动作或物件?无空泛情绪总结句(一丝X涌上心头)?
120
129
  - [ ] 信物(若用):意义翻转是否完整?(查设定.md追踪表)
121
- - [ ] 一动一静:每节是否有动有静?
130
+ - [ ] 场景引擎:每节是否通过行动、证据、任务、对话、物件、等待或关系选择改变了至少一项状态?
122
131
  - [ ] 开头密度:前 100 字事件 ≥ 3?
123
132
 
124
133
  ### 结尾