@oh-story/dsh 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +38 -0
- package/cordis.patch.yml +3 -0
- package/lib/client.js +1201 -0
- package/lib/client.js.map +7 -0
- package/lib/drama/LICENSE.upstream +21 -0
- package/lib/drama/manifest.json +1012 -0
- package/lib/drama/skills/short-drama/SKILL.md +153 -0
- package/lib/drama/skills/short-drama/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama/assets/creator-decision.example.jsonl +4 -0
- package/lib/drama/skills/short-drama/assets/production-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +36 -0
- package/lib/drama/skills/short-drama/assets/reference-observation.example.jsonl +2 -0
- package/lib/drama/skills/short-drama/references/audience-reveal.md +74 -0
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +94 -0
- package/lib/drama/skills/short-drama/references/creator-workflow.md +82 -0
- package/lib/drama/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +73 -0
- package/lib/drama/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +74 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +79 -0
- package/lib/drama/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +75 -0
- package/lib/drama/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +85 -0
- package/lib/drama/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +72 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +80 -0
- package/lib/drama/skills/short-drama/references/lifecycle-commands.md +130 -0
- package/lib/drama/skills/short-drama/references/look-development.md +52 -0
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +58 -0
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +126 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +142 -0
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +27 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +1963 -0
- package/lib/drama/skills/short-drama/scripts/selftest.py +287 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +187 -0
- package/lib/drama/skills/short-drama-assets/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-assets/assets/character-look.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/continuity.example.jsonl +4 -0
- package/lib/drama/skills/short-drama-assets/assets/decisions.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/location-view.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/assets/occurrences.example.jsonl +5 -0
- package/lib/drama/skills/short-drama-assets/assets/prop-state.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/characters.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/examples/minimal/looks.jsonl +2 -0
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +89 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +164 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +123 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +146 -0
- package/lib/drama/skills/short-drama-assets/references/location-and-view.md +84 -0
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +111 -0
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +107 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +136 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +171 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +267 -0
- package/lib/drama/skills/short-drama-assets/scripts/selftest.py +89 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +157 -0
- package/lib/drama/skills/short-drama-develop/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +120 -0
- package/lib/drama/skills/short-drama-develop/assets/episode-map.jsonl +1 -0
- package/lib/drama/skills/short-drama-develop/assets/story-engine.md +181 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +219 -0
- package/lib/drama/skills/short-drama-develop/references/creative-reference-intake.md +57 -0
- package/lib/drama/skills/short-drama-develop/references/director-brief-craft.md +113 -0
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +509 -0
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +240 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +112 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +109 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/201/214/345/234/272/345/226/234/345/211/247.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +92 -0
- package/lib/drama/skills/short-drama-develop/references/mechanism-loop.md +282 -0
- package/lib/drama/skills/short-drama-develop/references/multi-episode-intake.md +128 -0
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +211 -0
- package/lib/drama/skills/short-drama-develop/references/reveal-reversal-payoff.md +99 -0
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +293 -0
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +88 -0
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +359 -0
- package/lib/drama/skills/short-drama-develop/scripts/episode_intake.py +699 -0
- package/lib/drama/skills/short-drama-develop/scripts/selftest.py +47 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +181 -0
- package/lib/drama/skills/short-drama-image-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +187 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +37 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +128 -0
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +31 -0
- package/lib/drama/skills/short-drama-image-prompts/examples/minimal-image-prompt-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +154 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +231 -0
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +122 -0
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +152 -0
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +96 -0
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +38 -0
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +177 -0
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +140 -0
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +92 -0
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +89 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +443 -0
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +93 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-novel-analyze/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +3 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +116 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +124 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +155 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +141 -0
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +67 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/novel_index.py +651 -0
- package/lib/drama/skills/short-drama-novel-analyze/scripts/selftest.py +51 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +103 -0
- package/lib/drama/skills/short-drama-produce/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +140 -0
- package/lib/drama/skills/short-drama-produce/references/providers/gpt-image-2.md +24 -0
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-music.md +25 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +40 -0
- package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +60 -0
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +1635 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +964 -0
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +134 -0
- package/lib/drama/skills/short-drama-review/SKILL.md +178 -0
- package/lib/drama/skills/short-drama-review/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-review/assets/finding-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/assets/supersession-decision.example.json +42 -0
- package/lib/drama/skills/short-drama-review/assets/verdict-template.json +32 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-findings.jsonl +2 -0
- package/lib/drama/skills/short-drama-review/examples/minimal-verdict.json +34 -0
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +114 -0
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +270 -0
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +85 -0
- package/lib/drama/skills/short-drama-review/references/review-method.md +82 -0
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +115 -0
- package/lib/drama/skills/short-drama-review/references/rubric-source-analysis.md +108 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +164 -0
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +166 -0
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +87 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +325 -0
- package/lib/drama/skills/short-drama-review/scripts/selftest.py +87 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-audition.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-template.json +49 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +32 -0
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/revision-lineage.fragment.json +12 -0
- package/lib/drama/skills/short-drama-storyboard/assets/scene-visual-plan.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +2 -0
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +241 -0
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +169 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +264 -0
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +70 -0
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +157 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +192 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +29 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/selftest.py +191 -0
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +824 -0
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +245 -0
- package/lib/drama/skills/short-drama-video-prompts/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/coverage-scope.fragment.json +21 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +101 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +212 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-terminal.example.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +31 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/performance.fragment.json +38 -0
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +46 -0
- package/lib/drama/skills/short-drama-video-prompts/examples/minimal-music-specs.jsonl +2 -0
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +240 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +255 -0
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +93 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +304 -0
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +191 -0
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +312 -0
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +168 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +110 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +329 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +450 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +327 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/selftest.py +82 -0
- package/lib/drama/skills/short-drama-write/SKILL.md +284 -0
- package/lib/drama/skills/short-drama-write/agents/openai.yaml +4 -0
- package/lib/drama/skills/short-drama-write/assets/beats.jsonl +2 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card-standalone.json +120 -0
- package/lib/drama/skills/short-drama-write/assets/episode-card.json +55 -0
- package/lib/drama/skills/short-drama-write/assets/screenplay.md +36 -0
- package/lib/drama/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +89 -0
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +519 -0
- package/lib/drama/skills/short-drama-write/references/production-format-dialect.md +273 -0
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +51 -0
- package/lib/drama/skills/short-drama-write/references/scene-sound-dramaturgy.md +43 -0
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +260 -0
- package/lib/drama/skills/short-drama-write/references/script-craft.md +558 -0
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +94 -0
- package/lib/drama/skills/short-drama-write/references/substitutable-realization.md +107 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +309 -0
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +1091 -0
- package/lib/drama/skills/short-drama-write/scripts/selftest.py +229 -0
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +416 -0
- package/lib/index.js +756 -0
- package/lib/index.js.map +7 -0
- package/lib/oh-story/LICENSE.upstream +21 -0
- package/lib/oh-story/manifest.json +1351 -0
- package/lib/oh-story/roles/chapter-extractor.md +314 -0
- package/lib/oh-story/roles/character-designer.md +169 -0
- package/lib/oh-story/roles/consistency-checker.md +190 -0
- package/lib/oh-story/roles/narrative-writer.md +294 -0
- package/lib/oh-story/roles/story-architect.md +195 -0
- package/lib/oh-story/roles/story-explorer.md +364 -0
- package/lib/oh-story/roles/story-researcher.md +304 -0
- package/lib/oh-story/skills/browser-cdp/SKILL.md +175 -0
- package/lib/oh-story/skills/story/SKILL.md +116 -0
- package/lib/oh-story/skills/story/VERSION +1 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +327 -0
- package/lib/oh-story/skills/story-cover/references/cover-styles.md +210 -0
- package/lib/oh-story/skills/story-deslop/SKILL.md +445 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-import/SKILL.md +634 -0
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +82 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +134 -0
- package/lib/oh-story/skills/story-import/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +442 -0
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +175 -0
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +329 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +270 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +530 -0
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +559 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +80 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +149 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +133 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +342 -0
- package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +197 -0
- package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +114 -0
- package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +105 -0
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +207 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +78 -0
- package/lib/oh-story/skills/story-long-write/SKILL.md +327 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +302 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-long-write/references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +502 -0
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +209 -0
- package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +188 -0
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-long-write/references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-long-write/references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-long-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-long-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +326 -0
- package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +354 -0
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +711 -0
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +622 -0
- package/lib/oh-story/skills/story-long-write/references/quality-checklist.md +184 -0
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +109 -0
- package/lib/oh-story/skills/story-long-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +108 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +347 -0
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +140 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +284 -0
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-review/SKILL.md +483 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-review/references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-review/references/quality-checklist.md +250 -0
- package/lib/oh-story/skills/story-review/references/quality-rubric.md +55 -0
- package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +18 -0
- package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +19 -0
- package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +20 -0
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +161 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +410 -0
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +1139 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +495 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +445 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +428 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +385 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +426 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +169 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-catalog.md +480 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-core-mechanics.md +415 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +91 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +235 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +457 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +287 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +389 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +522 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +247 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +409 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +510 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +421 -0
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +278 -0
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +582 -0
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-basics.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-design-methods.md +438 -0
- package/lib/oh-story/skills/story-short-analyze/references/character-relations.md +395 -0
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +79 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +490 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +425 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-readers.md +245 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +453 -0
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-techniques.md +475 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-analyze/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +685 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +561 -0
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +242 -0
- package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +54 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +212 -0
- package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +90 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +433 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +147 -0
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +62 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +282 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +179 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +156 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +178 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +166 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +159 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +151 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +153 -0
- 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 +210 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +444 -0
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +488 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +225 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +146 -0
- package/lib/oh-story/skills/story-short-write/references/hooks-suspense.md +352 -0
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +165 -0
- package/lib/oh-story/skills/story-short-write/references/quality-checklist.md +222 -0
- package/lib/oh-story/skills/story-short-write/references/reversal-toolkit.md +349 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +185 -0
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +133 -0
- package/lib/oh-story/skills/story-short-write/references/short-format.md +167 -0
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +35 -0
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +158 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +153 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +1371 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +330 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +241 -0
- package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +410 -0
- package/lib/types/client/file-activity.d.ts +30 -0
- package/lib/types/client/file-activity.d.ts.map +1 -0
- package/lib/types/client/file-tree.d.ts +20 -0
- package/lib/types/client/file-tree.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +12 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/jsonl-preview.d.ts +15 -0
- package/lib/types/client/jsonl-preview.d.ts.map +1 -0
- package/lib/types/client/markdown-preview.d.ts +38 -0
- package/lib/types/client/markdown-preview.d.ts.map +1 -0
- package/lib/types/index.d.ts +25 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/native-hooks.d.ts +16 -0
- package/lib/types/native-hooks.d.ts.map +1 -0
- package/lib/types/role-provider.d.ts +6 -0
- package/lib/types/role-provider.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts +10 -0
- package/lib/types/role-tool.d.ts.map +1 -0
- package/lib/types/skill-provider.d.ts +15 -0
- package/lib/types/skill-provider.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +13 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -0
- package/lib/types/workspace-route.d.ts +10 -0
- package/lib/types/workspace-route.d.ts.map +1 -0
- package/lib/types/workspace-security.d.ts +9 -0
- package/lib/types/workspace-security.d.ts.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# workflow-chapter.md:单章正文工作流(Phase 4-5)
|
|
2
|
+
|
|
3
|
+
本文件是「写一章正文」的完整流程。SKILL.md 路由到 Phase 4 后按本文件执行;日更批量由 `workflow-daily.md` 控制批次与追踪事务,每章正文仍走本文件。
|
|
4
|
+
|
|
5
|
+
项目文件结构、产物映射表、缺失文件处理、对标分析权威优先级在 `SKILL.md` Phase 4 开头,本文件不重复(SKILL.md 恒在上下文里)。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 单章写作流程
|
|
10
|
+
|
|
11
|
+
当用户准备写某一章时:
|
|
12
|
+
|
|
13
|
+
1. **检查细纲**:读取 `大纲/细纲_第{N}章.md`,并从对应 `大纲/卷纲_第X卷.md` 读取当前剧情单元(单元ID/位置、卷契约、本卷主推线/战果、终局底牌边界、风险等级)。如果不存在或缺少当前章节蓝图的必需字段,**必须先补建细纲再写正文**,不允许跳过细纲直接写作。补建时参考卷纲中本章对应的事件规划和上下文,补齐阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从已有证据判断的字段写 `[待补充]`,不杜撰副线或关系。
|
|
14
|
+
2. **读取上下文**(按需选择;缺失时遵循各项及SKILL.md Phase 4 的「缺失文件处理」,仅明确标为可选的非主产物跳过。可选快捷路径:如果项目已部署 story-explorer agent(优先检查 `.claude/agents/story-explorer.md` 是否存在;不存在时再检查 `.opencode/agents/`,再不存在时检查 `.codex/agents/`),可 spawn `Agent(subagent_type: "story-explorer", prompt: "项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={check 的值},state_revision={check 的值}")` 一次获取上下文):
|
|
15
|
+
- (1) `正文/第{N-1}章_*.md` — 上一章正文
|
|
16
|
+
- (2) `大纲/细纲_第{N}章.md` — 本章细纲(含钩子设计)
|
|
17
|
+
- (2a) `大纲/卷纲_第X卷.md` — 当前剧情单元、卷契约与终局储备(主推线/战果、终局底牌边界)
|
|
18
|
+
- (3) `tracking_commit.py check` + `追踪/上下文.md` — `check` 无 ERROR 输出即通过,从它的紧凑 JSON 取 `last_committed_chapter` / `state_revision`,不把完整 state 加入 prompt;待回收伏笔取 `## 活跃伏笔`,角色当前状态取 `## 核心角色状态`,下一章硬承诺取 `## 下一章承诺`
|
|
19
|
+
- (4) `设定/角色/{相关角色}.md`、`设定/势力/{相关势力}.md`(如存在)— 本章涉及的角色与势力(按细纲出场筛选)
|
|
20
|
+
- (5) 对标书路径下 `拆文报告.md`(按对标书路径查找)— 对标参考
|
|
21
|
+
- (6) `对标/{对标书名}/原文/第{N}章_*.md`(如存在)— 同位置章节参考
|
|
22
|
+
- (7) `参考资料/{topic}.md`(如存在)— 历史研究资料(由 story-researcher 产出)
|
|
23
|
+
- (8) 对标书路径下 `剧情/故事线.md`(按对标书路径查找)— 剧情单元索引,用于确定本章涉及哪些剧情单元
|
|
24
|
+
- (9) 对标书路径下 `剧情/{相关剧情单元}.md`(按对标书路径查找)— 从索引中选择与本章相关的剧情单元文件
|
|
25
|
+
- (10) 对标书路径下 `设定/世界观/*.md`(glob,按对标书路径查找)— 从当前拆文产出的主题化设定中获取参考;目录缺失则记录缺口并跳过本项,不读取扁平历史路径
|
|
26
|
+
- (11) 对标书路径下 `剧情/情绪模块.md`(按对标书路径查找)— 读者需求 / 情绪引擎、爽文套路框架、可复现模块;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
|
|
27
|
+
- (12) 对标书路径下 `剧情/节奏.md`(按对标书路径查找)— 关键信息推进、情绪触动点、爆发节奏;缺失按SKILL.md Phase 4 的「缺失文件处理」设置 `missing_primary_contract` 并停止准备
|
|
28
|
+
- (13) `设定/题材正文提示卡.md`(如存在)— 本书正文层题材卡;缺失时从 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引 + `references/genre-prose-cards/` 单题材卡目录(按题材分类优先)+ `references/style-genre-modules.md`(兜底)即时生成 `genre_prose_card`,不阻塞写作
|
|
29
|
+
3. **写前准备**(下面的 3 步是核心方法在单章写作中的落地:筛选状态 → 召回模块 → 确认意图):
|
|
30
|
+
- **状态筛选**:从 `追踪/上下文.md` 的 `## 核心角色状态` 取当前角色,从 `## 活跃伏笔` 取需回收/推进项,从 `## 下一章承诺` 取本章必须履行项,输出本节速记(参考 state-tracking.md)。久别角色按名读取 `追踪/角色状态/{名}.md`;只有追查变化原因时才定点查逐章增量。续写状态卡或 meta 不存在时按 workflow-daily 的当前协议处理,不手写替代文件
|
|
31
|
+
- **模块召回、题材卡与文风召回**:
|
|
32
|
+
- ① 本章目标情绪词?② 借鉴哪个参考文件的哪个技法?③ 用在哪些段落?答不出 → 先回读参考再动笔
|
|
33
|
+
- (a) **情绪模块召回**:按「对标书路径查找」规则读 `{对标书路径}/剧情/情绪模块.md`,选出 1 个与本章目标情绪最贴近的 `selected_emotion_module`(读者需求、触发器、戏剧单元、可替换要素、反抄袭提醒)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
|
|
34
|
+
- (b) **节奏召回**:读 `{对标书路径}/剧情/节奏.md`,选出 1 条 `rhythm_reference`(关键信息 → 扩写技法 → 情绪触动点 → 爆发/冷却)。缺失时设置 `missing_primary_contract: true`,返回明确 `repair_action` 后停止准备
|
|
35
|
+
- (c) **题材正文提示卡召回**:优先读 `设定/题材正文提示卡.md`;缺失则先读 `设定/题材定位.md` + `references/genre-prose-cards.md` 索引,按主题材精确匹配后只读取 `references/genre-prose-cards/` 中对应单题材卡(如 都市脑洞 / 豪门总裁 / 年代 / 双男主;低置信卡必须在意图确认标注低置信,并要求同题材对标校准),无命中再读 `references/style-genre-modules.md` 通用流派模块。跨题材时主题材抽 3-5 条、辅题材抽 1-2 条,生成短 `genre_prose_card`(题材边界、核心逻辑、读者期待、核心爽点/情绪、正文落点、前中后期打法、节奏密度、场景颗粒、禁止漂移、本章取舍、卡片置信度)。题材卡只约束正文层题材味,不改细纲剧情、不覆盖 `selected_emotion_module` / `rhythm_reference` / `设定/文风.md`;只在内部校准取舍,正文里不得出现卡名/标签/置信度/条目/合规自评
|
|
36
|
+
- (d) **文风召回**:先直接读 `设定/文风.md`(不经 explorer):含实质内容(去空白 ≥200 字,或含 句长 / 标点 / 对话 / 锚点 / 笔调 小节且小节内有可执行约束:比例 / 例句 / 禁止或偏好描述)则置 `custom_style=true`、进入「自定义文风模式」,它作权威风格基(句长 / 软标点 / 潜台词 / 情绪交替),对标 / 拆文 `文风.md` 降为参考(锚点 + 句长兜底);空 / 仅空白 / 仅标题 / 占位 stub(待办 / 待补充 / ___)视为不存在。否则按「对标书路径查找」规则读 `{对标书路径}/文风.md`(路径优先 `{项目}/对标/{书名}/`,回退 `拆文库/{书名}/`);多本对标书时从 `设定/题材定位.md` 读 `主对标书` 字段。**未进入自定义文风模式且**文风文件不存在 → **fail-fast 报错**:「对标书 X 缺少 文风.md。请用 `/story-long-analyze` 跑 Stage 6 生成文风,再 `/story-import` 同步。」不 inline 生成(自定义文风模式则不 fail-fast;情绪 / 节奏轴 `missing_primary_contract` 仍独立阻塞)
|
|
37
|
+
- (e) **匹配章节挑选**:从 `{对标书路径}/章节/*_摘要.md` grep `基调:(紧张|轻松|悲伤|热血|爽|甜|温馨|恐怖|压抑|其他)`(全角冒号),按本章目标情绪挑章 K——多章同基调时选择规则:先看爽点类型是否接近,再看情节点数量/原文章节估算字数是否接近本章目标字数,最后取章节号最小者;必读 `{对标书路径}/章节/第K章_摘要.md`,若同章存在 `第K章_深度拆解.md` 则加读,否则回退黄金三章深度拆解/文风文件里的可借鉴技巧,不因非黄金三章缺少深度拆解而失败
|
|
38
|
+
- (f) **结构化模块召回**:从对标的结构化子目录(角色/剧情/设定)中按本章情节检索相关模块;若与 `剧情/情绪模块.md` / `剧情/节奏.md` 冲突,权威文件优先,记录 `conflict`
|
|
39
|
+
- (g) 输出"主对标召回摘要 + 副对标召回摘要 + selected_emotion_module + rhythm_reference + genre_prose_card + 文风召回指令 + 原文锚点片段引用",作为 narrative-writer 的输入。**多对标书时**参 `references/cross-book-recall.md`:主对标提供文风、原文锚点与 selected_emotion_module / rhythm_reference;副对标/参考对标按阶段预算提供结构化摘要,不限制登记书目,不读取副书 `文风.md` / 原文,超过预算时裁条目不裁书目记录。
|
|
40
|
+
- **快捷路径**:项目已部署 story-explorer agent 时,可一次性召回文风/模块材料。
|
|
41
|
+
- 检查顺序:`.claude/agents/story-explorer.md` → `.opencode/agents/` → `.codex/agents/`。
|
|
42
|
+
- 查询类型:`benchmark_style_load`;传入项目目录、章节号、目标基调/字数和爽点类型。
|
|
43
|
+
- 需要返回:`style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、来源路径、匹配章节、锚点片段、`gaps`。
|
|
44
|
+
- `gaps.missing_primary_contract` 为 true 时先按 `repair_action` 修复,不进入正文生成。
|
|
45
|
+
- 主会话另行直接读 `设定/文风.md`:含实质内容时作为本书风格基准;但不豁免情绪/节奏缺失。
|
|
46
|
+
- **指令确认**:综合细纲、本节速记和模块召回结果,用一句话写清本章意图。
|
|
47
|
+
- 新版细纲必须消费:阶段位置、单元ID/位置、主角目标/关键选择、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾钩子,并对照当前剧情单元的卷契约、本卷主推线/战果、终局底牌边界。
|
|
48
|
+
- **细纲优先边界**:正文只能展开本章细纲已有事件、人物、冲突、伏笔和结尾钩子;不得为了凑字或"更精彩"自造新主线、新角色、新反转、提前写后续章剧情,必要的过渡动作只能服务于细纲已列情节点。后续阶段真相、底牌、关系结论和终局矛盾不得因为章尾钩子提前泄露。反过来,细纲是"要发生什么"的契约、不是正文的形状:正文可自由编排叙述顺序、合并/穿插情节点,不必一个情节点一段、也不必按五段式顺写,把每个点演成场景而不是照抄概括语(见 writing-craft.md「从细纲到正文」)。
|
|
49
|
+
- **细纲语义去重**:同一要求在核心事件、五段式、情节安排和情节点中重复,只算一个语义点;生成前合并,不把重复次数当强调,不沿用提纲原句逐项复述。比如多处都写“不带摄像机、先听完再决定拍不拍”,正文只通过一个自然动作或一句人物判断兑现,不能拆成「至于拍不拍,怎么拍…」「不带摄像机,不带采访灯」两轮说明。
|
|
50
|
+
- 爽点出手前要有可指认的危机/期待铺垫;装逼/打脸/揭露章要写在场配角的差异反应。
|
|
51
|
+
- 高压/生死/悲痛节拍 要收紧对话声线:搞笑担当让位,信息型角色不当科普嘴,对话逐句承接对方情绪。
|
|
52
|
+
- 检查任务卡点:本章如果有“办事被卡住”,它必须卡出信息、关系、代价、选择或伏笔变化;没有就不强补。
|
|
53
|
+
- 契约风险检查:按 `references/reader-contract-and-progression.md` 判定 契约安全 / 需补强 / 契约破坏;若高光/收益被配角、机构或偶然性拿走且没有可见交换,先修纲再写。
|
|
54
|
+
- 例:「快节奏打脸——账单暴露→逼问→反证→公开代价;读者等了三章,这章必须一拳到位。」
|
|
55
|
+
4. **资料研究**(按需):如果写作中遇到需要查证的外部事实(历史年代、地理方位、职业细节等),如果项目已部署 story-researcher agent(优先检查 `.claude/agents/` 下的 `story-researcher.md` 是否存在;不存在时再检查 `.opencode/agents/`,再不存在时检查 `.codex/agents/`),spawn `story-researcher` agent 搜索并输出到 `参考资料/` 目录。如 agent 不可用,由主线程直接执行。研究完成后再继续写作。
|
|
56
|
+
5. **标题预检**:写正文前从细纲读取章名;如与既有章节同名或明显重复,先按本章核心事件改名,并同步细纲标题与正文文件名。
|
|
57
|
+
6. **写作**:第 1 章如果以内心戏、设定认知或独处开场,必须先把内心变化外化为可见事件(决定、误判、对话、物件变化、外部压力),再按字数目标展开;不得用大段心理独白凑字。若第 1 章低于目标,或正文代入感/推进感偏薄,优先回到细纲补有用子事件、对话交锋或选择代价,不要补解释性内心戏;任务卡点只在角色本来有要办的事、且能卡出信息/关系/代价/选择/伏笔变化时使用,没有就不强补。
|
|
58
|
+
- **正文元信息隔离**:`章节:第{N}章`、`上一章:正文/第{N-1}章_*.md`、`匹配第K章`、`细纲文件` 等只用于定位材料。标题行以外的正文不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词。需要承接前文时,改成角色能感知的事件锚点或相对时间,例如“比第一章那三秒开火更疼”必须写成“比那三秒开火更疼”。例外:角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时,可保留相应词。
|
|
59
|
+
7. **正文执行**:
|
|
60
|
+
- 先检查 narrative-writer agent:`.claude/agents/narrative-writer.md` → `.opencode/agents/` → `.codex/agents/`。
|
|
61
|
+
- 如可用,spawn `Agent(subagent_type: "narrative-writer", prompt: ...)`,prompt 只传本章必需材料:
|
|
62
|
+
- 项目目录、章节、细纲文件、上一章、输出路径。
|
|
63
|
+
- 写前准备输出:本节速记、情绪目标、涉及角色、参考技法。
|
|
64
|
+
- 主对标/拆文路径、主/副对标召回摘要。
|
|
65
|
+
- `selected_emotion_module`、`rhythm_reference` 及来源路径。
|
|
66
|
+
- `genre_prose_card`(题材正文提示卡摘要,只含本章相关条目)。
|
|
67
|
+
- 文风路径、文风召回指令、原文锚点片段。
|
|
68
|
+
- 阶段位置、本章结构公式、本章可释放信息、本章禁止提前释放信息。
|
|
69
|
+
- 字数目标、情节点预算、格式硬约束。
|
|
70
|
+
- 细纲优先边界(内容层):只展开本章细纲,不自造新剧情;每条情节点都要独立落地,不许漏、不许两条并一句;若字数目标靠现有情节点无法达标,返回 `outline_underfilled` 欠账点,由主会话补纲/确认后再写。
|
|
71
|
+
- 正文形状(形状层):落地位置、顺序、拆成几处由子代理编排,可打散重排、把相邻几条缝进同一个连续动作;不要一条一段平推,不把细纲措辞原样搬进叙述。
|
|
72
|
+
- 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
|
|
73
|
+
- agent 输出写入 `正文/第XXX章_章名.md`。如 agent 未部署,由主线程直接写作。
|
|
74
|
+
8. **字数验证**(写作完成后的第一件事):用跨平台 Python 字符统计本章实际字数,探测顺序 `python3/python/py`;不要用 `wc -c` 或模型估算,Windows 不直接假定 `python3` 命令可用。macOS/Linux 可用 `wc -m` 备选。
|
|
75
|
+
- 字数 < 细纲目标 90%:对照情节点预算找欠账点。密点(爽点/打脸/反转)被写薄时,重写到对应预算;低压/关系/信息整理章则补细纲内已有铺垫、互动或表演节拍,不硬塞爽点。若现有细纲没有足够可展开内容,停止并输出 `outline_underfilled` 欠账点,先补纲/确认,不能让正文自造新剧情。
|
|
76
|
+
- 字数 > 章目标×1.1:压过场、合并疏点、删多余过渡,不删主线爽点凑数。
|
|
77
|
+
- 90% 只是放行下限,目标仍是 `[章目标, 章目标×1.1]`;重写后重新统计,落进区间再进入步骤 9。
|
|
78
|
+
9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→修复):① 爽点出手前是否有可指认的危机/期待段落(指到具体情节点)?指不出=空洞 → 回步骤 8 补铺垫情节点(plot-emotion-system 倒推法);② 装逼/打脸/揭露章,在场配角是否写出差异化反应(集体震惊/各异),还是只写主角动作?没有 → 补在场配角反应(plot-core-methods)
|
|
79
|
+
10. **元信息扫描**:检查标题行以外的正文,命中 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 时必须改写为场景内表达;只有角色在故事世界内真实阅读/讨论“第X章”文本,或真实身为作者/读者并谈论读者身份时例外。
|
|
80
|
+
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` 定性裁定
|
|
81
|
+
12. **更新追踪**:按 workflow-daily「每章提交一次追踪事务」构造 JSON,执行 `scripts/tracking_commit.py commit`。工具先在内存完成全部合并/渲染/容量校验,再生成逐章记录、角色/伏笔/时间线/上下文派生视图,最后原子替换 `_tracking-state.json`。失败按类型处理:**写入失败**(工具不可用、权限被拒、磁盘满)时 `_tracking-state.json` 未推进,保留原事务 JSON 直接重跑同一 `commit`;**校验失败**要按报错改事务本身再提交,重跑同一份结果不变;**派生视图被手改**导致 `check` 报不一致时,重新提交该章的 `mode=revision` 事务让工具整份重建(`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON)。任何情况都不手改派生文件。本章首次引入会复用的具名角色/势力时,仍按 `references/workflow-setup.md` 的 Phase 3 规则补建静态 `设定/` 档案。
|
|
82
|
+
13. **中途快照**(长篇写作安全网):每连续写完 3 章,在继续前执行以下快照操作:
|
|
83
|
+
- 执行 `scripts/tracking_commit.py check`,确认 `_tracking-state.json` 有效、逐章记录连续且未超限、所有派生视图一致、续写状态卡恰好 7 栏且 ≤12288 字节
|
|
84
|
+
- 用 `ls -la 正文/` 确认最近 3 个章节文件已成功写入磁盘且大小正常(>100 bytes)
|
|
85
|
+
- 如果发现文件缺失或大小异常,立即重新写入
|
|
86
|
+
- 快照完成后可继续写作
|
|
87
|
+
|
|
88
|
+
> **日更模式**:此步骤自动跳过——workflow-daily Step 2 已按章更新上下文.md。
|
|
89
|
+
|
|
90
|
+
## 写作技巧提醒
|
|
91
|
+
|
|
92
|
+
| 场景 | 技巧 |
|
|
93
|
+
|------|------|
|
|
94
|
+
| 开篇 500 字 | 必须有钩子,不能从天气/风景开始(除非反差极大) |
|
|
95
|
+
| 对话 | 推进剧情或揭示性格,不能只为了凑字数 |
|
|
96
|
+
| 打斗 | 不要流水账,写策略和反转,不写「你一拳我一脚」 |
|
|
97
|
+
| 日常 | 日常要有人物互动和伏笔,不能只是「吃饭睡觉」 |
|
|
98
|
+
| 任务卡点 | 角色办事被卡住,必须卡出信息/关系/代价/选择/伏笔变化;删掉无损就压缩或删除 |
|
|
99
|
+
| 爽点释放 | 铺垫要充分、释放要干脆,读者等得越久释放越要爽 |
|
|
100
|
+
| 爽点密度 | 高压/推进章每 3000-5000 字一个「爽」的情绪节点;低压/关系/修炼/信息整理章不强求,但每章仍要有往下看的理由(见 references/outline-structure-theory.md「章节定位与张弛」) |
|
|
101
|
+
| 公式约束 | 参考 genre-writing-formulas.md 中的创作公式 |
|
|
102
|
+
| 章尾 | 每章结尾都要有让读者想翻下一页的东西 |
|
|
103
|
+
| 情绪验证 | 写完每章回头检查:读者到这里应该感受到什么?感受到了吗?没感受到 → 按章节定位补:高压/推进章补冲突或钩子,低压/关系章补关系或情绪质感,别一律加爽点 |
|
|
104
|
+
|
|
105
|
+
## 字数验收权威
|
|
106
|
+
|
|
107
|
+
长篇每章只按本章细纲的 `字数目标` 与步骤 8 的统一 90% 放行下限验收。节奏类型只决定情节点疏密和展开方式,不再叠加另一套静态最低字数。
|
|
108
|
+
|
|
109
|
+
**细纲缺 `字数目标` 时**:按 3000 字/章代入,走同一条 90% 放行下限,并提示补纲。这是唯一兜底值,不按节奏类型分档。
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 质量检查
|
|
114
|
+
|
|
115
|
+
检查三个维度:(1) **情绪交付**——每章是否交付了细纲中规划的目标情绪?(2) **契约风险**——按 `references/reader-contract-and-progression.md` 检查因果权 + 结算权、关键节点四问、期待所有权、期待债、终局储备(透支两问)与换书债;章级推进按权威文件的七类状态分档(快节奏保留可见事件/爽点下限),强弱相对本书题材与对标判断,标记 契约安全 / 需补强 / 契约破坏;契约破坏 先修正文或修后续纲。(3) **技术质量**——一致性、格式、禁用词。参考 [references/quality-checklist.md](quality-checklist.md) 中的通用检查和长篇专项清单。
|
|
116
|
+
|
|
117
|
+
**正文元信息扫描**:按上方步骤 10 清掉标题行以外的写作工程词,再进入其他检查。`check-degeneration.js` 会确定性复扫这一项。
|
|
118
|
+
|
|
119
|
+
**写后同轮清零**:正文落盘不是汇报时机——每章落盘后必须在**同一轮**内跑完上方步骤 10-11 扫描、下方确定性收尾脚本与 narrative-writer 审查,blocking 清零才算本章完成;不得先汇报"已写完"再等指示。写后 hook 会对落盘正文自动扫描确定性毒句式并把命中推回——那是兜底网不是替代,hook 报出的命中当轮清零。**唯一豁免**:用户显式说"本章不去味/跳过检查"——豁免时在该章标题行下加一行 `<!-- 去味:跳过 -->`(写后 hook 的毒句式推回与写下一章前的欠账拦截都认这个标记;其余网照常)。
|
|
120
|
+
|
|
121
|
+
**确定性收尾**:本批正文写完后,主会话对实际落盘文件运行 `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 不阻断台词就略过。
|
|
122
|
+
随后运行 `node scripts/normalize-punctuation.js 正文/第XXX章_*.md`(默认 `--quote-mode keep`)清理无功能省略号、破折号、双连字符和独立分隔线;盐言「」不受影响。narrative-writer agent 不运行这些脚本。
|
|
123
|
+
|
|
124
|
+
**退化防护**:正文落盘后运行 `node scripts/check-degeneration.js --check 正文/第XXX章_*.md`。blocking(复读、截断、拒绝语、tier1 工程词泄漏)只重写受影响章节,最多 2 次;仍失败就报告证据让用户定夺。
|
|
125
|
+
advisory 只提示可疑处,先看脚本给出的例外;故事内系统/界面用语、弹幕刷屏、重复台词等有功能则保留。
|
|
126
|
+
|
|
127
|
+
### Agent 调用:consistency-checker
|
|
128
|
+
|
|
129
|
+
质量检查阶段,如果项目已部署 consistency-checker agent(优先检查 `.claude/agents/consistency-checker.md` 是否存在;不存在时再检查 `.opencode/agents/`,再不存在时检查 `.codex/agents/`),spawn `Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{本次写作的章节}\n检查类型:事实冲突+伏笔断线+角色属性不一致")` 执行一致性检查,获取 S1-S4 分级报告。如 agent 不可用,由主线程参照 quality-checklist.md 直接检查。
|
|
130
|
+
|
|
131
|
+
### Agent 调用:narrative-writer(去AI味审查)
|
|
132
|
+
|
|
133
|
+
质量检查阶段,如果项目已部署 narrative-writer agent(优先检查 `.claude/agents/` 下的 `narrative-writer.md` 是否存在;不存在时再检查 `.opencode/agents/`,再不存在时检查 `.codex/agents/`),可 spawn `Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:审查+去AI味\n检查范围:{本次写作的章节}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n检查项按你自己的 7 Gate、禁止事项与写完后对话自检全量执行,其中否定翻转句式和台词里的工整否定清单不因脚本豁免台词而跳过")` 执行文字质量审查和去AI味检查。如 agent 不可用,由主线程直接执行,检查项对照 `references/anti-ai-writing.md` 与 `references/banned-words.md`。
|
|
134
|
+
|
|
135
|
+
检查后若正文修订改变了连续性事实,必须构造 `mode=revision` 的同章追踪事务并执行 `scripts/tracking_commit.py commit`:
|
|
136
|
+
- 伏笔变化用 `foreshadow_changes` 更新同一 ID 的当前行,不追加重复历史;
|
|
137
|
+
- 时间线变化写入 `timeline_events`,由 `_tracking-state.json` 统一派生 `作者真相.md` 与 `读者已知.md`,不得把作者秘密泄露到读者视图;
|
|
138
|
+
- 核心角色状态变化同时提交该角色截至当前章的完整快照;
|
|
139
|
+
- 事务失败后保留原事务 JSON,修正写入环境并重跑同一 `commit`;成功后执行 `check`,确认 state 与全部派生视图一致再继续写作。
|
|
140
|
+
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# workflow-daily.md:日更续写工作流
|
|
2
|
+
|
|
3
|
+
本文件为"日更续写"场景的完整指引。SKILL.md 路由到本文件后,按以下流程执行。
|
|
4
|
+
|
|
5
|
+
> **日更准备步骤**:每章写作前 4 步——状态筛选 + 题材正文提示卡召回 + 文风召回 + 意图确认,嵌入 Step 2 逐章循环。
|
|
6
|
+
>
|
|
7
|
+
> 写前资料清单、对标书路径查找、题材正文提示卡、自定义文风模式、文风缺失 fail-fast、模块/节奏缺失停止、权威冲突规则、无对标项目处理,一律按 `SKILL.md` Phase 4 的「缺失文件处理」「对标分析权威优先级」和 workflow-chapter.md 写前准备 (a)-(g) 执行;本文件不另立一套。读者契约、主角代理权、期待债、终局储备参 `reader-contract-and-progression.md`。
|
|
8
|
+
>
|
|
9
|
+
> **多本对标书**:从 `设定/题材定位.md` 读 `主对标书` 字段;字段指向当前作品时按缺失处理(老项目可能把本书自身登记成了主对标)。缺失时用 `对标/` 下字典序第一本并提示用户补字段——先按当前项目目录名、`.active-book` 和 `设定/题材定位.md` 中的本书信息识别当前作品,排除同名或来源指向当前正文的 `对标/{当前书}/`;排除后为空则按无对标处理。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 适用条件
|
|
14
|
+
|
|
15
|
+
- 项目已有 `正文/` 和 `追踪/` 目录
|
|
16
|
+
- 用户明确说"日更""续写""继续写",或明确指定"写第 N-M 章"
|
|
17
|
+
- 目标:每次会话写 2-3 章(4000-9000 字)
|
|
18
|
+
|
|
19
|
+
> **裸调用不进日更**:如果用户只是触发 `/story-long-write` / `$story-long-write`,没有说"日更/续写/继续写/写第N章/只写1章/逐章确认",不得进入本 workflow。回到 `SKILL.md` 的"裸调用与停靠点",只展示当前进度与可选命令,避免重启会话后自动写 3 章。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 1:快速上下文加载
|
|
24
|
+
|
|
25
|
+
**可选:使用 story-explorer agent 批量加载上下文**。如果项目已部署 story-explorer agent(检查 `.claude/agents/story-explorer.md` 是否存在),可以用 `Agent(subagent_type: "story-explorer", prompt: "项目目录:{dir}\n查询类型:context_load\n查询参数:准备写第 {N} 章\n追踪状态:last_committed_chapter={上一步 check 的值},state_revision={上一步 check 的值}")` 执行 `context_load` 查询,一次获取全部写作上下文。spawn 返回后直接使用其 results,跳过下方手动加载步骤。如果 agent 不可用或返回不完整,回退到下方手动加载。
|
|
26
|
+
|
|
27
|
+
手动加载(默认方式):
|
|
28
|
+
|
|
29
|
+
| 序号 | 文件 | 用途 | 如果不存在 |
|
|
30
|
+
|------|------|------|-----------|
|
|
31
|
+
| 1 | `tracking_commit.py check` | 校验唯一结构化 state 与全部派生视图,并取得最后提交章和修订号;不把完整 state 加入 prompt | state 缺失且新书尚无正文时执行初始化;已有正文则停止并要求由 `story-import` 重新导入为标准项目 |
|
|
32
|
+
| 2 | `追踪/上下文.md` | 续写状态卡(≤12KB,固定 7 栏,每章整份读) | 不手写;由初始化/逐章事务生成 |
|
|
33
|
+
| 3 | `大纲/细纲_第{N}章.md` | 本章写作计划 | **必须先补建**,不允许跳过 |
|
|
34
|
+
| 4 | `大纲/卷纲_第X卷.md` | 卷契约、当前剧情单元、终局储备与未来揭示计划 | 缺必需字段时先补齐;锁定卷纲绝不自动修改 |
|
|
35
|
+
| 5 | `设定/角色/{角色名}.md` | 本章涉及角色的静态原始人设 | 只为核心复用角色按 Phase 3 规则补建 |
|
|
36
|
+
| 6 | `追踪/角色状态/{角色名}.md` | 久别核心角色的派生当前快照;只按细纲涉及角色加载 | 缺失即视为派生视图损坏:先运行 `tracking_commit.py check`,再重跑产生当前状态的完整事务;已有正文却无 state 时重新 `story-import` |
|
|
37
|
+
|
|
38
|
+
`追踪/伏笔.md`、`追踪/时间线/`、`追踪/逐章记录/` 默认不整份读取。续写状态卡没有某个旧信息时,才按「旧信息查找步骤」定点查询。
|
|
39
|
+
|
|
40
|
+
**按需加载创作公式**:当写作中需要引用创作公式约束时(如期待感公式、爽点公式、信息差公式),加载 `references/genre-writing-formulas.md`。默认不加载,避免无条件加载 1500+ 行文件浪费 token。
|
|
41
|
+
|
|
42
|
+
### 续写状态卡与追踪事务
|
|
43
|
+
|
|
44
|
+
`追踪/上下文.md` 不是历史档案,而是当前语义检查点中的续写状态卡;顶层只能有以下 7 个栏目:`当前位置 / 长期约束 / 核心角色状态 / 活跃伏笔 / 近三章速记 / 下一章承诺 / 连贯性风险`。目标 8192 字节,硬上限 12288 字节。文风每章从 `设定/文风.md` / 对标文风读取;质量计数、普通待办、文件行数索引、参照章使用记录、去 AI 味统计都不进入续写状态卡。
|
|
45
|
+
|
|
46
|
+
所有追踪文件的 schema、事务 JSON、初始化和失败修复统一见 [tracking-transaction.md](tracking-transaction.md)。每章只向工具提交一次结构化事务,由 `scripts/tracking_commit.py` 确定性生成逐章增量、角色快照、伏笔当前视图、作者/读者时间线和续写状态卡;主会话和子 agent 都不得分别直接改这些最终文件。
|
|
47
|
+
|
|
48
|
+
**首次初始化**:
|
|
49
|
+
|
|
50
|
+
1. `_tracking-state.json` 不存在且项目尚无正文:构造 `last_chapter=0` 的初始化事务,执行 `tracking_commit.py init`。
|
|
51
|
+
2. `_tracking-state.json` 不存在但项目已有正文:停止日更。该目录停在旧追踪结构上,走 `/story-import` 的「旧追踪项目迁移」重建 `追踪/`——**不用重跑全书拆解**,只按最后完整章号和现有追踪文件构造初始化事务。本 workflow 自己不解析旧追踪结构、不推测状态。`init` 会把旧结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除也不参与解析。
|
|
52
|
+
3. `tracking_commit.py check` 报告派生视图与 state 不一致:重新提交该章的 `mode=revision` 事务让工具整份重建(`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR,不输出 JSON);不得手改 Markdown 或继续写下一章。手写出的逐章记录会让同章 append 永久报 `chapter delta N already exists with different content`,删掉那个手写文件后重跑原事务即可。
|
|
53
|
+
|
|
54
|
+
**长期约束溢出**:工具最多接受 6 条。出现第 7 条时,在提交事务前先合并语义重叠项或请用户裁定取舍;不得自动删除旧约束,也不得把待办塞进派生视图。
|
|
55
|
+
|
|
56
|
+
**退役必须显式声明**:`context.long_term_constraints` 和 `context.continuity_risks` 每章整份提交,因此每次都要把仍然成立的条目原样带上。凡是上一版有、本次不再提交的条目,必须逐条写进 `delta.retired_context_items`;漏写会被工具在任何写入前拒绝,不会被当成删除。不再复用的核心角色同理写进 `delta.retired_characters`;角色本章阵亡/退场时照常写 `character_changes`,不必再交一份马上要删的快照。两类退役都只能在 `mode=append` 提交——修订事务的记录属于被改写的旧章,写在那里会谎报退役章节;回炉必须原样重交当前全部上下文条目。两类退役都会留档在本章逐章记录,事后可回查。
|
|
57
|
+
|
|
58
|
+
**与项目 rules 的关系**:永久生效的设定裁定进入事务 `context.long_term_constraints`;短期强承诺进入 `delta.next_chapter_commitments`;已完成或只影响本章的过程决策不进续写状态卡。
|
|
59
|
+
|
|
60
|
+
> **确定下一章编号 N 与状态修订号**:执行 `tracking_commit.py check`,从其紧凑 JSON 输出取 `last_committed_chapter + 1` 与 `state_revision`,同时核对 `上下文.md` 的当前位置。逐章事务必须把该修订号写进 `expected_state_revision`;若提交前状态已经变化,工具会在任何写入前拒绝旧事务,此时重新读取当前状态并重构。不要把会随历史增长的完整 state 读进 prompt;章号不一致时修复,不扫描正文猜测编号。
|
|
61
|
+
|
|
62
|
+
确定本轮写作范围后直接进入 Step 2,不做"是否继续"式确认。K 默认 2-3 章;用户明确说"只写1章"/"日更3章"/"逐章确认"时按用户要求调整。用户给出 N>3 时,本轮只写前 3 章并在 Step 4 进度摘要提示"剩余章节下轮继续"。仅在章节号冲突、细纲缺失、请求范围超过已有细纲、用户要求会改变大纲/追踪,或存在其他会导致写错的阻塞信息时暂停确认。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Step 2:串行批量写作
|
|
67
|
+
|
|
68
|
+
一次加载多章细纲,但**必须在主会话内串行逐章写作**:不得把多章同时交给多个子代理并发写。长篇章节依赖上一章正文和追踪文件,并发会导致上下文断裂、追踪覆盖和标题去重失效。
|
|
69
|
+
|
|
70
|
+
**批量 continuation 规则**:进入本 Step 后,"继续"/"续写"/"日更"只表示继续当前日更批量流程。不得把这些词解释为跳过「状态筛选」或「对标模块/节奏/题材卡/文风召回」的直接正文续写;也不得在每章之间重复询问是否继续,除非用户明确要求逐章确认或出现阻塞。到达本轮 K(最多 3 章)后必须进入 Step 3/4 收尾并停止,不能因为仍有后续细纲就继续写下一批。
|
|
71
|
+
|
|
72
|
+
1. **读取写作计划**:写作计划按 **卷契约 → 当前剧情单元 → 章节细纲** 的顺序确定;已写内容仍以正文与 `追踪/` 文件为准。先从 `大纲/卷纲_第X卷.md` 读取卷契约、当前剧情单元(单元ID/位置)、单元情绪引擎、本卷主推线/战果与终局底牌边界,再加载本次要写的 2-3 章细纲。卷纲或细纲缺少当前协议的必需字段时先补齐,未知字段写 `[待补充]`,不在内存临时推断一套替代结构;已锁定卷纲不得自动改动。细纲读取「阶段位置」「本章结构公式」「本章禁止提前释放」「内容概括(起因/发展/转折/高潮/结尾)」「情节安排(主线/辅线/事件线/感情线/逻辑线)」「人物关系和出场顺序」「情节细化」「结尾设定和钩子」及逐点字数预算。只有真正影响后续连续性的结果才进入本章事务,规划推理过程不落追踪。
|
|
73
|
+
- **批次定位与阶段约束**:写本批前先从 `大纲/大纲.md`、对应 `大纲/卷纲_第X卷.md` 和本批细纲提取:当前章节区间属于哪个阶段、本批推进目标、本批可释放的信息、本批严禁提前释放的信息、章尾钩子不能越过的边界。必须按终局储备确认本批主推线与战果,别动用本阶段还不该解锁的终局底牌(多线齐涨的战果允许);行动成本可无,不硬造代价。未来揭示计划留在大纲,不写入时间线事实;只有下一章必须消费的边界才进 `## 下一章承诺`。
|
|
74
|
+
- **阶段进度自检**:每批写完或补完细纲后检查是否超前、拖慢或偏离阶段节奏;若偏离,把下一章必须执行的补偿动作放入事务 `next_chapter_commitments`,跨多章风险放入 `continuity_risks`;不得通过提前泄露后期信息强行提速。
|
|
75
|
+
2. **逐章执行**:每章按 [workflow-chapter.md](workflow-chapter.md) 的「单章写作流程」步骤 1-13 完整走一遍(写前准备、正文执行、字数验证、钩子/爽点检查、元信息与禁用词扫描、追踪事务)。批量模式下再叠加下列日更专属动作:
|
|
76
|
+
- **上一章欠账检查**:写本章正文前,确认上一章正文无未清 blocking 毒句式欠账(写前 hook 会自动拦;hook 不可用时对上一章跑 `node scripts/check-ai-patterns.js --check --fail-on=blocking`);有欠账先清完再写本章,除非上一章标了 `<!-- 去味:跳过 -->`(用户显式豁免)
|
|
77
|
+
- **状态来源纪律**:不要为取状态/章号把完整 `_tracking-state.json` 加载进 prompt;缺失内容按下方「旧信息查找步骤」定点查询,不得用未标明来源的聊天记忆替代,也不得为了方便通读所有逐章记录。
|
|
78
|
+
- **久别角色交叉检查**:本章细纲列出的核心复用角色若不在 `## 核心角色状态`,直接读取小文件 `追踪/角色状态/{名}.md`;不存在即视为当前检查点损坏,运行 `tracking_commit.py check` 并通过完整事务修复,不能临时扫描增量后手写替代。`设定/角色/{名}.md` 只有静态原始人设,不能替代动态快照。角色重新活跃后,把名字放进本章事务 `context.active_character_names`,由工具更新续写状态卡。
|
|
79
|
+
- **story-explorer 召回的 gaps 分支**(用 `benchmark_style_load` query_type 一次拿到 `{style_profile_path, style_profile_summary, selected_emotion_module, rhythm_reference, module_source_path, rhythm_source_path, matched_chapter_K, matched_chapter_techniques, anchor_excerpts, gaps}` 后按此分流):
|
|
80
|
+
- 若 `gaps.no_benchmark: true` → `custom_style` 为真则进入「自定义文风模式」(用 `设定/文风.md` 写作;无对标可召回,情绪 / 节奏目标改从本书细纲「目标情绪」、卷纲、`设定/题材定位.md` 等内部材料取,`selected_emotion_module` / `rhythm_reference` 记为「无」,不声称从对标召回);否则跳过文风召回,在「意图确认」标记"无对标参考"
|
|
81
|
+
- 若 `gaps.missing_primary_contract: true` → 停止本章准备,按 `repair_action` 提示重跑 `/story-long-analyze` Stage 3+ 或重新 `/story-import`;不得进入 narrative-writer(情绪 / 节奏轴独立于文风轴,**自定义文风模式不豁免此停止**——补 `剧情/情绪模块.md` / `剧情/节奏.md`,而非写 `设定/文风.md`)
|
|
82
|
+
- 若 `gaps.conflict` 或 `gaps.module_rhythm_conflict: true` → 意图确认必须说明冲突并按 `剧情/情绪模块.md` / `剧情/节奏.md` 的权威优先级执行;不得让 `文风.md` 覆盖情绪/节奏目标
|
|
83
|
+
- 若 `gaps.profile_missing: true` → `custom_style` 为真则进入自定义文风模式继续;否则按上文 fail-fast 流程停止
|
|
84
|
+
- 若 `gaps.profile_degenerate: true`(对标文风不可用) → `custom_style` 为真则用 `设定/文风.md` 写作;否则跳过文风、回到默认 Gates 写作
|
|
85
|
+
- 若 `gaps.tone_match_failed: true` → 仅用整书文风写作,不喂 matched_chapter
|
|
86
|
+
- 否则原样传给 `style_profile_path`、`style_profile_summary`、`selected_emotion_module`、`rhythm_reference`、`module_source_path`、`rhythm_source_path`、`matched_chapter_K`、`matched_chapter_techniques`、`anchor_excerpts` 和 `genre_prose_card` 给 Step 2 末尾的 narrative-writer spawn prompt;其中 `selected_emotion_module` 必须进入情绪目标,`rhythm_reference` 必须进入节奏/爆发安排,`genre_prose_card` 必须进入题材取舍,`matched_chapter_techniques` 必须进入「文风召回指令」。写前准备记录必须保留 `gaps` 原值,尤其 `gaps.module_missing`、`gaps.rhythm_missing`、`gaps.conflict`、`gaps.matched_deep_dive_missing`;若 `matched_deep_dive_missing` 为 true,文风召回指令中明确写“同章深度拆解缺失,已回退黄金三章/文风技巧”,不得在后续报告中反转为 false
|
|
87
|
+
- **无 story-explorer 时直接执行**:主会话按 workflow-chapter.md 写前准备 (a)-(f) 手动依次召回情绪模块、节奏、题材卡、文风与匹配章 K;模块或节奏文件缺失时设置 `missing_primary_contract` 并停止修复
|
|
88
|
+
- **写后清零不拖到批末**:写后 hook 推回的毒句式命中当轮清零,不得攒到 Step 3。
|
|
89
|
+
- 每章写完后**立即提交一次追踪事务**:
|
|
90
|
+
1. 从刚落盘的正文、细纲和上一版续写状态卡提取 `result / character_changes / foreshadow_changes / timeline_events / constraints / next_chapter_commitments`。只记录会影响未来章节的变化;过程日志、质检计数、参照章和去 AI 味统计全部排除。
|
|
91
|
+
2. 需要长期复用的核心角色,把完整动态快照放进 `character_snapshots`,并在 `character_changes` 写对应变化;一次性路人只写变化、不交快照。已有动态快照的核心角色再次变化时必须提交新快照。静态人设继续以 `设定/角色/{名}.md` 为准。
|
|
92
|
+
3. `context.long_term_constraints`、当前卷/故事时间/场景、活跃核心角色名、连贯性风险提交当前完整值;活跃伏笔、近三章速记和下一章承诺由工具从当前视图/本章增量派生,不重复手填。
|
|
93
|
+
4. 把最近一次 `tracking_commit.py check` 返回的 `state_revision` 写入事务 `expected_state_revision`,再把 JSON 写到临时文件并执行 `tracking_commit.py commit`。成功并复检后删除临时 JSON;脚本返回新的 `state_revision` 才能进入下一章。
|
|
94
|
+
5. 失败时 `_tracking-state.json` 尚未推进;保留临时 JSON,修正写入环境后重跑同一 `commit`。不得另写下一章、不得手工补派生视图、不得忽略返回码。
|
|
95
|
+
|
|
96
|
+
`追踪/逐章记录/第NNN章.md` 由工具按 5 类变化生成,目标 ≤1536 字节、硬上限 3072 字节。它不是正文摘要大全,更不保存写作过程。`伏笔.md` 每个 ID 只有一行当前状态;角色状态按核心角色拆文件;时间线的客观事实和读者认知只在同一事件登记中维护,再派生作者/读者两个视图。
|
|
97
|
+
|
|
98
|
+
状态更新仍由主会话负责。narrative-writer 只写正文并回报必要的写作结果,不直接写 `追踪/`;主会话也不绕过事务工具直接修改最终追踪文件。
|
|
99
|
+
- **质检提示**(可选):本章写作完成。如需一致性检查,运行 `/story-review lean`。批量写作模式跳过此步骤,全部写完后再统一审查。
|
|
100
|
+
3. **不中断但不并发**:一章写完不问用户,直接写下一章(除非用户要求逐章确认);下一章必须读取上一章刚写入的正文和追踪更新后再开始。
|
|
101
|
+
|
|
102
|
+
**资料研究(按需)**:如果写作中遇到需要查证的外部事实(历史年代、地理方位、职业细节等),暂停写作,spawn `story-researcher` agent 搜索并输出到 `参考资料/` 目录。研究完成后再继续写作。
|
|
103
|
+
|
|
104
|
+
### 旧信息查找步骤
|
|
105
|
+
|
|
106
|
+
状态摘要里没有、但本章确实需要的旧信息(20 章前埋的伏笔、久别角色的当前状态、某个时间锚点),按以下顺序查找,**每一步的读取量都有上限**。不允许因为"查着方便"退化成读历史记录文件全文。
|
|
107
|
+
|
|
108
|
+
| 级别 | 手段 | 成本 |
|
|
109
|
+
|------|------|------|
|
|
110
|
+
| 1 | 续写状态卡已有 → 直接用 | 0 |
|
|
111
|
+
| 2 | 伏笔 ID 查 `grep -n "F007" 追踪/伏笔.md`;角色查 `追踪/角色状态/{名}.md`;读者认知查 `时间线/读者已知.md`,作者真相查 `时间线/作者真相.md` | 一个当前行或一个有界小文件 |
|
|
112
|
+
| 3 | 需要变化原因/历史时,调用 story-explorer 的 `foreshadow_status / character_status / timeline`;各 adapter 按自身 agent 调用方式,agent 不可用就直接 Grep/Read | 子代理/主会话只返回相关条目 |
|
|
113
|
+
| 4 | explorer 不可用 → `grep -R -n --include='第*.md' "F007" 追踪/逐章记录/ 2>/dev/null \| tail -5`,只取最近 5 条匹配增量 | 只读取匹配行 |
|
|
114
|
+
| 5 | 仍不够 → `Read` 对应增量或埋设章正文 | 1 个紧凑增量或单章正文 |
|
|
115
|
+
| 6 | 全量读取所有逐章增量/正文 | **日更禁止**。只在 `/story-review` 或用户明确要求全面审计时 |
|
|
116
|
+
|
|
117
|
+
**查询次数限制**:单章执行步骤 3 和步骤 4 合计超过 3 次,说明细纲没写清本章要消费哪些旧信息。这时一次性让 story-explorer 查询多项,并在批末口头提示细纲需补清回收项,不另写过程日志。
|
|
118
|
+
|
|
119
|
+
查询结果只有在本章结束后仍影响后续时才进入追踪事务;当前伏笔由 `foreshadow_changes` 更新,核心角色由快照更新,事实/认知由 `timeline_events` 更新。不要直接改续写状态卡某一行。
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Step 3:质量检查
|
|
124
|
+
|
|
125
|
+
每章的质量检查已在 Step 2 随 [workflow-chapter.md](workflow-chapter.md)「质量检查」节完成。批末只做下列**跨章**核对,不重复逐章项:
|
|
126
|
+
|
|
127
|
+
1. **标题去重检查**:汇总本轮新写章节与既有标题;发现同名或明显重复时,回到对应细纲和正文文件统一重命名
|
|
128
|
+
2. **契约与细纲双向核对**:先按 `reader-contract-and-progression.md` 检查读者契约、因果权 + 结算权、关键节点四问、期待所有权、期待债偿还、终局储备(透支两问);章级推进按权威文件七类状态分档(快节奏保留可见事件/爽点下限),相对本书题材与对标判断;高潮后允许短暂低压和小而可见的收益/奖励。新地图/机构/能力/敌人/谜团须检查换书债;履约爽文/能力幻想另查主角是否反复以可避免的无能制造灾难再由他人收拾。再核对正文是否消费了细纲的内容概括五段式、情节安排多线、人物关系变化/出场顺序、行动成本(可无)/收益归属;并加三条写作要求兑现核对(不达标→修复):① 爽点出手前是否有可指认的危机/期待铺垫段落?指不出=空洞 → 回 Step 2 补铺垫情节点(plot-emotion-system 倒推法);② 装逼/打脸/揭露章是否写出在场配角差异化反应(集体震惊/各异),还是只写主角动作?没有 → 补在场配角反应(plot-core-methods);③ 详略是否按目的词(爽点/卖点点展开、过渡点带过、信息密度交替),还是均匀注水?均匀 → 删过渡、扩爽点点。
|
|
129
|
+
3. **伏笔盘点(仅本轮增量)**:确认本批新增/推进/回收的每个 ID 在 `追踪/伏笔.md` 恰好有一行当前状态,并能在对应 `逐章记录/第NNN章.md` 找到本次变化;不得追加第二行历史,也不得在日更流程扫描全部正文做全量伏笔审计
|
|
130
|
+
|
|
131
|
+
批末再对本批全部落盘正文整体跑一遍 workflow-chapter.md「质量检查」的确定性收尾三脚本(`check-ai-patterns.js` → `normalize-punctuation.js` → `check-degeneration.js`),确认逐章清零后没有回潮。
|
|
132
|
+
|
|
133
|
+
> 若本步修文改变了会影响后续的事实、角色状态、伏笔、时间线或下一章承诺,必须在进入 Step 4 前为受影响章节提交 `mode=revision` 事务并通过 `check`;其中 `delta` 要重算修订后该章仍成立的完整当前记录,不能只传本次改动;纯措辞调整不重复提交。
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Step 4:批末收尾
|
|
138
|
+
|
|
139
|
+
**本步不再写任何追踪内容**——每章 Step 2 已完成事务。只做两项验证:
|
|
140
|
+
|
|
141
|
+
1. 对项目运行 `tracking_commit.py check`;验证 state schema、逐章记录连续/规范/未超限、续写状态卡固定 7 栏且不超过 12288 字节,以及全部派生视图与 state 一致。
|
|
142
|
+
2. 确认本批每章都有对应 `追踪/逐章记录/第NNN章.md`,每个文件 ≤3072 字节。缺失或超限时不手工补文件,回到该章事务修正并重跑 `commit`。
|
|
143
|
+
|
|
144
|
+
然后向用户口头汇报本批完成情况(章数、字数、漂移、下一批建议),不另存为文件。
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
> **漂移处理**:aligned = 按计划推进;adaptive = 细节适配但不改契约;structural 漂移 / 结构性漂移 = 正文已经改变卷契约、单元承诺、推进线或兑现归属,必须修正文或重规划未来章节细纲,不能只在增量里备注。下一章必须修的漂移进入 `next_chapter_commitments`,跨章风险进入 `continuity_risks`;两者都受续写状态卡上限约束,完整语义以紧凑增量和大纲为准。
|
|
149
|
+
|
|
150
|
+
## 细纲缺失补建流程
|
|
151
|
+
|
|
152
|
+
当检测到细纲不存在时,不能跳过。按以下步骤补建:
|
|
153
|
+
|
|
154
|
+
1. 加载 `大纲/卷纲_第{N}卷.md`(本章对应的事件规划),读取本章所属剧情单元卡;剧情单元卡含「对标剧情参照」时加读其指向的剧情单元文件(1 个),以其「结构分布」对应位置作本章功能参照;若本章起整个剧情单元均无细纲,按 outline-structure-theory.md「按剧情批出细纲」整批补建而非单章补。卷纲缺必需字段时先补齐,不绕过当前模板继续
|
|
155
|
+
2. 加载本章涉及的 `设定/角色/{角色名}.md`(角色状态)
|
|
156
|
+
3. 读取最新一章正文(情节衔接)
|
|
157
|
+
4. 按 SKILL.md Phase 3 的新版细纲模板补建本章细纲,补齐阶段位置、本章结构公式、本章禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定;无法从卷纲/正文/设定确认的字段写 `[待补充]`,不杜撰
|
|
158
|
+
5. 补建完成后继续 Step 2 写作
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 常见问题
|
|
163
|
+
|
|
164
|
+
| 问题 | 处理 |
|
|
165
|
+
|------|------|
|
|
166
|
+
| 细纲不存在 | 执行上方"细纲缺失补建流程" |
|
|
167
|
+
| 细纲缺当前蓝图字段 | 先按当前模板补齐,未知项写 `[待补充]`;未补齐前不写正文 |
|
|
168
|
+
| 追踪文件为空 | 正常继续,写作中逐步填充 |
|
|
169
|
+
| 用户要求改大纲 | 提醒"改大纲会影响后续细纲",确认后修改,标记受影响的细纲 |
|
|
170
|
+
| 写到卷末 | 提示用户"当前卷已完成,是否开新卷?" |
|
|
171
|
+
| 用户中断批量写作 | 保存当前章节,已更新追踪文件,下次从断点继续 |
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# workflow-revision.md:大修工作流
|
|
2
|
+
|
|
3
|
+
本文件为"大修/回炉"场景的完整指引。SKILL.md 路由到本文件后,按以下流程执行。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 适用条件
|
|
8
|
+
|
|
9
|
+
- 用户说"修改第X章""回炉第X章""重写第X章"
|
|
10
|
+
- 目标:修改已写好的章节内容
|
|
11
|
+
|
|
12
|
+
> 用户必须指定章节号或章节名。无法自动推断需要修改哪一章。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 1:定位章节
|
|
17
|
+
|
|
18
|
+
1. 根据"第X章"找到文件:`正文/第{X}章_*.md`
|
|
19
|
+
2. 如果用户说的是章节名而非编号,用 `find 正文/ -name "*{关键词}*"` 搜索
|
|
20
|
+
3. 找不到时让用户确认具体章节
|
|
21
|
+
4. 如果用户指定段落范围("第3-5段"/"那场打斗"/"对话部分"),记录为局部修改目标
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 2:加载上下文
|
|
26
|
+
|
|
27
|
+
加载比日常写作更多的上下文(因为修改需要理解前后衔接):
|
|
28
|
+
|
|
29
|
+
| 序号 | 文件 | 用途 | 如果不存在 |
|
|
30
|
+
|------|------|------|-----------|
|
|
31
|
+
| 1 | `正文/第{X}章_*.md` | 待修改章节 | 必须存在 |
|
|
32
|
+
| 2 | `大纲/细纲_第{X}章.md` | 原始写作计划 | 跳过 |
|
|
33
|
+
| 3 | `正文/第{X-1}章_*.md` | 前一章(衔接) | 第1章时加载 `设定/世界观/背景设定.md` 替代 |
|
|
34
|
+
| 4 | `正文/第{X+1}章_*.md` | 后一章(衔接) | 末章时检查 `大纲/细纲_第{X+1}章.md`(如有)确保连续性 |
|
|
35
|
+
| 5 | `tracking_commit.py check` + `追踪/上下文.md` | 用工具确认唯一 state 与派生视图一致;续写状态卡提供当前连续性,不把完整 state 加入 prompt | 缺 state 时停止;已有正文项目必须经 `story-import` 生成标准追踪状态 |
|
|
36
|
+
| 6 | `设定/角色/{相关角色}.md` + `追踪/角色状态/{相关角色}.md` | 静态人设 + 动态当前快照 | 动态快照缺失时从相关增量重算 |
|
|
37
|
+
|
|
38
|
+
**相关角色判定**:从 `大纲/细纲_第{X}章.md` 中提取角色名。如果细纲不存在,从待修改章节正文中搜索 `设定/角色/` 目录下的角色名关键词。将角色名映射为文件名:`设定/角色/{角色名}.md`。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 3:修改
|
|
43
|
+
|
|
44
|
+
1. **阅读原文**:读完整章内容,记录原始字数
|
|
45
|
+
2. **备份原文**:将原文复制为 `正文/第{X}章_章名_原稿_{YYYYMMDD}.md`,确保可回退
|
|
46
|
+
3. **确认修改范围**:问用户是"全文重写"还是"修改特定段落"
|
|
47
|
+
- 全文重写:基于细纲重新写,保留备份
|
|
48
|
+
- 局部修改:只改指定段落(按场景序号或关键词定位),保持其他部分不变
|
|
49
|
+
4. **执行修改**:改写文件
|
|
50
|
+
5. **字数对比**:修改后与原文字数差异 > 30% 或 > 800 字时提醒用户(取较大值)
|
|
51
|
+
|
|
52
|
+
**资料研究(按需)**:如果修改涉及需要验证的外部事实(历史年代、地理方位、职业细节等),spawn `story-researcher` agent 搜索验证。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Step 4:级联检查
|
|
57
|
+
|
|
58
|
+
修改完成后,用一次 `mode=revision` 追踪事务完成级联更新,协议见 [tracking-transaction.md](tracking-transaction.md):
|
|
59
|
+
|
|
60
|
+
1. **重算修订章增量**:对比旧正文/旧增量与新正文,只保留新版本对未来仍有效的 `result / 角色变化 / 伏笔变化 / 时间与揭示 / 约束 / 下一章承诺`。事务工具整份重写 `追踪/逐章记录/第{X}章.md`,不保留被新正文推翻的结论。
|
|
61
|
+
2. **伏笔当前值**:对受影响 ID 从第 X 章检查到最后已写章 M,提交修订后的**截至 M 章当前状态**。若修订删除了埋设,但后文仍引用该 ID,先列为正文冲突,不能简单删除;确定整条线不存在时才用 `action=delete`。`伏笔.md` 始终每 ID 一行,不追加修订历史。
|
|
62
|
+
3. **时间与读者认知**:为受影响事件提交客观事实、读者截至 M 章的当前认知、实际揭示状态/章节;删掉的事件用 `action=delete`。未来揭示计划仍留大纲。工具把事件合并进 `_tracking-state.json` 并重建作者/读者视图,禁止分别手改。
|
|
63
|
+
4. **角色当前快照**:对受影响核心角色从 X 检查到 M,按身份、位置、目标、能力资源、关系对象、已知信息、未结事项分别重算,提交一份截至 M 的完整快照;不得用最后一条单维度变化覆盖其它维度。
|
|
64
|
+
5. **导入截止范围**:若 X ≤ `_tracking-state.json.imported_through_chapter`,事务为第 X 章新增覆盖记录;导入截止章不变,当前结构化状态按修订结果更新。
|
|
65
|
+
6. **提交与重试**:把修订开始时 `tracking_commit.py check` 返回的 `state_revision` 写入 `expected_state_revision`,再执行 `tracking_commit.py commit`;若期间状态已变化,重新读取当前状态并重构事务。任一步骤失败时保留原事务 JSON,修正写入环境后重跑同一 `commit`;成功并通过 `check` 前禁止继续修下一章或写新章。
|
|
66
|
+
7. **后续影响**:如果修改改变了角色状态/关系/世界观设定,扫描后续章节正文标记受影响项:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
⚠️ 修改第{X}章后,以下章节可能需要同步调整:
|
|
70
|
+
- 第{X+1}章:{原因}(建议检查)
|
|
71
|
+
- 第{X+3}章:{原因}(建议检查)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
8. **正文元信息扫描**:检查标题行以外是否混入 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词,命中即改成角色当下可感知的事件锚点或相对时间;故事内真实阅读/讨论“第X章”或真实读者身份语境除外
|
|
75
|
+
9. **禁用词扫描**:对照 `references/banned-words.md` 检查修改后的内容,并运行 `tracking_commit.py check` 验证 state 与全部派生视图一致
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Step 5:质量检查
|
|
80
|
+
|
|
81
|
+
对修改后的章节执行 Phase 5 质量检查(至少包含):
|
|
82
|
+
|
|
83
|
+
1. **禁用词扫描**:如 Step 4 未覆盖全章,再次扫描
|
|
84
|
+
2. **正文元信息扫描**:同「级联检查」中的「正文元信息扫描」,确认覆盖全章。
|
|
85
|
+
3. **人物一致性**:修改后的角色行为是否与角色设定一致
|
|
86
|
+
4. **节奏检查**:修改是否破坏了章节节奏
|
|
87
|
+
|
|
88
|
+
> 完整检查清单见 [workflow-chapter.md 的「质量检查」节](workflow-chapter.md)。
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 常见问题
|
|
93
|
+
|
|
94
|
+
| 问题 | 处理 |
|
|
95
|
+
|------|------|
|
|
96
|
+
| 用户没说改哪里 | 问"你想改哪一章?哪方面?情节/节奏/对话/描写?" |
|
|
97
|
+
| 修改后字数暴增/暴减 | 提醒用户,由用户决定是否调整 |
|
|
98
|
+
| 连续改多章 | 逐章修改,每章独立执行 Step 2-5 |
|
|
99
|
+
| 改完发现后续不一致 | 列出受影响章节,由用户决定是否现在修改 |
|