{"id":"12b299ff-af90-4dd6-8b4d-934946979662","entityType":"agent","slug":"clawhub-worldwonderer-story-import","name":"story-import：逆向导入已有小说","canonicalUrl":"https://www.xpersona.co/agent/clawhub-worldwonderer-story-import","canonicalPath":"/agent/clawhub-worldwonderer-story-import","generatedAt":"2026-10-09T21:57:30.898Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":null},"description":"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。 Skill: story-import：逆向导入已有小说 Owner: worldwonderer Summary: 逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。 Tags: latest:1.0.26 Version history: v1.0.26 | 2026-10-03T05:14:53.413Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.0.2","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.7K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1748rsha25rh871z39a8xdg9n85tqyh:story-import","sourceUrl":"https://clawhub.ai/worldwonderer/story-import","homepage":"https://clawhub.ai/worldwonderer/skills/story-import","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/worldwonderer/story-import","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/worldwonderer/skills/story-import","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":69,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-imp"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":null},"stars":null,"forks":null,"downloads":2676,"packageName":null,"latestVersion":"1.0.26","tractionLabel":"2.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:15:19.875Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T12:15:19.910Z","lastCrawledAt":"2026-10-09T12:15:19.875Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T12:15:19.875Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.26","createdAt":"2026-10-03T05:14:53.413Z","changelog":"Authorized ZenStory cold-start distribution; immutable source and preserved notices.","fileCount":22,"zipByteSize":103612},{"version":"1.0.25","createdAt":"2026-09-27T06:36:18.022Z","changelog":"Synced from CI (v0.8.2)","fileCount":21,"zipByteSize":102885},{"version":"1.0.24","createdAt":"2026-09-26T11:55:54.204Z","changelog":"Synced from CI (v0.8.1)","fileCount":14,"zipByteSize":88950},{"version":"1.0.23","createdAt":"2026-09-26T02:43:35.148Z","changelog":"Synced from CI (v0.8.0)","fileCount":14,"zipByteSize":79675},{"version":"1.0.22","createdAt":"2026-09-24T16:46:11.343Z","changelog":"Synced from CI (v0.7.11)","fileCount":14,"zipByteSize":75638},{"version":"1.0.21","createdAt":"2026-09-09T09:25:44.453Z","changelog":"Synced from CI (v0.7.10)","fileCount":14,"zipByteSize":74258},{"version":"1.0.20","createdAt":"2026-08-30T15:07:45.517Z","changelog":"Synced from CI (v0.7.9)","fileCount":13,"zipByteSize":70432},{"version":"1.0.19","createdAt":"2026-08-28T14:00:49.000Z","changelog":"Synced from CI (v0.7.8)","fileCount":12,"zipByteSize":65994}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1748rsha25rh871z39a8xdg9n85tqyh:story-import","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T21:57:30.894Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-import/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":null},"readme":"Skill: story-import：逆向导入已有小说\n\nOwner: worldwonderer\n\nSummary: 逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\n\nTags: latest:1.0.26\n\nVersion history:\n\nv1.0.26 | 2026-10-03T05:14:53.413Z | user\n\nAuthorized ZenStory cold-start distribution; immutable source and preserved notices.\n\nv1.0.25 | 2026-09-27T06:36:18.022Z | user\n\nSynced from CI (v0.8.2)\n\nv1.0.24 | 2026-09-26T11:55:54.204Z | user\n\nSynced from CI (v0.8.1)\n\nv1.0.23 | 2026-09-26T02:43:35.148Z | user\n\nSynced from CI (v0.8.0)\n\nv1.0.22 | 2026-09-24T16:46:11.343Z | user\n\nSynced from CI (v0.7.11)\n\nv1.0.21 | 2026-09-09T09:25:44.453Z | user\n\nSynced from CI (v0.7.10)\n\nv1.0.20 | 2026-08-30T15:07:45.517Z | user\n\nSynced from CI (v0.7.9)\n\nv1.0.19 | 2026-08-28T14:00:49.000Z | user\n\nSynced from CI (v0.7.8)\n\nv1.0.18 | 2026-08-27T06:39:55.271Z | user\n\nSynced from CI (v0.7.7)\n\nv1.0.17 | 2026-08-13T14:02:19.059Z | user\n\nSynced from CI (v0.7.6)\n\nv1.0.16 | 2026-08-07T18:10:12.923Z | user\n\nSynced from CI (v0.7.5)\n\nv1.0.15 | 2026-08-07T01:45:59.042Z | user\n\nSynced from CI (v0.7.4)\n\nv1.0.14 | 2026-08-06T02:35:16.614Z | user\n\nSynced from CI (v0.7.3)\n\nv1.0.13 | 2026-07-28T14:51:05.360Z | user\n\nSynced from CI (v0.7.2)\n\nv1.0.12 | 2026-07-24T16:19:24.838Z | user\n\nSynced from CI (v0.7.1)\n\nv1.0.11 | 2026-07-16T16:36:43.337Z | user\n\nSynced from CI (v0.7.0)\n\nv1.0.10 | 2026-07-10T14:21:54.048Z | user\n\nSynced from CI (v0.6.22)\n\nv1.0.9 | 2026-06-29T02:18:47.635Z | user\n\nSynced from CI (v0.6.21)\n\nv1.0.8 | 2026-06-27T13:57:18.097Z | user\n\nSynced from CI (v0.6.19)\n\nv1.0.7 | 2026-06-24T16:22:55.811Z | user\n\nSynced from CI (v0.6.18)\n\nv1.0.6 | 2026-06-19T04:32:10.429Z | user\n\nSynced from CI (v0.6.17)\n\nv1.0.5 | 2026-06-14T01:17:53.131Z | user\n\nSynced from CI (v0.6.16)\n\nv1.0.4 | 2026-06-07T06:50:03.013Z | user\n\nSynced from CI (v0.6.15)\n\nv1.0.3 | 2026-05-30T06:33:36.838Z | user\n\nSynced from CI (v0.6.13)\n\nv1.0.2 | 2026-05-30T02:26:41.828Z | user\n\n管道术语统一；反向解析对齐最新拆解管道与目录结构\n\nv1.0.1 | 2026-05-27T16:24:12.731Z | user\n\nv0.6.10 — story-long-analyze 管道修正（情节点下限 10、Stage 0.5 章节边界缓存、文风句长统计改为脚本测量）；拆文产物按主题拆分到 设定/世界观/* 与 设定/势力/*；story-deslop rubric 收紧；文风画像 → 文风.md 命名统一；Stage 6 模板空白修正。\n\nv1.0.0 | 2026-05-12T15:36:54.692Z | auto\n\nstory-import 1.0.0\n\n- Initial release: Import existing (completed or in-progress) novel manuscripts into a standardized project directory structure, compatible with the story-long-write workflow.\n- Deep analysis: Reuses the story-long-analyze analysis pipeline for decomposing and structuring novel content.\n- Source flexibility: Supports import from single file, directory, or direct text paste, auto-detecting structure and book info.\n- Migrates chapters, characters, outlines, settings, and tracking files with automatic source attribution ([导入反推] tags), prompting for manual review.\n- Incremental import and chunking strategies for large works; progress tracking and recovery included.\n- Comprehensive activation and quality check steps ensure integrity of the imported project.\n\nArchive index:\n\nArchive v1.0.26: 22 files, 103612 bytes\n\nFiles: LICENSE (1081b), references/character-state-reverse.md (4333b), references/deep-analysis.md (5952b), references/format-and-structure.md (10617b), references/import-report.md (4041b), references/import-special-cases.md (3976b), references/import-tracking.md (7939b), references/length-routing.md (6385b), references/outline-reverse-rules.md (5796b), references/outline-reverse.md (2748b), references/state-tracking.md (2263b), references/structure-mapping-long.md (22485b), references/structure-mapping-short.md (10921b), references/tracking-initialization.md (1355b), references/tracking-transaction.md (15296b), scripts/build_outline_brief.py (16652b), scripts/check-outline-contract.js (24001b), scripts/tracking_commit.py (83785b), scripts/wordcount_core.py (18338b), skill-card.md (1628b), SKILL.md (12303b), _meta.json (132b)\n\nFile v1.0.26:SKILL.md\n\n---\nname: story-import\nversion: 1.0.0\ndescription: \"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。**交付物是写作工程**：把作者已有的书重建为可续写的工程（项目结构 + 拆文库分析资产），让作者能直接接着写。`拆文库/{导入书名}/` 是重建工程的数据源，保留不丢弃，但不是交付物本身；对作者以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n> Agent 兼容性：只检查当前运行时的 canonical 目录：Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`（`agent-name` 为目标 agent 名），不得因其他端文件存在而误判。Codex 使用同名 `agent_type`；Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时，必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`；OpenCode 用 `subagent` 工具的 `agent` 参数。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 并提示重新运行 `/story-setup` 后新开会话；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n先分析后迁移：深度分析复用现成管道（长篇 `/story-long-analyze`，短篇 `/story-short-analyze`），方法、模板与质量检查由 analyze skill 自带，本 skill 不另维护；再把分析结果迁移为项目结构。\n\n## 时刻表与交接\n\n导入是一串时刻，每个时刻只读自己的文件；后一时刻只靠落盘文件接上前一时刻，不靠对话记忆。\n\n| 时刻 | 作者确认什么 | 读什么 | 落盘 |\n|---|---|---|---|\n| Phase 1 确认来源与范围 | 书名、题材、平台、篇幅、残稿怎么处理、外部对标、先不先装环境 | 本文件 Phase 1；判篇幅读 [length-routing.md](references/length-routing.md) | 导入记录 |\n| Phase 2 深度分析 | 不打扰作者 | [deep-analysis.md](references/deep-analysis.md)，再照它进入拆书流程 | `拆文库/{导入书名}/` |\n| Phase 3 结构迁移 | 原文没分卷时，卷怎么分 | 长篇 [structure-mapping-long.md](references/structure-mapping-long.md)；短篇 [structure-mapping-short.md](references/structure-mapping-short.md) | 项目 `设定/`、`正文/`、`大纲/`（短篇为三个单文件） |\n| 逐批反推细纲（长篇） | 不打扰作者 | 本批任务包（见 [outline-reverse.md](references/outline-reverse.md)） | `大纲/细纲_第XXX章.md` |\n| Phase 4 追踪初始化（长篇） | 不打扰作者 | [import-tracking.md](references/import-tracking.md) | `追踪/` |\n| Phase 5 汇报与激活 | 请作者核对、拍板的事 | [import-report.md](references/import-report.md) | `.active-book` |\n\n**导入记录**：`{书目录}/.story/work/导入记录.md`（书目录：长篇 `{导入书名}/`，短篇 `{短篇标题}/`），Phase 1 建立，格式见下方 Step 5。每个时刻开头先读它，不回翻对话；时刻交付前把作者在对话里新定的事（决定、偏好、红线、否掉的方案）和进度写回它，再往下走。\n**换上下文**：深度分析、每批细纲、追踪初始化读的东西多。每个时刻交付后，汇报末尾加一句「下一步建议新开一个对话，说『继续导入』，会更专注」；作者要在本对话继续也照做。作者说「继续导入」时，在项目根下找进度没勾完的 `*/.story/work/导入记录.md`，从第一个未完成的进度接着做。\n**导入续写入口顺序**：用户只问流程时先答结论再收原文——推荐先 `/story-setup`，新开对话 `/story-import`，导完 `/story-long-write 日更`；也可直接导入，缺环境时 Step 4 给选择。导入过的书、旧版追踪的书、超过 200 章的书按 [import-special-cases.md](references/import-special-cases.md) 处理。\n\n---\n\n## Phase 1：确认来源与范围\n\n### Step 1：确认意图\n\n默认目标是可续写的写作工程。意图不明时主动问：「你是想把这本书做成可续写的写作工程（设定/大纲/正文/追踪，能接着写第 N+1 章），还是只要一份拆文库分析？」只要分析 → 直接用 `/story-long-analyze`（短篇 `/story-short-analyze`），到拆文库为止，不建导入记录、不做迁移。\n\n### Step 2：拿到原文\n\n问：「你要导入哪本书？请提供文件路径或直接贴文本。」单文件（.txt/.md）按章节分隔符自动切分；目录按文件名排序合并；直接贴的文本在 Step 5 书名定下后原样存成 `{书目录}/.story/work/导入原文.md`（换对话后对话里的文本就拿不到了）；都没有就请作者提供。本时刻只确认源文件就绪，原文备份到 `拆文库/{导入书名}/原文/` 由 Phase 2 的拆解管道负责，这里不另备份。\n\n### Step 3：基本信息确认\n\n1. 自动检测书名（如有）、总章数、总字数、章节格式。\n2. 请作者确认：导入书名、题材类型、目标平台（起点/番茄/晋江/其他）、是否完本（半成品写到第 N 章）、**篇幅**（长篇/短篇，按 length-routing.md 检测：用户显式声明 > 结构信号 > 字数兜底，向作者复述结果请其确认；决定 Phase 3 走 3-L 还是 3-S）、**最后一章是否完整**——残稿时告诉作者，请他决定「接着残章写」还是「先补完再导入」，本 skill 只记录决定，不替作者选。\n3. 外部对标（可选、与导入源分离）：作者已明确指定时记录 `{对标书名}`，并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物；不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。未指定时不追问，记为“未绑定”。\n4. 向作者展示检测到的章节范围、字数、篇幅、最后一章状态与“外部对标：{对标书名/未绑定}”，确认后往下走。\n\n### Step 4：写作环境检测\n\n先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁；旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。通过后在当前运行时的 canonical 目录检查 `chapter-extractor`（Claude/OpenCode/Antigravity 为同名 Markdown，Codex 为同名 TOML），顺带记下 `story-architect` 是否可用（逐批细纲用）。`.story-deployed` 的 `target_cli` 含 `zcode` 时项目 agents 缺失是预期状态：不提示重复部署，直接串行 solo/direct 并报告 fallback。\n\n部署标记缺失、版本无效/过期，或当前端 agent 不可用（且不是已部署 ZCode 项目）时这样问：\n\n> 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书，主对话不会被整本书塞满；不装也能导，只是全部在主对话里做，慢一些，结果一样完整。你想：1. 先装环境（推荐）：运行 `/story-setup`，装完再说\"导入\" 2. 直接导入，慢一点也行」\n\n选 1 → 先按 Step 5 把已确认的信息写进导入记录（写作环境记「待装」），暂停导入，装完新开对话说「继续导入」；选 2 → Phase 2 由主会话串行处理，产物完整。\n\n### Step 5：写导入记录\n\n确认完把结果写进 `{书目录}/.story/work/导入记录.md`（目录不存在就建；贴入的原文同时存到同目录），再进入 Phase 2：\n\n```markdown\n# 导入记录：《{导入书名}》\n- 原文：{源文件或目录路径；贴入文本写 .story/work/导入原文.md}\n- 篇幅：{长篇 | 短篇}（{判定依据一句}）\n- 范围：第 1–{N} 章，约 {Y} 万字；{完本 | 半成品}；首期深拆：{全书 | 第 1–50 章，其余用简化摘要（超过 200 章）}\n- 最后一章：{完整 | 残稿：第 {N+1} 章写了一半，作者决定{接着残章写 | 先补完再导入}}\n- 题材：{题材类型}；目标平台：{平台}\n- 外部对标：{对标书名 | 未绑定}\n- 写作环境：{已装，分析助手可用{，story-architect 可用} | 待装（继续时重新检测） | 未装，作者选直接导入（主会话串行） | ZCode 串行}\n- 卷划分：{待 Phase 3 | 按原文卷界 | 作者已确认：1–40 / 41–95 / …}\n- 作者交代：{偏好、红线、否掉的方案，逐条；没有写「无」}\n\n## 进度\n- [ ] 深度分析\n- [ ] 结构迁移（卷划分已确认、卷纲已写）\n- [ ] 细纲：已验收到第 {B} 章（长篇；续跑从第 {B+1} 章整批重做）\n- [ ] 追踪初始化（长篇，检查通过）\n- [ ] 汇报与激活\n```\n\n---\n\n## Phase 2：深度分析\n\n读 [deep-analysis.md](references/deep-analysis.md)，按导入记录的篇幅与写作环境进入对应拆解管道，自动跑完本次需要的范围，不把拆书中途的停靠询问甩给作者。完成后勾进度。\n\n## Phase 3：结构迁移\n\n长篇（3-L）按 [structure-mapping-long.md](references/structure-mapping-long.md) 的迁移步骤把 `拆文库/{导入书名}/` 迁成 `{导入书名}/` 工程；原文没有明确卷界时，卷划分必须等作者确认，确认结果写进导入记录。细纲最后一步按 [outline-reverse.md](references/outline-reverse.md) 分批反推。短篇（3-S）按 [structure-mapping-short.md](references/structure-mapping-short.md) 迁成 `{短篇标题}/` 的三个单文件，**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录，迁完直接到 Phase 5。\n\n## Phase 4：追踪初始化（仅长篇）\n\n读 [import-tracking.md](references/import-tracking.md)，用本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成 `追踪/`，`check` 通过后勾进度。\n\n## Phase 5：汇报与激活\n\n读 [import-report.md](references/import-report.md)：自检、按模板向作者汇报、设置 `.active-book`。\n\n---\n\n## 流程衔接\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 导入完想继续写 | story-long-write / story-short-write | `/story-long-write` + \"日更\" / `/story-short-write` |\n| 导入完想审查质量 | story-review | `/story-review` |\n| 想拆一本外部对标书 | story-long-analyze / story-short-analyze | `/story-long-analyze` / `/story-short-analyze` |\n| 从零开新书 | story-long-write / story-short-write | `/story-long-write` + \"开书\" / `/story-short-write` |\n| 项目未装写作环境 | story-setup | `/story-setup` |\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.0.26:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-import\",\n  \"version\": \"1.0.26\",\n  \"publishedAt\": 1791004493413\n}\n\nFile v1.0.26:references/character-state-reverse.md\n\n# 核心角色当前快照反推规则（长篇导入）\n\n> 仅用于 `story-import` 导入长篇。输出不是一份不断追加的角色历史，而是初始化事务里的 `character_snapshots`；`tracking_commit.py init` 会为每个核心角色生成 `追踪/角色状态/{角色名}.md`。\n\n## 一、输入来源\n\n只从已经落盘的拆书产物反推，不重读 `原文/`：\n\n| 输入 | 用途 |\n|---|---|\n| `拆文库/{书名}/角色/{角色名}.md` | 身份、能力、目标、成长弧线、出场记录 |\n| `拆文库/{书名}/角色/角色关系.md` | 截至最后完整章的关键关系 |\n| `拆文库/{书名}/章节/第N章_摘要.md` | 从 `涉及` 锁定相关章，从 `状态变化`、`信息变化`、`局面结果` 和 `章尾钩子` 提取最后位置、最新状态、已知信息与未结事项；旧摘要缺字段时回退其关键事件与情节点 |\n| `拆文库/{书名}/剧情/*.md` | 阵营/身份转折、阶段目标和长期冲突 |\n| 初始化事务中的伏笔与时间线候选 | 核对角色未结事项及其可知范围 |\n\n## 二、追踪对象\n\n只为主角、反派、核心配角建立独立快照。临时路人和只承担一次功能的角色不建文件。边界不清时优先不建，后续角色真正进入复用状态时再由逐章事务创建。\n\n## 三、反推方法\n\n对每个核心角色，以最后完整导入章 N 为截面，分别确定：\n\n1. `identity`：截至 N 章实际成立的身份/职业，不写未来晋升计划。\n2. `location`：最后落点或下一章开始前可确定的位置。\n3. `goal`：角色当前正在追求的具体目标。\n4. `state`：身体、情绪、名望、立场中会影响续写的当前状态；只写必要信息。\n5. `abilities_resources`：当前确实掌握的能力、物品、权限、作品或人脉，最多 8 条。\n6. `relationships`：与后续会复用角色的当前关系，最多 8 条。\n7. `knowledge`：角色本人已经知道、且会影响其行为的信息，最多 8 条。作者真相不能误写成角色已知。\n8. `open_threads`：角色相关的未结事项，最多 8 条；必须有已写正文证据，纯未来设计留在大纲。\n\n若同一字段有多次变化，只取截至 N 章的当前值，不把变化史塞进快照。历史变化由后续 `逐章记录/第NNN章.md` 承担；导入旧章不补造这些记录。\n\n## 四、初始化 JSON 形状\n\n以下示例来自 demo《让你管账号，你高燃混剪炸全网》第 10 章：\n\n```json\n{\n  \"江晨\": {\n    \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n    \"location\": \"火箭军文工团高层看片会\",\n    \"goal\": \"完成五天百万粉任务，继续做出真正能打的军宣内容\",\n    \"state\": \"专业团队重拍版反向坐实手机原版的价值，军内认可继续抬升\",\n    \"abilities_resources\": [\n      \"前世 MCN 爆款运营经验\",\n      \"《中国军魂》伴奏\",\n      \"大师级导演能力\"\n    ],\n    \"relationships\": [\n      \"钟嘉嘉持续提供军报资源\",\n      \"周薄森和张耀祖已明确认可其创作能力\"\n    ],\n    \"knowledge\": [\n      \"《军报》采访稿已经过审\",\n      \"高层决定继续采用《诸君，且听龙吟》手机原版\"\n    ],\n    \"open_threads\": [\n      \"五天百万粉任务尚未结算\",\n      \"钟嘉嘉所谓只猜对一半仍未解释\"\n    ]\n  }\n}\n```\n\n工具据此生成的文件固定包含：截至章节、身份、位置、当前目标、身心状态、能力与资源、关键关系、已知信息、未结事项。模型不得另写一套 Markdown 模板。\n\n## 五、残稿与分批导入\n\n- 最后一章是残稿：所有快照截至残稿之前的最后完整章；残稿中的动作、获得物、关系变化不得提前生效。\n- 分批导入：快照只表示本次已导入范围的当前状态；扩大导入范围时重新执行一次完整导入，不在旧快照上追加历史段落。\n\n## 六、质量检查\n\n- [ ] 每个文件对应一个核心角色，无功能角色堆积\n- [ ] 所有字段都是截至最后完整章的当前值\n- [ ] 角色已知信息没有混入作者真相\n- [ ] 未结事项都有正文证据，未来设计仍在大纲\n- [ ] 单角色快照目标不超过 4096 字节；确有必要可放宽，但不得超过 8192 字节硬上限\n- [ ] `tracking_commit.py check` 通过\n\nFile v1.0.26:references/deep-analysis.md\n\n# 深度分析时刻：导入场景怎么驱动拆解管道\n\nPhase 2 只读本文件，再按篇幅进入对应 analyze skill；拆书的方法、产物结构、分批、恢复与质量检查全部由 analyze skill 自己的流程负责，本文件只写导入场景的取值。篇幅、原文位置、题材和写作环境都读导入记录（`{书目录}/.story/work/导入记录.md`），不回翻对话、不重新问作者。\n\n| 篇幅 | 进入 | 产物目录 |\n|------|------|---------|\n| 长篇 | `/story-long-analyze` 的统一管道（旧成果直用 / 按需增强 / 全新或部分续跑） | `拆文库/{导入书名}/` |\n| 短篇 | `/story-short-analyze` 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n## 长篇：先兼容识别，再决定是否续跑\n\n先运行 story-long-analyze Phase 1 的只读检查器（`inspect_existing_assets.py`），登记实际文件和覆盖范围；检查建议不能覆盖下列语义规则：\n\n新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`；旧成果直接使用不以缺少该字段为失败。\n\n- **旧成果已完成且足以重建写作工程**：直接进入 Phase 3。旧 `_progress.md` 版本、缺少 `chapter_index.csv`，或缺少本次新增字段，都不能单独成为重拆理由。\n- **旧成果可以导入，但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**：先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强，不回读原文。不得重跑已完成章节，也不得用空壳文件让门禁通过。\n- **只完成一部分或新旧产物混存**：验证并保留已完成部分，从首个缺失的连续章节块续跑，最后统一聚合。进度记录与实际文件冲突时，以可验证文件为准并记录冲突。\n- **全新导入**：运行 Stage 0-6 完整管道。\n\n导入需要自动完成本次判定出的必需范围，不把 Stage 1 停靠询问甩给作者。全新导入命中「完整拆解、一次跑完」路径；旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时，缺少新增字段只记录能力限制，不阻断导入。\n\n- 措辞示例（全新）：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- 措辞示例（旧成果）：声明「先复用并校验现有成果，只补当前导入缺失的章节或分析，不覆盖用户原成果」。\n- **兜底**：若全新导入实际仍停在 Stage 1，自动选择继续；若旧成果任务停靠，则按已登记的缺失范围继续，不能扩大成全书重跑。\n- 派发：导入记录写着分析助手可用时，属自动续跑，按 story-long-analyze 的「有限并行」档派 `chapter-extractor`（每轮 3 批），每个连续章节批次只调用一次，同次生成逐章事实与跨章观察；作者明确要求时改用串行或不限批次顺序。作者选了直接导入（或 ZCode）时，Stage 2 由主会话按相同连续章节块契约串行处理，不能退回每章一次独立调用；产物仍完整，仅速度变慢。\n- 超过 200 章的作品按 [import-special-cases.md](import-special-cases.md)「超过 200 章的作品」分批拆解。\n\n## 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用导入记录里的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在导入 Phase 1 判定并经作者确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；导入记录里已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给作者，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按导入记录里锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给作者**。\n\n## 交付\n\n拆解管道自带的质量检查通过、产物落在 `拆文库/{导入书名}/` 后，在导入记录勾「深度分析」。拆书流程自带的完工汇报（长篇「全部拆完」、短篇「可以运行 /story-short-write 写下一篇」）在导入里不用，由这里交代：向作者用一两句故事话说拆到了什么（几章、主要人物、主线一句），末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话。拆书中断时不在这里另做恢复：重新进入同一拆解管道，由它按自己的进度文件续跑。\n\nFile v1.0.26:references/format-and-structure.md\n\n# 正文格式与小节结构\n\n> 写作前必读。以下格式是当前仓库约定的默认正文交付格式；用户或目标平台有明确要求时，以用户/平台要求覆盖。\n>\n> **适用范围**：段落格式（戏剧单元/镜头优先，短段为底色，长段用于完整推理、氛围和情绪链）和对话格式适用于所有体裁。小节(beat)结构仅适用于短篇；小节不设统一最低字数。长篇按 `visible_chars_v1` 测量同口径细纲 `字数目标`：内部带 ±12%，用户带 ±15%。\n\n---\n\n## 章节标记\n\n默认格式（按灵活度排序）：\n\n| 格式 | 平台适用 | 示例 |\n|------|----------|------|\n| `###1.` | 短篇默认 | `###1.` `###2.` `###3.` |\n| `###第一章` | 部分平台 | `###第一章` `###第二章` |\n| `1.`（纯数字） | 知乎 | `1.` `2.` `3.`（无 ### 前缀） |\n\n**规则**：全文统一一种格式，不要混用。短篇推荐 `###1.` 或纯数字，简洁高效。\n\n---\n\n## 段落格式\n\n### 核心规则：戏剧单元优先\n\n默认交付排版是**按戏剧单元/镜头自然断段，段落紧密排列**。不要把固定字数当成强制切刀；先判断“一件事/一个推理链/一个情绪变化”是否完成。\n\n- 一段承载一个戏剧单元：一个动作链、一个线索发现、一次视线切换、一轮心理判断，或一条连续的氛围/推理/情绪链。\n- 场景结束、一件事结束、新动作、新物件、新信息、新对话另起一段；同一瞬间的发生、感知、反应应织在一起，不拆成动作层/感知层/反应层。\n- 正文相邻段落之间**只允许一个换行符 `\\n`**；不得出现空行或连续换行 `\\n\\n`（紧密排列）。\n- 无缩进（平台渲染器自行处理，不需要 `　　` 或空格）。\n- 长度只作诊断：读起来拥挤、混入多个拍点、或手机屏上难以跟读时才拆；完整推理、氛围铺陈、情绪递进未结束时，允许稍长段保留连贯性。\n\n### 段落节奏（长短交错 + 疏密有别）\n\n短段快读，是网文手机阅读的底色；长段负责承载完整推理、氛围和情绪沉淀。**忌通篇同长度**，也忌把每段按同一字数阈值切开：\n\n- **长短交错**：高潮、打脸、反转压到最短（单句成段）；推理链、环境压迫、情绪沉淀、章节收束可保留较长段，让读者读完一个完整变化。\n- **疏密有别（详略）**：爽点、转折 beat 写密（感知、动作、细节铺满）；过场、连接 beat 写疏（1-2 句带过，不平均用力）。每个 beat 一样长、一样细，正是 AI 腔的来源。\n- **不过度碎片化**：连续多个极短段若仍属于同一镜头/同一件事，应合并成自然段，避免像提纲或诗行。\n\n### 主语与角色名节奏\n\n角色名不宜一味省略，也别每句都点名。按“主语重置”使用：\n\n- 段首、场景切换、多人同场、或主语可能混淆时，用主角名/角色名建立视角。\n- 同一段或同一动作链内，优先混用代词、动作承接和合理省略，避免每句都以同一角色名开头。\n- 关键转折、情绪爆点、身份反差或读者需要重新盯住主角时，可以再次点名强化。\n- 审查主语节奏看“读起来是否打磕巴”，不按全章出现次数一刀切；只有连续句/连续段无主语重置却反复点名，才算主语过密。\n\n---\n\n## 对话格式\n\n### 对话标记\n\n按目标平台/用户要求选择；未指定时使用默认格式：\n\n| 优先级 | 格式 | 适用平台 |\n|--------|------|----------|\n| 首选 | `\"说话内容\"` | 短篇默认、番茄 |\n| 平台/项目指定 | `「说话内容」` | 知乎盐言短篇、部分古言、日式或用户指定 |\n\n**默认用 `\"\"`**；用户或平台指定盐言风格时改为 `「」`，不要把 `「」` 视为错误。\n\n### 对话规则\n\n1. 对话**独立成行**，不嵌在叙述段落中\n2. 对话标签按需：高频或公式化的「他说」「她道」「他笑了笑说」用动作描写替代；普通「说」低频使用可保留（与「8 条绝对禁止」中「避免对话标签机械化」一条一致）\n3. 两人对话连续出现时，省略标签，靠内容区分说话人\n\n**正确示例**：\n```\n她把杯子放下。\n\"你走吧。\"\n他没有动。\n\"我说，你走吧。\"\n```\n\n**也合法（普通「说」低频使用）**：\n```\n她把杯子放下。\n\"你走吧。\"她说。\n他没有动。\n\"我说，你走吧。\"\n```\n\n**错误示例**：\n```\n她把杯子放下，说道：\"你走吧。\"他没有动，她又说：\"我说，你走吧。\"\n```\n\n---\n\n## 语气标点谱系\n\n标点服务语气、人物声线和情绪节奏，不能通篇句号化，也不能为了“丰富”随机堆砌符号。先判断当前句子的功能，再选择标点：\n\n| 语气 / 功能 | 标点策略 | 防线 |\n|---|---|---|\n| 压迫 / 冷静 / 克制 | 短句、逗号、句号，必要时用冒号压出判断落点 | 不人工加感叹号；克制不是每句都平铺句号 |\n| 质问 / 试探 / 反问 | 问号 + 短促追问片段，配合动作停顿 | 避免每句话都以 `？` 结尾 |\n| 惊讶 / 爆发 / 打脸 | 真正爆点可用 1 个感叹号，连续爆发最多 1-2 处 | 禁止 `!!!`、整段喊叫式感叹 |\n| 犹豫 / 吞咽 / 未说完 | 逗号、句号、短句断开、动作 beat | 不用 `……` 制造停顿；优先用动作和句长变化 |\n| 被打断 / 拖长音 | 不使用 `——`；改用动作打断、换行、短句或未完成动作 | 正文和对话都禁止 `——` / `—` / `--` |\n| 信息揭示 / 判断落点 | 冒号、分号或单句成段制造落点 | 保持手机阅读友好，不写论文式分号串 |\n\n执行规则：\n- 写对话时先看角色关系和权力位置：强势角色常短句收束，试探角色多问号和半句，崩溃角色才允许少量感叹/省略。\n- 写叙述时用句长、逗号停顿和单句成段制造节奏；默认不用破折号硬造节奏；本书文风明确授权的功能性用法保留。\n- 精修时检查两类问题：**通篇句号化**（语气全被压平）与**随机标点堆砌**（问号/感叹号不承载情绪功能，或用省略号/破折号硬造停顿）。\n- 引号风格按项目/平台约定；知乎盐言的 `「」` 是合法对话格式，`quote-mode keep` 时不得擅自改掉。\n\n---\n\n## 小节（beat）结构\n\n### 基本规则\n\n- 用数字编号（`1` `2` `3`）分割小节，每个小节是一个完整的叙事 beat\n- 小节长度服从其叙事职责，不设统一最低字数；整篇按锁定的交付范围控制，长篇章节按细纲「字数目标」处理\n- 小节数由情节阶段和转场需要决定；不为平均分配字数拆分完整动作链，也不把承担不同职责的小节硬合并\n- 每小节推进一个明确的情节点\n\n### 小节内部结构\n\n每个小节至少完成第 1 项，其余按本节职责选用：\n\n1. **一个主事件** + **一个或多个真实推进**（风险、信息、关系、资源、决定、行动或读者理解至少改变一项；相关情节点可由同一动作链或对话同时兑现，不为数量新增阻碍、对话或冲突）\n2. **情绪或压力落点**（确有变化时写清读者感受如何变化；任务、推理、手艺或等待链不强配情绪转折）\n3. **读者模型或下一步变化**（新信息、旧信息改义、决定、行动或后果均可，不强配新事实）\n4. **对白按功能使用**（需要时改变信息、策略、权力、关系或下一步行动；独自发现、核验证据、等待、手艺等场景可以无对白）\n5. **推进单元按需揉进信息维度**：发生是主干，感知和反应只在提供新信息时织入同一镜头（参考 writing-craft.md 场景写法）\n\n\n### 小节之间的衔接\n\n- 小节结尾留一个钩子（悬念/未解决的情绪/新问题）\n- 下一节开头快速接续，不要重新铺垫\n- 情绪跨节递进：每一节的情绪强度 ≥ 上一节。例外：峰值情绪（反转节）后允许维持 1 节不降，但不允许骤降\n\n---\n\n## 平台对话格式覆盖表\n\n| 平台 | 章节标记 | 对话格式 | 特殊要求 |\n|------|----------|----------|----------|\n| 知乎盐言 | `1.` | `「」` | 导语即正文开头几段，不另标 |\n| 番茄 | `###第一章` | `\"\"` | 首段需有吸引力 |\n| 红果 | `###1.` | `\"\"` | 无 |\n\n**通用原则**：用户未指定平台时，默认使用短篇通用格式（`###1.` + `\"\"`）；用户或平台指定盐言风格时，`「」` 是允许的。\n\n---\n\n## 8 条绝对禁止\n\n以下规则在写作全程执行，不因题材或风格而变：\n\n1. **禁止机械按字数分段**：不要因为超过某个字数就强拆；先判断段落是否仍是一个完整戏剧单元。若混入多个动作/信息/视线切换才拆，完整推理、氛围、情绪链可保留稍长段\n2. **禁止段间空行**：正文相邻段落之间只允许一个换行符 `\\n`，不得出现空行或连续换行 `\\n\\n`\n3. **避免对话标签机械化**：高频或公式化的「他说」「她道」「他笑了笑说」用动作/上下文替代；普通“说”可保留\n4. **禁止缩进**：不使用 `　　`（全角空格）或半角空格缩进\n5. **禁止正文段落 Markdown 渲染**：除统一的小节/章节标记（如 `###1.`）外，正文段落中不使用加粗 `**`、斜体 `*`、标题 `#`、分隔线 `---` 等 Markdown 语法\n6. **默认停顿写法**：正文默认用句号、逗号、换行、动作 beat 或短句承担停顿；本书明确选择的功能性破折号/省略号按调用方文风裁决与书级白名单保留。标点偏好不属于不可覆盖的文件结构协议。\n7. **禁止通篇句号化或随机标点堆砌**：标点必须跟语气/人物声线/情绪功能匹配；该质问时用问号，该爆发时少量感叹；犹豫、吞咽、未说完用动作或句长变化表达，不用 `……` / `——` 硬造停顿，也不得无功能地乱撒 `？`/`！`\n8. **禁止正文混入章节元信息**：章节号只允许出现在标题/小节标记/文件名/追踪记录中。正文叙述、对话、心理描写里不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词；要改成角色能感知的事件锚点或相对时间，例如把“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。例外：角色在故事世界内真实阅读/讨论“第X章”文本，或真实身为作者/读者并谈论读者身份时，可保留相应词。\n\nFile v1.0.26:references/import-report.md\n\n# 汇报与激活时刻\n\nPhase 5 只读本文件和导入记录（`{书目录}/.story/work/导入记录.md`）。前面每个时刻已按自己的清单验收后才勾进度，这里不重读迁移规则。\n\n## Step 1：收尾自检\n\n这是你自己的自检，不念给作者：全部通过就不提；没通过先回到对应时刻修，修不了才用故事话告诉作者影响和办法。\n\n- 导入记录的进度全部勾上（短篇没有细纲与追踪两项）。\n- **长篇**：`正文/` 章节文件数等于导入范围章数；每章都有 `大纲/细纲_第XXX章.md`，且对全部细纲再跑一次 `node {story-import skill 根}/scripts/check-outline-contract.js --json {书目录}/大纲/细纲_第*.md` 通过；再跑一次 `{PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {书目录}`（按 `python3` → `python` → `py -3` 探测）通过；原文没分卷时卷划分已经作者确认；`拆文库/{导入书名}/` 未被复制到 `对标/`。\n- **短篇**：`正文.md`、`设定.md`、`小节大纲.md` 都在，未误建 `追踪/`、`大纲/`、`正文/`。\n\n## Step 2：导入完成报告\n\n报告写给作者：导进来了什么、哪几处请他核对、要他拍板的事、下一步怎么说。字段名、脚本名、校验结果、字数口径、伏笔/事件编号不进报告；编号只能跟着故事描述出现（如「玉佩的来历（F003）」）。核对项要落到具体人和事，一次最多 5 条。\n\n**长篇**：\n\n<!-- author-report -->\n```md\n=== 《{导入书名}》导入完成 ===\n导进来了：第 1–{N} 章，约 {Y} 万字{；第 {N+1} 章只写了一半，按你的决定{接着残章写 | 先补完}}。项目在 `{项目目录}`。\n\n我整理出了：\n- 人物：{M} 个角色档案，主要人物写到第 {N} 章时的处境已记下（如「{角色}：{一句话现状}」）\n- 大纲：全书大纲、{V} 卷卷纲、每章细纲\n- 还没收的线：{K} 条（如「{伏笔的故事描述}」）\n- 时间线：真相和读者目前知道的分开记，续写时不会提前泄底\n- 设定：{设定文件数} 份世界观资料\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {最拿不准的一处，写成具体问题，如「第 5 章的黑衣人和第 2 章的车夫是同一人吗？」}\n2. {如「还没收的线里有没有漏的？我列的是：……」}\n\n需要你决定：{仅在有待定事项时写，如「原文没分卷，我按剧情分成 3 卷（1–40 / 41–95 / 96–{N} 章），这样分可以吗？」}\n\n下一步：说「日更」就从第 {N+1} 章接着写；想先检查导入质量，说「审一下」。\n```\n\n**短篇**：\n\n<!-- author-report -->\n```md\n=== 《{短篇标题}》导入完成 ===\n导进来了：全文约 {Y} 字，分成 {N} 个小节。项目在 `{项目目录}`。\n\n我整理出了：\n- 设定：核心框架和续写要守住的人物、情绪基调\n- 小节大纲：{N} 节，每节讲了什么\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {标了 [待补充] 的地方，写成问题，如「女主最后原谅他了吗？原文没写明」}\n2. {核心反转前埋的线索我找到的是：……，有没有漏的？}\n\n下一步：{没写完：运行 `/story-short-write` 说「接着写」，从第 {N+1} 节往下写 | 已完本：想改稿说「审一下」}。\n```\n\n## Step 3：项目激活\n\n- 设置 `.active-book` 指向导入的书名/标题目录，在导入记录勾「汇报与激活」。\n- 确认项目可以被对应写作 skill 识别（长篇 → story-long-write，短篇 → story-short-write）。\n- 可选验证：如果当前运行时的 canonical 目录已部署 story-explorer agent，可 spawn 交叉验证迁移数据完整性；Antigravity 检查 `.agents/agents/story-explorer/agent.md` 并用 `invoke_subagent` + `TypeName: \"story-explorer\"`。Prompt：`项目目录：{dir}\\n查询类型：progress\\n查询参数：导入验证`\n\nFile v1.0.26:references/import-special-cases.md\n\n# 导入的特殊情况\n\n只在下面几种情况读；普通导入不读。\n\n## 流程答疑\n\n用户问「导入续写先装环境还是先导入」「已有小说怎么续写」「导入流程」这类问题时，先直接给结论，再继续收集原文——避免用户只想确认流程却被直接要求贴原文：\n\n1. **推荐顺序**：先 `/story-setup` 装好写作环境，新开或刷新会话后运行 `/story-import`，最后用 `/story-long-write 日更` 或 `写第N章` 续写。\n2. **也可以直接 `/story-import`**：导入会在深度分析前检查写作环境；没装时给「先去装」或「直接导入，慢一点」两种选择。\n3. **已导入过的当前协议项目**（书名目录下有 `追踪/_tracking-state.json`）：不要重复跑完整导入；直接进入书名目录，确认 `.active-book` 指向正确书目，再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。书目录下有 `{书目录}/.story/work/导入记录.md` 且进度没勾完时，是上次导入做到一半：从第一个未完成的进度接着做。\n4. **v0.7.2 及更早的旧追踪项目**（有 `追踪/` 和正文，但没有 `追踪/_tracking-state.json`）：日更会停下要求重新导入，但**不需要重跑全书拆解**，只重建追踪，见下一节。\n\n## 旧追踪项目迁移\n\n书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时，项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响，**只需重建 `追踪/`**，不重跑深度分析、不碰正文：\n\n1. 数清最后一个完整章号 `N`（`正文/第NNN章_*.md` 的最大值）。\n2. 从旧 `追踪/` 现有文件（角色状态、伏笔、时间线等，文件名按项目实际情况）和最近 3-5 章正文，重建当前状态：核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [character-state-reverse.md](character-state-reverse.md)。\n3. 按 [import-tracking.md](import-tracking.md) 构造初始化事务（其中点名的 tracking-initialization.md 完整读取），`last_chapter` 写 `N`（第 1..N 章不伪造逐章记录），执行 `tracking_commit.py init`。\n4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析，留给作者查阅。\n5. 跑 `tracking_commit.py check` 确认通过，再回 `/story-long-write 日更` 续写。\n\n重建结果以第 2 步的证据为准；拿不准的字段留空或写进 `continuity_risks`，不杜撰。用户明确要求重拆全书时才走完整导入。\n\n## 超过 200 章的作品\n\n仅长篇。短篇为单文件全量迁移，无增量导入需求。拆解可以分批，追踪初始化必须一次覆盖全部已写章节：\n\n1. **拆解分批**：首期只深拆前 50 章 + 全书概要，后续按需补拆更多章节到 `拆文库/`。\n2. **追踪一次到位**：初始化事务的 `last_chapter` 写**最后一个已写完的章号 N**，不是首期拆解的 50。`imported_through_chapter` 由 `init` 一次写定、之后不再推进，逐章事务只接受 N+1 起的章号；第 1..N 章不伪造逐章记录，续写从 N+1 开始。若 init 时误写成 50，第 51..N 章仍可逐章 `append` 补上（一章一份事务，章号必须连续），只是要为已写好的旧章逐章构造事务；不要删 `追踪/` 重来——`_旧追踪存档/` 也在里面。\n3. **简化摘要**：未深拆的章节每章写一份约 200 字的简化摘要（谁做了什么、局面怎么变、章尾留下什么等待），固定落在 `{书目录}/.story/work/简化摘要/第NNN章.md`（三位补零）。细纲任务包在拆文库没有该章摘要时自动取这里；追踪初始化反推当前状态也从这里取证。\n\n首期深拆范围写进导入记录「范围」一行，细纲与追踪时刻据此取证据。\n\nFile v1.0.26:references/import-tracking.md\n\n# 追踪初始化时刻（仅长篇）\n\nPhase 4 只读本文件、[tracking-initialization.md](tracking-initialization.md)（初始化事务的原始 JSON 与导入边界，完整读取）和 [character-state-reverse.md](character-state-reverse.md)（核心角色快照反推）。导入截止章、残稿决定、卷划分读导入记录（`{书目录}/.story/work/导入记录.md`）；证据只取已落盘的 `拆文库/{导入书名}/` 与项目 `大纲/`，不重读原文。续写时的逐章事务与导入无关，不读。\n\n导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态，禁止模型分别写最终文件。\n\n## 语义准备顺序\n\n1. **导入截止章**：把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`；导入旧章没有日更事务，不得为第 1..N 章伪造逐章增量，也不额外生成一份重复当前状态的叙事基线。\n2. **核心角色当前快照**：从拆书产物反推主角、反派、核心配角的截至 N 章状态，按角色写入 `character_snapshots`，工具生成 `追踪/角色状态/{角色名}.md`；算法见 character-state-reverse.md。\n3. **伏笔当前行**：从有正文证据的铺垫/回收事件生成 `foreshadow`（识别方法见下）。每个 ID 只保留当前状态一行；尚未实际埋设的未来设计留在大纲，不写 `伏笔.md`。\n4. **事实与读者认知**：把关键事件生成到 `timeline_events`（提取方法见下）。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态；未来计划揭示章不得伪装成已发生事实。\n5. **续写状态卡输入**：准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏，不把文风、文件索引、普通待办或质检计数塞进续写状态卡。\n6. **执行初始化**：事务写到 `{书目录}/.story/work/init.json`（成功前保留，不写系统 `/tmp`、书根、`大纲/` 或 `正文/`）。按当前平台探测 Python 3（`python3` → `python` → `py -3`），执行：\n\n   > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理：`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议。旧内容保留供作者查阅，不参与解析，当前状态完全由本次导入输入决定；校验失败的 `init` 不移动任何文件。`init` 只在 `_tracking-state.json` 不存在时执行，绝不覆盖已初始化项目。\n\n   ```text\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {书目录} --input {书目录}/.story/work/init.json\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {书目录}\n   ```\n\n半成品最后一章为残稿时，`last_chapter`、角色快照和其他当前语义检查点一律截至最后完整章；残稿处理策略（导入记录里作者的决定）写入 `continuity_risks`，不把未完成动作登记成既成事实。\n\n以 demo《让你管账号，你高燃混剪炸全网》导入至第 10 章为例：续写状态卡要写清江晨的手机原版《诸君，且听龙吟》被专业团队高清重拍，但高层看片后认为新版“缺了灵魂”，最终继续采用原版；江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认；读者时间线只写读者已经看到的看片会结论，钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示，只能出现在作者真相，不能泄露到读者视图。\n\n## 条目形状与容量\n\n在 tracking-initialization.md 的骨架上填条目（导入时 `last_chapter` 写 N）：\n\n```json\n{\n  \"foreshadow\": [\n    {\"id\": \"F027\", \"summary\": \"专业团队仍拍不出江晨原版的灵魂\", \"planted_chapter\": 10,\n     \"planned_resolution_chapter\": null, \"status\": \"已埋\", \"importance\": \"中\"}\n  ],\n  \"timeline_events\": [\n    {\"id\": \"E010\", \"story_time\": \"实弹训练两天后\",\n     \"objective_fact\": \"文工团高层否决专业重拍版，决定沿用江晨手机拍摄的原版视频\",\n     \"reader_knowledge\": \"读者已看到周薄森指出专业版缺了灵魂，张耀祖当场拍板用回原版\",\n     \"reveal_status\": \"已揭示\", \"reveal_chapter\": 10, \"characters\": [\"江晨\", \"周薄森\", \"张耀祖\"]}\n  ],\n  \"context\": {\n    \"recent_chapters\": [{\"chapter\": 10, \"summary\": \"专业重拍版被判缺了灵魂，高层拍板用回手机原版\"}]\n  }\n}\n```\n\n- 伏笔 `id` 形如 `F001`，`status` 取 已埋/已回收/已过期/放弃，`importance` 取 高/中/低；`planted_chapter` 不晚于 N。事件 `id` 形如 `E001`，`reveal_status` 取 未揭示/部分揭示/已揭示：`未揭示` 的 `reveal_chapter` 必须为 `null`，部分/完全揭示只能填已经发生的实际章节。\n- `context` 在 init 时收六项：`position`、`long_term_constraints`、`active_character_names`、`continuity_risks`、`recent_chapters`（最多 3 章，按章号升序）、`next_chapter_commitments`。\n- `character_snapshots` 里的角色就是核心角色；四个列表不限条数，单角色文件目标 ≤4096 字节，硬上限 8192 字节，超过在任何写入前拒绝。`active_character_names` 最多 6 人且必须已有快照；`long_term_constraints` 最多 6 条。\n- `上下文.md` ≤12288 字节，只含 7 个顶层区块：当前位置、长期约束、核心角色状态、活跃伏笔（最多 8 条）、近三章速记、下一章承诺、连贯性风险。\n- 报错按提示改事务本身再跑；排查字段全集时才查 [tracking-transaction.md](tracking-transaction.md)。导入后续写时角色状态怎么更新见 [state-tracking.md](state-tracking.md)，本时刻不读。\n\n## 伏笔提取\n\n| 情节点类型 | 伏笔可能性 | 提取方式 |\n|-----------|-----------|---------|\n| 铺垫 | 高 | 直接提取为伏笔 |\n| 信息揭示（部分） | 中 | 检查后续是否有呼应 |\n| 物品首次出现 | 中 | 检查后续是否有使用 |\n| 角色秘密 | 高 | 标记为角色伏笔 |\n| 未解决的悬念 | 高 | 从章尾标记提取 |\n\n状态推断：铺垫点在后续章节有「揭示」或「解决」类情节点 → 已回收；无后续呼应 → 已埋；半成品最后几章的铺垫 → 已埋，摘要里注明「接近断点」。\n\n## 时间线提取\n\n从情节点和时间标记中提取：明确日期（“天元三年春”）直接记录；相对时间（“三日后”）推算；事件间隔（“翌日”）连续标记；季节标记（“入冬”）推断季节。按章节顺序排列，同一章内按情节点序号排列；时间标记缺失时标注 `[推断]`。\n\n## 验收\n\n初始化成功后应得到：\n\n```text\n追踪/\n├── _tracking-state.json\n├── 上下文.md\n├── 逐章记录/                 # 导入旧章不补造文件，续写从第 N+1 章开始\n├── 角色状态/{角色名}.md\n├── 伏笔.md\n├── 时间线/\n│   ├── 作者真相.md\n│   └── 读者已知.md\n```\n\n- [ ] `tracking_commit.py check` 通过，`_tracking-state.json` 与全部派生视图一致\n- [ ] `_tracking-state.json.imported_through_chapter` 等于最后完整导入章\n- [ ] `追踪/伏笔.md` 每个 ID 至多一行，未来尚未埋设的设计没有混入\n- [ ] `_tracking-state.json.timeline` 已登记关键事实与读者认知，`读者已知.md` 无真相泄露\n- [ ] `追踪/角色状态/{角色名}.md` 已覆盖全部核心角色并对齐 character-state-reverse.md\n- [ ] `追踪/逐章记录/` 空目录已创建，且没有为导入章伪造日更记录\n- [ ] `追踪/上下文.md` 顶层恰好固定 7 栏且 ≤12288 字节\n\n通过后在导入记录勾「追踪初始化」，`init.json` 可删除；汇报末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话。\n\nFile v1.0.26:references/length-routing.md\n\n# 篇幅分流判断规则\n\nPhase 1「基本信息确认」环节使用本规则判定导入书是长篇还是短篇，判定结果决定后续走哪条迁移路径。\n\n---\n\n## 判定优先级\n\n判定按以下顺序执行，命中即停止，不再向下判断。\n\n| 优先级 | 信号来源 | 判定规则 |\n|--------|---------|---------|\n| 1 | 用户显式声明 | 用户说「这是长篇 / 短篇」→ 以用户为准，直接锁定 |\n| 2 | 结构信号 + 字数校验 | 检测到明确章节分隔符且章节数 ≥ 5 → 长篇；全文无章节分隔、单文件单篇 → 按下方细则表按字数分三档判定（字数阈值沿用优先级 3 的建议值） |\n| 3 | 字数兜底 | 仅在 1、2 均不明确时启用，见下方「字数兜底规则」 |\n| — | 冲突处理 | 信号之间发生矛盾时，不自动决策，回到 Phase 1 向用户复述并请用户拍板 |\n\n---\n\n## 优先级 1：用户显式声明\n\nPhase 1 信息确认时向用户提问：**「这是长篇还是短篇？」**\n\n- 用户明确回答 → 锁定类型，跳过后续检测。\n- 用户未回答或说「不确定」→ 进入优先级 2 结构信号检测。\n\n---\n\n## 优先级 2：结构信号 + 字数校验\n\n### 章节分隔符识别\n\n复用 `structure-mapping-long.md` 的分隔符识别表：\n\n| 分隔符模式 | 示例 |\n|-----------|------|\n| `第X章` / `第X章 ` / `第X章：` / `第X章 XXX` | 第1章 初入江湖 |\n| `Chapter X` | Chapter 1 |\n| 纯数字编号 + 标题 | 1. 觉醒 |\n\n### 判定规则\n\n| 检测结果 | 判定 |\n|---------|------|\n| 有明确章节分隔符，且识别到章节数 ≥ 5 | 强长篇信号 → 判定为**长篇** |\n| 全文无任何章节分隔符，单文件单篇，且总字数 < 20000 | 强短篇信号 → 判定为**短篇** |\n| 全文无任何章节分隔符，单文件单篇，20000 ≤ 总字数 < 30000 | 判定为**短篇**，但 Phase 1 复述时告知：已超过短篇拆解管道 20000 字的建议上界，请用户确认仍按短篇导入 |\n| 全文无任何章节分隔符，单文件单篇，但总字数 ≥ 30000 | 结构与字数信号相反 → 不自动判定，见下方「冲突处理」请用户拍板 |\n| 有章节分隔符，但章节数 < 5 | 结构信号不明确 → 进入优先级 3 字数兜底 |\n| 分隔符模式模糊（如仅有单个标题行） | 结构信号不明确 → 进入优先级 3 字数兜底 |\n\n---\n\n## 优先级 3：字数兜底\n\n**仅在优先级 1、2 均无法给出明确判定时使用。** 当前导入契约按短篇通常 8000-20000 字的区间取 30000 字作建议上界，并保留题材差异余量。\n\n| 条件 | 判定 | 备注 |\n|------|------|------|\n| 总字数 < 30000 且无章节结构 | **短篇** | — |\n| 总字数 ≥ 30000 | **长篇** | — |\n| 章节数 ≥ 5（任意字数） | **长篇** | — |\n| 总字数 < 30000 但章节数 ≥ 5 | 初判**长篇**，但须提示用户 | 见下方「分章短篇连载」 |\n\n> **建议值说明**：30000 字阈值是估算值，不同平台和题材的短篇上限有差异。执行时列入 open-questions，建议用户复核是否适用于当前导入书。\n\n### 分章短篇连载\n\n检测到总字数 < 30000 但章节数 ≥ 5 时，在确认环节提示用户：\n\n> 「检测到分章结构（共 {N} 章），但总字数约 {X} 字，低于 30000 字。可能是分章短篇连载。确认按长篇导入，还是按短篇处理？」\n\n用户拍板后锁定类型。\n\n---\n\n## 冲突处理\n\n当不同信号之间出现矛盾时，**不自动决策**，回到 Phase 1 向用户复述检测结果：\n\n| 典型冲突场景 | 处理方式 |\n|------------|---------|\n| 用户说「短篇」但检测到 20 章 | 复述：「检测到 20 章章节结构，通常属于长篇。确认按短篇导入？」由用户拍板 |\n| 用户说「长篇」但全文无章节分隔且字数 < 30000 | 复述：「全文无章节分隔，总字数约 {X} 字，通常属于短篇。确认按长篇导入？」由用户拍板 |\n| 用户未声明、全文无章节分隔、单文件单篇，但字数 ≥ 30000 | 复述：「全文无章节分隔，但总字数约 {X} 字，已超过短篇常见上界。按长篇导入建工程，还是仍按短篇处理？」由用户拍板 |\n| 结构信号与字数信号方向相反 | 展示两项信号，请用户决定 |\n\n用户拍板的结果写进导入记录（`{书目录}/.story/work/导入记录.md` 的「篇幅」），后续时刻以此为准，不再重新判定。\n\n---\n\n## 判定结果与后续路径\n\n判定完成后，迁移路径按以下对应关系分流：\n\n| 判定结果 | 迁移路径 | 映射规则参考文件 |\n|---------|---------|----------------|\n| **长篇** | 长篇迁移路径（Phase 3-L） | `structure-mapping-long.md` |\n| **短篇** | 短篇迁移路径（Phase 3-S） | `structure-mapping-short.md` |\n\n> 注：`structure-mapping-long.md` 对应长篇迁移映射规则，`structure-mapping-short.md` 对应短篇迁移映射规则。\n\n---\n\n## 快速判定流程图\n\n```\nPhase 1 问用户：「长篇还是短篇？」\n         │\n         ├─ 用户明确回答 ──────────────────────────► 锁定类型\n         │\n         └─ 未回答 / 不确定\n                  │\n                  ▼\n         检测章节分隔符\n                  │\n                  ├─ 有分隔符且章节数 ≥ 5 ──────────► 长篇\n                  │\n                  ├─ 无分隔符，单文件单篇，< 20000 ─► 短篇\n                  │\n                  ├─ 无分隔符，单篇，20000 ≤ 字数 < 30000 ─► 短篇（复述时告知超出建议上界）\n                  │\n                  ├─ 无分隔符，单文件单篇，≥ 30000 ─► 提示用户裁定\n                  │\n                  └─ 信号不明确\n                            │\n                            ▼\n                   字数兜底判定（30000 字阈值）\n                            │\n                            ├─ < 30000 且无章节结构 ─► 短篇\n                            ├─ ≥ 30000 ─────────────► 长篇\n                            ├─ 章节数 ≥ 5 ──────────► 长篇\n                            └─ < 30000 但章节数 ≥ 5 ─► 提示用户裁定\n```\n\nFile v1.0.26:references/outline-reverse-rules.md\n\n# 细纲反推规则与模板（长篇导入）\n\n本文件是逐批反推细纲任务包的正文，由 `build_outline_brief.py` 整份放进任务包，不单独加载。\n\n## 反推原则\n\n- 对本批每一章，从任务包里该章的摘要要点反推 `大纲/细纲_第XXX章.md`；要点写「摘要未写」又必须写实际内容时，回看该章正文相关段落补证据，不改正文。\n- 字数目标写任务包里测好的历史长度（`visible_chars_v1` 下的实际长度），不是重新决定创作目标，不自己估算。\n- 单元ID 取任务包附的卷纲「剧情单元（反推）」行里包含本章的单元；单元内第几拍判断不出写 `[待补充]`。\n- 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`；只反推有证据的蓝图，不为补齐字段编造关系或副线。已写成的历史章「本章禁止提前释放」写「无」；目标情绪与主角目标/关键选择不接受 `[待补充]`。\n\n## 字段映射\n\n| 摘要字段 | 细纲字段 | 转换方式 |\n|---------|---------|---------|\n| 关键事件 + 局面结果 | 核心事件 | 合并为“谁采取什么行动 → 局面如何变化”；旧摘要没有 `局面结果` 时只用 `关键事件` |\n| 章节字数 | 字数目标 + 字数口径 | 写任务包里测好的 `actual` 与 `visible_chars_v1` |\n| `基调：` + 状态变化 | 目标情绪 | 写成「前状态→后状态」：用基调枚举（紧张/轻松/悲伤/热血/爽/甜/温馨/恐怖/压抑/其他）加本章状态变化归纳，不只写一个情绪词；必须写实际内容 |\n| 关键事件 + 主角行动 | 主角目标/关键选择 | 原文里主角本章要什么、做了什么判断或选择；必须写实际内容 |\n| 所属剧情单元 | 单元ID/位置 | 取反推卷纲「剧情单元」表里包含本章的单元ID；单元内第几拍判断不出写 `[待补充]` |\n| （历史章） | 本章禁止提前释放 | 已写成的章节写「无」 |\n| 章尾钩子 | 章首承接证据 | 作为下一章开篇需要承接的等待；新的章首钩子设计目标仍标 `[待补充]` |\n| 爽点类情节点 | 爽点 | 从情节点类型推断；没有则写“无显性爽点 / [待补充]” |\n| 情节点起承转合 + 因果 | 内容概括（起因/发展/转折/高潮/结尾） | 按情节点顺序归纳，用因果链校正起因与转折；证据不足写 `[待补充]` |\n| 主线/支线/任务线索 | 情节安排（主线/辅线/事件线/感情线/逻辑线） | 从剧情单元索引与摘要反推；无证据的辅线/感情线写“无”或 `[待补充]`，不得杜撰 |\n| 涉及 + 状态变化 | 人物关系和出场顺序 | `涉及` 给出候选人物，`状态变化` 只写有证据的“前 → 后”；关键物件从证据或旧情节点补充，缺失写 `[待补充]` |\n| 全部情节点 | 情节细化 / 情节点序列 | 按表格逐行写（# / 情节点 / 功能标签 / 执行边界）；保持原顺序，功能或边界不明写 `[待补充]`，不反推逐点字数配额 |\n| 胜负/反转/收益损失 | 行动成本（可无）/收益归属 | 有明确证据才填写；行动成本可无、不硬造；否则 `[待补充]` |\n| 章尾钩子 + 局面结果 | 结尾设定和钩子 | 结尾设定写原文落到最后的具体动作或画面，章尾钩子写已存在的等待；未来设计仍标 `[待补充]` |\n\n## 细纲模板\n\n```markdown\n## 细纲（第 N 章）\n\n### 第 N 章：{章名}\n- 核心事件：{从摘要中提取}\n- 字数目标：{任务包里的 actual} 字\n- 字数口径：visible_chars_v1\n- 单元ID/位置：{反推卷纲里本章所属剧情单元ID；单元内第几拍，判断不出写 [待补充]}\n- 目标情绪：{前状态→后状态，从基调与状态变化归纳，不只写一个情绪词；必须写实际内容}\n- 主角目标/关键选择：{原文里主角本章要什么、做了什么判断或选择；必须写实际内容}\n- 章首钩子：[待补充]\n- 爽点：{从情节点推断；无明确证据写 [待补充]}\n- 本章禁止提前释放：无\n\n#### 内容概括（五段式）\n- 起因：{从情节点归纳；未知写 [待补充]}\n- 发展：{从情节点归纳；未知写 [待补充]}\n- 转折：{从情节点归纳；未知写 [待补充]}\n- 高潮：{从情节点归纳；未知写 [待补充]}\n- 结尾：{原文最后落在什么动作/画面/台词上；未知写 [待补充]}\n\n#### 情节安排（多线）\n- 主线推进：{从剧情单元索引/摘要反推}\n- 辅线推进：{无证据写“无”或 [待补充]}\n- 事件线 / 任务线：{外部事件链}\n- 感情线 / 关系线：{有证据才写；否则“无显性”或 [待补充]}\n- 逻辑线：原因 → 行动 → 结果 → 后果/新问题\n\n#### 人物关系和出场顺序\n- 出场顺序：{摘要中角色/势力/关键物件出现顺序}\n- 人物关系变化：{本章前 → 本章后；未知写 [待补充]}\n- 视角/信息差：{谁知道什么；读者知道什么；主角误判什么；未知写 [待补充]}\n\n#### 情节细化\n- 情节点序列（逐行填下表；从摘要情节点反推）：\n\n| # | 情节点（谁做了什么） | 功能标签 | 执行边界 |\n|---|---|---|---|\n| 1 | {} | {功能不明写 [待补充]} | {从原文确认本点没有释放什么；未知写 [待补充]} |\n- 行动成本（可无）/收益归属：{有证据才写；行动成本可无、不硬造；未知写 [待补充]}\n\n#### 结尾设定和钩子\n- 结尾设定：{原文落到最后的具体动作或画面；未解决问题；下一章推动力；未知写 [待补充]}\n- 章尾钩子：[待补充]\n```\n\n每章一个文件，文件名 `大纲/细纲_第XXX章.md`（三位补零，与 `正文/第XXX章_*.md` 同号）。\n\nFile v1.0.26:references/outline-reverse.md\n\n# 逐批反推细纲（长篇导入）\n\n卷纲写定后，从章节摘要反推每章细纲，一批一个任务包。进度记在导入记录（`{书目录}/.story/work/导入记录.md`）的「细纲：已验收到第 B 章」；续跑从第 B+1 章起整批重做，这一批里已经存在但没验收的细纲文件按新任务包重写覆盖。\n\n## Step 1：生成本批任务包\n\n按当前平台探测 Python 3（`python3` → `python` → `py -3`），请求第 B+1 章起的 20 章（剩下不足 20 章就到最后一章）：\n\n```text\n{PYTHON} {story-import skill 根}/scripts/build_outline_brief.py --project {书目录} --chapters {A-B}\n```\n\n脚本把反推规则与模板（[outline-reverse-rules.md](outline-reverse-rules.md) 全文）、每章按 `visible_chars_v1` 测好的历史长度与摘要要点、卷纲里覆盖本批的剧情单元行，拼成 `{书目录}/.story/work/排纲/导入细纲_第AAA-BBB章.md`。执行者要读的总量超过约 25K 字时脚本自动少排几章（可少于 10 章），以 stdout JSON 的 `chapters` 为本批实际范围、`next` 为下一批起点。缺摘要的章改用简化摘要或正文，已算进总量。\n\n长度必须由脚本测，不得用模型估算或静默跳过。找不到 Python 3 或脚本报错时停下，用一句话告诉作者卡在哪（如「第 12 章正文读不到，先把正文迁完」），原文报错放技术备注；卷纲缺失时先回结构迁移补卷纲。\n\n## Step 2：写本批细纲\n\n- **有 story-architect**（导入记录写着可用，按 SKILL.md 顶部的 Agent 兼容性检查 canonical 目录）：主会话只取任务包路径，不读包的内容。Prompt：`项目目录：{dir}\\n任务包：{任务包路径}\\n先完整读取任务包，按包里的规则与模板完成；作者已定的事在 .story/work/导入记录.md，对话内容不会传给你\\n交付后只回任务包开头要求的几项`。Antigravity 用 `invoke_subagent` + `TypeName: \"story-architect\"`。\n- **没有**：主会话完整读取任务包，自己按包写本批；不另读本文件以外的规则，也不整读拆文库摘要。\n\n## Step 3：验收与交接\n\n每批写完由主会话运行 `node {story-import skill 根}/scripts/check-outline-contract.js --json <本批细纲路径...>`：exit 1 时只按报告补缺的字段或小节（有 story-architect 时把报错原样交回同一 agent 修一次）。通过后把导入记录的细纲进度改成「已验收到第 B 章」。还有下一批时，向作者一句话说到第几章了，末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话说「继续导入」；没有子代理时每批都这样建议。全部章节细纲写完再进 Phase 4。\n\nFile v1.0.26:references/state-tracking.md\n\n# 角色状态记录格式\n\n> story-import 反推角色状态（character-state-reverse.md）时按本格式写 `追踪/角色状态/{角色名}.md`。\n\n动态状态按核心角色拆成 `追踪/角色状态/{角色名}.md`，由 `tracking_commit.py` 根据事务 JSON 整份覆盖；静态原始人设仍在 `设定/角色/{角色名}.md`。只为后续会复用的主角、反派、核心配角建快照，不为路人、一次性功能角色建文件。\n\n## 格式\n\n```markdown\n# 江晨｜当前状态\n\n- 截至章节：第10章\n- 身份：火箭军文工团宣传兵；军宣爆款创作者\n- 位置：火箭军文工团高层看片会\n- 当前目标：完成五天百万粉任务，持续做出真正能打的军宣内容\n- 身心状态：专业团队反向验证原版价值，军内认可继续抬升\n\n## 能力与资源\n- 前世 MCN 爆款运营经验\n- 《中国军魂》伴奏\n- 大师级导演能力\n\n## 关键关系\n- 钟嘉嘉持续提供军报资源\n- 周薄森和张耀祖已明确认可其创作能力\n\n## 已知信息\n- 《军报》采访稿已经过审\n- 原版视频将继续作为正式军宣内容\n\n## 未结事项\n- 五天百万粉任务尚未结算\n- 钟嘉嘉所谓“只猜对一半”仍未解释\n```\n\n## 更新规则\n\n1. 每章只记录身份、位置、目标、身心状态、能力资源、关系、已知信息、未结事项中真正发生变化的内容。\n2. 核心复用角色发生变化时，在同一事务的 `character_changes` 写变化，并在 `character_snapshots` 提交其**截至当前已写最后一章**的完整快照；工具以快照是否存在判断核心/临时角色，整份覆盖核心角色小文件，不追加历史。\n3. 修订旧章时，从修订章检查到最后已写章，按各维度和各关系对象重算当前状态，再提交完整快照；不得把最后一条单维度变化当成角色全状态。\n4. 无变化可不提交快照；核心角色重新进入当前场景时直接读取其已有小文件，并由事务工具把必要信息带入续写状态卡。\n5. 角色变化历史属于 `逐章记录/第NNN章.md`，当前快照不重复保存逐章履历。\n6. 完整 JSON 字段、4096 字节目标与 8192 字节硬上限见 [tracking-transaction.md](tracking-transaction.md)。\n\nArchive v1.0.25: 21 files, 102885 bytes\n\nFiles: references/character-state-reverse.md (4333b), references/deep-analysis.md (5952b), references/format-and-structure.md (10617b), references/import-report.md (4041b), references/import-special-cases.md (3976b), references/import-tracking.md (7939b), references/length-routing.md (6385b), references/outline-reverse-rules.md (5796b), references/outline-reverse.md (2748b), references/state-tracking.md (2263b), references/structure-mapping-long.md (22485b), references/structure-mapping-short.md (10921b), references/tracking-initialization.md (1355b), references/tracking-transaction.md (15296b), scripts/build_outline_brief.py (16652b), scripts/check-outline-contract.js (24001b), scripts/tracking_commit.py (83785b), scripts/wordcount_core.py (18338b), skill-card.md (2018b), SKILL.md (12303b), _meta.json (132b)\n\nFile v1.0.25:SKILL.md\n\n---\nname: story-import\nversion: 1.0.0\ndescription: \"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。**交付物是写作工程**：把作者已有的书重建为可续写的工程（项目结构 + 拆文库分析资产），让作者能直接接着写。`拆文库/{导入书名}/` 是重建工程的数据源，保留不丢弃，但不是交付物本身；对作者以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n> Agent 兼容性：只检查当前运行时的 canonical 目录：Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`（`agent-name` 为目标 agent 名），不得因其他端文件存在而误判。Codex 使用同名 `agent_type`；Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时，必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`；OpenCode 用 `subagent` 工具的 `agent` 参数。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 并提示重新运行 `/story-setup` 后新开会话；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n先分析后迁移：深度分析复用现成管道（长篇 `/story-long-analyze`，短篇 `/story-short-analyze`），方法、模板与质量检查由 analyze skill 自带，本 skill 不另维护；再把分析结果迁移为项目结构。\n\n## 时刻表与交接\n\n导入是一串时刻，每个时刻只读自己的文件；后一时刻只靠落盘文件接上前一时刻，不靠对话记忆。\n\n| 时刻 | 作者确认什么 | 读什么 | 落盘 |\n|---|---|---|---|\n| Phase 1 确认来源与范围 | 书名、题材、平台、篇幅、残稿怎么处理、外部对标、先不先装环境 | 本文件 Phase 1；判篇幅读 [length-routing.md](references/length-routing.md) | 导入记录 |\n| Phase 2 深度分析 | 不打扰作者 | [deep-analysis.md](references/deep-analysis.md)，再照它进入拆书流程 | `拆文库/{导入书名}/` |\n| Phase 3 结构迁移 | 原文没分卷时，卷怎么分 | 长篇 [structure-mapping-long.md](references/structure-mapping-long.md)；短篇 [structure-mapping-short.md](references/structure-mapping-short.md) | 项目 `设定/`、`正文/`、`大纲/`（短篇为三个单文件） |\n| 逐批反推细纲（长篇） | 不打扰作者 | 本批任务包（见 [outline-reverse.md](references/outline-reverse.md)） | `大纲/细纲_第XXX章.md` |\n| Phase 4 追踪初始化（长篇） | 不打扰作者 | [import-tracking.md](references/import-tracking.md) | `追踪/` |\n| Phase 5 汇报与激活 | 请作者核对、拍板的事 | [import-report.md](references/import-report.md) | `.active-book` |\n\n**导入记录**：`{书目录}/.story/work/导入记录.md`（书目录：长篇 `{导入书名}/`，短篇 `{短篇标题}/`），Phase 1 建立，格式见下方 Step 5。每个时刻开头先读它，不回翻对话；时刻交付前把作者在对话里新定的事（决定、偏好、红线、否掉的方案）和进度写回它，再往下走。\n**换上下文**：深度分析、每批细纲、追踪初始化读的东西多。每个时刻交付后，汇报末尾加一句「下一步建议新开一个对话，说『继续导入』，会更专注」；作者要在本对话继续也照做。作者说「继续导入」时，在项目根下找进度没勾完的 `*/.story/work/导入记录.md`，从第一个未完成的进度接着做。\n**导入续写入口顺序**：用户只问流程时先答结论再收原文——推荐先 `/story-setup`，新开对话 `/story-import`，导完 `/story-long-write 日更`；也可直接导入，缺环境时 Step 4 给选择。导入过的书、旧版追踪的书、超过 200 章的书按 [import-special-cases.md](references/import-special-cases.md) 处理。\n\n---\n\n## Phase 1：确认来源与范围\n\n### Step 1：确认意图\n\n默认目标是可续写的写作工程。意图不明时主动问：「你是想把这本书做成可续写的写作工程（设定/大纲/正文/追踪，能接着写第 N+1 章），还是只要一份拆文库分析？」只要分析 → 直接用 `/story-long-analyze`（短篇 `/story-short-analyze`），到拆文库为止，不建导入记录、不做迁移。\n\n### Step 2：拿到原文\n\n问：「你要导入哪本书？请提供文件路径或直接贴文本。」单文件（.txt/.md）按章节分隔符自动切分；目录按文件名排序合并；直接贴的文本在 Step 5 书名定下后原样存成 `{书目录}/.story/work/导入原文.md`（换对话后对话里的文本就拿不到了）；都没有就请作者提供。本时刻只确认源文件就绪，原文备份到 `拆文库/{导入书名}/原文/` 由 Phase 2 的拆解管道负责，这里不另备份。\n\n### Step 3：基本信息确认\n\n1. 自动检测书名（如有）、总章数、总字数、章节格式。\n2. 请作者确认：导入书名、题材类型、目标平台（起点/番茄/晋江/其他）、是否完本（半成品写到第 N 章）、**篇幅**（长篇/短篇，按 length-routing.md 检测：用户显式声明 > 结构信号 > 字数兜底，向作者复述结果请其确认；决定 Phase 3 走 3-L 还是 3-S）、**最后一章是否完整**——残稿时告诉作者，请他决定「接着残章写」还是「先补完再导入」，本 skill 只记录决定，不替作者选。\n3. 外部对标（可选、与导入源分离）：作者已明确指定时记录 `{对标书名}`，并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物；不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。未指定时不追问，记为“未绑定”。\n4. 向作者展示检测到的章节范围、字数、篇幅、最后一章状态与“外部对标：{对标书名/未绑定}”，确认后往下走。\n\n### Step 4：写作环境检测\n\n先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁；旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。通过后在当前运行时的 canonical 目录检查 `chapter-extractor`（Claude/OpenCode/Antigravity 为同名 Markdown，Codex 为同名 TOML），顺带记下 `story-architect` 是否可用（逐批细纲用）。`.story-deployed` 的 `target_cli` 含 `zcode` 时项目 agents 缺失是预期状态：不提示重复部署，直接串行 solo/direct 并报告 fallback。\n\n部署标记缺失、版本无效/过期，或当前端 agent 不可用（且不是已部署 ZCode 项目）时这样问：\n\n> 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书，主对话不会被整本书塞满；不装也能导，只是全部在主对话里做，慢一些，结果一样完整。你想：1. 先装环境（推荐）：运行 `/story-setup`，装完再说\"导入\" 2. 直接导入，慢一点也行」\n\n选 1 → 先按 Step 5 把已确认的信息写进导入记录（写作环境记「待装」），暂停导入，装完新开对话说「继续导入」；选 2 → Phase 2 由主会话串行处理，产物完整。\n\n### Step 5：写导入记录\n\n确认完把结果写进 `{书目录}/.story/work/导入记录.md`（目录不存在就建；贴入的原文同时存到同目录），再进入 Phase 2：\n\n```markdown\n# 导入记录：《{导入书名}》\n- 原文：{源文件或目录路径；贴入文本写 .story/work/导入原文.md}\n- 篇幅：{长篇 | 短篇}（{判定依据一句}）\n- 范围：第 1–{N} 章，约 {Y} 万字；{完本 | 半成品}；首期深拆：{全书 | 第 1–50 章，其余用简化摘要（超过 200 章）}\n- 最后一章：{完整 | 残稿：第 {N+1} 章写了一半，作者决定{接着残章写 | 先补完再导入}}\n- 题材：{题材类型}；目标平台：{平台}\n- 外部对标：{对标书名 | 未绑定}\n- 写作环境：{已装，分析助手可用{，story-architect 可用} | 待装（继续时重新检测） | 未装，作者选直接导入（主会话串行） | ZCode 串行}\n- 卷划分：{待 Phase 3 | 按原文卷界 | 作者已确认：1–40 / 41–95 / …}\n- 作者交代：{偏好、红线、否掉的方案，逐条；没有写「无」}\n\n## 进度\n- [ ] 深度分析\n- [ ] 结构迁移（卷划分已确认、卷纲已写）\n- [ ] 细纲：已验收到第 {B} 章（长篇；续跑从第 {B+1} 章整批重做）\n- [ ] 追踪初始化（长篇，检查通过）\n- [ ] 汇报与激活\n```\n\n---\n\n## Phase 2：深度分析\n\n读 [deep-analysis.md](references/deep-analysis.md)，按导入记录的篇幅与写作环境进入对应拆解管道，自动跑完本次需要的范围，不把拆书中途的停靠询问甩给作者。完成后勾进度。\n\n## Phase 3：结构迁移\n\n长篇（3-L）按 [structure-mapping-long.md](references/structure-mapping-long.md) 的迁移步骤把 `拆文库/{导入书名}/` 迁成 `{导入书名}/` 工程；原文没有明确卷界时，卷划分必须等作者确认，确认结果写进导入记录。细纲最后一步按 [outline-reverse.md](references/outline-reverse.md) 分批反推。短篇（3-S）按 [structure-mapping-short.md](references/structure-mapping-short.md) 迁成 `{短篇标题}/` 的三个单文件，**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录，迁完直接到 Phase 5。\n\n## Phase 4：追踪初始化（仅长篇）\n\n读 [import-tracking.md](references/import-tracking.md)，用本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成 `追踪/`，`check` 通过后勾进度。\n\n## Phase 5：汇报与激活\n\n读 [import-report.md](references/import-report.md)：自检、按模板向作者汇报、设置 `.active-book`。\n\n---\n\n## 流程衔接\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 导入完想继续写 | story-long-write / story-short-write | `/story-long-write` + \"日更\" / `/story-short-write` |\n| 导入完想审查质量 | story-review | `/story-review` |\n| 想拆一本外部对标书 | story-long-analyze / story-short-analyze | `/story-long-analyze` / `/story-short-analyze` |\n| 从零开新书 | story-long-write / story-short-write | `/story-long-write` + \"开书\" / `/story-short-write` |\n| 项目未装写作环境 | story-setup | `/story-setup` |\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.0.25:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-import\",\n  \"version\": \"1.0.25\",\n  \"publishedAt\": 1790490978022\n}\n\nFile v1.0.25:references/character-state-reverse.md\n\n# 核心角色当前快照反推规则（长篇导入）\n\n> 仅用于 `story-import` 导入长篇。输出不是一份不断追加的角色历史，而是初始化事务里的 `character_snapshots`；`tracking_commit.py init` 会为每个核心角色生成 `追踪/角色状态/{角色名}.md`。\n\n## 一、输入来源\n\n只从已经落盘的拆书产物反推，不重读 `原文/`：\n\n| 输入 | 用途 |\n|---|---|\n| `拆文库/{书名}/角色/{角色名}.md` | 身份、能力、目标、成长弧线、出场记录 |\n| `拆文库/{书名}/角色/角色关系.md` | 截至最后完整章的关键关系 |\n| `拆文库/{书名}/章节/第N章_摘要.md` | 从 `涉及` 锁定相关章，从 `状态变化`、`信息变化`、`局面结果` 和 `章尾钩子` 提取最后位置、最新状态、已知信息与未结事项；旧摘要缺字段时回退其关键事件与情节点 |\n| `拆文库/{书名}/剧情/*.md` | 阵营/身份转折、阶段目标和长期冲突 |\n| 初始化事务中的伏笔与时间线候选 | 核对角色未结事项及其可知范围 |\n\n## 二、追踪对象\n\n只为主角、反派、核心配角建立独立快照。临时路人和只承担一次功能的角色不建文件。边界不清时优先不建，后续角色真正进入复用状态时再由逐章事务创建。\n\n## 三、反推方法\n\n对每个核心角色，以最后完整导入章 N 为截面，分别确定：\n\n1. `identity`：截至 N 章实际成立的身份/职业，不写未来晋升计划。\n2. `location`：最后落点或下一章开始前可确定的位置。\n3. `goal`：角色当前正在追求的具体目标。\n4. `state`：身体、情绪、名望、立场中会影响续写的当前状态；只写必要信息。\n5. `abilities_resources`：当前确实掌握的能力、物品、权限、作品或人脉，最多 8 条。\n6. `relationships`：与后续会复用角色的当前关系，最多 8 条。\n7. `knowledge`：角色本人已经知道、且会影响其行为的信息，最多 8 条。作者真相不能误写成角色已知。\n8. `open_threads`：角色相关的未结事项，最多 8 条；必须有已写正文证据，纯未来设计留在大纲。\n\n若同一字段有多次变化，只取截至 N 章的当前值，不把变化史塞进快照。历史变化由后续 `逐章记录/第NNN章.md` 承担；导入旧章不补造这些记录。\n\n## 四、初始化 JSON 形状\n\n以下示例来自 demo《让你管账号，你高燃混剪炸全网》第 10 章：\n\n```json\n{\n  \"江晨\": {\n    \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n    \"location\": \"火箭军文工团高层看片会\",\n    \"goal\": \"完成五天百万粉任务，继续做出真正能打的军宣内容\",\n    \"state\": \"专业团队重拍版反向坐实手机原版的价值，军内认可继续抬升\",\n    \"abilities_resources\": [\n      \"前世 MCN 爆款运营经验\",\n      \"《中国军魂》伴奏\",\n      \"大师级导演能力\"\n    ],\n    \"relationships\": [\n      \"钟嘉嘉持续提供军报资源\",\n      \"周薄森和张耀祖已明确认可其创作能力\"\n    ],\n    \"knowledge\": [\n      \"《军报》采访稿已经过审\",\n      \"高层决定继续采用《诸君，且听龙吟》手机原版\"\n    ],\n    \"open_threads\": [\n      \"五天百万粉任务尚未结算\",\n      \"钟嘉嘉所谓只猜对一半仍未解释\"\n    ]\n  }\n}\n```\n\n工具据此生成的文件固定包含：截至章节、身份、位置、当前目标、身心状态、能力与资源、关键关系、已知信息、未结事项。模型不得另写一套 Markdown 模板。\n\n## 五、残稿与分批导入\n\n- 最后一章是残稿：所有快照截至残稿之前的最后完整章；残稿中的动作、获得物、关系变化不得提前生效。\n- 分批导入：快照只表示本次已导入范围的当前状态；扩大导入范围时重新执行一次完整导入，不在旧快照上追加历史段落。\n\n## 六、质量检查\n\n- [ ] 每个文件对应一个核心角色，无功能角色堆积\n- [ ] 所有字段都是截至最后完整章的当前值\n- [ ] 角色已知信息没有混入作者真相\n- [ ] 未结事项都有正文证据，未来设计仍在大纲\n- [ ] 单角色快照目标不超过 4096 字节；确有必要可放宽，但不得超过 8192 字节硬上限\n- [ ] `tracking_commit.py check` 通过\n\nFile v1.0.25:references/deep-analysis.md\n\n# 深度分析时刻：导入场景怎么驱动拆解管道\n\nPhase 2 只读本文件，再按篇幅进入对应 analyze skill；拆书的方法、产物结构、分批、恢复与质量检查全部由 analyze skill 自己的流程负责，本文件只写导入场景的取值。篇幅、原文位置、题材和写作环境都读导入记录（`{书目录}/.story/work/导入记录.md`），不回翻对话、不重新问作者。\n\n| 篇幅 | 进入 | 产物目录 |\n|------|------|---------|\n| 长篇 | `/story-long-analyze` 的统一管道（旧成果直用 / 按需增强 / 全新或部分续跑） | `拆文库/{导入书名}/` |\n| 短篇 | `/story-short-analyze` 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n## 长篇：先兼容识别，再决定是否续跑\n\n先运行 story-long-analyze Phase 1 的只读检查器（`inspect_existing_assets.py`），登记实际文件和覆盖范围；检查建议不能覆盖下列语义规则：\n\n新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`；旧成果直接使用不以缺少该字段为失败。\n\n- **旧成果已完成且足以重建写作工程**：直接进入 Phase 3。旧 `_progress.md` 版本、缺少 `chapter_index.csv`，或缺少本次新增字段，都不能单独成为重拆理由。\n- **旧成果可以导入，但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**：先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强，不回读原文。不得重跑已完成章节，也不得用空壳文件让门禁通过。\n- **只完成一部分或新旧产物混存**：验证并保留已完成部分，从首个缺失的连续章节块续跑，最后统一聚合。进度记录与实际文件冲突时，以可验证文件为准并记录冲突。\n- **全新导入**：运行 Stage 0-6 完整管道。\n\n导入需要自动完成本次判定出的必需范围，不把 Stage 1 停靠询问甩给作者。全新导入命中「完整拆解、一次跑完」路径；旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时，缺少新增字段只记录能力限制，不阻断导入。\n\n- 措辞示例（全新）：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- 措辞示例（旧成果）：声明「先复用并校验现有成果，只补当前导入缺失的章节或分析，不覆盖用户原成果」。\n- **兜底**：若全新导入实际仍停在 Stage 1，自动选择继续；若旧成果任务停靠，则按已登记的缺失范围继续，不能扩大成全书重跑。\n- 派发：导入记录写着分析助手可用时，属自动续跑，按 story-long-analyze 的「有限并行」档派 `chapter-extractor`（每轮 3 批），每个连续章节批次只调用一次，同次生成逐章事实与跨章观察；作者明确要求时改用串行或不限批次顺序。作者选了直接导入（或 ZCode）时，Stage 2 由主会话按相同连续章节块契约串行处理，不能退回每章一次独立调用；产物仍完整，仅速度变慢。\n- 超过 200 章的作品按 [import-special-cases.md](import-special-cases.md)「超过 200 章的作品」分批拆解。\n\n## 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用导入记录里的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在导入 Phase 1 判定并经作者确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；导入记录里已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给作者，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按导入记录里锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给作者**。\n\n## 交付\n\n拆解管道自带的质量检查通过、产物落在 `拆文库/{导入书名}/` 后，在导入记录勾「深度分析」。拆书流程自带的完工汇报（长篇「全部拆完」、短篇「可以运行 /story-short-write 写下一篇」）在导入里不用，由这里交代：向作者用一两句故事话说拆到了什么（几章、主要人物、主线一句），末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话。拆书中断时不在这里另做恢复：重新进入同一拆解管道，由它按自己的进度文件续跑。\n\nFile v1.0.25:references/format-and-structure.md\n\n# 正文格式与小节结构\n\n> 写作前必读。以下格式是当前仓库约定的默认正文交付格式；用户或目标平台有明确要求时，以用户/平台要求覆盖。\n>\n> **适用范围**：段落格式（戏剧单元/镜头优先，短段为底色，长段用于完整推理、氛围和情绪链）和对话格式适用于所有体裁。小节(beat)结构仅适用于短篇；小节不设统一最低字数。长篇按 `visible_chars_v1` 测量同口径细纲 `字数目标`：内部带 ±12%，用户带 ±15%。\n\n---\n\n## 章节标记\n\n默认格式（按灵活度排序）：\n\n| 格式 | 平台适用 | 示例 |\n|------|----------|------|\n| `###1.` | 短篇默认 | `###1.` `###2.` `###3.` |\n| `###第一章` | 部分平台 | `###第一章` `###第二章` |\n| `1.`（纯数字） | 知乎 | `1.` `2.` `3.`（无 ### 前缀） |\n\n**规则**：全文统一一种格式，不要混用。短篇推荐 `###1.` 或纯数字，简洁高效。\n\n---\n\n## 段落格式\n\n### 核心规则：戏剧单元优先\n\n默认交付排版是**按戏剧单元/镜头自然断段，段落紧密排列**。不要把固定字数当成强制切刀；先判断“一件事/一个推理链/一个情绪变化”是否完成。\n\n- 一段承载一个戏剧单元：一个动作链、一个线索发现、一次视线切换、一轮心理判断，或一条连续的氛围/推理/情绪链。\n- 场景结束、一件事结束、新动作、新物件、新信息、新对话另起一段；同一瞬间的发生、感知、反应应织在一起，不拆成动作层/感知层/反应层。\n- 正文相邻段落之间**只允许一个换行符 `\\n`**；不得出现空行或连续换行 `\\n\\n`（紧密排列）。\n- 无缩进（平台渲染器自行处理，不需要 `　　` 或空格）。\n- 长度只作诊断：读起来拥挤、混入多个拍点、或手机屏上难以跟读时才拆；完整推理、氛围铺陈、情绪递进未结束时，允许稍长段保留连贯性。\n\n### 段落节奏（长短交错 + 疏密有别）\n\n短段快读，是网文手机阅读的底色；长段负责承载完整推理、氛围和情绪沉淀。**忌通篇同长度**，也忌把每段按同一字数阈值切开：\n\n- **长短交错**：高潮、打脸、反转压到最短（单句成段）；推理链、环境压迫、情绪沉淀、章节收束可保留较长段，让读者读完一个完整变化。\n- **疏密有别（详略）**：爽点、转折 beat 写密（感知、动作、细节铺满）；过场、连接 beat 写疏（1-2 句带过，不平均用力）。每个 beat 一样长、一样细，正是 AI 腔的来源。\n- **不过度碎片化**：连续多个极短段若仍属于同一镜头/同一件事，应合并成自然段，避免像提纲或诗行。\n\n### 主语与角色名节奏\n\n角色名不宜一味省略，也别每句都点名。按“主语重置”使用：\n\n- 段首、场景切换、多人同场、或主语可能混淆时，用主角名/角色名建立视角。\n- 同一段或同一动作链内，优先混用代词、动作承接和合理省略，避免每句都以同一角色名开头。\n- 关键转折、情绪爆点、身份反差或读者需要重新盯住主角时，可以再次点名强化。\n- 审查主语节奏看“读起来是否打磕巴”，不按全章出现次数一刀切；只有连续句/连续段无主语重置却反复点名，才算主语过密。\n\n---\n\n## 对话格式\n\n### 对话标记\n\n按目标平台/用户要求选择；未指定时使用默认格式：\n\n| 优先级 | 格式 | 适用平台 |\n|--------|------|----------|\n| 首选 | `\"说话内容\"` | 短篇默认、番茄 |\n| 平台/项目指定 | `「说话内容」` | 知乎盐言短篇、部分古言、日式或用户指定 |\n\n**默认用 `\"\"`**；用户或平台指定盐言风格时改为 `「」`，不要把 `「」` 视为错误。\n\n### 对话规则\n\n1. 对话**独立成行**，不嵌在叙述段落中\n2. 对话标签按需：高频或公式化的「他说」「她道」「他笑了笑说」用动作描写替代；普通「说」低频使用可保留（与「8 条绝对禁止」中「避免对话标签机械化」一条一致）\n3. 两人对话连续出现时，省略标签，靠内容区分说话人\n\n**正确示例**：\n```\n她把杯子放下。\n\"你走吧。\"\n他没有动。\n\"我说，你走吧。\"\n```\n\n**也合法（普通「说」低频使用）**：\n```\n她把杯子放下。\n\"你走吧。\"她说。\n他没有动。\n\"我说，你走吧。\"\n```\n\n**错误示例**：\n```\n她把杯子放下，说道：\"你走吧。\"他没有动，她又说：\"我说，你走吧。\"\n```\n\n---\n\n## 语气标点谱系\n\n标点服务语气、人物声线和情绪节奏，不能通篇句号化，也不能为了“丰富”随机堆砌符号。先判断当前句子的功能，再选择标点：\n\n| 语气 / 功能 | 标点策略 | 防线 |\n|---|---|---|\n| 压迫 / 冷静 / 克制 | 短句、逗号、句号，必要时用冒号压出判断落点 | 不人工加感叹号；克制不是每句都平铺句号 |\n| 质问 / 试探 / 反问 | 问号 + 短促追问片段，配合动作停顿 | 避免每句话都以 `？` 结尾 |\n| 惊讶 / 爆发 / 打脸 | 真正爆点可用 1 个感叹号，连续爆发最多 1-2 处 | 禁止 `!!!`、整段喊叫式感叹 |\n| 犹豫 / 吞咽 / 未说完 | 逗号、句号、短句断开、动作 beat | 不用 `……` 制造停顿；优先用动作和句长变化 |\n| 被打断 / 拖长音 | 不使用 `——`；改用动作打断、换行、短句或未完成动作 | 正文和对话都禁止 `——` / `—` / `--` |\n| 信息揭示 / 判断落点 | 冒号、分号或单句成段制造落点 | 保持手机阅读友好，不写论文式分号串 |\n\n执行规则：\n- 写对话时先看角色关系和权力位置：强势角色常短句收束，试探角色多问号和半句，崩溃角色才允许少量感叹/省略。\n- 写叙述时用句长、逗号停顿和单句成段制造节奏；默认不用破折号硬造节奏；本书文风明确授权的功能性用法保留。\n- 精修时检查两类问题：**通篇句号化**（语气全被压平）与**随机标点堆砌**（问号/感叹号不承载情绪功能，或用省略号/破折号硬造停顿）。\n- 引号风格按项目/平台约定；知乎盐言的 `「」` 是合法对话格式，`quote-mode keep` 时不得擅自改掉。\n\n---\n\n## 小节（beat）结构\n\n### 基本规则\n\n- 用数字编号（`1` `2` `3`）分割小节，每个小节是一个完整的叙事 beat\n- 小节长度服从其叙事职责，不设统一最低字数；整篇按锁定的交付范围控制，长篇章节按细纲「字数目标」处理\n- 小节数由情节阶段和转场需要决定；不为平均分配字数拆分完整动作链，也不把承担不同职责的小节硬合并\n- 每小节推进一个明确的情节点\n\n### 小节内部结构\n\n每个小节至少完成第 1 项，其余按本节职责选用：\n\n1. **一个主事件** + **一个或多个真实推进**（风险、信息、关系、资源、决定、行动或读者理解至少改变一项；相关情节点可由同一动作链或对话同时兑现，不为数量新增阻碍、对话或冲突）\n2. **情绪或压力落点**（确有变化时写清读者感受如何变化；任务、推理、手艺或等待链不强配情绪转折）\n3. **读者模型或下一步变化**（新信息、旧信息改义、决定、行动或后果均可，不强配新事实）\n4. **对白按功能使用**（需要时改变信息、策略、权力、关系或下一步行动；独自发现、核验证据、等待、手艺等场景可以无对白）\n5. **推进单元按需揉进信息维度**：发生是主干，感知和反应只在提供新信息时织入同一镜头（参考 writing-craft.md 场景写法）\n\n\n### 小节之间的衔接\n\n- 小节结尾留一个钩子（悬念/未解决的情绪/新问题）\n- 下一节开头快速接续，不要重新铺垫\n- 情绪跨节递进：每一节的情绪强度 ≥ 上一节。例外：峰值情绪（反转节）后允许维持 1 节不降，但不允许骤降\n\n---\n\n## 平台对话格式覆盖表\n\n| 平台 | 章节标记 | 对话格式 | 特殊要求 |\n|------|----------|----------|----------|\n| 知乎盐言 | `1.` | `「」` | 导语即正文开头几段，不另标 |\n| 番茄 | `###第一章` | `\"\"` | 首段需有吸引力 |\n| 红果 | `###1.` | `\"\"` | 无 |\n\n**通用原则**：用户未指定平台时，默认使用短篇通用格式（`###1.` + `\"\"`）；用户或平台指定盐言风格时，`「」` 是允许的。\n\n---\n\n## 8 条绝对禁止\n\n以下规则在写作全程执行，不因题材或风格而变：\n\n1. **禁止机械按字数分段**：不要因为超过某个字数就强拆；先判断段落是否仍是一个完整戏剧单元。若混入多个动作/信息/视线切换才拆，完整推理、氛围、情绪链可保留稍长段\n2. **禁止段间空行**：正文相邻段落之间只允许一个换行符 `\\n`，不得出现空行或连续换行 `\\n\\n`\n3. **避免对话标签机械化**：高频或公式化的「他说」「她道」「他笑了笑说」用动作/上下文替代；普通“说”可保留\n4. **禁止缩进**：不使用 `　　`（全角空格）或半角空格缩进\n5. **禁止正文段落 Markdown 渲染**：除统一的小节/章节标记（如 `###1.`）外，正文段落中不使用加粗 `**`、斜体 `*`、标题 `#`、分隔线 `---` 等 Markdown 语法\n6. **默认停顿写法**：正文默认用句号、逗号、换行、动作 beat 或短句承担停顿；本书明确选择的功能性破折号/省略号按调用方文风裁决与书级白名单保留。标点偏好不属于不可覆盖的文件结构协议。\n7. **禁止通篇句号化或随机标点堆砌**：标点必须跟语气/人物声线/情绪功能匹配；该质问时用问号，该爆发时少量感叹；犹豫、吞咽、未说完用动作或句长变化表达，不用 `……` / `——` 硬造停顿，也不得无功能地乱撒 `？`/`！`\n8. **禁止正文混入章节元信息**：章节号只允许出现在标题/小节标记/文件名/追踪记录中。正文叙述、对话、心理描写里不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词；要改成角色能感知的事件锚点或相对时间，例如把“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。例外：角色在故事世界内真实阅读/讨论“第X章”文本，或真实身为作者/读者并谈论读者身份时，可保留相应词。\n\nFile v1.0.25:references/import-report.md\n\n# 汇报与激活时刻\n\nPhase 5 只读本文件和导入记录（`{书目录}/.story/work/导入记录.md`）。前面每个时刻已按自己的清单验收后才勾进度，这里不重读迁移规则。\n\n## Step 1：收尾自检\n\n这是你自己的自检，不念给作者：全部通过就不提；没通过先回到对应时刻修，修不了才用故事话告诉作者影响和办法。\n\n- 导入记录的进度全部勾上（短篇没有细纲与追踪两项）。\n- **长篇**：`正文/` 章节文件数等于导入范围章数；每章都有 `大纲/细纲_第XXX章.md`，且对全部细纲再跑一次 `node {story-import skill 根}/scripts/check-outline-contract.js --json {书目录}/大纲/细纲_第*.md` 通过；再跑一次 `{PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {书目录}`（按 `python3` → `python` → `py -3` 探测）通过；原文没分卷时卷划分已经作者确认；`拆文库/{导入书名}/` 未被复制到 `对标/`。\n- **短篇**：`正文.md`、`设定.md`、`小节大纲.md` 都在，未误建 `追踪/`、`大纲/`、`正文/`。\n\n## Step 2：导入完成报告\n\n报告写给作者：导进来了什么、哪几处请他核对、要他拍板的事、下一步怎么说。字段名、脚本名、校验结果、字数口径、伏笔/事件编号不进报告；编号只能跟着故事描述出现（如「玉佩的来历（F003）」）。核对项要落到具体人和事，一次最多 5 条。\n\n**长篇**：\n\n<!-- author-report -->\n```md\n=== 《{导入书名}》导入完成 ===\n导进来了：第 1–{N} 章，约 {Y} 万字{；第 {N+1} 章只写了一半，按你的决定{接着残章写 | 先补完}}。项目在 `{项目目录}`。\n\n我整理出了：\n- 人物：{M} 个角色档案，主要人物写到第 {N} 章时的处境已记下（如「{角色}：{一句话现状}」）\n- 大纲：全书大纲、{V} 卷卷纲、每章细纲\n- 还没收的线：{K} 条（如「{伏笔的故事描述}」）\n- 时间线：真相和读者目前知道的分开记，续写时不会提前泄底\n- 设定：{设定文件数} 份世界观资料\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {最拿不准的一处，写成具体问题，如「第 5 章的黑衣人和第 2 章的车夫是同一人吗？」}\n2. {如「还没收的线里有没有漏的？我列的是：……」}\n\n需要你决定：{仅在有待定事项时写，如「原文没分卷，我按剧情分成 3 卷（1–40 / 41–95 / 96–{N} 章），这样分可以吗？」}\n\n下一步：说「日更」就从第 {N+1} 章接着写；想先检查导入质量，说「审一下」。\n```\n\n**短篇**：\n\n<!-- author-report -->\n```md\n=== 《{短篇标题}》导入完成 ===\n导进来了：全文约 {Y} 字，分成 {N} 个小节。项目在 `{项目目录}`。\n\n我整理出了：\n- 设定：核心框架和续写要守住的人物、情绪基调\n- 小节大纲：{N} 节，每节讲了什么\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {标了 [待补充] 的地方，写成问题，如「女主最后原谅他了吗？原文没写明」}\n2. {核心反转前埋的线索我找到的是：……，有没有漏的？}\n\n下一步：{没写完：运行 `/story-short-write` 说「接着写」，从第 {N+1} 节往下写 | 已完本：想改稿说「审一下」}。\n```\n\n## Step 3：项目激活\n\n- 设置 `.active-book` 指向导入的书名/标题目录，在导入记录勾「汇报与激活」。\n- 确认项目可以被对应写作 skill 识别（长篇 → story-long-write，短篇 → story-short-write）。\n- 可选验证：如果当前运行时的 canonical 目录已部署 story-explorer agent，可 spawn 交叉验证迁移数据完整性；Antigravity 检查 `.agents/agents/story-explorer/agent.md` 并用 `invoke_subagent` + `TypeName: \"story-explorer\"`。Prompt：`项目目录：{dir}\\n查询类型：progress\\n查询参数：导入验证`\n\nFile v1.0.25:references/import-special-cases.md\n\n# 导入的特殊情况\n\n只在下面几种情况读；普通导入不读。\n\n## 流程答疑\n\n用户问「导入续写先装环境还是先导入」「已有小说怎么续写」「导入流程」这类问题时，先直接给结论，再继续收集原文——避免用户只想确认流程却被直接要求贴原文：\n\n1. **推荐顺序**：先 `/story-setup` 装好写作环境，新开或刷新会话后运行 `/story-import`，最后用 `/story-long-write 日更` 或 `写第N章` 续写。\n2. **也可以直接 `/story-import`**：导入会在深度分析前检查写作环境；没装时给「先去装」或「直接导入，慢一点」两种选择。\n3. **已导入过的当前协议项目**（书名目录下有 `追踪/_tracking-state.json`）：不要重复跑完整导入；直接进入书名目录，确认 `.active-book` 指向正确书目，再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。书目录下有 `{书目录}/.story/work/导入记录.md` 且进度没勾完时，是上次导入做到一半：从第一个未完成的进度接着做。\n4. **v0.7.2 及更早的旧追踪项目**（有 `追踪/` 和正文，但没有 `追踪/_tracking-state.json`）：日更会停下要求重新导入，但**不需要重跑全书拆解**，只重建追踪，见下一节。\n\n## 旧追踪项目迁移\n\n书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时，项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响，**只需重建 `追踪/`**，不重跑深度分析、不碰正文：\n\n1. 数清最后一个完整章号 `N`（`正文/第NNN章_*.md` 的最大值）。\n2. 从旧 `追踪/` 现有文件（角色状态、伏笔、时间线等，文件名按项目实际情况）和最近 3-5 章正文，重建当前状态：核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [character-state-reverse.md](character-state-reverse.md)。\n3. 按 [import-tracking.md](import-tracking.md) 构造初始化事务（其中点名的 tracking-initialization.md 完整读取），`last_chapter` 写 `N`（第 1..N 章不伪造逐章记录），执行 `tracking_commit.py init`。\n4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析，留给作者查阅。\n5. 跑 `tracking_commit.py check` 确认通过，再回 `/story-long-write 日更` 续写。\n\n重建结果以第 2 步的证据为准；拿不准的字段留空或写进 `continuity_risks`，不杜撰。用户明确要求重拆全书时才走完整导入。\n\n## 超过 200 章的作品\n\n仅长篇。短篇为单文件全量迁移，无增量导入需求。拆解可以分批，追踪初始化必须一次覆盖全部已写章节：\n\n1. **拆解分批**：首期只深拆前 50 章 + 全书概要，后续按需补拆更多章节到 `拆文库/`。\n2. **追踪一次到位**：初始化事务的 `last_chapter` 写**最后一个已写完的章号 N**，不是首期拆解的 50。`imported_through_chapter` 由 `init` 一次写定、之后不再推进，逐章事务只接受 N+1 起的章号；第 1..N 章不伪造逐章记录，续写从 N+1 开始。若 init 时误写成 50，第 51..N 章仍可逐章 `append` 补上（一章一份事务，章号必须连续），只是要为已写好的旧章逐章构造事务；不要删 `追踪/` 重来——`_旧追踪存档/` 也在里面。\n3. **简化摘要**：未深拆的章节每章写一份约 200 字的简化摘要（谁做了什么、局面怎么变、章尾留下什么等待），固定落在 `{书目录}/.story/work/简化摘要/第NNN章.md`（三位补零）。细纲任务包在拆文库没有该章摘要时自动取这里；追踪初始化反推当前状态也从这里取证。\n\n首期深拆范围写进导入记录「范围」一行，细纲与追踪时刻据此取证据。\n\nFile v1.0.25:references/import-tracking.md\n\n# 追踪初始化时刻（仅长篇）\n\nPhase 4 只读本文件、[tracking-initialization.md](tracking-initialization.md)（初始化事务的原始 JSON 与导入边界，完整读取）和 [character-state-reverse.md](character-state-reverse.md)（核心角色快照反推）。导入截止章、残稿决定、卷划分读导入记录（`{书目录}/.story/work/导入记录.md`）；证据只取已落盘的 `拆文库/{导入书名}/` 与项目 `大纲/`，不重读原文。续写时的逐章事务与导入无关，不读。\n\n导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态，禁止模型分别写最终文件。\n\n## 语义准备顺序\n\n1. **导入截止章**：把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`；导入旧章没有日更事务，不得为第 1..N 章伪造逐章增量，也不额外生成一份重复当前状态的叙事基线。\n2. **核心角色当前快照**：从拆书产物反推主角、反派、核心配角的截至 N 章状态，按角色写入 `character_snapshots`，工具生成 `追踪/角色状态/{角色名}.md`；算法见 character-state-reverse.md。\n3. **伏笔当前行**：从有正文证据的铺垫/回收事件生成 `foreshadow`（识别方法见下）。每个 ID 只保留当前状态一行；尚未实际埋设的未来设计留在大纲，不写 `伏笔.md`。\n4. **事实与读者认知**：把关键事件生成到 `timeline_events`（提取方法见下）。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态；未来计划揭示章不得伪装成已发生事实。\n5. **续写状态卡输入**：准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏，不把文风、文件索引、普通待办或质检计数塞进续写状态卡。\n6. **执行初始化**：事务写到 `{书目录}/.story/work/init.json`（成功前保留，不写系统 `/tmp`、书根、`大纲/` 或 `正文/`）。按当前平台探测 Python 3（`python3` → `python` → `py -3`），执行：\n\n   > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理：`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议。旧内容保留供作者查阅，不参与解析，当前状态完全由本次导入输入决定；校验失败的 `init` 不移动任何文件。`init` 只在 `_tracking-state.json` 不存在时执行，绝不覆盖已初始化项目。\n\n   ```text\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {书目录} --input {书目录}/.story/work/init.json\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {书目录}\n   ```\n\n半成品最后一章为残稿时，`last_chapter`、角色快照和其他当前语义检查点一律截至最后完整章；残稿处理策略（导入记录里作者的决定）写入 `continuity_risks`，不把未完成动作登记成既成事实。\n\n以 demo《让你管账号，你高燃混剪炸全网》导入至第 10 章为例：续写状态卡要写清江晨的手机原版《诸君，且听龙吟》被专业团队高清重拍，但高层看片后认为新版“缺了灵魂”，最终继续采用原版；江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认；读者时间线只写读者已经看到的看片会结论，钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示，只能出现在作者真相，不能泄露到读者视图。\n\n## 条目形状与容量\n\n在 tracking-initialization.md 的骨架上填条目（导入时 `last_chapter` 写 N）：\n\n```json\n{\n  \"foreshadow\": [\n    {\"id\": \"F027\", \"summary\": \"专业团队仍拍不出江晨原版的灵魂\", \"planted_chapter\": 10,\n     \"planned_resolution_chapter\": null, \"status\": \"已埋\", \"importance\": \"中\"}\n  ],\n  \"timeline_events\": [\n    {\"id\": \"E010\", \"story_time\": \"实弹训练两天后\",\n     \"objective_fact\": \"文工团高层否决专业重拍版，决定沿用江晨手机拍摄的原版视频\",\n     \"reader_knowledge\": \"读者已看到周薄森指出专业版缺了灵魂，张耀祖当场拍板用回原版\",\n     \"reveal_status\": \"已揭示\", \"reveal_chapter\": 10, \"characters\": [\"江晨\", \"周薄森\", \"张耀祖\"]}\n  ],\n  \"context\": {\n    \"recent_chapters\": [{\"chapter\": 10, \"summary\": \"专业重拍版被判缺了灵魂，高层拍板用回手机原版\"}]\n  }\n}\n```\n\n- 伏笔 `id` 形如 `F001`，`status` 取 已埋/已回收/已过期/放弃，`importance` 取 高/中/低；`planted_chapter` 不晚于 N。事件 `id` 形如 `E001`，`reveal_status` 取 未揭示/部分揭示/已揭示：`未揭示` 的 `reveal_chapter` 必须为 `null`，部分/完全揭示只能填已经发生的实际章节。\n- `context` 在 init 时收六项：`position`、`long_term_constraints`、`active_character_names`、`continuity_risks`、`recent_chapters`（最多 3 章，按章号升序）、`next_chapter_commitments`。\n- `character_snapshots` 里的角色就是核心角色；四个列表不限条数，单角色文件目标 ≤4096 字节，硬上限 8192 字节，超过在任何写入前拒绝。`active_character_names` 最多 6 人且必须已有快照；`long_term_constraints` 最多 6 条。\n- `上下文.md` ≤12288 字节，只含 7 个顶层区块：当前位置、长期约束、核心角色状态、活跃伏笔（最多 8 条）、近三章速记、下一章承诺、连贯性风险。\n- 报错按提示改事务本身再跑；排查字段全集时才查 [tracking-transaction.md](tracking-transaction.md)。导入后续写时角色状态怎么更新见 [state-tracking.md](state-tracking.md)，本时刻不读。\n\n## 伏笔提取\n\n| 情节点类型 | 伏笔可能性 | 提取方式 |\n|-----------|-----------|---------|\n| 铺垫 | 高 | 直接提取为伏笔 |\n| 信息揭示（部分） | 中 | 检查后续是否有呼应 |\n| 物品首次出现 | 中 | 检查后续是否有使用 |\n| 角色秘密 | 高 | 标记为角色伏笔 |\n| 未解决的悬念 | 高 | 从章尾标记提取 |\n\n状态推断：铺垫点在后续章节有「揭示」或「解决」类情节点 → 已回收；无后续呼应 → 已埋；半成品最后几章的铺垫 → 已埋，摘要里注明「接近断点」。\n\n## 时间线提取\n\n从情节点和时间标记中提取：明确日期（“天元三年春”）直接记录；相对时间（“三日后”）推算；事件间隔（“翌日”）连续标记；季节标记（“入冬”）推断季节。按章节顺序排列，同一章内按情节点序号排列；时间标记缺失时标注 `[推断]`。\n\n## 验收\n\n初始化成功后应得到：\n\n```text\n追踪/\n├── _tracking-state.json\n├── 上下文.md\n├── 逐章记录/                 # 导入旧章不补造文件，续写从第 N+1 章开始\n├── 角色状态/{角色名}.md\n├── 伏笔.md\n├── 时间线/\n│   ├── 作者真相.md\n│   └── 读者已知.md\n```\n\n- [ ] `tracking_commit.py check` 通过，`_tracking-state.json` 与全部派生视图一致\n- [ ] `_tracking-state.json.imported_through_chapter` 等于最后完整导入章\n- [ ] `追踪/伏笔.md` 每个 ID 至多一行，未来尚未埋设的设计没有混入\n- [ ] `_tracking-state.json.timeline` 已登记关键事实与读者认知，`读者已知.md` 无真相泄露\n- [ ] `追踪/角色状态/{角色名}.md` 已覆盖全部核心角色并对齐 character-state-reverse.md\n- [ ] `追踪/逐章记录/` 空目录已创建，且没有为导入章伪造日更记录\n- [ ] `追踪/上下文.md` 顶层恰好固定 7 栏且 ≤12288 字节\n\n通过后在导入记录勾「追踪初始化」，`init.json` 可删除；汇报末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话。\n\nFile v1.0.25:references/length-routing.md\n\n# 篇幅分流判断规则\n\nPhase 1「基本信息确认」环节使用本规则判定导入书是长篇还是短篇，判定结果决定后续走哪条迁移路径。\n\n---\n\n## 判定优先级\n\n判定按以下顺序执行，命中即停止，不再向下判断。\n\n| 优先级 | 信号来源 | 判定规则 |\n|--------|---------|---------|\n| 1 | 用户显式声明 | 用户说「这是长篇 / 短篇」→ 以用户为准，直接锁定 |\n| 2 | 结构信号 + 字数校验 | 检测到明确章节分隔符且章节数 ≥ 5 → 长篇；全文无章节分隔、单文件单篇 → 按下方细则表按字数分三档判定（字数阈值沿用优先级 3 的建议值） |\n| 3 | 字数兜底 | 仅在 1、2 均不明确时启用，见下方「字数兜底规则」 |\n| — | 冲突处理 | 信号之间发生矛盾时，不自动决策，回到 Phase 1 向用户复述并请用户拍板 |\n\n---\n\n## 优先级 1：用户显式声明\n\nPhase 1 信息确认时向用户提问：**「这是长篇还是短篇？」**\n\n- 用户明确回答 → 锁定类型，跳过后续检测。\n- 用户未回答或说「不确定」→ 进入优先级 2 结构信号检测。\n\n---\n\n## 优先级 2：结构信号 + 字数校验\n\n### 章节分隔符识别\n\n复用 `structure-mapping-long.md` 的分隔符识别表：\n\n| 分隔符模式 | 示例 |\n|-----------|------|\n| `第X章` / `第X章 ` / `第X章：` / `第X章 XXX` | 第1章 初入江湖 |\n| `Chapter X` | Chapter 1 |\n| 纯数字编号 + 标题 | 1. 觉醒 |\n\n### 判定规则\n\n| 检测结果 | 判定 |\n|---------|------|\n| 有明确章节分隔符，且识别到章节数 ≥ 5 | 强长篇信号 → 判定为**长篇** |\n| 全文无任何章节分隔符，单文件单篇，且总字数 < 20000 | 强短篇信号 → 判定为**短篇** |\n| 全文无任何章节分隔符，单文件单篇，20000 ≤ 总字数 < 30000 | 判定为**短篇**，但 Phase 1 复述时告知：已超过短篇拆解管道 20000 字的建议上界，请用户确认仍按短篇导入 |\n| 全文无任何章节分隔符，单文件单篇，但总字数 ≥ 30000 | 结构与字数信号相反 → 不自动判定，见下方「冲突处理」请用户拍板 |\n| 有章节分隔符，但章节数 < 5 | 结构信号不明确 → 进入优先级 3 字数兜底 |\n| 分隔符模式模糊（如仅有单个标题行） | 结构信号不明确 → 进入优先级 3 字数兜底 |\n\n---\n\n## 优先级 3：字数兜底\n\n**仅在优先级 1、2 均无法给出明确判定时使用。** 当前导入契约按短篇通常 8000-20000 字的区间取 30000 字作建议上界，并保留题材差异余量。\n\n| 条件 | 判定 | 备注 |\n|------|------|------|\n| 总字数 < 30000 且无章节结构 | **短篇** | — |\n| 总字数 ≥ 30000 | **长篇** | — |\n| 章节数 ≥ 5（任意字数） | **长篇** | — |\n| 总字数 < 30000 但章节数 ≥ 5 | 初判**长篇**，但须提示用户 | 见下方「分章短篇连载」 |\n\n> **建议值说明**：30000 字阈值是估算值，不同平台和题材的短篇上限有差异。执行时列入 open-questions，建议用户复核是否适用于当前导入书。\n\n### 分章短篇连载\n\n检测到总字数 < 30000 但章节数 ≥ 5 时，在确认环节提示用户：\n\n> 「检测到分章结构（共 {N} 章），但总字数约 {X} 字，低于 30000 字。可能是分章短篇连载。确认按长篇导入，还是按短篇处理？」\n\n用户拍板后锁定类型。\n\n---\n\n## 冲突处理\n\n当不同信号之间出现矛盾时，**不自动决策**，回到 Phase 1 向用户复述检测结果：\n\n| 典型冲突场景 | 处理方式 |\n|------------|---------|\n| 用户说「短篇」但检测到 20 章 | 复述：「检测到 20 章章节结构，通常属于长篇。确认按短篇导入？」由用户拍板 |\n| 用户说「长篇」但全文无章节分隔且字数 < 30000 | 复述：「全文无章节分隔，总字数约 {X} 字，通常属于短篇。确认按长篇导入？」由用户拍板 |\n| 用户未声明、全文无章节分隔、单文件单篇，但字数 ≥ 30000 | 复述：「全文无章节分隔，但总字数约 {X} 字，已超过短篇常见上界。按长篇导入建工程，还是仍按短篇处理？」由用户拍板 |\n| 结构信号与字数信号方向相反 | 展示两项信号，请用户决定 |\n\n用户拍板的结果写进导入记录（`{书目录}/.story/work/导入记录.md` 的「篇幅」），后续时刻以此为准，不再重新判定。\n\n---\n\n## 判定结果与后续路径\n\n判定完成后，迁移路径按以下对应关系分流：\n\n| 判定结果 | 迁移路径 | 映射规则参考文件 |\n|---------|---------|----------------|\n| **长篇** | 长篇迁移路径（Phase 3-L） | `structure-mapping-long.md` |\n| **短篇** | 短篇迁移路径（Phase 3-S） | `structure-mapping-short.md` |\n\n> 注：`structure-mapping-long.md` 对应长篇迁移映射规则，`structure-mapping-short.md` 对应短篇迁移映射规则。\n\n---\n\n## 快速判定流程图\n\n```\nPhase 1 问用户：「长篇还是短篇？」\n         │\n         ├─ 用户明确回答 ──────────────────────────► 锁定类型\n         │\n         └─ 未回答 / 不确定\n                  │\n                  ▼\n         检测章节分隔符\n                  │\n                  ├─ 有分隔符且章节数 ≥ 5 ──────────► 长篇\n                  │\n                  ├─ 无分隔符，单文件单篇，< 20000 ─► 短篇\n                  │\n                  ├─ 无分隔符，单篇，20000 ≤ 字数 < 30000 ─► 短篇（复述时告知超出建议上界）\n                  │\n                  ├─ 无分隔符，单文件单篇，≥ 30000 ─► 提示用户裁定\n                  │\n                  └─ 信号不明确\n                            │\n                            ▼\n                   字数兜底判定（30000 字阈值）\n                            │\n                            ├─ < 30000 且无章节结构 ─► 短篇\n                            ├─ ≥ 30000 ─────────────► 长篇\n                            ├─ 章节数 ≥ 5 ──────────► 长篇\n                            └─ < 30000 但章节数 ≥ 5 ─► 提示用户裁定\n```\n\nFile v1.0.25:references/outline-reverse-rules.md\n\n# 细纲反推规则与模板（长篇导入）\n\n本文件是逐批反推细纲任务包的正文，由 `build_outline_brief.py` 整份放进任务包，不单独加载。\n\n## 反推原则\n\n- 对本批每一章，从任务包里该章的摘要要点反推 `大纲/细纲_第XXX章.md`；要点写「摘要未写」又必须写实际内容时，回看该章正文相关段落补证据，不改正文。\n- 字数目标写任务包里测好的历史长度（`visible_chars_v1` 下的实际长度），不是重新决定创作目标，不自己估算。\n- 单元ID 取任务包附的卷纲「剧情单元（反推）」行里包含本章的单元；单元内第几拍判断不出写 `[待补充]`。\n- 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`；只反推有证据的蓝图，不为补齐字段编造关系或副线。已写成的历史章「本章禁止提前释放」写「无」；目标情绪与主角目标/关键选择不接受 `[待补充]`。\n\n## 字段映射\n\n| 摘要字段 | 细纲字段 | 转换方式 |\n|---------|---------|---------|\n| 关键事件 + 局面结果 | 核心事件 | 合并为“谁采取什么行动 → 局面如何变化”；旧摘要没有 `局面结果` 时只用 `关键事件` |\n| 章节字数 | 字数目标 + 字数口径 | 写任务包里测好的 `actual` 与 `visible_chars_v1` |\n| `基调：` + 状态变化 | 目标情绪 | 写成「前状态→后状态」：用基调枚举（紧张/轻松/悲伤/热血/爽/甜/温馨/恐怖/压抑/其他）加本章状态变化归纳，不只写一个情绪词；必须写实际内容 |\n| 关键事件 + 主角行动 | 主角目标/关键选择 | 原文里主角本章要什么、做了什么判断或选择；必须写实际内容 |\n| 所属剧情单元 | 单元ID/位置 | 取反推卷纲「剧情单元」表里包含本章的单元ID；单元内第几拍判断不出写 `[待补充]` |\n| （历史章） | 本章禁止提前释放 | 已写成的章节写「无」 |\n| 章尾钩子 | 章首承接证据 | 作为下一章开篇需要承接的等待；新的章首钩子设计目标仍标 `[待补充]` |\n| 爽点类情节点 | 爽点 | 从情节点类型推断；没有则写“无显性爽点 / [待补充]” |\n| 情节点起承转合 + 因果 | 内容概括（起因/发展/转折/高潮/结尾） | 按情节点顺序归纳，用因果链校正起因与转折；证据不足写 `[待补充]` |\n| 主线/支线/任务线索 | 情节安排（主线/辅线/事件线/感情线/逻辑线） | 从剧情单元索引与摘要反推；无证据的辅线/感情线写“无”或 `[待补充]`，不得杜撰 |\n| 涉及 + 状态变化 | 人物关系和出场顺序 | `涉及` 给出候选人物，`状态变化` 只写有证据的“前 → 后”；关键物件从证据或旧情节点补充，缺失写 `[待补充]` |\n| 全部情节点 | 情节细化 / 情节点序列 | 按表格逐行写（# / 情节点 / 功能标签 / 执行边界）；保持原顺序，功能或边界不明写 `[待补充]`，不反推逐点字数配额 |\n| 胜负/反转/收益损失 | 行动成本（可无）/收益归属 | 有明确证据才填写；行动成本可无、不硬造；否则 `[待补充]` |\n| 章尾钩子 + 局面结果 | 结尾设定和钩子 | 结尾设定写原文落到最后的具体动作或画面，章尾钩子写已存在的等待；未来设计仍标 `[待补充]` |\n\n## 细纲模板\n\n```markdown\n## 细纲（第 N 章）\n\n### 第 N 章：{章名}\n- 核心事件：{从摘要中提取}\n- 字数目标：{任务包里的 actual} 字\n- 字数口径：visible_chars_v1\n- 单元ID/位置：{反推卷纲里本章所属剧情单元ID；单元内第几拍，判断不出写 [待补充]}\n- 目标情绪：{前状态→后状态，从基调与状态变化归纳，不只写一个情绪词；必须写实际内容}\n- 主角目标/关键选择：{原文里主角本章要什么、做了什么判断或选择；必须写实际内容}\n- 章首钩子：[待补充]\n- 爽点：{从情节点推断；无明确证据写 [待补充]}\n- 本章禁止提前释放：无\n\n#### 内容概括（五段式）\n- 起因：{从情节点归纳；未知写 [待补充]}\n- 发展：{从情节点归纳；未知写 [待补充]}\n- 转折：{从情节点归纳；未知写 [待补充]}\n- 高潮：{从情节点归纳；未知写 [待补充]}\n- 结尾：{原文最后落在什么动作/画面/台词上；未知写 [待补充]}\n\n#### 情节安排（多线）\n- 主线推进：{从剧情单元索引/摘要反推}\n- 辅线推进：{无证据写“无”或 [待补充]}\n- 事件线 / 任务线：{外部事件链}\n- 感情线 / 关系线：{有证据才写；否则“无显性”或 [待补充]}\n- 逻辑线：原因 → 行动 → 结果 → 后果/新问题\n\n#### 人物关系和出场顺序\n- 出场顺序：{摘要中角色/势力/关键物件出现顺序}\n- 人物关系变化：{本章前 → 本章后；未知写 [待补充]}\n- 视角/信息差：{谁知道什么；读者知道什么；主角误判什么；未知写 [待补充]}\n\n#### 情节细化\n- 情节点序列（逐行填下表；从摘要情节点反推）：\n\n| # | 情节点（谁做了什么） | 功能标签 | 执行边界 |\n|---|---|---|---|\n| 1 | {} | {功能不明写 [待补充]} | {从原文确认本点没有释放什么；未知写 [待补充]} |\n- 行动成本（可无）/收益归属：{有证据才写；行动成本可无、不硬造；未知写 [待补充]}\n\n#### 结尾设定和钩子\n- 结尾设定：{原文落到最后的具体动作或画面；未解决问题；下一章推动力；未知写 [待补充]}\n- 章尾钩子：[待补充]\n```\n\n每章一个文件，文件名 `大纲/细纲_第XXX章.md`（三位补零，与 `正文/第XXX章_*.md` 同号）。\n\nFile v1.0.25:references/outline-reverse.md\n\n# 逐批反推细纲（长篇导入）\n\n卷纲写定后，从章节摘要反推每章细纲，一批一个任务包。进度记在导入记录（`{书目录}/.story/work/导入记录.md`）的「细纲：已验收到第 B 章」；续跑从第 B+1 章起整批重做，这一批里已经存在但没验收的细纲文件按新任务包重写覆盖。\n\n## Step 1：生成本批任务包\n\n按当前平台探测 Python 3（`python3` → `python` → `py -3`），请求第 B+1 章起的 20 章（剩下不足 20 章就到最后一章）：\n\n```text\n{PYTHON} {story-import skill 根}/scripts/build_outline_brief.py --project {书目录} --chapters {A-B}\n```\n\n脚本把反推规则与模板（[outline-reverse-rules.md](outline-reverse-rules.md) 全文）、每章按 `visible_chars_v1` 测好的历史长度与摘要要点、卷纲里覆盖本批的剧情单元行，拼成 `{书目录}/.story/work/排纲/导入细纲_第AAA-BBB章.md`。执行者要读的总量超过约 25K 字时脚本自动少排几章（可少于 10 章），以 stdout JSON 的 `chapters` 为本批实际范围、`next` 为下一批起点。缺摘要的章改用简化摘要或正文，已算进总量。\n\n长度必须由脚本测，不得用模型估算或静默跳过。找不到 Python 3 或脚本报错时停下，用一句话告诉作者卡在哪（如「第 12 章正文读不到，先把正文迁完」），原文报错放技术备注；卷纲缺失时先回结构迁移补卷纲。\n\n## Step 2：写本批细纲\n\n- **有 story-architect**（导入记录写着可用，按 SKILL.md 顶部的 Agent 兼容性检查 canonical 目录）：主会话只取任务包路径，不读包的内容。Prompt：`项目目录：{dir}\\n任务包：{任务包路径}\\n先完整读取任务包，按包里的规则与模板完成；作者已定的事在 .story/work/导入记录.md，对话内容不会传给你\\n交付后只回任务包开头要求的几项`。Antigravity 用 `invoke_subagent` + `TypeName: \"story-architect\"`。\n- **没有**：主会话完整读取任务包，自己按包写本批；不另读本文件以外的规则，也不整读拆文库摘要。\n\n## Step 3：验收与交接\n\n每批写完由主会话运行 `node {story-import skill 根}/scripts/check-outline-contract.js --json <本批细纲路径...>`：exit 1 时只按报告补缺的字段或小节（有 story-architect 时把报错原样交回同一 agent 修一次）。通过后把导入记录的细纲进度改成「已验收到第 B 章」。还有下一批时，向作者一句话说到第几章了，末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话说「继续导入」；没有子代理时每批都这样建议。全部章节细纲写完再进 Phase 4。\n\nFile v1.0.25:references/state-tracking.md\n\n# 角色状态记录格式\n\n> story-import 反推角色状态（character-state-reverse.md）时按本格式写 `追踪/角色状态/{角色名}.md`。\n\n动态状态按核心角色拆成 `追踪/角色状态/{角色名}.md`，由 `tracking_commit.py` 根据事务 JSON 整份覆盖；静态原始人设仍在 `设定/角色/{角色名}.md`。只为后续会复用的主角、反派、核心配角建快照，不为路人、一次性功能角色建文件。\n\n## 格式\n\n```markdown\n# 江晨｜当前状态\n\n- 截至章节：第10章\n- 身份：火箭军文工团宣传兵；军宣爆款创作者\n- 位置：火箭军文工团高层看片会\n- 当前目标：完成五天百万粉任务，持续做出真正能打的军宣内容\n- 身心状态：专业团队反向验证原版价值，军内认可继续抬升\n\n## 能力与资源\n- 前世 MCN 爆款运营经验\n- 《中国军魂》伴奏\n- 大师级导演能力\n\n## 关键关系\n- 钟嘉嘉持续提供军报资源\n- 周薄森和张耀祖已明确认可其创作能力\n\n## 已知信息\n- 《军报》采访稿已经过审\n- 原版视频将继续作为正式军宣内容\n\n## 未结事项\n- 五天百万粉任务尚未结算\n- 钟嘉嘉所谓“只猜对一半”仍未解释\n```\n\n## 更新规则\n\n1. 每章只记录身份、位置、目标、身心状态、能力资源、关系、已知信息、未结事项中真正发生变化的内容。\n2. 核心复用角色发生变化时，在同一事务的 `character_changes` 写变化，并在 `character_snapshots` 提交其**截至当前已写最后一章**的完整快照；工具以快照是否存在判断核心/临时角色，整份覆盖核心角色小文件，不追加历史。\n3. 修订旧章时，从修订章检查到最后已写章，按各维度和各关系对象重算当前状态，再提交完整快照；不得把最后一条单维度变化当成角色全状态。\n4. 无变化可不提交快照；核心角色重新进入当前场景时直接读取其已有小文件，并由事务工具把必要信息带入续写状态卡。\n5. 角色变化历史属于 `逐章记录/第NNN章.md`，当前快照不重复保存逐章履历。\n6. 完整 JSON 字段、4096 字节目标与 8192 字节硬上限见 [tracking-transaction.md](tracking-transaction.md)。\n\nArchive v1.0.24: 14 files, 88950 bytes\n\nFiles: references/character-state-reverse.md (4333b), references/format-and-structure.md (10599b), references/length-routing.md (6328b), references/state-tracking.md (2263b), references/structure-mapping-long.md (21798b), references/structure-mapping-short.md (8668b), references/tracking-initialization.md (1137b), references/tracking-transaction.md (15042b), scripts/check-outline-contract.js (24110b), scripts/tracking_commit.py (78153b), scripts/wordcount_core.py (18338b), skill-card.md (2196b), SKILL.md (45151b), _meta.json (132b)\n\nFile v1.0.24:SKILL.md\n\n---\nname: story-import\nversion: 1.0.0\ndescription: \"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。导入按篇幅分流：长篇走 Phase 3-L，短篇走 Phase 3-S。\n\n**交付物是写作工程**：把作者已有的书重建为可续写的**写作工程**（项目结构 + 拆文库分析资产）。`拆文库/{导入书名}/` 是重建工程的数据源，不能当成用完即弃的中间产物，也不能替代交付物本身——交付物应让作者能直接续写。执行时以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n---\n\n> Agent 兼容性：只检查当前运行时的 canonical 目录：Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`（`agent-name` 为目标 agent 名），不得因其他端文件存在而误判。Codex 使用同名 `agent_type`；Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时，必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`；OpenCode 用 `subagent` 工具的 `agent` 参数。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 33` 不一致时（标记缺失、字段缺失/非整数、小于或大于 33）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 33）` 并提示重新运行 `/story-setup` 后新开会话；大于 33 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 核心原则\n\n### 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n### 原则 1：先分析后迁移\n\n先用拆解管道完整拆解小说（输出到 `拆文库/{导入书名}/`），再将分析结果迁移为项目结构。该目录保存本书导入分析，保留不丢弃，但不属于外部对标视图。\n\n### 原则 2：复用不重复\n\n深度分析复用现成管道：长篇由 `/story-long-analyze` 识别旧成果、增强或续跑，短篇运行 `/story-short-analyze`。方法与模板由 analyze skill 自带，story-import 不另维护。\n\n---\n\n## Phase 1：确认导入源\n\n### Step 1：导入续写入口顺序（先答用户的流程问题）\n\n当用户问\"导入续写先走 story-setup 还是 story-import\"、\"已有小说怎么续写\"、\"导入流程\"这类流程问题时，先直接给出结论，再继续收集原文：\n\n1. **推荐顺序**：先 `/story-setup`（部署 hooks/agents/AGENTS），新开/刷新会话后运行 `/story-import`，最后用 `/story-long-write 日更/写第N章` 续写。\n2. **也可以直接 `/story-import`**：本 skill 会在进入深度分析前检测 `.story-deployed` 与专业 agent；未部署时会给出\"先去 setup\"或\"继续导入（串行降级）\"两种选择。\n3. **已导入过的当前协议项目**（书名目录下有 `追踪/_tracking-state.json`）：不要重复跑完整导入；直接进入书名目录，确认 `.active-book` 指向正确书目，再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。\n4. **v0.7.2 及更早的旧追踪项目**（有 `追踪/` 和正文，但没有 `追踪/_tracking-state.json`）：日更会停下要求重新导入，但**不需要重跑全书拆解**。只重建追踪即可，见下方「旧追踪项目迁移」。\n\n这段结论必须出现在任何导入源追问之前，避免用户只想确认流程却被直接要求贴原文。\n\n#### 旧追踪项目迁移\n\n书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时，项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响，**只需重建 `追踪/`**，不重跑 Phase 2 拆解、不碰正文：\n\n1. 数清最后一个完整章号 `N`（`正文/第NNN章_*.md` 的最大值）。\n2. 从旧 `追踪/` 现有文件（角色状态、伏笔、时间线等，文件名按项目实际情况）和最近 3-5 章正文，重建当前状态：核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. 完整读取 [references/tracking-initialization.md](references/tracking-initialization.md)，按其初始化事务格式构造 JSON，`last_chapter` 写 `N`（第 1..N 章不伪造逐章记录），执行 `tracking_commit.py init`。\n4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析，留给作者查阅。\n5. 跑 `tracking_commit.py check` 确认通过，再回 `/story-long-write 日更` 续写。\n\n重建结果以第 2 步的证据为准；拿不准的字段留空或写进 `continuity_risks`，不杜撰。用户明确要求重拆全书时才走完整 Phase 2。\n\n问用户：**「你要导入哪本书？请提供文件路径或直接贴文本。」**\n\n### Step 2：确认意图（写作工程 vs 仅拆文库）\n\n默认目标是**完整写作工程**（可续写）。若用户意图不明确——是要可续写的工程，还是只要一份拆文库分析——**主动询问**，不要默认：\n\n> 「你是想把这本书做成可续写的写作工程（设定/大纲/正文/追踪，能接着写第 N+1 章），还是只要一份拆文库分析？」\n\n- 要可续写工程 → 走完整 story-import（Phase 2 拆 + Phase 3 迁移）。\n- 只要分析 / 拆文库 → 直接用 `/story-long-analyze`（短篇 `/story-short-analyze`），到拆文库为止，不进 Phase 3 迁移。\n\n### Step 3：输入方式识别\n\n```\n用户提供路径？\n├─ 单文件路径（.txt/.md）\n│   └─ 按章节分隔符自动切分\n├─ 目录路径\n│   └─ 按文件名排序，合并处理\n└─ 无路径 → 用户直接贴文本？\n              ├─ 是 → 保存到临时文件后处理\n              └─ 否 → 提示用户提供源文件\n```\n\n### Step 4：基本信息确认\n\n1. **自动检测**：从文本中识别书名（如果有）、总章数、总字数、章节格式\n2. **用户确认**：\n   - 导入书名：{自动检测或用户输入}\n   - 题材类型：{用户提供}\n   - 目标平台：{起点/番茄/晋江/其他}\n   - 是否完本：{是/否（半成品写到第N章）}\n   - **篇幅类型**：长篇 / 短篇 —— 按 [references/length-routing.md](references/length-routing.md) 自动检测（用户显式声明 > 结构信号 > 字数兜底），并向用户复述检测结果请其确认。判定结果决定 Phase 3 走长篇还是短篇路径。\n   - **最后一章是否完整**：完整章 / 残稿（写了一半）。若是残稿，提示用户并把「残稿到第 N 章」记入上下文，让用户决定是「基于残章续写」还是「先补完再导入」。story-import 只记录用户决定，不替用户选。\n3. **外部对标（可选、与导入源分离）**：用户已经明确指定外部对标时，记录 `{对标书名}` 并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物；不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。用户未指定时不追加提问，记为“未绑定”，后续交给写作 skill 的对标发现流程。\n4. **输出确认**：向用户展示检测到的章节范围、字数、判定的篇幅类型、最后一章状态，以及“外部对标：{对标书名/未绑定}”，确认后开始分析。\n\n### Step 5：环境检测前置\n\n在进入 Phase 2 之前，先检测项目是否已部署 story-setup 基础设施：\n\n- 先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁；旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。\n- 只有 `agents_version: 33` 通过后，才在当前运行时的 canonical 目录检查 Phase 2 `chapter-extractor`：Claude/OpenCode/Antigravity 为同名 Markdown，Codex 为同名 TOML。\n- 如果 `.story-deployed` 的 `target_cli` 包含 `zcode`，项目 agents 缺失是 ZCode 3.3.4 的预期状态：不要提示重复部署，直接以串行 solo/direct 进入分析并报告 fallback。\n\n**部署标记缺失、版本无效/过期，或当前端的 agent 不可用，且不是已部署 ZCode 项目时**，这样问用户：\n\n> 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书，主对话不会被整本书塞满；不装也能导，只是全部在主对话里做，慢一些，结果一样完整。你想：1. 先装环境（推荐）：运行 `/story-setup`，装完再说\"导入\" 2. 直接导入，慢一点也行」\n\n1. **先去 setup**：暂停导入，运行 `/story-setup`，部署完成后重新触发 `/story-import`；\n2. **继续导入**：Phase 2 降级为主会话串行处理（长篇逐章摘要由主会话自己写，速度较慢，但产物完整）。\n\n用户选择记入上下文，Phase 2 据此决定是否派 chapter-extractor。有子代理时，导入属自动续跑，按 story-long-analyze 的「有限并行」档派发（每轮 3 批）；用户明确要求时改用串行或不限批次顺序。\n\n### Step 6：原文备份\n\n原文备份由 Phase 2 调用的 analyze 拆解管道负责（analyze 管道前置步骤会把原文复制/保存到 `拆文库/{导入书名}/原文/`，对应 story-long-analyze 与 story-short-analyze 的「原文备份（管道前置步骤）」）。Phase 1 只需确认源文件就绪（路径有效或文本已拿到），不在此处单独备份，避免与 analyze 管道重复备份逻辑。\n\n---\n\n## Phase 2：深度分析\n\n按 Phase 1 判定的篇幅类型进入对应 analyze skill。先检查已有拆文资产；可验证的旧成果直接复用，只有缺失范围或本次导入确实依赖的新分析才进入对应 Stage。全新项目再驱动完整管道。\n\n| 篇幅 | 调用的拆解管道 | 产物目录 |\n|------|--------------|---------|\n| 长篇 | story-long-analyze 的统一管道（旧成果直用 / 按需增强 / 全新或部分续跑） | `拆文库/{导入书名}/` |\n| 短篇 | story-short-analyze 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n### 调用契约\n\n#### 长篇：先兼容识别，再决定是否续跑\n\n先运行 story-long-analyze Phase 1 的只读检查器（`inspect_existing_assets.py`），登记实际文件和覆盖范围；检查建议不能覆盖下列语义规则：\n\n新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`；旧成果直接使用不以缺少该字段为失败。\n\n- **旧成果已完成且足以重建写作工程**：直接进入 Phase 3-L。旧 `_progress.md` 版本、缺少 `chapter_index.csv`，或缺少本次新增字段，都不能单独成为重拆理由。\n- **旧成果可以导入，但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**：先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强，不回读原文。不得重跑已完成章节，也不得用空壳文件让门禁通过。\n- **只完成一部分或新旧产物混存**：验证并保留已完成部分，从首个缺失的连续章节块续跑，最后统一聚合。进度记录与实际文件冲突时，以可验证文件为准并记录冲突。\n- **全新导入**：运行 Stage 0-6 完整管道。\n\n导入需要自动完成本次判定出的必需范围，不把 Stage 1 停靠询问甩给用户。全新导入命中「完整拆解、一次跑完」路径；旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时，缺少新增字段只记录能力限制，不阻断导入。\n\n- 措辞示例（全新）：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- 措辞示例（旧成果）：声明「先复用并校验现有成果，只补当前导入缺失的章节或分析，不覆盖用户原成果」。\n- **兜底**：若全新导入实际仍停在 Stage 1，story-import 自动选择继续；若旧成果任务停靠，则按已登记的缺失范围继续，不能扩大成全书重跑。\n- 环境检测（Phase 1）发现未部署 chapter-extractor agent 且用户选择「继续导入」时，Stage 2 由主会话按相同连续章节块契约串行处理，不能退回每章一次独立调用；产物仍完整，仅速度变慢。\n\n#### 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用 story-import Phase 1 已确认的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在 story-import Phase 1 判定并经用户确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；story-import Phase 1 Step 4 已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给用户，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按 Phase 1 已锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给用户**。\n\n### 输出目录\n\n#### 长篇拆文库结构\n\n长篇分析输出到 `拆文库/{导入书名}/`，与 story-long-analyze 拆解管道完全一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 概要.md\n├── 章节/\n│   ├── 第1章_深度拆解.md\n│   ├── 第1章_摘要.md\n│   └── ...               # 每章同时有 第N章_深度拆解.md 和 第N章_摘要.md\n├── 快速预览.md\n├── 角色/\n│   ├── {角色名}.md\n│   └── 角色关系.md\n├── 剧情/\n│   ├── {剧情标题}.md\n│   ├── 故事线.md\n│   ├── 节奏.md          # 关键信息推进 / 情绪触动点 / 爆发节奏\n│   ├── 情绪模块.md      # 读者需求 / 情绪引擎 / 可复现模块\n│   └── 散落情节.md\n├── 设定/\n│   ├── 世界观/         # 背景设定.md / 力量体系.md / 地理.md / 金手指.md（子目录形态）\n│   └── 势力/           # {势力名}.md（每势力一文件）\n├── 拆文报告.md\n├── chapter_index.csv    # 机械章界、原文定位、源 hash 与解析器版本\n├── 人物关系图/          # 人物关系图.md（Mermaid 中文图）；有中文字体时另有 PNG\n├── 文风.md          # Stage 6 文风：写作技法视图 + 原文范例锚点\n└── _progress.md\n```\n\n#### 短篇拆文库结构\n\n短篇分析输出到 `拆文库/{导入书名}/`，与 story-short-analyze 拆解管道一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 拆文报告.md\n├── 情节节点.md\n├── 写作手法.md\n└── _meta.json           # 管道元数据 + 结构计数（下游 story-short-write 必读）\n```\n\n### 长篇完整管道（Stage 0-6）\n\n> 管道详细说明见 story-long-analyze（运行 `/story-long-analyze`），此处仅列概要。\n\n| 阶段 | 名称 | 输入 | 输出 | 完成标志 |\n|------|------|------|------|----------|\n| 0 | 概要与机械索引 | 原始文本 | 概要.md + `chapter_index.csv` | 章节结构、定位、源 hash 与解析器版本记录完成 |\n| 1 | 黄金三章 | 前 3 章原文 | 第1章_深度拆解.md / 第2章_深度拆解.md / 第3章_深度拆解.md → **停靠产出快速预览.md**（导入场景自动续跑，不停下询问） | 3 章拆解完成 |\n| 2 | 连续章节块提取 | 待处理连续原文、旧成果与跨块状态 | 同次产出 `章节/第N章_摘要.md`（含情节点序列）和 `_analysis_cache/批次-*.md`；每批最多 3 章，长章缩到 1-2 章；每章情节点按字数折算（约每 200 字一个，至少 1 个；足章 10-20 个），长章最多 30 | 可用正文覆盖完整，摘要数与可用章节数一致 |\n| 3 | 聚合分析 | 批次观察、必要逐章事实与可复用旧资料 | `剧情/*.md` + `剧情/README.md` + `剧情/故事线.md` + **`剧情/节奏.md` + `剧情/情绪模块.md`**。在现有资料中补强因果链、客观事件/多次披露、信息差、事件/情绪/篇幅三维节奏及机制成立条件 | 质量检查通过 |\n| 4 | 设定+关系 | 批次观察、阶段 3 归一实体与必要逐章事实 | 设定/*.md + 角色/*.md + 人物关系图。关系记录方向、触发、双方得失、阶段状态和证据 | 设定和关系提取完成 |\n| 5 | 汇总报告 | 全部权威底层结果 | `拆文报告.md`：一份可独立阅读的人类主报告，嵌入可用人物关系图，不重新阅读全文 | 报告生成完成 |\n| 6 | 文风 | 拆文报告.md + 章节/第1-3章_深度拆解.md + 章节/*_摘要.md + 原文/原文.txt | 文风.md（本书历史写法分析） | 文风落盘 `拆文库/{导入书名}/文风.md`，保留为导入分析，不复制到本书 `对标/` |\n\n### 短篇拆文管道\n\n> 管道详细说明见 story-short-analyze（运行 `/story-short-analyze`），此处仅列概要。\n\n短篇为单一全量管道（Stage 2-6 严格串行），产物落盘 `拆文库/{导入书名}/`：Stage 2 结构+情节节点 → Stage 3 情感线+爆点 → Stage 4 反转+写作手法 → Stage 5 人物+开头结尾 → Stage 6 综合评估，最终汇总为 `拆文报告.md`、`情节节点.md`、`写作手法.md`，另有 `_meta.json` 记管道元数据与结构计数。\n\n长篇组块、旧成果复用和恢复全部沿用 story-long-analyze。Stage 2 每个连续章节批次只调用一次 chapter-extractor，同次生成逐章事实与跨章观察；story-import 不另定一套。\n\n### 恢复机制\n\n- 中断时通过进度文件追踪进度\n- 新会话读取进度文件定位断点\n- 先验证断点批次已经落盘的逐章文件和跨章缓存；完整则补记进度，缺失或损坏才从该批次起章恢复\n- 长篇进度文件沿用 story-long-analyze 的 `_progress.md` 受管区：批次表、阶段表和 `最终状态`\n\n### 质量检查\n\n长篇阶段 3-4 完成前执行质量检查（置信度 >= 0.85，覆盖率 85%-95%，重叠率 <= 35%），由 story-long-analyze 拆解管道自带的质量检查负责。短篇质量检查见 story-short-analyze 各阶段的完成标志。\n\n---\n\n## Phase 3：结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为可被写作 skill 消费的项目结构。\n\n### 分流路由\n\n按 Phase 1 判定的篇幅类型分流，两条路径产出的工程结构完全不同：\n\n| 篇幅 | 迁移路径 | 映射规则 | 续写接手 |\n|------|---------|---------|---------|\n| 长篇 | **3-L：长篇结构迁移** | [references/structure-mapping-long.md](references/structure-mapping-long.md) | story-long-write 日更循环 |\n| 短篇 | **3-S：短篇结构迁移** | [references/structure-mapping-short.md](references/structure-mapping-short.md) | story-short-write Phase 3 逐场景写作 |\n\n---\n\n## Phase 3-L：长篇结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为 `{导入书名}/` 长篇项目结构。迁移规则详见 [references/structure-mapping-long.md](references/structure-mapping-long.md)。\n\n### 迁移步骤\n\n#### Step 1：创建项目骨架\n\n```\n{导入书名}/\n├── 设定/\n│   ├── 世界观/\n│   ├── 角色/\n│   └── 势力/\n├── 大纲/\n├── 正文/\n├── 追踪/\n│   └── 逐章记录/\n├── 对标/                       # 可选；仅在显式绑定外部对标时创建子目录\n└── 参考资料/\n```\n\n#### Step 2：正文标准化\n\n将原文迁移到 `正文/`，统一命名格式：`第XXX章_章名.md`。\n\n- 识别章节分隔符（第X章、Chapter X 等）\n- 提取章节标题\n- 补零对齐编号（第1章 → 第001章）\n- 保留原文内容不变\n\n#### Step 3：角色文件迁移\n\n将 `拆文库/{导入书名}/角色/{角色名}.md` 迁移到 `设定/角色/{角色名}.md`。\n\n迁移时按 `references/structure-mapping-long.md` 的「角色文件迁移模板」补齐 story-long-write 角色模板字段。\n\n角色分级（沿用 story-long-analyze 标准）：\n\n| 等级 | 标准 | 迁移策略 |\n|------|------|---------|\n| 主角 | 出现章节 ≥50% + 推动主线 + 完整成长轨迹 | 完整迁移 |\n| 反派 | 与主角对立 + 推动核心冲突 + 明确动机 | 完整迁移 |\n| 核心配角 | 出现章节 ≥20% 或推动重要支线 | 完整迁移 |\n| 功能角色 | 出现章节 <20% + 作用有限 | 简化迁移 |\n\n#### Step 4：关系文件迁移\n\n将 `拆文库/{导入书名}/角色/角色关系.md` 转换为 `设定/关系.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「关系文件转换规则」的目标格式模板输出。\n\n#### Step 5：同步世界观设定\n\n当前拆文契约按主题输出 `拆文库/{导入书名}/设定/世界观/*.md` 与 `设定/势力/*.md`，导入时原样同步；`世界观/` 必须有 `背景设定.md`，短小力量体系可并入。当前产物缺失时停止并提示修复 Stage 4；检查器确认的旧成果则从已有扁平设定转换到当前项目路径，标注来源，不回写或覆盖拆文库。\n\n#### Step 6：大纲生成\n\n**大纲.md**（卷级结构）：从 `剧情/故事线.md`、`剧情/*.md` 和 `快速预览.md` 反推。**卷划分采用用户确认制**，规则见 [structure-mapping-long.md](references/structure-mapping-long.md)「大纲反推规则」：\n\n- **原文有明确卷界**（存在「第一卷」「卷一」等卷级标题）→ 按原文卷界直接划分，无需询问。\n- **原文无明确卷界** → **不机械按「每卷 20-40 章」硬切**。根据故事线/场景切换/大型时间跳跃检测候选卷边界，向用户展示候选划分方案，**等待用户确认后**才写定卷纲；用户确认前 `大纲/大纲.md` 只记录候选方案。\n\n```markdown\n# 全书大纲\n\n## 卷级大纲\n\n### 第一卷：{卷名}（约 {X} 万字，{Y} 章）\n- 功能：{从剧情分析推断}\n- 核心事件：{一句话}\n- 起始状态 → 结束状态：{从角色弧线推断}\n```\n\n**卷纲**：卷划分确认后，从剧情文件聚合生成 `大纲/卷纲_第X卷.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「卷纲反推」模板格式。\n\n**细纲**：从章节摘要反推生成 `大纲/细纲_第XXX章.md`：\n\n每章先通过 story-long-write 的 Wordcount Core 运行 `wordcount measure`，将 JSON 的 `actual` 作为已写章节的历史长度快照。这里记录的是原文在 `visible_chars_v1` 下的实际长度，不是让模型重新决定创作目标。依次探测 `python3`、`python`、`py -3`；找不到 Python 3 或 CLI 时返回 `TOOL_UNAVAILABLE` 并停止导入，不得用模型估算或静默跳过。\n\n```bash\n{PYTHON} {story-long-write skill 根}/scripts/storyctl.py wordcount measure \\\n  --file \"{原文章节文件}\" \\\n  --chapter {N}\n```\n\n```markdown\n## 细纲（第 N 章）\n\n### 第 N 章：{章名}\n- 核心事件：{从摘要中提取}\n- 字数目标：{storyctl 返回的 actual} 字\n- 字数口径：visible_chars_v1\n- 单元ID/位置：{反推卷纲里本章所属剧情单元ID；单元内第几拍，判断不出写 [待补充]}\n- 目标情绪：{前状态→后状态，从基调与状态变化归纳，不只写一个情绪词；必须写实际内容}\n- 主角目标/关键选择：{原文里主角本章要什么、做了什么判断或选择；必须写实际内容}\n- 章首钩子：[待补充]\n- 爽点：{从情节点推断；无明确证据写 [待补充]}\n- 本章禁止提前释放：无\n\n#### 内容概括（五段式）\n- 起因：{从情节点归纳；未知写 [待补充]}\n- 发展：{从情节点归纳；未知写 [待补充]}\n- 转折：{从情节点归纳；未知写 [待补充]}\n- 高潮：{从情节点归纳；未知写 [待补充]}\n- 结尾：{原文最后落在什么动作/画面/台词上；未知写 [待补充]}\n\n#### 情节安排（多线）\n- 主线推进：{从剧情单元索引/摘要反推}\n- 辅线推进：{无证据写“无”或 [待补充]}\n- 事件线 / 任务线：{外部事件链}\n- 感情线 / 关系线：{有证据才写；否则“无显性”或 [待补充]}\n- 逻辑线：原因 → 行动 → 结果 → 后果/新问题\n\n#### 人物关系和出场顺序\n- 出场顺序：{摘要中角色/势力/关键物件出现顺序}\n- 人物关系变化：{本章前 → 本章后；未知写 [待补充]}\n- 视角/信息差：{谁知道什么；读者知道什么；主角误判什么；未知写 [待补充]}\n\n#### 情节细化\n- 情节点序列（逐行填下表；从摘要情节点反推）：\n\n| # | 情节点（谁做了什么） | 功能标签 | 执行边界 |\n|---|---|---|---|\n| 1 | {} | {功能不明写 [待补充]} | {从原文确认本点没有释放什么；未知写 [待补充]} |\n- 行动成本（可无）/收益归属：{有证据才写；行动成本可无、不硬造；未知写 [待补充]}\n\n#### 结尾设定和钩子\n- 结尾设定：{原文落到最后的具体动作或画面；未解决问题；下一章推动力；未知写 [待补充]}\n- 章尾钩子：[待补充]\n```\n\n> 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`；story-import 只反推有证据的蓝图，不为补齐字段编造关系或副线。已写成的历史章「本章禁止提前释放」写「无」；目标情绪与主角目标/关键选择不接受 `[待补充]`。每批细纲写完运行 `node scripts/check-outline-contract.js --json <细纲路径...>`，exit 1 时只按报告补缺的字段或小节。\n\n#### Step 7：追踪文件生成\n\n导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态，禁止模型分别写最终文件。完整字段与命令见 [references/tracking-transaction.md](references/tracking-transaction.md)。语义准备顺序如下：\n\n1. **导入截止章**：把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`；导入旧章没有日更事务，不得为第 1..N 章伪造逐章增量，也不额外生成一份重复当前状态的叙事基线。\n2. **核心角色当前快照**：从拆书产物反推主角、反派、核心配角的截至 N 章状态，按角色写入初始化 JSON 的 `character_snapshots`。输出由工具生成到 `追踪/角色状态/{角色名}.md`；算法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. **伏笔当前行**：从有正文证据的铺垫/回收事件生成 `foreshadow`。每个 ID 只保留当前状态一行；尚未实际埋设的未来设计留在大纲，不写 `伏笔.md`。\n4. **事实与读者认知**：把关键事件生成到 `timeline_events`。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态；未来计划揭示章不得伪装成已发生事实。\n5. **续写状态卡输入**：准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏，不把文风、文件索引、普通待办或质检计数塞进续写状态卡。\n6. **执行初始化**：按当前平台探测 Python 3（`python3` → `python` → `py -3`），执行：\n\n   > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理：`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议。旧内容保留供作者查阅，不参与解析，当前状态完全由本次导入输入决定；校验失败的 `init` 不移动任何文件。\n\n   ```text\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {项目根} --input {项目根}/.story/work/init.json\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {项目根}\n   ```\n\n以 demo《让你管账号，你高燃混剪炸全网》导入至第 10 章为例：续写状态卡要写清江晨的手机原版《诸君，且听龙吟》被专业团队高清重拍，但高层看片后认为新版“缺了灵魂”，最终继续采用原版；江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认；读者时间线只写读者已经看到的看片会结论，钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示，只能出现在作者真相，不能泄露到读者视图。\n\n初始化成功后应得到：\n\n```text\n追踪/\n├── _tracking-state.json\n├── 上下文.md\n├── 逐章记录/                 # 导入旧章不补造文件，续写从第 N+1 章开始\n├── 角色状态/{角色名}.md\n├── 伏笔.md\n├── 时间线/\n│   ├── 作者真相.md\n│   └── 读者已知.md\n```\n\n半成品最后一章为残稿时，`last_chapter`、角色快照和其他当前语义检查点一律截至最后完整章；残稿处理策略写入连贯性风险，不把未完成动作登记成既成事实。\n\n#### Step 8：题材定位生成\n\n从拆文报告中提取核心发现，生成 `设定/题材定位.md`（按 [structure-mapping-long.md](references/structure-mapping-long.md)「题材定位生成」模板格式）。\n\n`设定/题材定位.md` 的本书题材、核心梗、情绪与节奏摘要来自 `拆文库/{导入书名}/`，但这些字段不是对标登记。只有 Phase 1 已明确绑定外部对标时，才追加「对标书清单 + 主对标书」段；主对标书最多 1 本，副对标 / 参考对标不限制数量。未绑定时省略整个对标登记段，不得用 `{导入书名}` 补位。该段格式见上述「题材定位生成」模板的「对标书清单」。\n\n后续如需快速概览，可另写「对标分析（派生概要）」表；该表不是权威 registry，不得替代 `主对标书` 与完整 `对标书列表`。所有登记项必须能回溯到对应 `拆文库/{对标书名}/`，不得引用本书根 `设定/`。\n\n#### Step 9：对标结构化资产同步\n\n本步只处理 Phase 1 显式绑定的外部参考作品。把 `拆文库/{对标书名}/` 的结构化分析资产同步到项目引用视图 `{项目}/对标/{对标书名}/`，供 story-long-write 优先读取。没有绑定外部对标时跳过本步，不创建空目录；严禁使用 `拆文库/{导入书名}/` 或项目 `设定/` 作为复制源。源路径→目标路径的完整同步映射见 [structure-mapping-long.md](references/structure-mapping-long.md)「对标引用视图同步规则」。\n\n**缺失处理**：\n\n- 已选外部对标缺 `剧情/节奏.md` 或 `剧情/情绪模块.md` → 导入报告里告诉作者「《{对标书名}》的拆文缺节奏和情绪资料，这本对标暂时用不上；重新拆一次（`/story-long-analyze`）补齐后再接入」，并停止该对标召回；不得用摘要或报告生成空壳。本书核心工程迁移不回滚。两份老权威产物都存在时正常同步，缺少本次新增内嵌字段不阻断。\n- 其它结构化子目录缺失 → 在导入完成报告里用白话提示，不阻塞项目创建\n\n#### Step 10：文风同步\n\n外部对标已通过 Step 9 校验时，把 `拆文库/{对标书名}/文风.md` 复制到 `{项目}/对标/{对标书名}/文风.md`。纯复制，不重新生成；未绑定外部对标时跳过。\n\n**缺失处理**：\n\n- 拆文库没有文风文件（analyze 未跑 Stage 6）→ 导入报告提示用户重跑 `/story-long-analyze` 后再同步；日更前文风缺失会被 fail-fast 拦截\n- 项目对标已有旧文风文件 → 覆盖（最新拆文产物优先），在导入报告告知\n\n---\n\n## Phase 3-S：短篇结构迁移\n\n将 `拆文库/{导入书名}/` 的短篇拆文产物迁移为 `{短篇标题}/` 短篇工程结构，供 story-short-write Phase 3 逐场景写作无缝接手。迁移规则详见 [references/structure-mapping-short.md](references/structure-mapping-short.md)。\n\n> **短篇工程与长篇完全不同**：短篇正文是单文件 `正文.md`（不切章），**不产** `追踪/`、`大纲/`、`正文/` 等长篇目录。迁移时严禁误建这些长篇专属目录。\n\n### 短篇目标工程结构\n\n```\n{短篇标题}/\n├── 设定.md              ← 含核心框架 + 本书续写基线\n├── 小节大纲.md          ← 按段-小节结构反推\n├── 正文.md              ← 单文件全文正文\n└── 对标/{对标书名}/     ← 可选：仅外部对标引用视图\n    ├── 拆文报告.md\n    ├── 情节节点.md\n    └── 写作手法.md\n```\n\n### 迁移步骤\n\n#### Step 1：正文迁移\n\n将 `拆文库/{导入书名}/原文/` 的全文迁移为单文件 `{标题}/正文.md`，按 [format-and-structure.md](references/format-and-structure.md) 规范化格式（小节标记 `###1.`、段间仅单换行、对话引号按项目/平台约定统一）。**原文已是成稿，不重写内容，只规范格式。**\n\n#### Step 2：设定生成\n\n从 `拆文报告.md`、`写作手法.md` 反推 `{标题}/设定.md`，含两个区块：\n\n- **核心框架**：对齐 story-short-write 核心框架模板（基本信息、一句话梗概、核心反转、情绪设计、人设速写）。\n- **本书续写基线**：把已写内容的故事结构、情绪节奏、核心反转机制、既有写作手法写入续写基线区；这是本书内部上下文，不是对标摘要。\n\n#### Step 3：小节大纲生成\n\n从 `情节节点.md` 的功能分段反推 `{标题}/小节大纲.md`，按开头段/铺垫段/升级段/反转段/结尾段映射，用 story-short-write 的固定 12 列表格（`结构段/五段功能 | 主事件 | 情节推进 | 情绪 | 人物/关系变化 | 因果/逻辑链 | 读者新获知什么 | 结尾承接/钩子 | 伏笔/物件 | 场景形态 | 对白作用 | 目标字数`），每节一行，填法见 [references/structure-mapping-short.md](references/structure-mapping-short.md)「小节大纲表格」。相关情节点可由同一动作链或对话同时兑现，不为凑数量拆成多个子事件。原文判断不出的格子写 `[待补充]`，不套用长篇完整章节蓝图。\n\n#### Step 4：外部对标引用视图（可选）\n\n仅当 Phase 1 已显式绑定外部 `{对标书名}` 时，才把 `拆文库/{对标书名}/` 同步为 `{标题}/对标/{对标书名}/`；没有绑定则跳过。不得把 `拆文库/{导入书名}/` 整体复制进 `对标/`。\n\n---\n\n## Phase 4：项目激活\n\n### Step 1：质量检查\n\n按篇幅对照对应的质量检查清单。这是你自己的自检，不念给作者：全部通过就不提；没通过先修，修不了才用故事话告诉作者影响和办法。\n\n- **长篇**：完整导入质量清单见 [references/structure-mapping-long.md](references/structure-mapping-long.md) 末尾（含正文文件数对照、核心角色独立快照、作者/读者时间线隔离、`tracking_commit.py check` 通过、卷划分已经用户确认等）。\n- **短篇**：质量清单见 [references/structure-mapping-short.md](references/structure-mapping-short.md) 末尾的质量检查清单（含 `正文.md` 单文件存在且格式合规、`设定.md` 含核心框架+本书续写基线、未误建长篇专属目录等）。\n\n### Step 2：导入完成报告\n\n报告写给作者：导进来了什么、哪几处请他核对、要他拍板的事、下一步怎么说。字段名、脚本名、校验结果、字数口径、伏笔/事件编号不进报告；编号只能跟着故事描述出现（如「玉佩的来历（F003）」）。核对项要落到具体人和事，一次最多 5 条。\n\n**长篇**：\n\n<!-- author-report -->\n```md\n=== 《{导入书名}》导入完成 ===\n导进来了：第 1–{N} 章，约 {Y} 万字{；第 {N+1} 章只写了一半，按你的决定{接着残章写 | 先补完}}。项目在 `{项目目录}`。\n\n我整理出了：\n- 人物：{M} 个角色档案，主要人物写到第 {N} 章时的处境已记下（如「{角色}：{一句话现状}」）\n- 大纲：全书大纲、{V} 卷卷纲、每章细纲\n- 还没收的线：{K} 条（如「{伏笔的故事描述}」）\n- 时间线：真相和读者目前知道的分开记，续写时不会提前泄底\n- 设定：{设定文件数} 份世界观资料\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {最拿不准的一处，写成具体问题，如「第 5 章的黑衣人和第 2 章的车夫是同一人吗？」}\n2. {如「还没收的线里有没有漏的？我列的是：……」}\n\n需要你决定：{仅在有待定事项时写，如「原文没分卷，我按剧情分成 3 卷（1–40 / 41–95 / 96–{N} 章），这样分可以吗？」}\n\n下一步：说「日更」就从第 {N+1} 章接着写；想先检查导入质量，说「审一下」。\n```\n\n**短篇**：\n\n<!-- author-report -->\n```md\n=== 《{短篇标题}》导入完成 ===\n导进来了：全文约 {Y} 字，分成 {N} 个小节。项目在 `{项目目录}`。\n\n我整理出了：\n- 设定：核心框架和续写要守住的人物、情绪基调\n- 小节大纲：{N} 节，每节讲了什么\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {标了 [待补充] 的地方，写成问题，如「女主最后原谅他了吗？原文没写明」}\n2. {核心反转前埋的线索我找到的是：……，有没有漏的？}\n\n下一步：{没写完：运行 `/story-short-write` 说「接着写」，从第 {N+1} 节往下写 | 已完本：想改稿说「审一下」}。\n```\n\n### Step 3：项目激活\n\n- 设置 `.active-book` 指向导入的书名/标题目录\n- 确认项目可以被对应写作 skill 识别（长篇 → story-long-write，短篇 → story-short-write）\n- 可选验证：如果当前运行时的 canonical 目录已部署 story-explorer agent，可 spawn 交叉验证迁移数据完整性；Antigravity 检查 `.agents/agents/story-explorer/agent.md` 并用 `invoke_subagent` + `TypeName: \"story-explorer\"`。Prompt：`项目目录：{dir}\\n查询类型：progress\\n查询参数：导入验证`\n\n> setup 环境检测已在 Phase 1「环境检测前置」完成，此处不再重复检测。\n\n---\n\n## 大型作品处理（>200 章）\n\n> 本节仅适用于长篇导入。短篇为单文件全量迁移，无增量导入需求。\n\n超过 200 章的作品，**拆解可以分批，追踪初始化必须一次覆盖全部已写章节**：\n\n1. **拆解分批**：首期只深拆前 50 章 + 全书概要，后续按需补拆更多章节到 `拆文库/`。\n2. **追踪一次到位**：初始化事务的 `last_chapter` 写**最后一个已写完的章号 N**，不是首期拆解的 50。`imported_through_chapter` 由 `init` 一次写定、之后不再推进，逐章事务只接受 N+1 起的章号；第 1..N 章不伪造逐章记录，续写从 N+1 开始。若 init 时误写成 50，第 51..N 章仍可逐章 `append` 补上（一章一份事务，章号必须连续），只是要为已写好的旧章逐章构造事务；不要删 `追踪/` 重来——`_旧追踪存档/` 也在里面。\n3. **上下文摘要**：未深拆的章节生成简化摘要（200 字/章），供反推当前状态用。\n\n---\n\n## 参考资料索引\n\n按阶段加载，不一次全部加载。\n\n本 skill 自带的 reference 文件全部位于 `references/`，按场景加载。涉及别的 skill 的方法论/模板时，story-import 不直接加载文件，而是运行对应 `/命令` 由该 skill 自行加载。\n\n### Phase 1：确认导入源\n\n| 场景 | 加载文件 |\n|------|---------|\n| 篇幅分流判定 | `references/length-routing.md` |\n| 章节格式识别 | 由 story-long-analyze 拆解管道（运行 `/story-long-analyze`）的阶段 1 负责 |\n\n### Phase 2：深度分析\n\n| 场景 | 加载文件 / 相关 skill |\n|------|---------|\n| 长篇深度分析（方法论、质量检查、输出模板均自带） | 运行 `/story-long-analyze` 调用长篇拆解管道 |\n| 短篇深度分析（方法论、质量检查、输出模板均自带） | 运行 `/story-short-analyze` 调用短篇拆解管道 |\n\n### Phase 3：结构迁移\n\n| 场景 | 加载文件 |\n|------|---------|\n| 长篇迁移映射规则 | `references/structure-mapping-long.md` |\n| 短篇迁移映射规则 | `references/structure-mapping-short.md` |\n| 角色状态反推规则（长篇） | `references/character-state-reverse.md` |\n| 角色状态规则（character-state-reverse.md 依赖） | `references/state-tracking.md` |\n| 短篇正文格式规范 | `references/format-and-structure.md` |\n\n> 长篇细纲模板格式参见 story-long-write（Phase 3 细纲部分）；短篇核心框架模板参见 story-short-write（核心框架部分）。这两项为纯文本指引，story-import 不加载对应 skill 的文件。\n\n### Phase 4：项目激活\n\n| 场景 | 说明 |\n|------|---------|\n| 长篇项目结构规范 | 参见 story-long-write（Phase 4 项目文件结构） |\n| 短篇项目结构规范 | 参见 story-short-write（Phase 3 项目结构） |\n| 环境部署 | 部署模板由 `/story-setup` 提供，story-import 不负责部署 |\n\n---\n\n## 流程衔接\n\n**流水线：** 长篇 / 短篇\n**位置：** 导入（在开书之前）\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 导入完想继续写（长篇） | story-long-write | `/story-long-write` + \"日更\" |\n| 导入完想继续写（短篇） | story-short-write | `/story-short-write` |\n| 导入完想审查质量 | story-review | `/story-review` |\n| 想深入分析对标（长篇） | story-long-analyze | `/story-long-analyze` |\n| 想深入分析对标（短篇） | story-short-analyze | `/story-short-analyze` |\n| 从零开新书（长篇） | story-long-write | `/story-long-write` + \"开书\" |\n| 从零开新书（短篇） | story-short-write | `/story-short-write` |\n| 项目未部署环境 | story-setup | `/story-setup` |\n\n---\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.0.24:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-import\",\n  \"version\": \"1.0.24\",\n  \"publishedAt\": 1790423754204\n}\n\nFile v1.0.24:references/character-state-reverse.md\n\n# 核心角色当前快照反推规则（长篇导入）\n\n> 仅用于 `story-import` 导入长篇。输出不是一份不断追加的角色历史，而是初始化事务里的 `character_snapshots`；`tracking_commit.py init` 会为每个核心角色生成 `追踪/角色状态/{角色名}.md`。\n\n## 一、输入来源\n\n只从已经落盘的拆书产物反推，不重读 `原文/`：\n\n| 输入 | 用途 |\n|---|---|\n| `拆文库/{书名}/角色/{角色名}.md` | 身份、能力、目标、成长弧线、出场记录 |\n| `拆文库/{书名}/角色/角色关系.md` | 截至最后完整章的关键关系 |\n| `拆文库/{书名}/章节/第N章_摘要.md` | 从 `涉及` 锁定相关章，从 `状态变化`、`信息变化`、`局面结果` 和 `章尾钩子` 提取最后位置、最新状态、已知信息与未结事项；旧摘要缺字段时回退其关键事件与情节点 |\n| `拆文库/{书名}/剧情/*.md` | 阵营/身份转折、阶段目标和长期冲突 |\n| 初始化事务中的伏笔与时间线候选 | 核对角色未结事项及其可知范围 |\n\n## 二、追踪对象\n\n只为主角、反派、核心配角建立独立快照。临时路人和只承担一次功能的角色不建文件。边界不清时优先不建，后续角色真正进入复用状态时再由逐章事务创建。\n\n## 三、反推方法\n\n对每个核心角色，以最后完整导入章 N 为截面，分别确定：\n\n1. `identity`：截至 N 章实际成立的身份/职业，不写未来晋升计划。\n2. `location`：最后落点或下一章开始前可确定的位置。\n3. `goal`：角色当前正在追求的具体目标。\n4. `state`：身体、情绪、名望、立场中会影响续写的当前状态；只写必要信息。\n5. `abilities_resources`：当前确实掌握的能力、物品、权限、作品或人脉，最多 8 条。\n6. `relationships`：与后续会复用角色的当前关系，最多 8 条。\n7. `knowledge`：角色本人已经知道、且会影响其行为的信息，最多 8 条。作者真相不能误写成角色已知。\n8. `open_threads`：角色相关的未结事项，最多 8 条；必须有已写正文证据，纯未来设计留在大纲。\n\n若同一字段有多次变化，只取截至 N 章的当前值，不把变化史塞进快照。历史变化由后续 `逐章记录/第NNN章.md` 承担；导入旧章不补造这些记录。\n\n## 四、初始化 JSON 形状\n\n以下示例来自 demo《让你管账号，你高燃混剪炸全网》第 10 章：\n\n```json\n{\n  \"江晨\": {\n    \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n    \"location\": \"火箭军文工团高层看片会\",\n    \"goal\": \"完成五天百万粉任务，继续做出真正能打的军宣内容\",\n    \"state\": \"专业团队重拍版反向坐实手机原版的价值，军内认可继续抬升\",\n    \"abilities_resources\": [\n      \"前世 MCN 爆款运营经验\",\n      \"《中国军魂》伴奏\",\n      \"大师级导演能力\"\n    ],\n    \"relationships\": [\n      \"钟嘉嘉持续提供军报资源\",\n      \"周薄森和张耀祖已明确认可其创作能力\"\n    ],\n    \"knowledge\": [\n      \"《军报》采访稿已经过审\",\n      \"高层决定继续采用《诸君，且听龙吟》手机原版\"\n    ],\n    \"open_threads\": [\n      \"五天百万粉任务尚未结算\",\n      \"钟嘉嘉所谓只猜对一半仍未解释\"\n    ]\n  }\n}\n```\n\n工具据此生成的文件固定包含：截至章节、身份、位置、当前目标、身心状态、能力与资源、关键关系、已知信息、未结事项。模型不得另写一套 Markdown 模板。\n\n## 五、残稿与分批导入\n\n- 最后一章是残稿：所有快照截至残稿之前的最后完整章；残稿中的动作、获得物、关系变化不得提前生效。\n- 分批导入：快照只表示本次已导入范围的当前状态；扩大导入范围时重新执行一次完整导入，不在旧快照上追加历史段落。\n\n## 六、质量检查\n\n- [ ] 每个文件对应一个核心角色，无功能角色堆积\n- [ ] 所有字段都是截至最后完整章的当前值\n- [ ] 角色已知信息没有混入作者真相\n- [ ] 未结事项都有正文证据，未来设计仍在大纲\n- [ ] 单角色快照目标不超过 4096 字节；确有必要可放宽，但不得超过 8192 字节硬上限\n- [ ] `tracking_commit.py check` 通过\n\nFile v1.0.24:references/format-and-structure.md\n\n# 正文格式与小节结构\n\n> 写作前必读。以下格式是当前仓库约定的默认正文交付格式；用户或目标平台有明确要求时，以用户/平台要求覆盖。\n>\n> **适用范围**：段落格式（戏剧单元/镜头优先，短段为底色，长段用于完整推理、氛围和情绪链）和对话格式适用于所有体裁。小节(beat)结构仅适用于短篇；小节不设统一最低字数。长篇按 `visible_chars_v1` 测量同口径细纲 `字数目标`：内部带 ±12%，用户带 ±15%。\n\n---\n\n## 章节标记\n\n默认格式（按灵活度排序）：\n\n| 格式 | 平台适用 | 示例 |\n|------|----------|------|\n| `###1.` | 短篇默认 | `###1.` `###2.` `###3.` |\n| `###第一章` | 部分平台 | `###第一章` `###第二章` |\n| `1.`（纯数字） | 知乎 | `1.` `2.` `3.`（无 ### 前缀） |\n\n**规则**：全文统一一种格式，不要混用。短篇推荐 `###1.` 或纯数字，简洁高效。\n\n---\n\n## 段落格式\n\n### 核心规则：戏剧单元优先\n\n默认交付排版是**按戏剧单元/镜头自然断段，段落紧密排列**。不要把固定字数当成强制切刀；先判断“一件事/一个推理链/一个情绪变化”是否完成。\n\n- 一段承载一个戏剧单元：一个动作链、一个线索发现、一次视线切换、一轮心理判断，或一条连续的氛围/推理/情绪链。\n- 场景结束、一件事结束、新动作、新物件、新信息、新对话另起一段；同一瞬间的发生、感知、反应应织在一起，不拆成动作层/感知层/反应层。\n- 正文相邻段落之间**只允许一个换行符 `\\n`**；不得出现空行或连续换行 `\\n\\n`（紧密排列）。\n- 无缩进（平台渲染器自行处理，不需要 `　　` 或空格）。\n- 长度只作诊断：读起来拥挤、混入多个拍点、或手机屏上难以跟读时才拆；完整推理、氛围铺陈、情绪递进未结束时，允许稍长段保留连贯性。\n\n### 段落节奏（长短交错 + 疏密有别）\n\n短段快读，是网文手机阅读的底色；长段负责承载完整推理、氛围和情绪沉淀。**忌通篇同长度**，也忌把每段按同一字数阈值切开：\n\n- **长短交错**：高潮、打脸、反转压到最短（单句成段）；推理链、环境压迫、情绪沉淀、章节收束可保留较长段，让读者读完一个完整变化。\n- **疏密有别（详略）**：爽点、转折 beat 写密（感知、动作、细节铺满）；过场、连接 beat 写疏（1-2 句带过，不平均用力）。每个 beat 一样长、一样细，正是 AI 腔的来源。\n- **不过度碎片化**：连续多个极短段若仍属于同一镜头/同一件事，应合并成自然段，避免像提纲或诗行。\n\n### 主语与角色名节奏\n\n角色名不宜一味省略，也别每句都点名。按“主语重置”使用：\n\n- 段首、场景切换、多人同场、或主语可能混淆时，用主角名/角色名建立视角。\n- 同一段或同一动作链内，优先混用代词、动作承接和合理省略，避免每句都以同一角色名开头。\n- 关键转折、情绪爆点、身份反差或读者需要重新盯住主角时，可以再次点名强化。\n- 审查主语节奏看“读起来是否打磕巴”，不按全章出现次数一刀切；只有连续句/连续段无主语重置却反复点名，才算主语过密。\n\n---\n\n## 对话格式\n\n### 对话标记\n\n按目标平台/用户要求选择；未指定时使用默认格式：\n\n| 优先级 | 格式 | 适用平台 |\n|--------|------|----------|\n| 首选 | `\"说话内容\"` | 短篇默认、番茄 |\n| 平台/项目指定 | `「说话内容」` | 知乎盐言短篇、部分古言、日式或用户指定 |\n\n**默认用 `\"\"`**；用户或平台指定盐言风格时改为 `「」`，不要把 `「」` 视为错误。\n\n### 对话规则\n\n1. 对话**独立成行**，不嵌在叙述段落中\n2. 对话标签按需：高频或公式化的「他说」「她道」「他笑了笑说」用动作描写替代；普通「说」低频使用可保留（与「8 条绝对禁止」中「避免对话标签机械化」一条一致）\n3. 两人对话连续出现时，省略标签，靠内容区分说话人\n\n**正确示例**：\n```\n她把杯子放下。\n\"你走吧。\"\n他没有动。\n\"我说，你走吧。\"\n```\n\n**也合法（普通「说」低频使用）**：\n```\n她把杯子放下。\n\"你走吧。\"她说。\n他没有动。\n\"我说，你走吧。\"\n```\n\n**错误示例**：\n```\n她把杯子放下，说道：\"你走吧。\"他没有动，她又说：\"我说，你走吧。\"\n```\n\n---\n\n## 语气标点谱系\n\n标点服务语气、人物声线和情绪节奏，不能通篇句号化，也不能为了“丰富”随机堆砌符号。先判断当前句子的功能，再选择标点：\n\n| 语气 / 功能 | 标点策略 | 防线 |\n|---|---|---|\n| 压迫 / 冷静 / 克制 | 短句、逗号、句号，必要时用冒号压出判断落点 | 不人工加感叹号；克制不是每句都平铺句号 |\n| 质问 / 试探 / 反问 | 问号 + 短促追问片段，配合动作停顿 | 避免每句话都以 `？` 结尾 |\n| 惊讶 / 爆发 / 打脸 | 真正爆点可用 1 个感叹号，连续爆发最多 1-2 处 | 禁止 `!!!`、整段喊叫式感叹 |\n| 犹豫 / 吞咽 / 未说完 | 逗号、句号、短句断开、动作 beat | 不用 `……` 制造停顿；优先用动作和句长变化 |\n| 被打断 / 拖长音 | 不使用 `——`；改用动作打断、换行、短句或未完成动作 | 正文和对话都禁止 `——` / `—` / `--` |\n| 信息揭示 / 判断落点 | 冒号、分号或单句成段制造落点 | 保持手机阅读友好，不写论文式分号串 |\n\n执行规则：\n- 写对话时先看角色关系和权力位置：强势角色常短句收束，试探角色多问号和半句，崩溃角色才允许少量感叹/省略。\n- 写叙述时用句长、逗号停顿和单句成段制造节奏；默认不用破折号硬造节奏；本书文风明确授权的功能性用法保留。\n- 精修时检查两类问题：**通篇句号化**（语气全被压平）与**随机标点堆砌**（问号/感叹号不承载情绪功能，或用省略号/破折号硬造停顿）。\n- 引号风格按项目/平台约定；知乎盐言的 `「」` 是合法对话格式，`quote-mode keep` 时不得擅自改掉。\n\n---\n\n## 小节（beat）结构\n\n### 基本规则\n\n- 用数字编号（`1` `2` `3`）分割小节，每个小节是一个完整的叙事 beat\n- 小节长度服从其叙事职责，不设统一最低字数；整篇按锁定的交付范围控制，长篇章节按细纲「字数目标」处理\n- 小节数由情节阶段和转场需要决定；不为平均分配字数拆分完整动作链，也不把承担不同职责的小节硬合并\n- 每小节推进一个明确的情节点\n\n### 小节内部结构\n\n每个小节至少完成第 1 项，其余按本节职责选用：\n\n1. **一个主事件** + **一个或多个真实推进**（风险、信息、关系、资源、决定、行动或读者理解至少改变一项；相关情节点可由同一动作链或对话同时兑现，不为数量新增阻碍、对话或冲突）\n2. **情绪或压力落点**（确有变化时写清读者感受如何变化；任务、推理、手艺或等待链不强配情绪转折）\n3. **读者模型或下一步变化**（新信息、旧信息改义、决定、行动或后果均可，不强配新事实）\n4. **对白按功能使用**（需要时改变信息、策略、权力、关系或下一步行动；独自发现、核验证据、等待、手艺等场景可以无对白）\n5. **推进单元按需揉进信息维度**：发生是主干，感知和反应只在提供新信息时织入同一镜头（参考 writing-craft.md 场景写法）\n\n\n### 小节之间的衔接\n\n- 小节结尾留一个钩子（悬念/未解决的情绪/新问题）\n- 下一节开头快速接续，不要重新铺垫\n- 情绪跨节递进：每一节的情绪强度 ≥ 上一节。例外：峰值情绪（反转节）后允许维持 1 节不降，但不允许骤降\n\n---\n\n## 平台对话格式覆盖表\n\n| 平台 | 章节标记 | 对话格式 | 特殊要求 |\n|------|----------|----------|----------|\n| 知乎盐言 | `1.` | `「」` | 导语需单独标注 |\n| 番茄 | `###第一章` | `\"\"` | 首段需有吸引力 |\n| 红果 | `###1.` | `\"\"` | 无 |\n\n**通用原则**：用户未指定平台时，默认使用短篇通用格式（`###1.` + `\"\"`）；用户或平台指定盐言风格时，`「」` 是允许的。\n\n---\n\n## 8 条绝对禁止\n\n以下规则在写作全程执行，不因题材或风格而变：\n\n1. **禁止机械按字数分段**：不要因为超过某个字数就强拆；先判断段落是否仍是一个完整戏剧单元。若混入多个动作/信息/视线切换才拆，完整推理、氛围、情绪链可保留稍长段\n2. **禁止段间空行**：正文相邻段落之间只允许一个换行符 `\\n`，不得出现空行或连续换行 `\\n\\n`\n3. **避免对话标签机械化**：高频或公式化的「他说」「她道」「他笑了笑说」用动作/上下文替代；普通“说”可保留\n4. **禁止缩进**：不使用 `　　`（全角空格）或半角空格缩进\n5. **禁止正文段落 Markdown 渲染**：除统一的小节/章节标记（如 `###1.`）外，正文段落中不使用加粗 `**`、斜体 `*`、标题 `#`、分隔线 `---` 等 Markdown 语法\n6. **默认停顿写法**：正文默认用句号、逗号、换行、动作 beat 或短句承担停顿；本书明确选择的功能性破折号/省略号按调用方文风裁决与书级白名单保留。标点偏好不属于不可覆盖的文件结构协议。\n7. **禁止通篇句号化或随机标点堆砌**：标点必须跟语气/人物声线/情绪功能匹配；该质问时用问号，该爆发时少量感叹；犹豫、吞咽、未说完用动作或句长变化表达，不用 `……` / `——` 硬造停顿，也不得无功能地乱撒 `？`/`！`\n8. **禁止正文混入章节元信息**：章节号只允许出现在标题/小节标记/文件名/追踪记录中。正文叙述、对话、心理描写里不得出现 `第[一二三四五六七八九十百千万两0-9]+章|上一章|上章|前一章|本章|这一章|前文|后文|伏笔|细纲|读者` 这类写作工程词；要改成角色能感知的事件锚点或相对时间，例如把“比第一章那三秒开火更疼”改成“比那三秒开火更疼”。例外：角色在故事世界内真实阅读/讨论“第X章”文本，或真实身为作者/读者并谈论读者身份时，可保留相应词。\n\nFile v1.0.24:references/length-routing.md\n\n# 篇幅分流判断规则\n\nPhase 1「基本信息确认」环节使用本规则判定导入书是长篇还是短篇，判定结果决定后续走哪条迁移路径。\n\n---\n\n## 判定优先级\n\n判定按以下顺序执行，命中即停止，不再向下判断。\n\n| 优先级 | 信号来源 | 判定规则 |\n|--------|---------|---------|\n| 1 | 用户显式声明 | 用户说「这是长篇 / 短篇」→ 以用户为准，直接锁定 |\n| 2 | 结构信号 + 字数校验 | 检测到明确章节分隔符且章节数 ≥ 5 → 长篇；全文无章节分隔、单文件单篇 → 按下方细则表按字数分三档判定（字数阈值沿用优先级 3 的建议值） |\n| 3 | 字数兜底 | 仅在 1、2 均不明确时启用，见下方「字数兜底规则」 |\n| — | 冲突处理 | 信号之间发生矛盾时，不自动决策，回到 Phase 1 向用户复述并请用户拍板 |\n\n---\n\n## 优先级 1：用户显式声明\n\nPhase 1 信息确认时向用户提问：**「这是长篇还是短篇？」**\n\n- 用户明确回答 → 锁定类型，跳过后续检测。\n- 用户未回答或说「不确定」→ 进入优先级 2 结构信号检测。\n\n---\n\n## 优先级 2：结构信号 + 字数校验\n\n### 章节分隔符识别\n\n复用 `structure-mapping-long.md` 的分隔符识别表：\n\n| 分隔符模式 | 示例 |\n|-----------|------|\n| `第X章` / `第X章 ` / `第X章：` / `第X章 XXX` | 第1章 初入江湖 |\n| `Chapter X` | Chapter 1 |\n| 纯数字编号 + 标题 | 1. 觉醒 |\n\n### 判定规则\n\n| 检测结果 | 判定 |\n|---------|------|\n| 有明确章节分隔符，且识别到章节数 ≥ 5 | 强长篇信号 → 判定为**长篇** |\n| 全文无任何章节分隔符，单文件单篇，且总字数 < 20000 | 强短篇信号 → 判定为**短篇** |\n| 全文无任何章节分隔符，单文件单篇，20000 ≤ 总字数 < 30000 | 判定为**短篇**，但 Phase 1 复述时告知：已超过短篇拆解管道 20000 字的建议上界，请用户确认仍按短篇导入 |\n| 全文无任何章节分隔符，单文件单篇，但总字数 ≥ 30000 | 结构与字数信号相反 → 不自动判定，见下方「冲突处理」请用户拍板 |\n| 有章节分隔符，但章节数 < 5 | 结构信号不明确 → 进入优先级 3 字数兜底 |\n| 分隔符模式模糊（如仅有单个标题行） | 结构信号不明确 → 进入优先级 3 字数兜底 |\n\n---\n\n## 优先级 3：字数兜底\n\n**仅在优先级 1、2 均无法给出明确判定时使用。** 当前导入契约按短篇通常 8000-20000 字的区间取 30000 字作建议上界，并保留题材差异余量。\n\n| 条件 | 判定 | 备注 |\n|------|------|------|\n| 总字数 < 30000 且无章节结构 | **短篇** | — |\n| 总字数 ≥ 30000 | **长篇** | — |\n| 章节数 ≥ 5（任意字数） | **长篇** | — |\n| 总字数 < 30000 但章节数 ≥ 5 | 初判**长篇**，但须提示用户 | 见下方「分章短篇连载」 |\n\n> **建议值说明**：30000 字阈值是估算值，不同平台和题材的短篇上限有差异。执行时列入 open-questions，建议用户复核是否适用于当前导入书。\n\n### 分章短篇连载\n\n检测到总字数 < 30000 但章节数 ≥ 5 时，在确认环节提示用户：\n\n> 「检测到分章结构（共 {N} 章），但总字数约 {X} 字，低于 30000 字。可能是分章短篇连载。确认按长篇导入，还是按短篇处理？」\n\n用户拍板后锁定类型。\n\n---\n\n## 冲突处理\n\n当不同信号之间出现矛盾时，**不自动决策**，回到 Phase 1 向用户复述检测结果：\n\n| 典型冲突场景 | 处理方式 |\n|------------|---------|\n| 用户说「短篇」但检测到 20 章 | 复述：「检测到 20 章章节结构，通常属于长篇。确认按短篇导入？」由用户拍板 |\n| 用户说「长篇」但全文无章节分隔且字数 < 30000 | 复述：「全文无章节分隔，总字数约 {X} 字，通常属于短篇。确认按长篇导入？」由用户拍板 |\n| 用户未声明、全文无章节分隔、单文件单篇，但字数 ≥ 30000 | 复述：「全文无章节分隔，但总字数约 {X} 字，已超过短篇常见上界。按长篇导入建工程，还是仍按短篇处理？」由用户拍板 |\n| 结构信号与字数信号方向相反 | 展示两项信号，请用户决定 |\n\n用户拍板的结果记入 Phase 1 上下文，后续步骤以此为准，不再重新判定。\n\n---\n\n## 判定结果与后续路径\n\n判定完成后，迁移路径按以下对应关系分流：\n\n| 判定结果 | 迁移路径 | 映射规则参考文件 |\n|---------|---------|----------------|\n| **长篇** | 长篇迁移路径（Phase 3-L） | `structure-mapping-long.md` |\n| **短篇** | 短篇迁移路径（Phase 3-S） | `structure-mapping-short.md` |\n\n> 注：`structure-mapping-long.md` 对应长篇迁移映射规则，`structure-mapping-short.md` 对应短篇迁移映射规则。\n\n---\n\n## 快速判定流程图\n\n```\nPhase 1 问用户：「长篇还是短篇？」\n         │\n         ├─ 用户明确回答 ──────────────────────────► 锁定类型\n         │\n         └─ 未回答 / 不确定\n                  │\n                  ▼\n         检测章节分隔符\n                  │\n                  ├─ 有分隔符且章节数 ≥ 5 ──────────► 长篇\n                  │\n                  ├─ 无分隔符，单文件单篇，< 20000 ─► 短篇\n                  │\n                  ├─ 无分隔符，单篇，20000 ≤ 字数 < 30000 ─► 短篇（复述时告知超出建议上界）\n                  │\n                  ├─ 无分隔符，单文件单篇，≥ 30000 ─► 提示用户裁定\n                  │\n                  └─ 信号不明确\n                            │\n                            ▼\n                   字数兜底判定（30000 字阈值）\n                            │\n                            ├─ < 30000 且无章节结构 ─► 短篇\n                            ├─ ≥ 30000 ─────────────► 长篇\n                            ├─ 章节数 ≥ 5 ──────────► 长篇\n                            └─ < 30000 但章节数 ≥ 5 ─► 提示用户裁定\n```\n\nFile v1.0.24:references/state-tracking.md\n\n# 角色状态记录格式\n\n> story-import 反推角色状态（character-state-reverse.md）时按本格式写 `追踪/角色状态/{角色名}.md`。\n\n动态状态按核心角色拆成 `追踪/角色状态/{角色名}.md`，由 `tracking_commit.py` 根据事务 JSON 整份覆盖；静态原始人设仍在 `设定/角色/{角色名}.md`。只为后续会复用的主角、反派、核心配角建快照，不为路人、一次性功能角色建文件。\n\n## 格式\n\n```markdown\n# 江晨｜当前状态\n\n- 截至章节：第10章\n- 身份：火箭军文工团宣传兵；军宣爆款创作者\n- 位置：火箭军文工团高层看片会\n- 当前目标：完成五天百万粉任务，持续做出真正能打的军宣内容\n- 身心状态：专业团队反向验证原版价值，军内认可继续抬升\n\n## 能力与资源\n- 前世 MCN 爆款运营经验\n- 《中国军魂》伴奏\n- 大师级导演能力\n\n## 关键关系\n- 钟嘉嘉持续提供军报资源\n- 周薄森和张耀祖已明确认可其创作能力\n\n## 已知信息\n- 《军报》采访稿已经过审\n- 原版视频将继续作为正式军宣内容\n\n## 未结事项\n- 五天百万粉任务尚未结算\n- 钟嘉嘉所谓“只猜对一半”仍未解释\n```\n\n## 更新规则\n\n1. 每章只记录身份、位置、目标、身心状态、能力资源、关系、已知信息、未结事项中真正发生变化的内容。\n2. 核心复用角色发生变化时，在同一事务的 `character_changes` 写变化，并在 `character_snapshots` 提交其**截至当前已写最后一章**的完整快照；工具以快照是否存在判断核心/临时角色，整份覆盖核心角色小文件，不追加历史。\n3. 修订旧章时，从修订章检查到最后已写章，按各维度和各关系对象重算当前状态，再提交完整快照；不得把最后一条单维度变化当成角色全状态。\n4. 无变化可不提交快照；核心角色重新进入当前场景时直接读取其已有小文件，并由事务工具把必要信息带入续写状态卡。\n5. 角色变化历史属于 `逐章记录/第NNN章.md`，当前快照不重复保存逐章履历。\n6. 完整 JSON 字段、4096 字节目标与 8192 字节硬上限见 [tracking-transaction.md](tracking-transaction.md)。\n\nFile v1.0.24:references/structure-mapping-long.md\n\n# 结构迁移映射规则（长篇）\n\nPhase 3-L 长篇结构迁移的详细映射规则和模板。将 `拆文库/{导入书名}/` 分析结果转换为 `{导入书名}/` 长篇项目结构。\n\n> 短篇迁移规则见 `structure-mapping-short.md`。\n\n> **名称边界**：`{导入书名}` 是用户自己的待续写小说；`{对标书名}` 是另行选择的外部参考作品。两者的数据源必须分开，禁止把 `{导入书名}` 的拆文结果或项目 `设定/` 写入 `对标/`。\n\n---\n\n## 映射总览\n\n| 拆文库路径 | 项目路径 | 转换方式 |\n|-----------|---------|---------|\n| `原文/` | `正文/第XXX章_章名.md` | 按章节分割并标准化命名 |\n| `快速预览.md` | — | 参考卷划分候选、剧情走向，不直接迁移 |\n| `角色/{角色名}.md` | `设定/角色/{角色名}.md` | 增加角色模板字段 |\n| `角色/角色关系.md` | `设定/关系.md` | 格式转换 |\n| `设定/世界观/*.md` | `设定/世界观/*.md` | 按主题原样同步 |\n| `设定/势力/*.md` | `设定/势力/*.md` | 按势力原样同步 |\n| `剧情/故事线.md` | `大纲/大纲.md` | 反推卷级结构（需用户确认卷划分，见下） |\n| `剧情/{标题}.md` | `大纲/卷纲_第X卷.md` | 聚合为卷纲 |\n| `剧情/节奏.md` | `设定/题材定位.md`（节奏摘要） | 提炼已写部分的既有节奏，保留为本书导入基线；不复制到 `对标/` |\n| `剧情/情绪模块.md` | `设定/题材定位.md`（情绪摘要） | 提炼已写部分的读者需求与情绪引擎；不复制到 `对标/` |\n| `章节/第N章_摘要.md` | `大纲/细纲_第N章.md` | 反推细纲 |\n| — | `设定/题材定位.md` | 从拆文报告生成 |\n| — | `追踪/_tracking-state.json.imported_through_chapter` | 记录导入截止章 N；第 1..N 章不伪造日更记录 |\n| — | `追踪/伏笔.md` | 每个已实际埋设/回收的伏笔 ID 只保留一行当前状态 |\n| — | `追踪/_tracking-state.json.timeline` | 同一事件登记客观事实、读者认知与实际揭示状态；Markdown 时间线只做派生阅读视图 |\n| — | `追踪/时间线/作者真相.md`、`读者已知.md` | 由 `_tracking-state.json.timeline` 派生；读者视图不得泄露作者秘密 |\n| — | `追踪/角色状态/{角色名}.md` | 由 `character-state-reverse.md` 反推核心角色当前快照 |\n| — | `追踪/逐章记录/` | 创建空目录；导入章不伪造日更记录，续写从 N+1 章生成 |\n| `剧情/散落情节.md` | `大纲/大纲.md` 附录或对应卷纲 | 合并到相关卷的大纲 |\n| — | `追踪/上下文.md` | 由初始化事务生成续写状态卡（固定 7 栏），≤12288 字节 |\n\n旧拆文的目录或字段名与上表不同时，先建立一次“旧路径 → 当前目标”的来源映射，再按实际可读内容转换；不要为了改名复制出第二套拆文真源。`剧情/节奏.md`、`剧情/情绪模块.md` 或主题化设定缺失时，旧内容能支持的导入步骤照常执行，对应摘要写「未知/待增强」；只有用户要启用依赖这些资料的新对标召回时，才回到 story-long-analyze 做按需增强。\n\n---\n\n## 正文标准化规则\n\n### 命名格式\n\n源文件名 → 标准格式：`第{零填充三位}章_{章名}.md`\n\n| 源文件名 | 标准化后 |\n|---------|---------|\n| 第一章_初入江湖.txt | 第001章_初入江湖.md |\n| 第1章.md | 第001章_无题.md |\n| chapter01.md | 第001章_无题.md |\n| 01_觉醒.md | 第001章_觉醒.md |\n\n### 章节分隔识别\n\n当源为单个大文件时，按以下分隔符切分（与 `length-routing.md` 优先级 2 复用同一识别表）：\n\n| 分隔符模式 | 示例 |\n|-----------|------|\n| `第X章` / `第X章 ` / `第X章：` / `第X章 XXX` | 第1章 初入江湖 |\n| `Chapter X` | Chapter 1 |\n| 纯数字编号 + 标题 | 1. 觉醒 |\n\n### 内容处理\n\n- 保留原文内容不变，不做任何修改\n- 编码统一为 UTF-8\n- 去除文件头尾无关信息（如广告、声明等）\n\n---\n\n## 角色文件迁移模板\n\n```markdown\n---\nname: {角色名}\n---\n\n# {角色名}\n\n## 基本信息\n- 身份：{从拆文库角色文件提取}\n- 核心特质：{}\n- 当前能力：{}\n- 核心动机：{}\n- 弱点/缺陷：{}\n\n## 外在表现\n{身份/言行/外貌}\n\n## 内在分析\n{性格/目标/秘密}\n\n## 出场记录\n| 章节 | 关键事件 | 状态变化 |\n|------|---------|---------|\n| 第{N}章 | {事件} | {变化} |\n\n## 别名\n{如有别名，列出}\n```\n\n---\n\n## 关系文件转换规则\n\n拆文库格式（角色关系.md）→ 项目格式（设定/关系.md）：\n\n```\n拆文库格式：\nA<->B：关系类型 | 情感 | 描述（50-200字）| 演变轨迹\n\n项目格式：\n| 角色 A | 角色 B | 关系类型 | 情感倾向 | 当前状态 | 起始章节 | 变化节点 |\n```\n\n转换规则：\n- 关系类型映射：家人→亲情、恋人→爱情、朋友→友情等\n- 情感倾向直接复用：正面/负面/中性/复杂\n- 演变轨迹提取到「变化节点」列\n\n### 目标格式模板（设定/关系.md）\n\n```markdown\n# 角色关系图\n\n## 关系总览\n\n| 角色 A | 角色 B | 关系类型{亲情/爱情/友情/敌对/师生/主从/利益} | 情感倾向{正面/负面/中性/复杂} | 当前状态 | 起始章节 | 变化节点 |\n|--------|--------|---------------------------------------------|-----------------------------|---------|---------|---------|\n| {名} | {名} | {类型} | {倾向} | {描述} | 第{N}章 | {事件} |\n\n## 关系演变\n\n{角色A}<->{角色B}：\n- 起点：{初始关系}\n- 转折：{章节·事件·变化}\n- 当前：{现状}\n\n## 核心冲突关系\n\n{列出推动剧情的2-3对核心对立/合作关系}\n```\n\n---\n\n## 世界观同步规则\n\n当前 `story-long-analyze` 已输出主题化目录，导入阶段只做 pass-through，不再解析或拆分扁平 `世界观.md`。\n\n| 源路径 | 目标路径 | 当前契约 |\n|---------|---------|---------|\n| `拆文库/{导入书名}/设定/世界观/*.md` | `{项目}/设定/世界观/*.md` | 原样同步；`背景设定.md` 必须存在 |\n| `拆文库/{导入书名}/设定/势力/*.md` | `{项目}/设定/势力/*.md` | 原样同步已独立的势力文件 |\n\n`力量体系.md`、`地理.md` 或小势力资料不足 200 字时，上游会将其并入 `背景设定.md`，因此这些独立文件可省略。如缺少 `背景设定.md`，或当前内容指向独立力量体系却未产出对应文件，停止导入并提示重跑 `story-long-analyze` Stage 4。\n\n---\n\n## 大纲反推规则\n\n### 大纲.md（卷级结构）与卷划分规则\n\n从 `剧情/故事线.md`、`剧情/*.md` 和 `快速预览.md` 反推，**卷划分必须遵守以下决策规则**：\n\n**情形 A：原文有明确卷界**\n\n原文中存在明确卷级标记（如「第一卷 XXXX」「卷一」等章节层级标题）→ 按原文卷界直接划分，无需询问用户。\n\n**情形 B：原文无明确卷界**\n\n不做机械切卷。执行流程：\n\n1. 根据故事线/场景切换/大型时间跳跃，检测候选卷边界（见下方「候选边界检测参考」）；\n2. 向用户展示候选划分方案，格式示例：\n\n   ```\n   候选卷划分（供参考，非定论）：\n   - 候选卷一：第 1-18 章（世界观建立 + 初步成长，场景：城郊学院）\n   - 候选卷二：第 19-45 章（主线冲突爆发，场景：帝都议事堂）\n   - 候选卷三：第 46-XX 章（最终对决，场景切换：上古遗迹）\n   以上为故事线/场景切换自动检测结果，请确认或调整。\n   ```\n\n3. **等待用户确认卷划分方案**后，才生成 `大纲/大纲.md` 的卷级结构和对应 `大纲/卷纲_第X卷.md`；\n4. 用户未确认前，`大纲/大纲.md` 只记录候选方案，不写定卷纲。\n\n> **不允许**用「每卷默认 20-40 章」机械切分原文无卷界的书。候选仅作参考，最终由用户拍板。\n\n### 候选边界检测参考\n\n| 信号类型 | 示例 | 卷边界可能性 |\n|---------|------|------------|\n| 章节连续 + 同一故事线 | 同一城市/同一势力视角 | 同一卷 |\n| 主要场景切换（新地图/新阵营） | 从城郊进入帝都 | 候选新卷起点 |\n| 大型时间跳跃（数月/数年） | 「三年后…」 | 候选新卷起点 |\n| 主要阶段目标完成 + 新目标开启 | 击败阶段 boss → 新危机出现 | 候选新卷起点 |\n| 故事线汇总中已有阶段划分 | `剧情/故事线.md` 内部分段 | 优先参考 |\n\n### 卷纲反推\n\n#### 目标格式模板（大纲/卷纲_第X卷.md）\n\n卷纲是大纲的展开——大纲决定方向，卷纲决定节奏。包含本卷全部创作规划。\n\n```markdown\n# {卷名} 卷纲\n\n## 核心信息\n- 章节范围：第{X}-{Y}章\n- 字数目标：{W}万字\n- 本卷定位：{铺垫/发展/高潮/转折/收尾}\n\n## 核心矛盾\n{一句话：本卷要解决什么问题或达到什么目标}\n\n## 情绪弧线\n- 模板：{V形/倒V形/W形/渐进形/延迟满足形/急转弯形}\n- 选择理由：{结合题材和本卷定位}\n\n| 章节 | 情绪基调{紧张/轻松/悲伤/热血/温馨/震惊} | 强度{1-10} | 触发事件 |\n|------|-----------------------------------------|-----------|---------|\n| 第{N}章 | {基调} | {N} | {事件} |\n\n## 卷契约与终局储备（反推）\n- 卷契约：{从本卷剧情归纳读者期待与主角高光；证据不足写 `[待补充]`}\n- 本卷主推线：{从情节点归纳承担本卷最大高潮的线}\n- 本卷战果：{其余顺带兑现的线；证据不足写 `[待补充]`}\n- 本卷解锁的终局里程碑：`[待补充]`\n- 本卷禁碰的终局底牌：`[待补充]`\n- 契约风险：{契约安全 / 需补强 / 契约破坏；无法判断写 `[待补充]`}\n\n## 剧情单元（反推）\n| 单元ID | 章节范围 | 单元节拍（建立期待→尝试→加压/转向→决定性行动→兑现→余波） | 主推线/战果 | 下一单元因果钩子 |\n|------|---------|---------|-------|---------|\n| L{卷}-1 | {章X-Y} | {从爽点/情节点分布归纳} | {线} | {方式} |\n\n（导入反推只填有证据的字段，未知写 `[待补充]`、不杜撰；后续补纲/改纲时按 story-long-write 技能的「剧情单元卡」完整字段模板升级。）\n\n## 人物弧线\n| 角色 | 本卷起点 | 本卷终点 | 关键转变 |\n|------|---------|---------|---------|\n| {名} | {状态} | {状态} | {事件} |\n\n## 本卷反转（如有）\n| 类型{身份/动机/阵营/信息/命运} | 涉及角色 | 误导路径 | 揭示章节 | 影响范围 |\n|------|---------|---------|---------|---------|\n| {类型} | {名} | {如何误导读者} | 第{N}章 | {影响哪些线} |\n\n## 本卷伏笔\n| 伏笔 | 埋设章节 | 预计回收 | 类型{短期/中期/长期} |\n|------|---------|---------|---------------------|\n```\n\n#### 字段映射\n\n从剧情文件提取每卷的：\n- 核心矛盾 → 核心矛盾字段\n- 情节点分布 → 情绪弧线 + 剧情单元（反推）\n- 角色出场 → 人物弧线\n- 铺垫类情节点 → 伏笔\n\n### 细纲反推\n\n从每章摘要（`章节/第N章_摘要.md`）提取：\n\n| 摘要字段 | 细纲字段 | 转换方式 |\n|---------|---------|---------|\n| 关键事件 + 局面结果 | 核心事件 | 合并为“谁采取什么行动 → 局面如何变化”；旧摘要没有 `局面结果` 时只用 `关键事件` |\n| 章节字数 | 字数目标 + 字数口径 | 对原文章节运行 `storyctl.py wordcount measure`，写入 `actual` 与 `visible_chars_v1` |\n| `基调：` + 状态变化 | 目标情绪 | 写成「前状态→后状态」：用基调枚举（紧张/轻松/悲伤/热血/爽/甜/温馨/恐怖/压抑/其他）加本章状态变化归纳，不只写一个情绪词；必须写实际内容 |\n| 关键事件 + 主角行动 | 主角目标/关键选择 | 原文里主角本章要什么、做了什么判断或选择；必须写实际内容 |\n| 所属剧情单元 | 单元ID/位置 | 取反推卷纲「剧情单元」表里包含本章的单元ID；单元内第几拍判断不出写 `[待补充]` |\n| （历史章） | 本章禁止提前释放 | 已写成的章节写「无」 |\n| 章尾钩子 | 章首承接证据 | 作为下一章开篇需要承接的等待；新的章首钩子设计目标仍标 `[待补充]` |\n| 爽点类情节点 | 爽点 | 从情节点类型推断；没有则写“无显性爽点 / [待补充]” |\n| 情节点起承转合 + 因果 | 内容概括（起因/发展/转折/高潮/结尾） | 按情节点顺序归纳，用因果链校正起因与转折；证据不足写 `[待补充]` |\n| 主线/支线/任务线索 | 情节安排（主线/辅线/事件线/感情线/逻辑线） | 从剧情单元索引与摘要反推；无证据的辅线/感情线写“无”或 `[待补充]`，不得杜撰 |\n| 涉及 + 状态变化 | 人物关系和出场顺序 | `涉及` 给出候选人物，`状态变化` 只写有证据的“前 → 后”；关键物件从证据或旧情节点补充，缺失写 `[待补充]` |\n| 全部情节点 | 情节细化 / 情节点序列 | 按表格逐行写（# / 情节点 / 功能标签 / 执行边界）；保持原顺序，功能或边界不明写 `[待补充]`，不反推逐点字数配额 |\n| 胜负/反转/收益损失 | 行动成本（可无）/收益归属 | 有明确证据才填写；行动成本可无、不硬造；否则 `[待补充]` |\n| 章尾钩子 + 局面结果 | 结尾设定和钩子 | 结尾设定写原文落到最后的具体动作或画面，章尾钩子写已存在的等待；未来设计仍标 `[待补充]` |\n\n---\n\n## 角色状态反推\n\n由 character-state-reverse.md 反推，详见该文件。\n\n---\n\n## 伏笔提取规则\n\n从情节点中识别潜在伏笔：\n\n### 识别模式\n\n| 情节点类型 | 伏笔可能性 | 提取方式 |\n|-----------|-----------|---------|\n| 铺垫 | 高 | 直接提取为伏笔 |\n| 信息揭示（部分） | 中 | 检查后续是否有呼应 |\n| 物品首次出现 | 中 | 检查后续是否有使用 |\n| 角色秘密 | 高 | 标记为角色伏笔 |\n| 未解决的悬念 | 高 | 从章尾标记提取 |\n\n### 状态推断\n\n- 铺垫点在后续章节有「揭示」或「解决」类情节点 → 标记「已回收」\n- 铺垫点无后续呼应 → 标记「已埋」\n- 半成品小说的最后几章铺垫 → 标记「已埋」，备注「接近断点」\n\n---\n\n## 时间线提取规则\n\n### 时间标记识别\n\n从情节点和时间标记中提取：\n\n| 标记模式 | 示例 | 提取方式 |\n|---------|------|---------|\n| 明确日期 | \"天元三年春\" | 直接记录 |\n| 相对时间 | \"三日后\"、\"半月后\" | 推算绝对时间 |\n| 事件间隔 | \"翌日\"、\"次日\" | 连续标记 |\n| 季节标记 | \"入冬\"、\"春暖花开\" | 季节推断 |\n\n### 排序规则\n\n按章节顺序排列，同一章内按情节点序号排列。时间标记缺失时标注 `[推断]`。\n\n---\n\n## 题材定位生成\n\n从拆文报告中提取核心发现，生成 `设定/题材定位.md`。\n\n### 目标格式模板（设定/题材定位.md）\n\n```markdown\n# 题材定位\n\n## 基本信息\n- 题材类型：{玄幻/都市/系统/...}\n- 目标平台：{Phase 1 向用户采集的目标平台；无则从拆文报告提取，仍无填 [待补充]。story-review 据此选平台 rubric}\n- 核心梗：{一句话卖点}\n- 微创新点：{与同类题材的差异}\n\n## 核心梗三分法\n- 表层卖点：{读者一眼看到的吸引力}\n- 深层爽点：{持续追读的情绪驱动力}\n- 长线钩子：{支撑全书的悬念/目标}\n\n## 读者需求 / 情绪引擎\n> 本段从 `拆文库/{导入书名}/剧情/情绪模块.md` 提炼，只记录本书已写内容的续写基线，不把本书登记成对标。\n\n| 读者需求 | 情绪缺口 | 满足方式 | 可复现模块 | 来源 |\n|---------|---------|---------|------------|------|\n| {安全感/优越感/期待感/情感补偿/认知反转/陪伴感} | {缺什么} | {如何被满足} | {EM-001 等} | `[导入分析] 剧情/情绪模块.md` |\n\n## 节奏与触发参考\n> 本段从 `拆文库/{导入书名}/剧情/节奏.md` 提炼，只记录已写部分的节奏事实。\n\n| 节奏模块 | 关键信息推进 | 情绪触动点 | 爆发节奏 | 来源 |\n|---------|-------------|------------|----------|------|\n| {RH/TR 编号} | {信息如何被扩写} | {触发什么感受} | {铺垫→爆发→冷却} | `[导入分析] 剧情/节奏.md` |\n\n<!-- 仅当用户显式绑定独立外部对标时生成以下两节；未绑定时整段省略。 -->\n## 对标书清单（canonical registry，可选）\n主对标书: {对标书名}  # 最多 1 本；必须是独立外部参考作品\n对标书列表:\n  - 书名: {对标书名}\n    引用强度: 主  # 主 / 辅 / 参考\n    题材类型: {玄幻/都市/系统/...}\n    相关性: 同题材\n    用途: 文风+核心结构\n  - 书名: {书名 B}\n    引用强度: 辅\n    题材类型: {题材}\n    相关性: 同题材/弱相关\n    用途: {补设定/大纲/模块，不进文风}\n  - 书名: {书名 C}\n    引用强度: 参考\n    题材类型: {题材}\n    相关性: 同题材/弱相关\n    用途: {仅按预算召回摘要}\n\n## 对标分析（派生概要）\n> 完整对标数据见 `对标/` 目录；上方 registry 是权威清单。本表仅做快速概览，不可替代 `主对标书` + `对标书列表`。\n\n| 对标书 | 相似点 | 差异点 | 可借鉴 |\n|--------|-------|-------|-------|\n| {对标书名} | {点} | {点} | {点} |\n\n## 题材框架\n- 八节点位置：{当前处于哪个节点}\n- 关键转折节点：{列出}\n```\n\n### 字段映射\n\n- 题材类型、核心梗、微创新点 → 从 `拆文报告.md` 基本信息与核心发现段提取\n- 核心梗三分法 → 从 `拆文报告.md` 表层吸引力、爽点设计、长线悬念段提取\n- 读者需求 / 情绪引擎 → 从 `剧情/情绪模块.md` 提取；缺失时停止导入并给出重跑 Stage 3+ 的修复动作\n- 节奏与触发参考 → 从 `剧情/节奏.md` 提取；缺失时停止导入，不得以 `拆文报告.md`、章节摘要或 `剧情/故事线.md` 代替\n- 对标书清单 → 仅登记用户显式选择、且能回溯到 `拆文库/{对标书名}/` 的外部作品；未绑定时省略，不得用 `{导入书名}` 补位\n- 对标分析（派生概要） → 只总结已登记的外部对标；题材框架仍从本书导入分析生成，不得把两类来源混写\n\n---\n\n## 对标引用视图同步规则\n\n本节只对用户显式绑定的外部 `{对标书名}` 生效：从 `拆文库/{对标书名}/` 同步到项目 `对标/{对标书名}/`。未绑定时不创建对标子目录；严禁把 `拆文库/{导入书名}/`、项目 `设定/` 或由其生成的文件复制到 `对标/`。\n\n| 源路径 | 目标路径 | 同步语义 |\n|-------|---------|----------|\n| `拆文库/{对标书名}/剧情/节奏.md` | `{项目}/对标/{对标书名}/剧情/节奏.md` | 日更选择 `rhythm_reference` 的必备权威文件；缺失则不登记该对标 |\n| `拆文库/{对标书名}/剧情/情绪模块.md` | `{项目}/对标/{对标书名}/剧情/情绪模块.md` | 日更选择 `selected_emotion_module` 的必备权威文件；缺失则不登记该对标 |\n| `拆文库/{对标书名}/剧情/*.md` | `{项目}/对标/{对标书名}/剧情/*.md` | 剧情单元、故事线、散落情节等剧情资产；与权威节奏/情绪文件冲突时以后者为准 |\n| `拆文库/{对标书名}/章节/*.md`（第N章_摘要.md + 黄金三章 第1-3章_深度拆解.md）| `{项目}/对标/{对标书名}/章节/*.md` | 匹配章证据；摘要读取概要、关键事件、局面结果、涉及、状态变化与情节点序列（含类型、主题标签与基调），黄金三章另含深度写法 |\n| `拆文库/{对标书名}/角色/*.md` | `{项目}/对标/{对标书名}/角色/*.md` | 角色功能位、关系与反应层参考 |\n| `拆文库/{对标书名}/设定/` | `{项目}/对标/{对标书名}/设定/` | 世界观、势力、金手指等设定约束参考 |\n| `拆文库/{对标书名}/拆文报告.md` | `{项目}/对标/{对标书名}/拆文报告.md` | 人类可读摘要投影 |\n| `拆文库/{对标书名}/文风.md` | `{项目}/对标/{对标书名}/文风.md` | 日更文风召回必读 |\n\n冲突规则：已登记外部对标的 `对标/{对标书名}/剧情/情绪模块.md` 和 `对标/{对标书名}/剧情/节奏.md` 是对标召回权威；`拆文报告.md`、`剧情/故事线.md` 只作为摘要投影。若摘要冲突，保留冲突说明并以权威文件为准；缺少任一权威文件时不生成半套对标视图，先修复该外部作品的拆文产物。\n\n---\n\n## 质量检查清单\n\nPhase 3-L 迁移完成后执行：\n\n- [ ] 正文文件数 = 源文件章节数\n- [ ] 主要角色（主角 + 核心配角）文件已创建\n- [ ] 关系.md 非空\n- [ ] 大纲.md 有卷级结构\n- [ ] 每章细纲已生成\n- [ ] `_tracking-state.json.imported_through_chapter` 等于最后完整导入章\n- [ ] `追踪/伏笔.md` 每个 ID 至多一行，未来尚未埋设的设计没有混入\n- [ ] `_tracking-state.json.timeline` 已登记关键事实与读者认知，`读者已知.md` 无真相泄露\n- [ ] `追踪/角色状态/{角色名}.md` 已覆盖全部核心角色并对齐 `character-state-reverse.md`\n- [ ] 追踪/逐章记录/ 空目录已创建，且没有为导入章伪造日更记录\n- [ ] `追踪/上下文.md` 顶层恰好 固定 7 栏且 ≤12288 字节\n- [ ] `tracking_commit.py check` 通过，`_tracking-state.json` 与全部派生视图一致\n- [ ] 散落情节已合并到相关卷纲或大纲附录\n- [ ] 卷划分已经用户确认（原文无明确卷界时必检）\n- [ ] `拆文库/{导入书名}/` 未被复制到 `对标/`，本书未登记为自身对标\n- [ ] 若绑定外部对标，`拆文库/{对标书名}/` 与 `对标/{对标书名}/` 名称和来源一致，两个主产物均已同步；否则报告修复动作但不回滚本书工程\n\nFile v1.0.24:references/structure-mapping-short.md\n\n# 结构迁移映射规则（短篇）\n\nPhase 3-S 短篇结构迁移的详细映射规则。将 `拆文库/{导入书名}/` 短篇拆文产物转换为 `{短篇标题}/` 短篇工程结构，供 `story-short-write` Phase 3 无缝接手续写。\n\n> 长篇迁移规则见 `structure-mapping-long.md`。\n\n> **名称边界**：`{导入书名}` 是用户自己的待续写短篇；`{对标书名}` 是另行选择的外部参考作品。不得把本篇拆文结果复制到本篇 `对标/`，也不得把本篇分析写成“对标摘要”。\n\n---\n\n## 与长篇的关键差异\n\n| 维度 | 短篇 | 长篇 |\n|------|------|------|\n| 正文 | 单文件 `正文.md`，**不切章** | `正文/第XXX章_章名.md` 多文件 |\n| 追踪目录 | **不产** `追踪/` | 产 `追踪/`（`_tracking-state.json`、续写状态卡、逐章记录、角色快照、伏笔视图、双视角时间线） |\n| 角色状态 | **不产**角色追踪 | 核心角色各产 `追踪/角色状态/{角色名}.md`，由 `character-state-reverse.md` 反推 |\n| 大纲体系 | **不产** 卷纲、细纲 | 产 `大纲/卷纲_第X卷.md` + `大纲/细纲_第N章.md` |\n| 大纲目录 | **不产** `大纲/` 目录 | 产 |\n| 续写衔接 | story-short-write Phase 3（逐场景写作） | story-long-write 日更循环 |\n\n---\n\n## 映射总览\n\n| 拆书产物 | 短篇工程文件 | 转换方式 |\n|---------|------------|---------|\n| 原文全文（`拆文库/{导入书名}/原文/`） | `{标题}/正文.md` | 单文件迁移，按下方『正文.md 格式规范』规范化，不重写内容 |\n| `拆文报告.md` 的故事核/题材/结构字段 | `{标题}/设定.md`（核心框架区） | 反推本书核心框架；不继承报告中可能存在的自对标登记 |\n| `情节节点.md` 的功能分段 | `{标题}/小节大纲.md` | 反推小节大纲（按开头段/铺垫段/升级段/反转段/结尾段，钩子字段标 `[待补充]`） |\n| `拆文报告.md` + `写作手法.md` | `{标题}/设定.md`（本书续写基线区） | 把已写内容的结构、情绪、反转和既有写法整理为内部续写上下文 |\n| `拆文库/{对标书名}/` | `{标题}/对标/{对标书名}/` | 可选：仅同步用户显式绑定的外部参考作品 |\n\n---\n\n## 设定.md 反推规则\n\n目标文件使用本文件定义的当前核心框架模板，分两个区块：\n\n### 区块一：核心框架\n\n从 `拆文报告.md` 的故事核、结构划分、人物分析等字段提取，填入以下模板：\n\n```markdown\n## 短篇核心框架\n\n### 基本信息\n- 标题：{导入书名}\n- 目标字数：{原文实际字数} 字\n- 目标平台：{从拆文报告提取，无则填 [待补充]}\n- 目标情绪：{从拆文报告「情感线/爆点分析」提取读者预期感受}\n\n### 一句话梗概\n{主角 + 困境 + 反转 + 情绪落点（从拆文报告故事核提取）}\n\n### 核心反转\n- 反转类型：{从拆文报告反转分析提取：身份反转/视角反转/动机反转/时间线反转}\n- 反转内容：{一句话描述}\n- 铺垫线索：{从情节节点中的「铺垫」类节点提取，至少 3 个；不足时标 [待补充]}\n\n### 情绪设计\n- 开头情绪：{从情感曲线第一个节点提取}（强度 {1-10}）\n- 中段情绪：{中段情感节点}（强度 {1-10}）\n- 反转情绪：{反转节情感峰值}（强度 {1-10}）\n- 结尾情绪：{结尾节情感}（强度 {1-10}）\n\n### 人设速写\n- 主角：{一句话人设，从人物分析提取}\n- 关键角色：{一句话人设}\n- 关系：{他们之间的关系}\n```\n\n> 不确定字段一律加 `[待补充]` 标记，不留空字段。\n\n### 区块二：本书续写基线\n\n从 `拆文库/{导入书名}/拆文报告.md` 和 `写作手法.md` 提取，汇总为本书内部续写基线：\n\n```markdown\n## 本书续写基线\n\n### 故事结构\n{从拆文报告「功能分段」字段提取，概述各段功能}\n\n### 情绪节奏\n{从情感曲线/爆点分析提取，描述情绪走势与峰值位置}\n\n### 核心反转机制\n{从反转机制分析提取，含铺垫路径}\n\n### 可复用写作手法\n{从写作手法.md 或拆文报告「可复用结构」字段提取，≥3 条}\n```\n\n---\n\n## 小节大纲.md 反推规则\n\n从 `情节节点.md` 的功能分段结构提取，映射到短篇段-小节结构。\n\n### 段级映射\n\n| 短篇段名 | 对应情节节点功能段 | 说明 |\n|---------|----------------|------|\n| 开头段 | 开端（引入主角/世界/困境） | 通常 1-2 个小节 |\n| 铺垫段 | 发展前期（冲突积累/伏笔布置） | 通常 2-4 个小节 |\n| 升级段 | 发展后期（冲突升级/误解加深） | 通常 2-3 个小节 |\n| 反转段 | 高潮（核心反转引爆） | 通常 1-2 个小节，情绪峰值 |\n| 结尾段 | 结局（收束/情绪落点） | 通常 1-2 个小节 |\n\n### 小节大纲表格\n\n`小节大纲.md` 用 story-short-write 的固定 12 列表格，每节一行，列名和顺序不改：\n\n```markdown\n| 结构段/五段功能 | 主事件 | 情节推进 | 情绪 | 人物/关系变化 | 因果/逻辑链 | 读者新获知什么 | 结尾承接/钩子 | 伏笔/物件 | 场景形态 | 对白作用 | 目标字数 |\n|---|---|---|---|---|---|---|---|---|---|---|---|\n| 开头 | 从情节节点提取的主要情节点 | 具体发生了什么{发现} -> 具体发生了什么{冲突} | 前状态→后状态 | 本节前后变化，或 无（本节改变：…） | 原因 → 行动 → 结果 → 后果 | [待补充] | [待补充] | [待补充] | [待补充] | [待补充] | 按原文该节实际字数 |\n```\n\n- `结构段/五段功能` 填 开头/铺垫/升级/反转/结尾。\n- `情节推进` 每个推进单元带 `{对话}` `{冲突}` `{伏笔}` `{回忆}` `{发现}` `{递进}` 之一，有先后用 `->` 连接，按原文实际发生的写，不为凑数拆分。\n- 从原文判断不出的格子写 `[待补充]`，留给作者或续写时填写；不写 `{}` 模板占位。\n- `目标字数` 写原文该节实际字数，各节之和与 `设定.md` 的目标字数对得上。\n- 付费点在哪一节末能从原文认出来时，在该行 `结尾承接/钩子` 标「付费点」；认不出写 `[待补充]`。\n\n### 小节数量推算\n\n以原文实际的分节标记和转场为准；原文没有显式分节时，按情节阶段和转场切分，`总字数 ÷ 1000` 只作粗略参考，不作为切分依据。小节数与正文实际段落结构一致是质量清单必检项。\n\n---\n\n## 正文.md 格式规范\n\n将原文迁移为单文件 `正文.md`，格式按 `format-and-structure.md` 规范化：\n\n| 规范项 | 要求 |\n|--------|------|\n| 小节标记 | `###1.` `###2.` `###3.`（短篇通用格式；用户指定平台时按 `format-and-structure.md` 平台覆盖表切换） |\n| 段落划分 | 按戏剧单元/镜头/一件事结束自然断段；不按固定字数强拆；完整推理、氛围、情绪链可保留稍长段，避免通篇同长度或碎成提纲 |\n| 段间空行 | 正文相邻段落之间**只允许一个换行符 `\\n`**，不得出现空行或 `\\n\\n` |\n| 对话引号 | 默认 `\"\"` 半角双引号；知乎盐言平台可用 `「」` |\n| 缩进 | 无缩进，不用全角/半角空格 |\n| Markdown | 正文段落中不使用 `**` `*` `#` `---` 等 Markdown 语法（仅小节标记除外） |\n\n**原文内容不改动**，只做格式规范化（分段、引号统一、小节标记添加）。\n\n---\n\n## 外部对标引用视图（可选）\n\n仅当用户显式绑定独立外部 `{对标书名}` 时，将 `拆文库/{对标书名}/` 复制为 `{标题}/对标/{对标书名}/`（跳过 `_archive_*/`，归档快照不进对标视图），供续写阶段加载：\n\n```\n{标题}/对标/{对标书名}/\n├── 原文/\n├── 拆文报告.md\n├── 情节节点.md\n├── 写作手法.md\n└── _meta.json\n```\n\n此视图为可选项，没有外部对标时不创建。复制前必须确认来源是 `拆文库/{对标书名}/`，不得使用 `拆文库/{导入书名}/` 或本篇 `设定.md` 填充。\n\n---\n\n## 质量检查清单\n\nPhase 3-S 迁移完成后执行：\n\n- [ ] `正文.md` 单文件存在且格式符合 `format-and-structure.md`（小节标记、段落划分/主语节奏、段间仅单换行、引号格式）\n- [ ] `设定.md` 含核心框架区块 + 本书续写基线区块，且核心框架符合本文件模板\n- [ ] `小节大纲.md` 节数与正文实际段落结构一致\n- [ ] 所有 `[待补充]` 标记已添加（不确定字段不留空）\n- [ ] 未误建 `追踪/`、`大纲/`、`正文/` 等长篇专属目录\n- [ ] `拆文库/{导入书名}/` 未被复制到本篇 `对标/`；若绑定外部对标，来源与 `对标/{对标书名}/` 目录名一致\n\nFile v1.0.24:references/tracking-initialization.md\n\n# 追踪初始化事务\n\n## 初始化事务\n\n新书从第 0 章初始化。`story-import` 导入已有小说时把最后完整章写入 `last_chapter=N`；第 1..N 章不伪造日更记录，常规续写从 N+1 章开始。\n\n```json\n{\n  \"schema_version\": 1,\n  \"book_title\": \"让你管账号，你高燃混剪炸全网\",\n  \"last_chapter\": 0,\n  \"context\": {\n    \"position\": {\n      \"volume\": \"第一卷·军宣整顿\",\n      \"volume_start_chapter\": 1,\n      \"story_time\": \"江晨到火箭军文工团报到前\",\n      \"scene\": \"火箭军文工团\"\n    },\n    \"long_term_constraints\": [\"军宣爽点要用作品效果和围观反应链兑现，不能只靠系统播报\"],\n    \"active_character_names\": [],\n    \"continuity_risks\": [],\n    \"recent_chapters\": [],\n    \"next_chapter_commitments\": [\"让江晨报到，并落下五天百万粉的新手任务\"]\n  },\n  \"character_snapshots\": {},\n  \"foreshadow\": [],\n  \"timeline_events\": []\n}\n```\n\n导入初始化时直接传入当前核心角色快照、伏笔当前行、时间线事件和固定 7 栏状态输入。阶段/卷级回看按需查询正文，不作为每章强一致追踪产物。\n\nFile v1.0.24:references/tracking-transaction.md\n\n# 追踪状态协议\n\n`追踪/` 使用“一个结构化权威状态 + 多个确定性派生视图”。模型只提交一份语义 JSON，不分别 `Write/Edit/echo >>` 多个追踪文件。\n\n## 权威层与派生层\n\n| 层级 | 文件 | 语义 |\n|---|---|---|\n| 唯一权威 | `_tracking-state.json` | schema、最后提交章、导入截止章、状态修订号、上下文结构、角色/伏笔/时间线，以及已提交章节的简短字数记录 |\n| 章节记录 | `逐章记录/第NNN章.md` | 本章对未来连续性有用的紧凑变化；目标 ≤1536 字节，硬上限 3072 字节；导入范围内修订写成覆盖记录 |\n| 派生视图 | `上下文.md`、`角色状态/{角色名}.md`、`伏笔.md`、`时间线/作者真相.md`、`时间线/读者已知.md` | 完全从 `_tracking-state.json` 生成；禁止手改，不作为程序输入 |\n\nMarkdown 只负责给作者和 Agent 阅读，工具不再反向解析 Markdown。`check` 直接从 `_tracking-state.json` 重渲染并逐文件比较。未来“第几章揭示”的计划写在卷纲/细纲，不写成时间线既成事实。\n逐章记录只是便于人阅读的紧凑变化记录，不承诺单独无损重建全部当前状态；完整当前语义以 `_tracking-state.json` 为准。\n\n## 运行工具\n\n先按运行环境探测 Python 3 解释器（依次尝试 `python3`、`python`、`py -3`）。追踪事务脚本使用当前 skill 根目录；字数与章节闭环统一使用 `story-long-write` skill 根目录：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/tracking_commit.py init   --project {书项目根} --input {书项目根}/.story/work/init.json\n{PYTHON} {当前 skill 根}/scripts/tracking_commit.py check  --project {书项目根}\n{PYTHON} {当前 skill 根}/scripts/tracking_commit.py draft  --project {书项目根} --chapter {N}\n{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter check   --project {书项目根} --chapter {N} [--min-chars {下限} --max-chars {上限}]\n{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter commit  --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json\n{PYTHON} {story-long-write skill 根}/scripts/storyctl.py chapter accept-current-length --project {书项目根} --chapter {N} --input {书项目根}/.story/work/第{NNN}章/tracking.json\n```\n\n- `init`：只在 `_tracking-state.json` 不存在时执行，绝不覆盖已初始化项目。\n- `draft`：按当前 state 把逐章事务预填到 `.story/work/第NNN章/tracking.json`（修订号、模式、章名、`context` 四项当前值），并输出各文本字段的字数上限与在场核心角色的当前快照。新章（append）调用方只填 `delta` 与有变化角色的快照；已提交章（revision）的 `delta` 与相关角色快照按该章现有逐章记录预填（伏笔、时间线取当前值），调用方在上面改成修订后的完整记录，不清空重写。\n- 作者字数范围：细纲可写一行 `字数范围：2000-2600`（作者明确给了上下限时）；本轮临时给的范围用 `--min-chars` / `--max-chars`（两者同给，优先于细纲）。`wordcount check` / `checkpoint` 与 `chapter check` / `commit` / `accept-current-length` 都认，给了就同时替代默认 ±12% 内部带与 ±15% 用户带，结果里 `band_source` 为 `author`，提交的字数记录多一项 `author_range`。\n- `wordcount measure` / `wordcount checkpoint`：纯测量入口；不写正文、不写 tracking、不做语义判断。长篇正文只在前组写完后由主会话带 `--project` 调用一次 `checkpoint`（目标与字数范围读细纲，见 workflow-chapter 步骤 6），整章长度由 `chapter check` 收口；`remaining_user_range` 按生效区间（作者区间或默认用户带）计算。\n- `chapter check`：重新读取当前正文与细纲目标，返回确定性长度状态、现有 blocking quality、`state_revision` 和当前可执行动作，不保存 approval。顶层 `status`：`ready`（可提交，exit 0）/ `needs_decision`（长度带外，按 `available_actions` 交作者，exit 0）/ `blocked`（有 blocking 正文问题，exit 1）/ `invalid`（正文为空等，exit 1）/ `tool_unavailable`（找不到 node 或检测脚本，见 `quality.tool_errors`，不是正文问题，exit 3）。参数错误或文件缺失输出 `story-chapter-error/v1`（`status: error`，exit 2）。`under` 不提供自动补写；`over` 额外返回一次净删型 `compress-once` 及回到生效区间所需的删除字数。`quality.semantic_advisories` 是语义类 advisory 条数（检测器标 `review: mechanical` 的不计）。\n- `chapter commit`：再次读取当前文件、重新计数并重跑 blocking quality；只接受生效区间内的章节，把简短字数记录与逐章事务一起原子提交。新章与修订都走它。\n- `chapter accept-current-length`：只接受带外但 quality pass 的章节；接受动作发生时重新读取、重新计数并立即原子提交，不保存可陈旧的历史决议。低于字数目标一半（`BELOW_ACCEPT_FLOOR`），或超长却还没做过那一次压缩（`COMPRESSION_REQUIRED`），都拒绝；作者明确拍板时加 `--force`。\n- `check`：严格验证 state schema、逐章记录连续性/规范名/体积、固定 7 栏、角色快照硬上限、派生文件集合，以及所有派生视图与 state 的逐字一致性。\n\n每本书由 `追踪/.tracking-commit.lock` 串行写事务，`expected_state_revision` 再拒绝基于旧状态构造的 stale transaction。两个不同事务并发时至多一个修订成功。字数记录也在锁内对当前正文和目标重新验证，正文或目标变化会让预先构造的记录直接失败。\n\n事务 JSON 是临时输入，不是项目产物：只写在书目录 `.story/work/` 下（逐章事务放 `.story/work/第NNN章/tracking.json`），不写系统 `/tmp`、书根、`大纲/` 或 `正文/`；成功前必须保留，提交成功后即可删除（`storyctl.py chapter commit` / `accept-current-length` 成功时自动删除该章目录；直接调用 `tracking_commit.py commit` 时由调用方删除。已有字数记录的章节正文或目标改过后，`tracking_commit.py commit` 拒绝修订事务，须走 `storyctl.py chapter commit`）——之后 `check` 失败按下文提交 `mode=revision` 新事务修复，不需要原事务。若文件写入失败，`_tracking-state.json` 尚未推进；修正环境后直接重跑**同一份** `commit`。append 重跑只接受内容完全相同的既有逐章记录，不维护 `dirty/pending/repair` 状态机。\n\n校验失败与写入失败处理方式不同：校验失败（字段非法、退役结构、容量超限）要按报错改事务本身，重跑同一份结果不变。派生视图被手改或外部改动导致 `check` 报 `derived view differs from _tracking-state.json` 时，重新提交**该章**的 `mode=revision` 事务让工具整份重建，`expected_state_revision` 取 `追踪/_tracking-state.json` 的 `state_revision` 字段——`check` 失败时只往 stderr 打 ERROR，不输出 JSON；不手改派生文件，也不删 `_tracking-state.json` 重来。手写出的逐章记录会让同章 `append` 永久报 `chapter delta N already exists with different content`——删掉那个手写文件后重跑原事务即可。\n\n本工具不解析旧 `_tracking-meta.json`、`时间线/事件库.json` 或更早追踪结构，不提供语义兼容层。`init` 遇到这类旧文件时，先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议：旧内容留给作者查阅，不参与解析，当前状态完全以 init 输入为准。校验失败的 `init` 不移动任何文件。`commit` 与 `check` 仍直接拒绝旧结构——它们只在已建协议的项目上运行。\n\n## 初始化事务\n\n仅新书或导入初始化时，执行 `init` 前必须完整读取 [tracking-initialization.md](tracking-initialization.md)，按其中原始 JSON 与导入边界构造事务。已有项目续写直接使用下方逐章事务，不重复读初始化示例。\n\n调用方的逐章 JSON 不写 `wordcount`；正式入口 `chapter commit` 或 `chapter accept-current-length` 在提交当下生成并注入。最终 state 只为已提交章节保留 `metric / target / actual / status / resolution / body_sha256`（生效了作者字数范围时另加 `author_range`），不保存 MEASURE/RESOLVE 事件、ID 链、policy fingerprint 或独立 chapter state。\n\n## 逐章事务\n\n```json\n{\n  \"schema_version\": 1,\n  \"mode\": \"append\",\n  \"chapter\": 10,\n  \"chapter_title\": \"专业团队拍得还不如他拍的好？\",\n  \"expected_state_revision\": 9,\n  \"delta\": {\n    \"result\": \"专业团队重拍的高清版在高层看片会上被判定缺了灵魂，张耀祖拍板继续采用江晨的手机原版。\",\n    \"character_changes\": [\n      {\"name\": \"江晨\", \"change\": \"作品价值获军内高层确认，从爆款新人升为不可替代的军宣创作者\"}\n    ],\n    \"foreshadow_changes\": [\n      {\n        \"action\": \"upsert\",\n        \"id\": \"F027\",\n        \"summary\": \"专业团队仍拍不出江晨原版的灵魂，继续验证其创作能力不可复制\",\n        \"planted_chapter\": 10,\n        \"planned_resolution_chapter\": null,\n        \"status\": \"已埋\",\n        \"importance\": \"中\"\n      }\n    ],\n    \"timeline_events\": [\n      {\n        \"action\": \"upsert\",\n        \"id\": \"E010\",\n        \"story_time\": \"实弹训练两天后\",\n        \"objective_fact\": \"文工团高层否决专业重拍版，决定沿用江晨手机拍摄的原版视频\",\n        \"reader_knowledge\": \"读者已看到周薄森指出专业版缺了灵魂，张耀祖当场拍板用回原版\",\n        \"reveal_status\": \"已揭示\",\n        \"reveal_chapter\": 10,\n        \"characters\": [\"江晨\", \"周薄森\", \"张耀祖\"]\n      }\n    ],\n    \"constraints\": [\"后续继续用作品落地效果和围观反应放大江晨的高光，不能只写系统奖励数字\"],\n    \"next_chapter_commitments\": [\"结算五天百万粉任务，并承接老兵主题的新任务\"]\n  },\n  \"context\": {\n    \"position\": {\n      \"volume\": \"第一卷·军宣整顿\",\n      \"volume_start_chapter\": 1,\n      \"story_time\": \"实弹训练两天后\",\n      \"scene\": \"火箭军文工团高层看片会\"\n    },\n    \"long_term_constraints\": [\"军宣爽点要用作品效果和围观反应链兑现，不能只靠系统播报\"],\n    \"active_character_names\": [\"江晨\"],\n    \"continuity_risks\": [\"钟嘉嘉说江晨只猜对一半，未公开的培养安排不能被当成读者已知事实\"]\n  },\n  \"character_snapshots\": {\n    \"江晨\": {\n      \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n      \"location\": \"火箭军文工团高层看片会\",\n      \"goal\": \"完成五天百万粉任务，持续做出真正能打的军宣内容\",\n      \"state\": \"专业团队反向验证原版价值，军内认可继续抬升\",\n      \"abilities_resources\": [\"前世MCN爆款运营经验\", \"《中国军魂》伴奏\", \"大师级导演能力\"],\n      \"relationships\": [\"钟嘉嘉持续提供军报资源\", \"周薄森和张耀祖已明确认可其创作能力\"],\n      \"knowledge\": [\"《军报》采访稿已经过审\", \"原版视频将继续作为正式军宣内容\"],\n      \"open_threads\": [\"五天百万粉任务尚未结算\", \"钟嘉嘉所谓只猜对一半仍未解释\"]\n    }\n  }\n}\n```\n\n约束：\n\n- 构造事务前运行 `check`，把当前 `state_revision` 原样写入 `expected_state_revision`；若状态已经变化，重新读取 state 并重构事务。\n- `context` 的允许字段随子命令不同：`init` 收 `position`、`long_term_constraints`、`active_character_names`、`continuity_risks`、`recent_chapters`、`next_chapter_commitments` 六项；`commit` 只收前四项。`recent_chapters` 与 `next_chapter_commitments` 在 commit 时由工具从当前视图和本章 `delta` 派生，手填会在任何写入前被拒（`context contains unsupported fields: ...`，exit 2）。照 init 示例套 commit 事务是最容易踩的一处。\n- `character_snapshots` 中出现的角色视为核心复用角色，必须同时出现在 `character_changes`；已经建立快照的核心角色再次变化时必须提交新快照。\n- 角色快照的四个列表不限制条数，只限制单项长度和最终文件总字节：目标 ≤4096 字节，超过警告；硬上限 8192 字节，超过则在任何写入前拒绝。\n- 没有快照的角色变化视为临时角色，不建立状态文件；`context.active_character_names` 最多 6 人且必须已有当前快照。\n- `context.long_term_constraints` 和 `context.continuity_risks` 是整份提交的当前值。凡是上一版有、本次没有的条目，必须逐条列进 `delta.retired_context_items`，否则工具在任何写入前拒绝——漏写不会被当成删除。实际退役的条目由工具写进本章逐章记录的 `## 本章退役登记`，随后仍可回查。\n- 不再复用的核心角色写进 `delta.retired_characters`：工具删除其当前快照与 `角色状态/{角色名}.md`，并在逐章记录留档。同一事务里不能既退役又提交快照，也不能退役仍列在 `context.active_character_names` 的角色。角色阵亡/退场这一章，把变化照写进 `character_changes` 即可，本章退役的角色不必再交一份马上要删的快照，逐章记录仍按核心角色标注。退役只表示不再进入热上下文，正文与逐章记录不受影响。\n- 两类退役都只能在 `mode=append` 提交。退役表示「从此刻起离开当前状态」，而修订事务的逐章记录属于被改写的旧章，落在那里会谎报退役发生的章节；`mode=revision` 必须原样重交当前全部上下文条目，需要退役就放到下一次 append。\n- `伏笔.md` 只呈现已经埋设过的当前状态。未来规划仍留在大纲。\n- `timeline_events.action` 可为 `upsert/delete`。`未揭示` 的 `reveal_chapter` 必须为 `null`；部分/完全揭示只能填写已经发生的实际章节。\n- `mode=revision` 时，逐章记录必须重算为修订后该章仍然成立的完整连续性记录（用 `draft` 预填的草稿改，漏写的项会从记录里消失，工具在 stderr 警告被清空的栏目；原有的退役登记原样保留）；当前角色、伏笔、时间线和上下文则提交受影响对象截至最新已写章的当前值。\n- 修订导入截止章内的正文时，会新增或覆盖该章的逐章记录；`imported_through_chapter` 不变。\n\n## 续写状态卡固定格式\n\n`上下文.md` ≤12288 字节，由 state 整份生成，只含以下 7 个顶层区块：\n\n1. `## 当前位置`\n2. `## 长期约束`\n3. `## 核心角色状态`\n4. `## 活跃伏笔`\n5. `## 近三章速记`\n6. `## 下一章承诺`\n7. `## 连贯性风险`\n\n其中活跃角色最多 6 人、活跃伏笔确定性选取最多 8 条、近章只保留 3 章。这些是下一章热上下文容量，不是完整角色状态的容量限制。\n\nFile v1.0.24:skill-card.md\n\n## Description:\n\nImports an existing Chinese-language novel into a structured writing project for continued drafting, routing short and long works through their respective analysis workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[worldwonderer](https://clawhub.ai/user/worldwonderer)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAuthors and writing assistants use this skill to turn an existing draft or completed novel into an organized project with story analysis, manuscript files, and continuity material for later writing.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Import can read a manuscript and create or update files in the writing-project directory.\n\nMitigation: Run it in a dedicated project folder or backup copy, and avoid unrelated sensitive directories.\n\nRisk: Automatically generated story analysis and continuity material may need author review before continued drafting.\n\nMitigation: Check the imported manuscript, project structure, and flagged continuity points before writing further.\n\n## Reference(s):\n\n- [ClawHub story-import release](https://clawhub.ai/worldwonderer/skills/story-import)\n- [Repository URL declared in skill metadata (provenance unverified)](https://github.com/zenstory-ai/oh-story-claudecode)\n- [Length routing](references/length-routing.md)\n- [Long-form structure mapping](references/structure-mapping-long.md)\n- [Short-form structure mapping](references/structure-mapping-short.md)\n\n## Skill Output:\n\n**Output Type(s):** [Markdown, Text, Configuration]\n\n**Output Format:** [Structured writing-project files and a concise import report]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Creates or updates local manuscript, analysis, and continuity files; validates the imported project.]\n\n## Skill Version(s):\n\n1.0.24 (source: ClawHub release metadata; bundled frontmatter says 1.0.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.23: 14 files, 79675 bytes\n\nFiles: references/character-state-reverse.md (4333b), references/format-and-structure.md (10599b), references/length-routing.md (6328b), references/state-tracking.md (2263b), references/structure-mapping-long.md (21236b), references/structure-mapping-short.md (7702b), references/tracking-initialization.md (1137b), references/tracking-transaction.md (13119b), scripts/check-outline-contract.js (19101b), scripts/tracking_commit.py (68088b), scripts/wordcount_core.py (10739b), skill-card.md (2154b), SKILL.md (44296b), _meta.json (132b)\n\nFile v1.0.23:SKILL.md\n\n---\nname: story-import\nversion: 1.0.0\ndescription: \"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。导入按篇幅分流：长篇走 Phase 3-L，短篇走 Phase 3-S。\n\n**交付物是写作工程**：把作者已有的书重建为可续写的**写作工程**（项目结构 + 拆文库分析资产）。`拆文库/{导入书名}/` 是重建工程的数据源，不能当成用完即弃的中间产物，也不能替代交付物本身——交付物应让作者能直接续写。执行时以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n---\n\n> Agent 兼容性：只检查当前运行时的 canonical 目录：Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`（`agent-name` 为目标 agent 名），不得因其他端文件存在而误判。Codex 使用同名 `agent_type`；Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时，必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`；OpenCode 用 `subagent` 工具的 `agent` 参数。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 32` 不一致时（标记缺失、字段缺失/非整数、小于或大于 32）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 32）` 并提示重新运行 `/story-setup` 后新开会话；大于 32 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 核心原则\n\n### 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n### 原则 1：先分析后迁移\n\n先用拆解管道完整拆解小说（输出到 `拆文库/{导入书名}/`），再将分析结果迁移为项目结构。该目录保存本书导入分析，保留不丢弃，但不属于外部对标视图。\n\n### 原则 2：复用不重复\n\n深度分析复用现成管道：长篇由 `/story-long-analyze` 识别旧成果、增强或续跑，短篇运行 `/story-short-analyze`。方法与模板由 analyze skill 自带，story-import 不另维护。\n\n---\n\n## Phase 1：确认导入源\n\n### Step 1：导入续写入口顺序（先答用户的流程问题）\n\n当用户问\"导入续写先走 story-setup 还是 story-import\"、\"已有小说怎么续写\"、\"导入流程\"这类流程问题时，先直接给出结论，再继续收集原文：\n\n1. **推荐顺序**：先 `/story-setup`（部署 hooks/agents/AGENTS），新开/刷新会话后运行 `/story-import`，最后用 `/story-long-write 日更/写第N章` 续写。\n2. **也可以直接 `/story-import`**：本 skill 会在进入深度分析前检测 `.story-deployed` 与专业 agent；未部署时会给出\"先去 setup\"或\"继续导入（串行降级）\"两种选择。\n3. **已导入过的当前协议项目**（书名目录下有 `追踪/_tracking-state.json`）：不要重复跑完整导入；直接进入书名目录，确认 `.active-book` 指向正确书目，再用 `/story-long-write 日更` 或 `/story-long-write 写第N章`。\n4. **v0.7.2 及更早的旧追踪项目**（有 `追踪/` 和正文，但没有 `追踪/_tracking-state.json`）：日更会停下要求重新导入，但**不需要重跑全书拆解**。只重建追踪即可，见下方「旧追踪项目迁移」。\n\n这段结论必须出现在任何导入源追问之前，避免用户只想确认流程却被直接要求贴原文。\n\n#### 旧追踪项目迁移\n\n书名目录下有 `追踪/` 与正文、但没有 `追踪/_tracking-state.json` 时，项目停在 v0.7.2 及更早的追踪结构上。正文和 `设定/`、`大纲/`、`拆文库/` 都不受影响，**只需重建 `追踪/`**，不重跑 Phase 2 拆解、不碰正文：\n\n1. 数清最后一个完整章号 `N`（`正文/第NNN章_*.md` 的最大值）。\n2. 从旧 `追踪/` 现有文件（角色状态、伏笔、时间线等，文件名按项目实际情况）和最近 3-5 章正文，重建当前状态：核心角色快照、未回收伏笔、已揭示时间线事件、长期约束、下一章承诺。角色快照的反推方法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. 完整读取 [references/tracking-initialization.md](references/tracking-initialization.md)，按其初始化事务格式构造 JSON，`last_chapter` 写 `N`（第 1..N 章不伪造逐章记录），执行 `tracking_commit.py init`。\n4. `init` 会把旧追踪结构按原样整体移入 `追踪/_旧追踪存档/` 再建当前协议——旧内容不删除、不参与解析，留给作者查阅。\n5. 跑 `tracking_commit.py check` 确认通过，再回 `/story-long-write 日更` 续写。\n\n重建结果以第 2 步的证据为准；拿不准的字段留空或写进 `continuity_risks`，不杜撰。用户明确要求重拆全书时才走完整 Phase 2。\n\n问用户：**「你要导入哪本书？请提供文件路径或直接贴文本。」**\n\n### Step 2：确认意图（写作工程 vs 仅拆文库）\n\n默认目标是**完整写作工程**（可续写）。若用户意图不明确——是要可续写的工程，还是只要一份拆文库分析——**主动询问**，不要默认：\n\n> 「你是想把这本书做成可续写的写作工程（设定/大纲/正文/追踪，能接着写第 N+1 章），还是只要一份拆文库分析？」\n\n- 要可续写工程 → 走完整 story-import（Phase 2 拆 + Phase 3 迁移）。\n- 只要分析 / 拆文库 → 直接用 `/story-long-analyze`（短篇 `/story-short-analyze`），到拆文库为止，不进 Phase 3 迁移。\n\n### Step 3：输入方式识别\n\n```\n用户提供路径？\n├─ 单文件路径（.txt/.md）\n│   └─ 按章节分隔符自动切分\n├─ 目录路径\n│   └─ 按文件名排序，合并处理\n└─ 无路径 → 用户直接贴文本？\n              ├─ 是 → 保存到临时文件后处理\n              └─ 否 → 提示用户提供源文件\n```\n\n### Step 4：基本信息确认\n\n1. **自动检测**：从文本中识别书名（如果有）、总章数、总字数、章节格式\n2. **用户确认**：\n   - 导入书名：{自动检测或用户输入}\n   - 题材类型：{用户提供}\n   - 目标平台：{起点/番茄/晋江/其他}\n   - 是否完本：{是/否（半成品写到第N章）}\n   - **篇幅类型**：长篇 / 短篇 —— 按 [references/length-routing.md](references/length-routing.md) 自动检测（用户显式声明 > 结构信号 > 字数兜底），并向用户复述检测结果请其确认。判定结果决定 Phase 3 走长篇还是短篇路径。\n   - **最后一章是否完整**：完整章 / 残稿（写了一半）。若是残稿，提示用户并把「残稿到第 N 章」记入上下文，让用户决定是「基于残章续写」还是「先补完再导入」。story-import 只记录用户决定，不替用户选。\n3. **外部对标（可选、与导入源分离）**：用户已经明确指定外部对标时，记录 `{对标书名}` 并确认 `拆文库/{对标书名}/` 是该参考作品的独立拆解产物；不得把 `{导入书名}` 或本次刚生成的拆文目录当候选。用户未指定时不追加提问，记为“未绑定”，后续交给写作 skill 的对标发现流程。\n4. **输出确认**：向用户展示检测到的章节范围、字数、判定的篇幅类型、最后一章状态，以及“外部对标：{对标书名/未绑定}”，确认后开始分析。\n\n### Step 5：环境检测前置\n\n在进入 Phase 2 之前，先检测项目是否已部署 story-setup 基础设施：\n\n- 先读取 `.story-deployed` 并执行顶部 Spawn 版本门禁；旧版 `chapter-extractor` 文件即使仍在磁盘上也不可复用。\n- 只有 `agents_version: 32` 通过后，才在当前运行时的 canonical 目录检查 Phase 2 `chapter-extractor`：Claude/OpenCode/Antigravity 为同名 Markdown，Codex 为同名 TOML。\n- 如果 `.story-deployed` 的 `target_cli` 包含 `zcode`，项目 agents 缺失是 ZCode 3.3.4 的预期状态：不要提示重复部署，直接以串行 solo/direct 进入分析并报告 fallback。\n\n**部署标记缺失、版本无效/过期，或当前端的 agent 不可用，且不是已部署 ZCode 项目时**，这样问用户：\n\n> 「这个项目还没装好写作环境。装好后由专门的分析助手逐段拆书，主对话不会被整本书塞满；不装也能导，只是全部在主对话里做，慢一些，结果一样完整。你想：1. 先装环境（推荐）：运行 `/story-setup`，装完再说\"导入\" 2. 直接导入，慢一点也行」\n\n1. **先去 setup**：暂停导入，运行 `/story-setup`，部署完成后重新触发 `/story-import`；\n2. **继续导入**：Phase 2 降级为主线程串行处理（长篇逐章摘要由主线程自己写，速度较慢，但产物完整）。\n\n用户选择记入上下文，Phase 2 据此决定是否派 chapter-extractor。有子代理时，导入属自动续跑，按 story-long-analyze 的「有限并行」档派发（每轮 3 批）；用户明确要求时改用串行或不限批次顺序。\n\n### Step 6：原文备份\n\n原文备份由 Phase 2 调用的 analyze 拆解管道负责（analyze 管道前置步骤会把原文复制/保存到 `拆文库/{导入书名}/原文/`，对应 story-long-analyze 与 story-short-analyze 的「原文备份（管道前置步骤）」）。Phase 1 只需确认源文件就绪（路径有效或文本已拿到），不在此处单独备份，避免与 analyze 管道重复备份逻辑。\n\n---\n\n## Phase 2：深度分析\n\n按 Phase 1 判定的篇幅类型进入对应 analyze skill。先检查已有拆文资产；可验证的旧成果直接复用，只有缺失范围或本次导入确实依赖的新分析才进入对应 Stage。全新项目再驱动完整管道。\n\n| 篇幅 | 调用的拆解管道 | 产物目录 |\n|------|--------------|---------|\n| 长篇 | story-long-analyze 的统一管道（旧成果直用 / 按需增强 / 全新或部分续跑） | `拆文库/{导入书名}/` |\n| 短篇 | story-short-analyze 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n### 调用契约\n\n#### 长篇：先兼容识别，再决定是否续跑\n\n先运行 story-long-analyze Phase 1 的只读检查器（`inspect_existing_assets.py`），登记实际文件和覆盖范围；检查建议不能覆盖下列语义规则：\n\n新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`；旧成果直接使用不以缺少该字段为失败。\n\n- **旧成果已完成且足以重建写作工程**：直接进入 Phase 3-L。旧 `_progress.md` 版本、缺少 `chapter_index.csv`，或缺少本次新增字段，都不能单独成为重拆理由。\n- **旧成果可以导入，但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**：先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强，不回读原文。不得重跑已完成章节，也不得用空壳文件让门禁通过。\n- **只完成一部分或新旧产物混存**：验证并保留已完成部分，从首个缺失的连续章节块续跑，最后统一聚合。进度记录与实际文件冲突时，以可验证文件为准并记录冲突。\n- **全新导入**：运行 Stage 0-6 完整管道。\n\n导入需要自动完成本次判定出的必需范围，不把 Stage 1 停靠询问甩给用户。全新导入命中「完整拆解、一次跑完」路径；旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时，缺少新增字段只记录能力限制，不阻断导入。\n\n- 措辞示例（全新）：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- 措辞示例（旧成果）：声明「先复用并校验现有成果，只补当前导入缺失的章节或分析，不覆盖用户原成果」。\n- **兜底**：若全新导入实际仍停在 Stage 1，story-import 自动选择继续；若旧成果任务停靠，则按已登记的缺失范围继续，不能扩大成全书重跑。\n- 环境检测（Phase 1）发现未部署 chapter-extractor agent 且用户选择「继续导入」时，Stage 2 由主线程按相同连续章节块契约串行处理，不能退回每章一次独立调用；产物仍完整，仅速度变慢。\n\n#### 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用 story-import Phase 1 已确认的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在 story-import Phase 1 判定并经用户确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；story-import Phase 1 Step 4 已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给用户，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按 Phase 1 已锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给用户**。\n\n### 输出目录\n\n#### 长篇拆文库结构\n\n长篇分析输出到 `拆文库/{导入书名}/`，与 story-long-analyze 拆解管道完全一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 概要.md\n├── 章节/\n│   ├── 第1章_深度拆解.md\n│   ├── 第1章_摘要.md\n│   └── ...               # 每章同时有 第N章_深度拆解.md 和 第N章_摘要.md\n├── 快速预览.md\n├── 角色/\n│   ├── {角色名}.md\n│   └── 角色关系.md\n├── 剧情/\n│   ├── {剧情标题}.md\n│   ├── 故事线.md\n│   ├── 节奏.md          # 关键信息推进 / 情绪触动点 / 爆发节奏\n│   ├── 情绪模块.md      # 读者需求 / 情绪引擎 / 可复现模块\n│   └── 散落情节.md\n├── 设定/\n│   ├── 世界观/         # 背景设定.md / 力量体系.md / 地理.md / 金手指.md（子目录形态）\n│   └── 势力/           # {势力名}.md（每势力一文件）\n├── 拆文报告.md\n├── chapter_index.csv    # 机械章界、原文定位、源 hash 与解析器版本\n├── 人物关系图/          # 人物关系图.md（Mermaid 中文图）；有中文字体时另有 PNG\n├── 文风.md          # Stage 6 文风：写作技法视图 + 原文范例锚点\n└── _progress.md\n```\n\n#### 短篇拆文库结构\n\n短篇分析输出到 `拆文库/{导入书名}/`，与 story-short-analyze 拆解管道一致：\n\n```\n拆文库/{导入书名}/\n├── 原文/\n│   └── 原文.txt          # 扩展名随源文件；对话直接贴入的文本存为 原文.md\n├── 拆文报告.md\n├── 情节节点.md\n├── 写作手法.md\n└── _meta.json           # 管道元数据 + 结构计数（下游 story-short-write 必读）\n```\n\n### 长篇完整管道（Stage 0-6）\n\n> 管道详细说明见 story-long-analyze（运行 `/story-long-analyze`），此处仅列概要。\n\n| 阶段 | 名称 | 输入 | 输出 | 完成标志 |\n|------|------|------|------|----------|\n| 0 | 概要与机械索引 | 原始文本 | 概要.md + `chapter_index.csv` | 章节结构、定位、源 hash 与解析器版本记录完成 |\n| 1 | 黄金三章 | 前 3 章原文 | 第1章_深度拆解.md / 第2章_深度拆解.md / 第3章_深度拆解.md → **停靠产出快速预览.md**（导入场景自动续跑，不停下询问） | 3 章拆解完成 |\n| 2 | 连续章节块提取 | 待处理连续原文、旧成果与跨块状态 | 同次产出 `章节/第N章_摘要.md`（含情节点序列）和 `_analysis_cache/批次-*.md`；每批最多 3 章，长章缩到 1-2 章；每章 10-20 个情节点，长章最多 30 | 可用正文覆盖完整，摘要数与可用章节数一致 |\n| 3 | 聚合分析 | 批次观察、必要逐章事实与可复用旧资料 | `剧情/*.md` + `剧情/README.md` + `剧情/故事线.md` + **`剧情/节奏.md` + `剧情/情绪模块.md`**。在现有资料中补强因果链、客观事件/多次披露、信息差、事件/情绪/篇幅三维节奏及机制成立条件 | 质量检查通过 |\n| 4 | 设定+关系 | 批次观察、阶段 3 归一实体与必要逐章事实 | 设定/*.md + 角色/*.md + 人物关系图。关系记录方向、触发、双方得失、阶段状态和证据 | 设定和关系提取完成 |\n| 5 | 汇总报告 | 全部权威底层结果 | `拆文报告.md`：一份可独立阅读的人类主报告，嵌入可用人物关系图，不重新阅读全文 | 报告生成完成 |\n| 6 | 文风 | 拆文报告.md + 章节/第1-3章_深度拆解.md + 章节/*_摘要.md + 原文/原文.txt | 文风.md（本书历史写法分析） | 文风落盘 `拆文库/{导入书名}/文风.md`，保留为导入分析，不复制到本书 `对标/` |\n\n### 短篇拆文管道\n\n> 管道详细说明见 story-short-analyze（运行 `/story-short-analyze`），此处仅列概要。\n\n短篇为单一全量管道（Stage 2-6 严格串行），产物落盘 `拆文库/{导入书名}/`：Stage 2 结构+情节节点 → Stage 3 情感线+爆点 → Stage 4 反转+写作手法 → Stage 5 人物+开头结尾 → Stage 6 综合评估，最终汇总为 `拆文报告.md`、`情节节点.md`、`写作手法.md`，另有 `_meta.json` 记管道元数据与结构计数。\n\n长篇组块、旧成果复用和恢复全部沿用 story-long-analyze。Stage 2 每个连续章节批次只调用一次 chapter-extractor，同次生成逐章事实与跨章观察；story-import 不另定一套。\n\n### 恢复机制\n\n- 中断时通过进度文件追踪进度\n- 新会话读取进度文件定位断点\n- 先验证断点批次已经落盘的逐章文件和跨章缓存；完整则补记进度，缺失或损坏才从该批次起章恢复\n- 长篇进度文件沿用 story-long-analyze 的 `_progress.md` 受管区：批次表、阶段表和 `最终状态`\n\n### 质量检查\n\n长篇阶段 3-4 完成前执行质量检查（置信度 >= 0.85，覆盖率 85%-95%，重叠率 <= 35%），由 story-long-analyze 拆解管道自带的质量检查负责。短篇质量检查见 story-short-analyze 各阶段的完成标志。\n\n---\n\n## Phase 3：结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为可被写作 skill 消费的项目结构。\n\n### 分流路由\n\n按 Phase 1 判定的篇幅类型分流，两条路径产出的工程结构完全不同：\n\n| 篇幅 | 迁移路径 | 映射规则 | 续写接手 |\n|------|---------|---------|---------|\n| 长篇 | **3-L：长篇结构迁移** | [references/structure-mapping-long.md](references/structure-mapping-long.md) | story-long-write 日更循环 |\n| 短篇 | **3-S：短篇结构迁移** | [references/structure-mapping-short.md](references/structure-mapping-short.md) | story-short-write Phase 3 逐场景写作 |\n\n---\n\n## Phase 3-L：长篇结构迁移\n\n将 `拆文库/{导入书名}/` 的分析结果迁移为 `{导入书名}/` 长篇项目结构。迁移规则详见 [references/structure-mapping-long.md](references/structure-mapping-long.md)。\n\n### 迁移步骤\n\n#### Step 1：创建项目骨架\n\n```\n{导入书名}/\n├── 设定/\n│   ├── 世界观/\n│   ├── 角色/\n│   └── 势力/\n├── 大纲/\n├── 正文/\n├── 追踪/\n│   └── 逐章记录/\n├── 对标/                       # 可选；仅在显式绑定外部对标时创建子目录\n└── 参考资料/\n```\n\n#### Step 2：正文标准化\n\n将原文迁移到 `正文/`，统一命名格式：`第XXX章_章名.md`。\n\n- 识别章节分隔符（第X章、Chapter X 等）\n- 提取章节标题\n- 补零对齐编号（第1章 → 第001章）\n- 保留原文内容不变\n\n#### Step 3：角色文件迁移\n\n将 `拆文库/{导入书名}/角色/{角色名}.md` 迁移到 `设定/角色/{角色名}.md`。\n\n迁移时按 `references/structure-mapping-long.md` 的「角色文件迁移模板」补齐 story-long-write 角色模板字段。\n\n角色分级（沿用 story-long-analyze 标准）：\n\n| 等级 | 标准 | 迁移策略 |\n|------|------|---------|\n| 主角 | 出现章节 ≥50% + 推动主线 + 完整成长轨迹 | 完整迁移 |\n| 反派 | 与主角对立 + 推动核心冲突 + 明确动机 | 完整迁移 |\n| 核心配角 | 出现章节 ≥20% 或推动重要支线 | 完整迁移 |\n| 功能角色 | 出现章节 <20% + 作用有限 | 简化迁移 |\n\n#### Step 4：关系文件迁移\n\n将 `拆文库/{导入书名}/角色/角色关系.md` 转换为 `设定/关系.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「关系文件转换规则」的目标格式模板输出。\n\n#### Step 5：同步世界观设定\n\n当前拆文契约按主题输出 `拆文库/{导入书名}/设定/世界观/*.md` 与 `设定/势力/*.md`，导入时原样同步；`世界观/` 必须有 `背景设定.md`，短小力量体系可并入。当前产物缺失时停止并提示修复 Stage 4；检查器确认的旧成果则从已有扁平设定转换到当前项目路径，标注来源，不回写或覆盖拆文库。\n\n#### Step 6：大纲生成\n\n**大纲.md**（卷级结构）：从 `剧情/故事线.md`、`剧情/*.md` 和 `快速预览.md` 反推。**卷划分采用用户确认制**，规则见 [structure-mapping-long.md](references/structure-mapping-long.md)「大纲反推规则」：\n\n- **原文有明确卷界**（存在「第一卷」「卷一」等卷级标题）→ 按原文卷界直接划分，无需询问。\n- **原文无明确卷界** → **不机械按「每卷 20-40 章」硬切**。根据故事线/场景切换/大型时间跳跃检测候选卷边界，向用户展示候选划分方案，**等待用户确认后**才写定卷纲；用户确认前 `大纲/大纲.md` 只记录候选方案。\n\n```markdown\n# 全书大纲\n\n## 卷级大纲\n\n### 第一卷：{卷名}（约 {X} 万字，{Y} 章）\n- 功能：{从剧情分析推断}\n- 核心事件：{一句话}\n- 起始状态 → 结束状态：{从角色弧线推断}\n```\n\n**卷纲**：卷划分确认后，从剧情文件聚合生成 `大纲/卷纲_第X卷.md`，按 [structure-mapping-long.md](references/structure-mapping-long.md)「卷纲反推」模板格式。\n\n**细纲**：从章节摘要反推生成 `大纲/细纲_第XXX章.md`：\n\n每章先通过 story-long-write 的 Wordcount Core 运行 `wordcount measure`，将 JSON 的 `actual` 作为已写章节的历史长度快照。这里记录的是原文在 `visible_chars_v1` 下的实际长度，不是让模型重新决定创作目标。依次探测 `python3`、`python`、`py -3`；找不到 Python 3 或 CLI 时返回 `TOOL_UNAVAILABLE` 并停止导入，不得用模型估算或静默跳过。\n\n```bash\n{PYTHON} {story-long-write skill 根}/scripts/storyctl.py wordcount measure \\\n  --file \"{原文章节文件}\" \\\n  --chapter {N}\n```\n\n```markdown\n## 细纲（第 N 章）\n\n### 第 N 章：{章名}\n- 核心事件：{从摘要中提取}\n- 字数目标：{storyctl 返回的 actual} 字\n- 字数口径：visible_chars_v1\n- 目标情绪：{从章节基调/情绪曲线提取；未知写 [待补充]}\n- 章首钩子：[待补充]\n- 爽点：{从情节点推断；无明确证据写 [待补充]}\n\n#### 内容概括（五段式）\n- 起因：{从情节点归纳；未知写 [待补充]}\n- 发展：{从情节点归纳；未知写 [待补充]}\n- 转折：{从情节点归纳；未知写 [待补充]}\n- 高潮：{从情节点归纳；未知写 [待补充]}\n- 结尾：{原文最后落在什么动作/画面/台词上；未知写 [待补充]}\n\n#### 情节安排（多线）\n- 主线推进：{从剧情单元索引/摘要反推}\n- 辅线推进：{无证据写“无”或 [待补充]}\n- 事件线 / 任务线：{外部事件链}\n- 感情线 / 关系线：{有证据才写；否则“无显性”或 [待补充]}\n- 逻辑线：原因 → 行动 → 结果 → 后果/新问题\n\n#### 人物关系和出场顺序\n- 出场顺序：{摘要中角色/势力/关键物件出现顺序}\n- 人物关系变化：{本章前 → 本章后；未知写 [待补充]}\n- 视角/信息差：{谁知道什么；读者知道什么；主角误判什么；未知写 [待补充]}\n\n#### 情节细化\n- 情节点序列（逐行填下表；从摘要情节点反推）：\n\n| # | 情节点（谁做了什么） | 功能标签 | 执行边界 |\n|---|---|---|---|\n| 1 | {} | {功能不明写 [待补充]} | {从原文确认本点没有释放什么；未知写 [待补充]} |\n- 行动成本（可无）/收益归属：{有证据才写；行动成本可无、不硬造；未知写 [待补充]}\n\n#### 结尾设定和钩子\n- 结尾设定：{原文收束落在什么动作或画面；未解决问题；下一章推动力；未知写 [待补充]}\n- 章尾钩子：[待补充]\n```\n\n> 钩子、人物关系变化、辅线/感情线、行动成本/收益归属等无法由原文摘要稳定判断的字段统一标 `[待补充]`；story-import 只反推有证据的蓝图，不为补齐字段编造关系或副线。\n\n#### Step 7：追踪文件生成\n\n导入项目必须通过本 skill 自带的 `scripts/tracking_commit.py init` 一次性生成追踪状态，禁止模型分别写最终文件。完整字段与命令见 [references/tracking-transaction.md](references/tracking-transaction.md)。语义准备顺序如下：\n\n1. **导入截止章**：把最后完整章 N 写入初始化事务的 `last_chapter`。工具在 meta 记录 `imported_through_chapter=N`；导入旧章没有日更事务，不得为第 1..N 章伪造逐章增量，也不额外生成一份重复当前状态的叙事基线。\n2. **核心角色当前快照**：从拆书产物反推主角、反派、核心配角的截至 N 章状态，按角色写入初始化 JSON 的 `character_snapshots`。输出由工具生成到 `追踪/角色状态/{角色名}.md`；算法见 [references/character-state-reverse.md](references/character-state-reverse.md)。\n3. **伏笔当前行**：从有正文证据的铺垫/回收事件生成 `foreshadow`。每个 ID 只保留当前状态一行；尚未实际埋设的未来设计留在大纲，不写 `伏笔.md`。\n4. **事实与读者认知**：把关键事件生成到 `timeline_events`。同一事件同时写客观事实、读者截至 N 章已知内容和实际揭示状态；未来计划揭示章不得伪装成已发生事实。\n5. **续写状态卡输入**：准备当前位置、长期约束、活跃核心角色、近三章速记、下一章承诺和连贯性风险。`上下文.md` 由工具生成固定 7 栏，不把文风、文件索引、普通待办或质检计数塞进续写状态卡。\n6. **执行初始化**：按当前平台探测 Python 3（`python3` → `python` → `py -3`），执行：\n\n   > 项目 `追踪/` 里已有不属于当前协议的早期文件时不必手工清理：`init` 会先把它们按原样整体移入 `追踪/_旧追踪存档/`，再在原地建当前协议。旧内容保留供作者查阅，不参与解析，当前状态完全由本次导入输入决定；校验失败的 `init` 不移动任何文件。\n\n   ```text\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py init --project {项目根} --input {项目根}/.story/work/init.json\n   {PYTHON} {story-import skill 根}/scripts/tracking_commit.py check --project {项目根}\n   ```\n\n以 demo《让你管账号，你高燃混剪炸全网》导入至第 10 章为例：续写状态卡要写清江晨的手机原版《诸君，且听龙吟》被专业团队高清重拍，但高层看片后认为新版“缺了灵魂”，最终继续采用原版；江晨快照应体现其军宣创作价值已获周薄森、张耀祖确认；读者时间线只写读者已经看到的看片会结论，钟嘉嘉“只猜对了一半”背后的培养安排若尚未揭示，只能出现在作者真相，不能泄露到读者视图。\n\n初始化成功\n\nArchive v1.0.22: 14 files, 75638 bytes\n\nFiles: references/character-state-reverse.md (4333b), references/format-and-structure.md (10599b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (21236b), references/structure-mapping-short.md (7702b), references/tracking-initialization.md (1137b), references/tracking-transaction.md (12739b), scripts/check-outline-contract.js (17799b), scripts/tracking_commit.py (55499b), scripts/wordcount_core.py (10559b), skill-card.md (2118b), SKILL.md (44039b), _meta.json (132b)\n\nArchive v1.0.21: 14 files, 74258 bytes\n\nFiles: references/character-state-reverse.md (4167b), references/format-and-structure.md (10599b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (20299b), references/structure-mapping-short.md (7702b), references/tracking-initialization.md (1137b), references/tracking-transaction.md (12389b), scripts/check-outline-contract.js (17799b), scripts/tracking_commit.py (55499b), scripts/wordcount_core.py (10559b), skill-card.md (3098b), SKILL.md (42722b), _meta.json (132b)\n\nArchive v1.0.20: 13 files, 70432 bytes\n\nFiles: references/character-state-reverse.md (4167b), references/format-and-structure.md (10538b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (20299b), references/structure-mapping-short.md (7702b), references/tracking-transaction.md (13253b), scripts/check-outline-contract.js (9536b), scripts/tracking_commit.py (55499b), scripts/wordcount_core.py (10559b), skill-card.md (2570b), SKILL.md (42702b), _meta.json (132b)\n\nArchive v1.0.19: 12 files, 65994 bytes\n\nFiles: references/character-state-reverse.md (4167b), references/format-and-structure.md (10261b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (20299b), references/structure-mapping-short.md (7631b), references/tracking-transaction.md (13253b), scripts/tracking_commit.py (55499b), scripts/wordcount_core.py (10559b), skill-card.md (2617b), SKILL.md (42592b), _meta.json (132b)\n\nArchive v1.0.18: 12 files, 65808 bytes\n\nFiles: references/character-state-reverse.md (4167b), references/format-and-structure.md (10197b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (20299b), references/structure-mapping-short.md (7631b), references/tracking-transaction.md (13047b), scripts/tracking_commit.py (55499b), scripts/wordcount_core.py (10501b), skill-card.md (2609b), SKILL.md (42500b), _meta.json (132b)\n\nArchive v1.0.17: 11 files, 60176 bytes\n\nFiles: references/character-state-reverse.md (4167b), references/format-and-structure.md (10181b), references/length-routing.md (6328b), references/state-tracking.md (4527b), references/structure-mapping-long.md (20144b), references/structure-mapping-short.md (7631b), references/tracking-transaction.md (11388b), scripts/tracking_commit.py (51860b), skill-card.md (2359b), SKILL.md (41724b), _meta.json (132b)","readmeExcerpt":"Skill: story-import：逆向导入已有小说 Owner: worldwonderer Summary: 逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。 Tags: latest:1.0.26 Version history: v1.0.26 | 2026-10-03T05:14:53.413Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.0.2","codeSnippets":[],"executableExamples":[{"language":"markdown","snippet":"# 导入记录：《{导入书名}》\n- 原文：{源文件或目录路径；贴入文本写 .story/work/导入原文.md}\n- 篇幅：{长篇 | 短篇}（{判定依据一句}）\n- 范围：第 1–{N} 章，约 {Y} 万字；{完本 | 半成品}；首期深拆：{全书 | 第 1–50 章，其余用简化摘要（超过 200 章）}\n- 最后一章：{完整 | 残稿：第 {N+1} 章写了一半，作者决定{接着残章写 | 先补完再导入}}\n- 题材：{题材类型}；目标平台：{平台}\n- 外部对标：{对标书名 | 未绑定}\n- 写作环境：{已装，分析助手可用{，story-architect 可用} | 待装（继续时重新检测） | 未装，作者选直接导入（主会话串行） | ZCode 串行}\n- 卷划分：{待 Phase 3 | 按原文卷界 | 作者已确认：1–40 / 41–95 / …}\n- 作者交代：{偏好、红线、否掉的方案，逐条；没有写「无」}\n\n## 进度\n- [ ] 深度分析\n- [ ] 结构迁移（卷划分已确认、卷纲已写）\n- [ ] 细纲：已验收到第 {B} 章（长篇；续跑从第 {B+1} 章整批重做）\n- [ ] 追踪初始化（长篇，检查通过）\n- [ ] 汇报与激活"},{"language":"json","snippet":"{\n  \"江晨\": {\n    \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n    \"location\": \"火箭军文工团高层看片会\",\n    \"goal\": \"完成五天百万粉任务，继续做出真正能打的军宣内容\",\n    \"state\": \"专业团队重拍版反向坐实手机原版的价值，军内认可继续抬升\",\n    \"abilities_resources\": [\n      \"前世 MCN 爆款运营经验\",\n      \"《中国军魂》伴奏\",\n      \"大师级导演能力\"\n    ],\n    \"relationships\": [\n      \"钟嘉嘉持续提供军报资源\",\n      \"周薄森和张耀祖已明确认可其创作能力\"\n    ],\n    \"knowledge\": [\n      \"《军报》采访稿已经过审\",\n      \"高层决定继续采用《诸君，且听龙吟》手机原版\"\n    ],\n    \"open_threads\": [\n      \"五天百万粉任务尚未结算\",\n      \"钟嘉嘉所谓只猜对一半仍未解释\"\n    ]\n  }\n}"},{"language":"text","snippet":"她把杯子放下。\n\"你走吧。\"\n他没有动。\n\"我说，你走吧。\""},{"language":"text","snippet":"她把杯子放下。\n\"你走吧。\"她说。\n他没有动。\n\"我说，你走吧。\""},{"language":"text","snippet":"她把杯子放下，说道：\"你走吧。\"他没有动，她又说：\"我说，你走吧。\""},{"language":"md","snippet":"=== 《{导入书名}》导入完成 ===\n导进来了：第 1–{N} 章，约 {Y} 万字{；第 {N+1} 章只写了一半，按你的决定{接着残章写 | 先补完}}。项目在 `{项目目录}`。\n\n我整理出了：\n- 人物：{M} 个角色档案，主要人物写到第 {N} 章时的处境已记下（如「{角色}：{一句话现状}」）\n- 大纲：全书大纲、{V} 卷卷纲、每章细纲\n- 还没收的线：{K} 条（如「{伏笔的故事描述}」）\n- 时间线：真相和读者目前知道的分开记，续写时不会提前泄底\n- 设定：{设定文件数} 份世界观资料\n- 对标书：{没有绑定 | 已接入《{对标书名}》 | 没接上：原因和补救}\n\n请你核对：\n1. {最拿不准的一处，写成具体问题，如「第 5 章的黑衣人和第 2 章的车夫是同一人吗？」}\n2. {如「还没收的线里有没有漏的？我列的是：……」}\n\n需要你决定：{仅在有待定事项时写，如「原文没分卷，我按剧情分成 3 卷（1–40 / 41–95 / 96–{N} 章），这样分可以吗？」}\n\n下一步：说「日更」就从第 {N+1} 章接着写；想先检查导入质量，说「审一下」。"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: story-import\nversion: 1.0.0\ndescription: \"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-import：逆向导入已有小说\n\n你是小说项目逆向工程师。**交付物是写作工程**：把作者已有的书重建为可续写的工程（项目结构 + 拆文库分析资产），让作者能直接接着写。`拆文库/{导入书名}/` 是重建工程的数据源，保留不丢弃，但不是交付物本身；对作者以「建工程」为可见目标，别把「拆文」当成终点或对外标签。\n\n> Agent 兼容性：只检查当前运行时的 canonical 目录：Claude `.claude/agents/{agent}.md`、OpenCode `.opencode/agents/{agent}.md`、Codex `.codex/agents/{agent}.toml`、Antigravity `.agents/agents/agent-name/agent.md`（`agent-name` 为目标 agent 名），不得因其他端文件存在而误判。Codex 使用同名 `agent_type`；Antigravity 使用 `invoke_subagent` + `TypeName`。对应运行时未暴露 custom-agent registry / `invoke_subagent` 或返回未知 agent 时，必须降级 solo/direct。检测到 `.zcode/` 时同样直接 solo/direct，因为 ZCode 3.3.4 不执行项目 custom agents；报告 `Fallback: project custom agents unavailable -> solo`。Claude 用 `subagent_type`；OpenCode 用 `subagent` 工具的 `agent` 参数。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时报告 `Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 并提示重新运行 `/story-setup` 后新开会话；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，报告 `Fallback: ... -> solo`。\n\n## 名词与目录边界（全流程硬约束）\n\n- `{导入书名}`：用户自己已经写到一半或已经完本、现在要重建为工程的小说；它的分析源固定为 `拆文库/{导入书名}/`。\n- `{对标书名}`：用户另行选择的外部参考作品；它必须是独立拆解产物，来源固定为 `拆文库/{对标书名}/`，且不得指向本次导入源。\n- `story-import` 可以复用拆解管道分析 `{导入书名}`，但**不得把 `{导入书名}` 登记为主/副对标，不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。\n- 用户没有明确选择外部对标时，不创建对标子目录、不写 `主对标书`；后续由 story-long-write / story-short-write 的对标发现流程单独处理。\n\n先分析后迁移：深度分析复用现成管道（长篇 `/story-long-analyze`，短篇 `/story-short-analyze`），方法、模板与质量检查由 analyze skill 自带，本 skill 不另维护；再把分析结果迁移为项目结构。\n\n## 时刻表与交接\n\n导入是一串时刻，每个时刻只读自己的文件；后一时刻只靠落盘文件接上前一时刻，不靠对话记忆。\n\n| 时刻 | 作者确认什么 | 读什么 | 落盘 |\n|---|---|---|---|\n| Phase 1 确认来源与范围 | 书名、题材、平台、篇幅、残稿怎么处理、外部对标、先不先装环境 | 本文件 Phase 1；判篇幅读 [length-routing.md](references/length-routing.md) | 导入记录 |\n| Phase 2 深度分析 | 不打扰作者 | [deep-analysis.md](references/deep-analysis.md)，再照它进入拆书流程 | `拆文库/{导入书名}/` |\n| Phase 3 结构迁移 | 原文没分卷时，卷怎么分 | 长篇 [structure-mapping-long.md](references/structure-mapping-long.md)；短篇 [structure-mapping-short.md](references/structure-mapping-short.md) | 项目 `设定/`、`正文/`、`大纲/`（短篇为三个单文件） |\n| 逐批反推细纲（长篇） | 不打扰作者 | 本批任务包（见 [outline-reverse.md](references/outline-reverse.md)） | `大纲/细纲_第XXX章.md` |\n| Phase 4 追踪初始化（长篇） | 不打扰作者 | [import-tracking.md](references/import-tracking.md) | `追踪/` |\n| Phase 5 汇报与激活 | 请作者核对、拍板的事 | [import-report.md](references/import-report.md) | `.active-book` |\n\n**导入记录**：`{书目录}/.story/work/导入记录.md`（书目录：长篇 `{导入书名}/`，短篇 `{短篇标题}/`），Phase 1 建立，格式见下方 Step 5。每个时刻开头先读它，不回翻对话；时刻交付前把作者在对话里新定的事（决定、偏好、红线、否掉的方案）和进度写回它，再往下走。\n**换上下文**：深度分析、每批细纲、追踪初始化读的东西多。每个时刻交付后，汇报末尾加一句「下一步建议新开一个对话，说『继续导入』，会更专注」；作者要在本对话继续也照做。作者说「继续导入」时，在项目根下找进度没勾完的 `*"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-import\",\n  \"version\": \"1.0.26\",\n  \"publishedAt\": 1791004493413\n}"},{"path":"references/character-state-reverse.md","content":"# 核心角色当前快照反推规则（长篇导入）\n\n> 仅用于 `story-import` 导入长篇。输出不是一份不断追加的角色历史，而是初始化事务里的 `character_snapshots`；`tracking_commit.py init` 会为每个核心角色生成 `追踪/角色状态/{角色名}.md`。\n\n## 一、输入来源\n\n只从已经落盘的拆书产物反推，不重读 `原文/`：\n\n| 输入 | 用途 |\n|---|---|\n| `拆文库/{书名}/角色/{角色名}.md` | 身份、能力、目标、成长弧线、出场记录 |\n| `拆文库/{书名}/角色/角色关系.md` | 截至最后完整章的关键关系 |\n| `拆文库/{书名}/章节/第N章_摘要.md` | 从 `涉及` 锁定相关章，从 `状态变化`、`信息变化`、`局面结果` 和 `章尾钩子` 提取最后位置、最新状态、已知信息与未结事项；旧摘要缺字段时回退其关键事件与情节点 |\n| `拆文库/{书名}/剧情/*.md` | 阵营/身份转折、阶段目标和长期冲突 |\n| 初始化事务中的伏笔与时间线候选 | 核对角色未结事项及其可知范围 |\n\n## 二、追踪对象\n\n只为主角、反派、核心配角建立独立快照。临时路人和只承担一次功能的角色不建文件。边界不清时优先不建，后续角色真正进入复用状态时再由逐章事务创建。\n\n## 三、反推方法\n\n对每个核心角色，以最后完整导入章 N 为截面，分别确定：\n\n1. `identity`：截至 N 章实际成立的身份/职业，不写未来晋升计划。\n2. `location`：最后落点或下一章开始前可确定的位置。\n3. `goal`：角色当前正在追求的具体目标。\n4. `state`：身体、情绪、名望、立场中会影响续写的当前状态；只写必要信息。\n5. `abilities_resources`：当前确实掌握的能力、物品、权限、作品或人脉，最多 8 条。\n6. `relationships`：与后续会复用角色的当前关系，最多 8 条。\n7. `knowledge`：角色本人已经知道、且会影响其行为的信息，最多 8 条。作者真相不能误写成角色已知。\n8. `open_threads`：角色相关的未结事项，最多 8 条；必须有已写正文证据，纯未来设计留在大纲。\n\n若同一字段有多次变化，只取截至 N 章的当前值，不把变化史塞进快照。历史变化由后续 `逐章记录/第NNN章.md` 承担；导入旧章不补造这些记录。\n\n## 四、初始化 JSON 形状\n\n以下示例来自 demo《让你管账号，你高燃混剪炸全网》第 10 章：\n\n```json\n{\n  \"江晨\": {\n    \"identity\": \"火箭军文工团宣传兵；军宣爆款创作者\",\n    \"location\": \"火箭军文工团高层看片会\",\n    \"goal\": \"完成五天百万粉任务，继续做出真正能打的军宣内容\",\n    \"state\": \"专业团队重拍版反向坐实手机原版的价值，军内认可继续抬升\",\n    \"abilities_resources\": [\n      \"前世 MCN 爆款运营经验\",\n      \"《中国军魂》伴奏\",\n      \"大师级导演能力\"\n    ],\n    \"relationships\": [\n      \"钟嘉嘉持续提供军报资源\",\n      \"周薄森和张耀祖已明确认可其创作能力\"\n    ],\n    \"knowledge\": [\n      \"《军报》采访稿已经过审\",\n      \"高层决定继续采用《诸君，且听龙吟》手机原版\"\n    ],\n    \"open_threads\": [\n      \"五天百万粉任务尚未结算\",\n      \"钟嘉嘉所谓只猜对一半仍未解释\"\n    ]\n  }\n}\n```\n\n工具据此生成的文件固定包含：截至章节、身份、位置、当前目标、身心状态、能力与资源、关键关系、已知信息、未结事项。模型不得另写一套 Markdown 模板。\n\n## 五、残稿与分批导入\n\n- 最后一章是残稿：所有快照截至残稿之前的最后完整章；残稿中的动作、获得物、关系变化不得提前生效。\n- 分批导入：快照只表示本次已导入范围的当前状态；扩大导入范围时重新执行一次完整导入，不在旧快照上追加历史段落。\n\n## 六、质量检查\n\n- [ ] 每个文件对应一个核心角色，无功能角色堆积\n- [ ] 所有字段都是截至最后完整章的当前值\n- [ ] 角色已知信息没有混入作者真相\n- [ ] 未结事项都有正文证据，未来设计仍在大纲\n- [ ] 单角色快照目标不超过 4096 字节；确有必要可放宽，但不得超过 8192 字节硬上限\n- [ ] `tracking_commit.py check` 通过"},{"path":"references/deep-analysis.md","content":"# 深度分析时刻：导入场景怎么驱动拆解管道\n\nPhase 2 只读本文件，再按篇幅进入对应 analyze skill；拆书的方法、产物结构、分批、恢复与质量检查全部由 analyze skill 自己的流程负责，本文件只写导入场景的取值。篇幅、原文位置、题材和写作环境都读导入记录（`{书目录}/.story/work/导入记录.md`），不回翻对话、不重新问作者。\n\n| 篇幅 | 进入 | 产物目录 |\n|------|------|---------|\n| 长篇 | `/story-long-analyze` 的统一管道（旧成果直用 / 按需增强 / 全新或部分续跑） | `拆文库/{导入书名}/` |\n| 短篇 | `/story-short-analyze` 的拆解管道（Stage 2-6） | `拆文库/{导入书名}/` |\n\n## 长篇：先兼容识别，再决定是否续跑\n\n先运行 story-long-analyze Phase 1 的只读检查器（`inspect_existing_assets.py`），登记实际文件和覆盖范围；检查建议不能覆盖下列语义规则：\n\n新生成或按当前契约续跑的长篇进度保持 `schema_version: 2`；旧成果直接使用不以缺少该字段为失败。\n\n- **旧成果已完成且足以重建写作工程**：直接进入 Phase 3。旧 `_progress.md` 版本、缺少 `chapter_index.csv`，或缺少本次新增字段，都不能单独成为重拆理由。\n- **旧成果可以导入，但缺少当前写作/对标功能需要的 `剧情/节奏.md`、`剧情/情绪模块.md` 等资料**：先用现有逐章、剧情、关系、报告和文风做 Stage 3+ 按需增强，不回读原文。不得重跑已完成章节，也不得用空壳文件让门禁通过。\n- **只完成一部分或新旧产物混存**：验证并保留已完成部分，从首个缺失的连续章节块续跑，最后统一聚合。进度记录与实际文件冲突时，以可验证文件为准并记录冲突。\n- **全新导入**：运行 Stage 0-6 完整管道。\n\n导入需要自动完成本次判定出的必需范围，不把 Stage 1 停靠询问甩给作者。全新导入命中「完整拆解、一次跑完」路径；旧成果增强或部分续跑只执行缺失 Stage/章节块。原有用途当前不消费新增分析时，缺少新增字段只记录能力限制，不阻断导入。\n\n- 措辞示例（全新）：启动深度分析时声明「以『完整拆解、一次跑完、不要停下询问』模式拆解本书，确保 Stage 2-6 全部产出」。\n- 措辞示例（旧成果）：声明「先复用并校验现有成果，只补当前导入缺失的章节或分析，不覆盖用户原成果」。\n- **兜底**：若全新导入实际仍停在 Stage 1，自动选择继续；若旧成果任务停靠，则按已登记的缺失范围继续，不能扩大成全书重跑。\n- 派发：导入记录写着分析助手可用时，属自动续跑，按 story-long-analyze 的「有限并行」档派 `chapter-extractor`（每轮 3 批），每个连续章节批次只调用一次，同次生成逐章事实与跨章观察；作者明确要求时改用串行或不限批次顺序。作者选了直接导入（或 ZCode）时，Stage 2 由主会话按相同连续章节块契约串行处理，不能退回每章一次独立调用；产物仍完整，仅速度变慢。\n- 超过 200 章的作品按 [import-special-cases.md](import-special-cases.md)「超过 200 章的作品」分批拆解。\n\n## 短篇：单一全量管道\n\nstory-short-analyze 的拆解管道（Stage 2-6）本身**无 Stage 1 停靠点**，一次跑完即可。它的 Phase 1 四个 Step 都要跑，按下表的导入场景取值执行，不整段跳过：\n\n| Phase 1 步骤 | 导入场景下的处理 |\n|-------------|----------------|\n| Step 1：拿到原文 | 用导入记录里的源文件，不重新问 |\n| Step 2：字数检查（长短篇路由） | 篇幅已在导入 Phase 1 判定并经作者确认，直接答「按短篇继续」，不重新路由 |\n| Step 3：题材识别 | **照常跑**，题材标尺必须加载；导入记录里已确认的题材类型直接代入，不重复提问 |\n| Step 4：续跑检查（`拆文库/{导入书名}/_meta.json` 已存在时三选一） | 先看旧产出是否可直接复用：`stages_completed` 已含 6 且 `拆文报告.md` / `情节节点.md` / `写作手法.md` / `原文/` 均非空、来源与本次导入源一致 → 直接进 Phase 3，不重跑也不归档。否则本轮首次进入 Phase 2 → 按 (a) 覆盖：先把旧产出归档到 `拆文库/{导入书名}/_archive_{时间戳}/`，再从 Stage 2 重跑；同一轮导入内重试同一本书 → 按 (b) 续跑。不把三选一甩给作者，也不跳过归档 |\n\n`_meta.json` 的 `genre_detected` 由 Step 3 产出，是拆文契约的阻断级必填字段，下游 story-short-write 靠它选题材标尺——**不要跳过 Step 3 直接从原文备份起跑**。\n\n- 措辞示例：启动深度分析时声明「《{导入书名}》篇幅已确认为短篇（题材 {题材类型}，全文约 {N} 字），Step 2 直接按短篇继续，Step 4 按覆盖并归档处理，题材识别照跑，确保 Stage 2-6 全部产出」。\n- **兜底**：若运行环境仍抛出「此文字数 {N} 偏长，建议改用 `/story-long-analyze`」或灰区提问「介于短/长之间，按短篇还是长篇拆？」，一律按导入记录里锁定的判定逐字回「按短篇继续」，**绝不把路由询问甩给作者**。\n\n## 交付\n\n拆解管道自带的质量检查通过、产物落在 `拆文库/{导入书名}/` 后，在导入记录勾「深度分析」。拆书流程自带的完工汇报（长篇「全部拆完」、短篇「可以运行 /story-short-write 写下一篇」）在导入里不用，由这里交代：向作者用一两句故事话说拆到了什么（几章、主要人物、主线一句），末尾按 [SKILL.md 的换上下文规则](../SKILL.md#时刻表与交接) 建议新开对话。拆书中断时不在这里另做恢复：重新进入同一拆解管道，由它按自己的进度文件续跑。"},{"path":"references/format-and-structure.md","content":"# 正文格式与小节结构\n\n> 写作前必读。以下格式是当前仓库约定的默认正文交付格式；用户或目标平台有明确要求时，以用户/平台要求覆盖。\n>\n> **适用范围**：段落格式（戏剧单元/镜头优先，短段为底色，长段用于完整推理、氛围和情绪链）和对话格式适用于所有体裁。小节(beat)结构仅适用于短篇；小节不设统一最低字数。长篇按 `visible_chars_v1` 测量同口径细纲 `字数目标`：内部带 ±12%，用户带 ±15%。\n\n---\n\n## 章节标记\n\n默认格式（按灵活度排序）：\n\n| 格式 | 平台适用 | 示例 |\n|------|----------|------|\n| `###1.` | 短篇默认 | `###1.` `###2.` `###3.` |\n| `###第一章` | 部分平台 | `###第一章` `###第二章` |\n| `1.`（纯数字） | 知乎 | `1.` `2.` `3.`（无 ### 前缀） |\n\n**规则**：全文统一一种格式，不要混用。短篇推荐 `###1.` 或纯数字，简洁高效。\n\n---\n\n## 段落格式\n\n### 核心规则：戏剧单元优先\n\n默认交付排版是**按戏剧单元/镜头自然断段，段落紧密排列**。不要把固定字数当成强制切刀；先判断“一件事/一个推理链/一个情绪变化”是否完成。\n\n- 一段承载一个戏剧单元：一个动作链、一个线索发现、一次视线切换、一轮心理判断，或一条连续的氛围/推理/情绪链。\n- 场景结束、一件事结束、新动作、新物件、新信息、新对话另起一段；同一瞬间的发生、感知、反应应织在一起，不拆成动作层/感知层/反应层。\n- 正文相邻段落之间**只允许一个换行符 `\\n`**；不得出现空行或连续换行 `\\n\\n`（紧密排列）。\n- 无缩进（平台渲染器自行处理，不需要 `　　` 或空格）。\n- 长度只作诊断：读起来拥挤、混入多个拍点、或手机屏上难以跟读时才拆；完整推理、氛围铺陈、情绪递进未结束时，允许稍长段保留连贯性。\n\n### 段落节奏（长短交错 + 疏密有别）\n\n短段快读，是网文手机阅读的底色；长段负责承载完整推理、氛围和情绪沉淀。**忌通篇同长度**，也忌把每段按同一字数阈值切开：\n\n- **长短交错**：高潮、打脸、反转压到最短（单句成段）；推理链、环境压迫、情绪沉淀、章节收束可保留较长段，让读者读完一个完整变化。\n- **疏密有别（详略）**：爽点、转折 beat 写密（感知、动作、细节铺满）；过场、连接 beat 写疏（1-2 句带过，不平均用力）。每个 beat 一样长、一样细，正是 AI 腔的来源。\n- **不过度碎片化**：连续多个极短段若仍属于同一镜头/同一件事，应合并成自然段，避免像提纲或诗行。\n\n### 主语与角色名节奏\n\n角色名不宜一味省略，也别每句都点名。按“主语重置”使用：\n\n- 段首、场景切换、多人同场、或主语可能混淆时，用主角名/角色名建立视角。\n- 同一段或同一动作链内，优先混用代词、动作承接和合理省略，避免每句都以同一角色名开头。\n- 关键转折、情绪爆点、身份反差或读者需要重新盯住主角时，可以再次点名强化。\n- 审查主语节奏看“读起来是否打磕巴”，不按全章出现次数一刀切；只有连续句/连续段无主语重置却反复点名，才算主语过密。\n\n---\n\n## 对话格式\n\n### 对话标记\n\n按目标平台/用户要求选择；未指定时使用默认格式：\n\n| 优先级 | 格式 | 适用平台 |\n|--------|------|----------|\n| 首选 | `\"说话内容\"` | 短篇默认、番茄 |\n| 平台/项目指定 | `「说话内容」` | 知乎盐言短篇、部分古言、日式或用户指定 |\n\n**默认用 `\"\"`**；用户或平台指定盐言风格时改为 `「」`，不要把 `「」` 视为错误。\n\n### 对话规则\n\n1. 对话**独立成行**，不嵌在叙述段落中\n2. 对话标签按需：高频或公式化的「他说」「她道」「他笑了笑说」用动作描写替代；普通「说」低频使用可保留（与「8 条绝对禁止」中「避免对话标签机械化」一条一致）\n3. 两人对话连续出现时，省略标签，靠内容区分说话人\n\n**正确示例**：\n```\n她把杯子放下。\n\"你走吧。\"\n他没有动。\n\"我说，你走吧。\"\n```\n\n**也合法（普通「说」低频使用）**：\n```\n她把杯子放下。\n\"你走吧。\"她说。\n他没有动。\n\"我说，你走吧。\"\n```\n\n**错误示例**：\n```\n她把杯子放下，说道：\"你走吧。\"他没有动，她又说：\"我说，你走吧。\"\n```\n\n---\n\n## 语气标点谱系\n\n标点服务语气、人物声线和情绪节奏，不能通篇句号化，也不能为了“丰富”随机堆砌符号。先判断当前句子的功能，再选择标点：\n\n| 语气 / 功能 | 标点策略 | 防线 |\n|---|---|---|\n| 压迫 / 冷静 / 克制 | 短句、逗号、句号，必要时用冒号压出判断落点 | 不人工加感叹号；克制不是每句都平铺句号 |\n| 质问 / 试探 / 反问 | 问号 + 短促追问片段，配合动作停顿 | 避免每句话都以 `？` 结尾 |\n| 惊讶 / 爆发 / 打脸 | 真正爆点可用 1 个感叹号，连续爆发最多 1-2 处 | 禁止 `!!!`、整段喊叫式感叹 |\n| 犹豫 / 吞咽 / 未说完 | 逗号、句号、短句断开、动作 beat | 不用 `……` 制造停顿；优先用动作和句长变化 |\n| 被打断 / 拖长音 | 不使用 `——`；改用动作打断、换行、短句或未完成动作 | 正文和对话都禁止 `——` / `—` / `--` |\n| 信息揭示 / 判断落点 | 冒号、分号或单句成段制造落点 | 保持手机阅读友好，不写论文式分号串 |\n\n执行规则：\n- 写对话时先看角色关系和权力位置：强势角色常短句收束，试探角色多问号和半句，崩溃角色才允许少量感叹/省略。\n- 写叙述时用句长、逗号停顿和单句成段制造节奏；默认不用破折号硬造节奏；本书文风明确授权的功能性用法保留。\n- 精修时检查两类问题：**通篇句号化**（语气全被压平）与**随机标点堆砌**（问号/感叹号不承载情绪功能，或用省略号/破折号硬造停顿）。\n- 引号风格按项目/平台约定；知乎盐言的 `「」` 是合法对话格式，`quote-mode keep` 时不得擅自改掉。\n\n---\n\n## 小节（beat）结构\n\n### 基本规则\n\n- 用数字编号（`1` `2` `3`）分割小节，每个小节是一个完整的叙事 beat\n- 小节长度服从其叙事职责，不设统一最低字数；整篇按锁定的交付范围控制，长篇章节按细纲「字数目标」处理\n- 小节数由情节阶段和转场需要决定；不为平均分配字数拆分完整动作链，也不把承担不同职责的小节硬合并\n- 每小节推进一个明确的情节点\n\n### 小节内部结构\n\n每个小节至少完成第 1 项，其余按本节职责选用：\n\n1. **一个主事件** + **一个或多个真实推进**（风险、信息、关系、资源、决定、行动或读者理解至少改变一项；相关情节点可由同一动作链或对话同时兑现，不为数量新增阻碍、对话或冲突）\n2. **情绪或压力落点**（确有变化时写清读者感"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。 Skill: story-import：逆向导入已有小说 Owner: worldwonderer Summary: 逆向导入已有小说。将已写好的小说（半成品或完本）反向解析为标准项目目录结构，兼容 story-long-write / story-short-write 后续写作流程；内部复用 story-long-analyze / story-short-analyze 的拆解管道，按篇幅自动分流。触发方式：/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。 Tags: latest:1.0.26 Version history: v1.0.26 | 2026-10-03T05:14:53.413Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.0.2","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":751,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:15:19.910Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T21:57:30.898Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}