{"id":"249ffea4-4ba3-4ce1-a83b-66f6971ca286","entityType":"agent","slug":"clawhub-ldxs001-novel-weaver","name":"novel-weaver","canonicalUrl":"https://www.xpersona.co/agent/clawhub-ldxs001-novel-weaver","canonicalPath":"/agent/clawhub-ldxs001-novel-weaver","generatedAt":"2026-10-11T03:56:34.293Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T01:37:54.267Z","emptyReason":null},"description":"结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Skill: novel-weaver Owner: ldxs001 Summary: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Tags: ai-agent:1.29.0, ai-writing:1.35.2, character:1.35.4, context:1.19.8, documentation:1.19.4, emotion:1.35.4, hard-constraint:1.19.1, latest:1.35.4, narrative:1.35.4, novel:1.35.4, outline:1.35.4, path:1.19.2, personality:1.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1794v2r46s8y5d1r4jdd7ec5h84rw70:novel-weaver","sourceUrl":"https://clawhub.ai/ldxs001/novel-weaver","homepage":"https://clawhub.ai/ldxs001/skills/novel-weaver","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/ldxs001/novel-weaver","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/ldxs001/skills/novel-weaver","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Skill: novel"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:37:54.267Z","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-11T01:37:54.267Z","emptyReason":null},"stars":null,"forks":null,"downloads":1203,"packageName":null,"latestVersion":"1.35.4","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:37:54.203Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T01:37:54.267Z","lastCrawledAt":"2026-10-11T01:37:54.203Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T01:37:54.203Z","lastVerifiedAt":null,"highlights":[{"version":"1.35.4","createdAt":"2026-07-09T10:48:51.676Z","changelog":"v1.35.4","fileCount":27,"zipByteSize":129121},{"version":"1.35.3","createdAt":"2026-06-29T13:10:12.387Z","changelog":"砍掉 context_loader writing_prompt fallback 改为 HARD-BLOCK。修复 execution_standards.md 旧格式残留。根因：_auto_generate_prompt() 让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成双标准。","fileCount":27,"zipByteSize":128994},{"version":"1.35.2","createdAt":"2026-06-29T07:50:14.269Z","changelog":"fix: wUwproject copyright in LICENSE.md was incorrectly redacted by git-sync desensitization; fixed desensitization logic to preserve wUwproject in LICENSE","fileCount":27,"zipByteSize":128855},{"version":"1.35.1","createdAt":"2026-06-29T07:43:05.454Z","changelog":"docs: update SKILL.md constraint/flow/model sections; auto-finalize, char detection HARD-BLOCK, GPU safety, accelerate dep","fileCount":27,"zipByteSize":128796},{"version":"1.34.5","createdAt":"2026-06-29T02:14:19.114Z","changelog":"字数校验 meta.length缺失改为HOOK-BLOCK不跳过","fileCount":27,"zipByteSize":125882},{"version":"1.34.4","createdAt":"2026-06-29T01:48:41.554Z","changelog":"faq.md JSON格式错误答案过时+全量文档对齐","fileCount":27,"zipByteSize":125610},{"version":"1.34.3","createdAt":"2026-06-29T01:30:50.102Z","changelog":"finalize-chapter 增加章边界流程刷新提示","fileCount":27,"zipByteSize":124810},{"version":"1.34.2","createdAt":"2026-06-29T01:03:07.625Z","changelog":"fix: context_loader串行阻断增加文件系统检测+[下一步]管道写入强制警告","fileCount":27,"zipByteSize":124136}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1794v2r46s8y5d1r4jdd7ec5h84rw70:novel-weaver","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-ldxs001-novel-weaver/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/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-11T03:56:34.290Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-novel-weaver/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-11T01:37:54.267Z","emptyReason":null},"readme":"Skill: novel-weaver\n\nOwner: ldxs001\n\nSummary: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。\n\nTags: ai-agent:1.29.0, ai-writing:1.35.2, character:1.35.4, context:1.19.8, documentation:1.19.4, emotion:1.35.4, hard-constraint:1.19.1, latest:1.35.4, narrative:1.35.4, novel:1.35.4, outline:1.35.4, path:1.19.2, personality:1.35.4, pipeline:1.35.2, punctuation:1.19.10, quality:1.19.10, rewrite:1.19.6, scene-setting:1.35.4, standardization:1.16.0, story:1.35.4, word-count:1.19.5, workflow:1.35.4, writing:1.35.4, writing-style:1.35.4\n\nVersion history:\n\nv1.35.4 | 2026-07-09T10:48:51.676Z | user\n\nv1.35.4\n\nv1.35.3 | 2026-06-29T13:10:12.387Z | user\n\n砍掉 context_loader writing_prompt fallback 改为 HARD-BLOCK。修复 execution_standards.md 旧格式残留。根因：_auto_generate_prompt() 让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成双标准。\n\nv1.35.2 | 2026-06-29T07:50:14.269Z | user\n\nfix: wUwproject copyright in LICENSE.md was incorrectly redacted by git-sync desensitization; fixed desensitization logic to preserve wUwproject in LICENSE\n\nv1.35.1 | 2026-06-29T07:43:05.454Z | user\n\ndocs: update SKILL.md constraint/flow/model sections; auto-finalize, char detection HARD-BLOCK, GPU safety, accelerate dep\n\nv1.34.5 | 2026-06-29T02:14:19.114Z | user\n\n字数校验 meta.length缺失改为HOOK-BLOCK不跳过\n\nv1.34.4 | 2026-06-29T01:48:41.554Z | user\n\nfaq.md JSON格式错误答案过时+全量文档对齐\n\nv1.34.3 | 2026-06-29T01:30:50.102Z | user\n\nfinalize-chapter 增加章边界流程刷新提示\n\nv1.34.2 | 2026-06-29T01:03:07.625Z | user\n\nfix: context_loader串行阻断增加文件系统检测+[下一步]管道写入强制警告\n\nv1.34.1 | 2026-06-29T00:54:06.570Z | user\n\nfix: novel_semantic_check BERT模型路径不兼容修复\n\nv1.34.0 | 2026-06-29T00:45:22.026Z | user\n\nwrite-sub v2 系统组装+atomic_writer.v4+context_loader优先级重排+writing_prompt必填自动补+别名自动补+CLI错误增强+JSON自动保存+@file.json推荐\n\nv1.32.0 | 2026-06-28T09:02:15.987Z | user\n\nrefactor: novel-weaver（全流程改造完成）\n\nv1.29.0 | 2026-06-28T04:44:10.587Z | user\n\nR-20粒度拆分+行号追踪+--fix正则混排修复+section_names移出黑名单+流程状态清理\n\nv1.28.0 | 2026-06-28T04:42:53.136Z | user\n\nR-20粒度拆分+行号追踪+--fix正则混排修复+section_names移出黑名单+流程状态清理\n\nv1.21.6 | 2026-06-28T01:49:42.963Z | user\n\n重新发布：修正后的SKILL.md含g++/cmake独立检查流程+winlibs下载直链+镜像\n\nv1.21.5 | 2026-06-28T01:36:31.589Z | user\n\nQwythos安装说明重写：独立检查g++和cmake，winlibs下载直链+镜像\n\nv1.21.4 | 2026-06-28T00:53:57.388Z | user\n\n更正：v1.21.2 changelog中'git-sync Bug'为错误归因。实为操作者手动sed版本号后并发启动git-sync+ClawHub+SkillHub导致SkillHub读到旧内容，非git-sync问题\n\nv1.21.3 | 2026-06-28T00:51:11.591Z | user\n\nSKILL.md模型安装说明前置到入口(触发条件+安装命令)\n\nv1.21.2 | 2026-06-28T00:33:28.572Z | user\n\n修复git-sync SKILL.md内容未同步bug，重发ClawHub+SkillHub\n\nv1.21.1 | 2026-06-28T00:11:01.093Z | user\n\nSKILL.md碎片/乱码修复+新增检查系统章节\n\nv1.21.0 | 2026-06-27T23:43:28.341Z | user\n\nBERT语义检查+Qwythos推理审核+文档全面同步\n\nv1.20.4 | 2026-06-27T06:39:50.613Z | user\n\natomic_writer别名声明阻断钩子 + 跨章行为摘要 + 实体关系追踪系统\n\nv1.19.11 | 2026-06-27T03:27:18.306Z | user\n\n跨章串行阻断+关键人物function规划时阻断+add-char强制function\n\nv1.19.10 | 2026-06-27T03:17:28.834Z | user\n\natomic_writer 新增标点缺失校验（软性提示，80字阈值，不阻断）\n\nv1.19.8 | 2026-06-27T03:08:28.703Z | user\n\n上下文注入已出场关键人物+function字段+赛博搏杀记角色补齐\n\nv1.19.6 | 2026-06-26T23:24:23.238Z | user\n\n修改/扩写流程约束：write-sub 检测 completed 子结构自动提醒跑 finalize-chapter；SKILL.md/hooks.md 同步\n\nv1.19.5 | 2026-06-26T15:48:40.318Z | user\n\n字数目标写入子结构规划：word_count_target min/max/check_max 注入每个子结构，LLM 读 state 即见字数要求\n\nv1.19.4 | 2026-06-26T15:26:06.515Z | user\n\n渐进式文件全量对齐：execution_standards.md阻断规则+faq.md新条目+examples.md新输出+antipatterns.md引用\n\nv1.19.3 | 2026-06-26T15:22:03.172Z | user\n\n文档脱钩全量修复：SKILL.md约束/工作流/核心能力 + hooks.md同步\n\nv1.19.2 | 2026-06-26T15:19:07.481Z | user\n\nSKILL.md 新会话指引：首条约束要求运行 list-projects，数据目录节禁止手工拼路径\n\nv1.19.1 | 2026-06-26T15:05:29.184Z | user\n\n串行阻断钩子：上一子结构未标记完成时 HOOK-BLOCK 强制 LLM 走 write-sub 管道\n\nv1.19.0 | 2026-06-26T14:47:50.900Z | user\n\n字数约束注入上下文 + 字数校验统一标准 + 情绪格式向后兼容修复\n\nv1.18.2 | 2026-06-26T07:15:28.648Z | user\n\n修复CJK关键词提取: 整段中文匹配→2-4字滑动窗口,提升大纲忠实度覆盖率\n\nv1.18.1 | 2026-06-26T06:53:46.724Z | user\n\n补写1.18.0 changelog条目,R-11/R-12/C-07/C-16/C-18手动修复\n\nv1.17.2 | 2026-06-26T06:28:31.597Z | user\n\n指纹保护修复: plan-chapter成功后更新.state_fingerprint.txt, 后续章节规划不被误阻断\n\nv1.17.1 | 2026-06-26T05:27:30.595Z | user\n\n路径统一: workflow_engine.py改从_path_utils.py导入DATA_DIR,消除重复\n\nv1.17.0 | 2026-06-26T04:46:15.708Z | user\n\nplan-chapter新增文件加载(@/路径), 避免Shell转义破坏JSON\n\nv1.16.4 | 2026-06-25T13:02:37.622Z | user\n\n4核心脚本加stdout编码修复, 解决Git Bash中文乱码\n\nv1.16.3 | 2026-06-25T12:42:12.264Z | user\n\nnovel_continuity.py check自动推导chapter_dir从state_path, 修复LLM路径错误\n\nv1.16.2 | 2026-06-25T12:15:20.909Z | user\n\n原始SKILL.md补充slug/displayName前导字段(修复git-sync冲掉问题)\n\nv1.16.1 | 2026-06-25T12:12:20.224Z | user\n\n数据目录章节改为代码示例驱动, LLM禁止手写路径, 提供_path_utils.py调用代码\n\nv1.16.0 | 2026-06-25T12:02:27.347Z | user\n\nSKILL.md data_dir修正(data->projects), 新增数据目录章节指引LLM路径\n\nv1.15.1 | 2026-06-25T11:28:42.554Z | user\n\n标准化改造:_meta.json路径修正/examples.md路径修正/术语统一/约束9to8\n\nv1.15.0 | 2026-06-25T10:19:08.401Z | auto\n\n- 新增渐进式文件索引与详细拆分说明，强化文档结构，SKILL.md 作为主入口，详细内容分布于 references/ 目录。\n- 明确各阶段强制性流程门禁，补充因果链验证、子结构规划、核心字段保护等多项硬约束细则。\n- 完善阶段流程说明，分别细化场景配置、逐章写作和全文整合具体命令及判定流程。\n- 触发条件与否定条件扩充，覆盖更多使用和排除场景，提高误触发防护。\n- 更新各核心脚本与文档索引，描述功能及钩子关系，便于用户理解全流程及文件职责分布。\n\nArchive index:\n\nArchive v1.35.4: 27 files, 129121 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (55695b), references/examples.md (9778b), references/execution_standards.md (23775b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1088b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25402b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (16030b), scripts/novel_semantic_check.py (17999b), scripts/novel_state_manager.py (20214b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (51797b), skill-card.md (2588b), SKILL.md (13140b)\n\nFile v1.35.4:SKILL.md\n\n---\r\nname: novel-weaver\r\nslug: novel-weaver\r\ndisplayName: novel-weaver\r\nversion: 1.35.4\r\nauthor: wUwproject\r\nlicense: MIT\r\ndescription: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: MEDIUM\r\ndata_dir: ../.standardization/novel-weaver/projects\r\ntags: ['novel', 'writing', 'story', 'outline', 'scene-setting', 'character', 'personality', 'emotion', 'writing-style', 'narrative', 'workflow']\r\ntrigger: 写小说/写故事/写文章/长文写作/故事大纲/场景配置/我想写个故事\r\ntrigger_negative: 翻译/改写/润色/校对/简洁回答/做 PPT/画图\r\nh1_position: true\r\nmeta_field_sync: true\r\ncreate_permissions_md: true\r\ntrigger_quality: add_triggers\r\nfaq_unparsable: reformat\r\nantipattern_count: add_examples\r\nexternal_data_dir: true\r\n---\r\n# novel-weaver — 结构化小说写作辅助技能\r\n\r\n> 本文档由 skill-standardization 自动化审计与维护。\r\n\r\n## 约束\r\n\r\n- **[强制] 新会话第一步：查看项目** — 不要猜路径，先运行以下命令查看已有的项目：\r\n  ```bash\r\n  python scripts/novel_workflow_engine.py list-projects\r\n  ```\r\n  如果无项目则创建新项目，有项目则记录 state_path 供后续命令使用。\r\n- **[强制] 流程门禁系统** — 在阶段转换时自动 require 前置门禁：→writing 检查 outline_causality + sub_causality；→stage3_ready 检查 fidelity + ending_verify。门禁状态查看：`python novel_pipeline_gate.py status <state_path>`\r\n- **[强制] 核心规划字段保护 + 串行阻断** — `novel_state_manager.py` 对核心字段做 MD5 指纹校验，LLM 不可更新。context_loader 检测上一子结构是否为 completed，否则 HOOK-BLOCK 阻断。串行写入，一次只改一个子结构\r\n- **[强制] 串行阻断** — context_loader 加载子结构上下文时检测上一子结构 state 是否为 completed。若为 pending 则输出 HOOK-BLOCK 并给出 write-sub 修复命令，强制走管道完成标记后才能继续。子结构写作必须串行\r\n- **[必须] 先确认+规划再写作** — 场景配置和大纲必须经用户确认，每章先 `plan-chapter`（含必填 writing_prompt + 情绪 tone + 可选 emotions）→ 因果链验证 → 通过串行阻断检查，才可开始写作\r\n- **[必须] 写作规范** — 每段 ≤200行（自然段落结束），atomic write 逐行 fsync，正文禁止 `L##S##` 标记行（会被阻断）\r\n- **[强制] 写作中登记** — 新角色出场时 `novel_state_manager.py add-char`。**plan-chapter 已加硬阻断**：sub_structures 中出现未登记角色名时 HOOK-BLOCK，必须先 add-char 才能写入。\r\n- **[强制] 每章六检 + 自动完结** — 写完所有子结构后 **write-sub 自动触发 finalize-chapter**（不再需手动执行）：章内连通性 → 跨章承诺链 → 风格校验 → 逻辑检查 → **语义检查** → **推理审核** → 聚合硬性问题并阻断。通过后自动推进 phase。\r\n- **[必须] 全文三检** — 全文完成后必须：`novel_fidelity.py`（大纲忠实度）+ `verify-ending`（结尾收束验证）+ `set-phase stage3_ready`\r\n\r\n### 数据目录\r\n\r\n⚠️ **LLM 禁止手工拼写路径！禁止去 Read memory/ 目录下的文件！** \r\n所有项目数据只能通过以下途径获取：\r\n\r\n**列出所有项目（新会话第一件事）：**\r\n```bash\r\npython scripts/novel_workflow_engine.py list-projects\r\n```\r\n或\r\n```python\r\nimport sys; sys.path.insert(0, 'scripts')\r\nfrom _path_utils import list_projects, resolve_state_path, DATA_DIR\r\nprojects = list_projects()\r\n# DATA_DIR = ~/.workbuddy/skills/.standardization/novel-weaver/projects/\r\n```\r\n\r\n**获取单个项目 state 路径：**\r\n```python\r\nfrom _path_utils import resolve_state_path\r\nstate_path = resolve_state_path()       # 自动从 .project 缓存读取\r\n# 或传入项目名: resolve_state_path(\"赛博搏杀记\")\r\n```\r\n\r\n**读取项目状态：**\r\n```python\r\nstate_path = resolve_state_path()\r\nif state_path:\r\n    import json; state = json.loads(open(state_path, encoding='utf-8').read())\r\nfrom _path_utils import DATA_DIR\r\nproj = DATA_DIR / '项目名' / 'data' / 'novel_state.json'\r\n```\r\n\r\n**目录结构（代码推导，仅供理解）：**\r\n```text\r\n{DATA_DIR}/<项目名>/\r\n├── data/novel_state.json          ← 状态文件\r\n├── data/.workbuddy/gate_state.json ← 门禁状态\r\n├── data/reports/                   ← 检查报告\r\n├── chapters/L##/S##.txt          ← 章节正文\r\n└── .project                       ← 路径缓存\r\n\r\n模型文件存储在：\r\n  ~/.workbuddy/skills/.standardization/novel-weaver/models/\r\n  ├── bge-small-zh/                 ← BERT 33MB（可选）\r\n  └── ds-r1-distill-qwen-1.5b/     ← DeepSeek-R1-Distill-Qwen-1.5B ~1GB（CPU 可跑）\r\n```\r\n数据目录由 `_path_utils.py` 统一管理。\r\n\r\n## 触发条件\r\n\r\n**正向触发：**\r\n- 「我想写个故事/小说/文章」→ 触发完整流程\r\n- 「帮我生成故事大纲和场景配置」→ 触发阶段1\r\n- 「根据大纲写下一章」→ 触发阶段2（续写模式）\r\n- 「帮我检查文章前后是否一致」→ 触发风格校验\r\n- 「把这几段串起来」→ 触发连通性补充\r\n- 「检查文章是否偏离了大纲」→ 触发大纲忠实度报告\r\n- 「安装模型/下载模型/装 BERT/装推理模型」→ 触发模型安装流程：安装 sentence-transformers + 下载 bge-small-zh 或安装 transformers + 下载推理审核模型\r\n\r\n**否定条件：**\r\n- 用户只是说「改写/润色」——不是本技能范畴\r\n- 用户要求翻译/简洁回答——不触发\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n\r\n本技能采用渐进式 MD 体系，SKILL.md 为入口（≤230行），详细内容拆分到 references/。\r\n\r\n| 文件 | 内容 |\r\n| ------ |------|\r\n| references/execution_standards.md | 字数管理 / 文体规范 / novel_state.json 结构 / 子结构文件格式 / 章节输出 / 时间线 / 角色表 / 结尾收束 / 实体关系追踪 |\r\n| references/hooks.md | 参考文档 | 全量流程钩子 + 门禁系统一览（类型/行为/脚本） |\r\n| references/antipatterns.md | 常见反模式与正确做法 |\r\n| references/faq.md | 常见问题与排除 |\r\n| references/changelog.md | 版本更新日志 |\r\n| references/examples.md | 使用示例 |\r\n| references/permissions.md | 权限说明 |\r\n| references/LICENSE.md | MIT 许可证 |\r\n\r\n### 渐进式文件索引\r\n\r\n| 文件名 | 分类 | 包含内容 | 审计关联 |\r\n| -------- |------| ---------- |----------|\r\n| `references/LICENSE.md` | 许可协议 | 开源许可证声明（MIT）。包含：MIT 许可证完整文本。 | R-26 |\r\n| `references/antipatterns.md` | 规范指南 | skill 编写中的常见反模式。包含：错误做法示例、正确做法示例、避坑指引。 | R-18 |\r\n| `references/changelog.md` | 版本管理 | 版本更新日志。包含：版本号、更新类型、修复项、升级说明。 | R-24 |\r\n| `references/examples.md` | 使用示例 | 各场景完整执行示例。包含：CLI 命令、执行过程、输出结果。 | R-25 C-17 |\r\n| `references/execution_standards.md` | 参考文档 | 字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。 | 无 |\r\n| `references/faq.md` | 常见问题 | 常见疑问与解答。包含：问题分类、原因分析、解决方案。 | R-19, R-25 C-19 |\r\n| `references/hooks.md` | 参考文档 | 门禁状态查看：`python novel_pipeline_gate.py status <state_path>` | 无 |\r\n| `references/permissions.md` | 权限与测试 | 权限扫描说明与测试结论。包含：风险等级、高权限操作说明、测试概览、计时统计。 | R-15, R-16 |\r\n## 工作流程\r\n\r\n### 写作流程\r\n\r\n1. **LLM 生成场景配置** → 输入 用户模糊想法 → 输出 novel_info/setting — 生成人物/时代/地点/风土人情/核心冲突\r\n2. **LLM 生成一级大纲** → 输入 场景配置 → 输出 chapters[] title/overview — L01-L15编号+标题+每章概述\r\n3. **因果链验证(outline)** → 输入 chapters[] overview → 输出 outline_causality 门禁 — 逐链节检查L01→L02→...因果递进\r\n4. **用户确认** → 输入 大纲 → 输出 确认/修正 — 钩子阻断式，未确认不得进入阶段2\r\n5. **初始化 novel_state.json** → 输入 大纲 → 输出 novel_state.json — chapters/characters/timeline 骨架\r\n6. **规划章子结构** → 输入 章节标题+概述 → 输出 sub_structures[] JSON — S01-S05+标题+概述+tone+**必填 writing_prompt(≥50字符)**+可选 emotions。缺失 writing_prompt 则 plan-chapter HOOK-BLOCK\r\n7. **注册子结构到 state** → 输入 subs_json → 输出 novel_state 更新 — MD5指纹锁定+自动字数目标+标记 is_ending/is_hook。**新角色检测+HARD-BLOCK**：sub_structures 中出现未登记角色名时阻断并提示 add-char 命令\r\n8. **子结构因果链验证** → 输入 sub_structures → 输出 sub_causality 门禁 — 逐子结构因果递进检查\r\n9. **set-phase writing** → 输入 outline+sub 门禁 → 输出 phase=writing — require 双门禁，不通过则阻断\r\n10. **加载上下文（context_loader）** → 输出 4区块优先级排列：A(标识+硬性字数/文风/署名约束+写作命题框) → B(末3行+人物+人格+实体+轨迹+节奏) → C(收尾+钩子+输出模板)。无预编命题时自动从概述合成 fallback\r\n11. **LLM 写作 → 系统组装写入** → LLM 只输出纯正文（末尾可带可选【别名】行）→ write-sub 自动组装标题行+别名行+标记行 → atomic_writer.v4 校验正文合法性。无别名行时系统自动补【别名】无\r\n12. **重复10-11** → 输入 下一子结构 → 输出 全部子结构完成 — 直到该章全部子结构写完\r\n13. **完结一章(finalize-chapter)** → 输入 章内容 → 输出 六合⼀检查报告 — **自动触发**（最后一个子结构写入后自动运行），无需手动执行\r\n14. **全文整合(fidelity)** → 输入 全部章节 → 输出 大纲忠实度报告 — 检查是否偏离大纲\r\n15. **结尾收束验证** → 输入 末章末子结构 → 输出 ending_report.md — 封闭式/开放式/悬停式三选一验证\r\n\r\n### 检查系统\r\n\r\nfinalize-chapter 是章节质量的核心关卡，聚合执行 6 步检查链：\r\n\r\n| 步骤 | 名称 | 脚本 | 作用 | 等级 |\r\n| ------ |------| ------ |------| ------ |\r\n| 1 | 章内连通性 | `novel_continuity.py` | 检测子结构间时间/角色是否断裂 | SOFT |\r\n| 2 | 跨章承诺链 | `novel_continuity.py` | 检测上章尾与下章头的关键词续接 | SOFT |\r\n| 3 | 风格校验 | `novel_style_check.py` | 禁用词/末行标记/超200行检测 | HARD |\r\n| 4 | 逻辑检查 | `novel_logic_check.py` | 角色一致性+时间线+概述关键词命中率 | HARD |\r\n| 5 | 语义检查(BERT) | `novel_semantic_check.py` | overview-vs-content 对齐+子结构间语义跳跃（有模型时） | HARD |\r\n| 6 | 推理审核(DeepSeek-R1) | `novel_reasoning_check.py` | 因果合理/人格一致/情绪弧/对话/论证（有模型时） | HARD/SOFT |\r\n\r\n步骤 1-4 由 Python 刚性规则驱动，**无外部依赖**。步骤 5-6 需本地已缓存的模型，**无模型时自动跳过（绝不联网）**。有 HARD 问题则阻断（不标记门禁），写入 `_fixes.json`；全部通过则标记 `chapter_finalized` 门禁。\r\n\r\n> ⚠️ **GPU 安全**：步骤 5-6 强制 CPU 运行（`CUDA_VISIBLE_DEVICES=-1`），避免与 LM Studio 等 GPU 应用冲突。模型推理全程使用系统内存。\r\n\r\n### 模型安装（可选，仅步骤5-6需要）\r\n\r\n步骤 5-6 只在本地已有模型缓存时运行。无模型时静默跳过，按需安装：\r\n\r\nBERT 语义检查（92MB，纯 CPU 可跑，第5步）：\r\n```bash\r\npip install sentence-transformers -i https://mirrors.aliyun.com/pypi/simple/\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-small-zh-v1.5')\"\r\n```\r\n\r\nDeepSeek-R1-Distill-Qwen-1.5B 推理审核（~3.7GB，CPU 可跑，第6步）：\r\n\r\n安装 transformers + torch + accelerate，有 prebuilt wheel：\r\n\r\n```bash\r\n# 1. 装 transformers + torch + accelerate\r\npip install transformers torch accelerate -i https://mirrors.aliyun.com/pypi/simple/\r\n\r\n# 2. 下载 DeepSeek-R1-Distill-Qwen-1.5B 模型（~3.7GB，hf-mirror）\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from transformers import AutoModel; AutoModel.from_pretrained('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', trust_remote_code=True)\"\r\n```\n\nFile v1.35.4:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"novel-weaver\",\n  \"version\": \"1.35.4\",\n  \"publishedAt\": 1783594131676\n}\n\nFile v1.35.4:references/antipatterns.md\n\n# 反模式与常见错误\r\n\r\n### 1. 跳过阶段1直接写作\r\n\r\n**错误做法：** 用户说出故事想法后，不先生成场景配置和大纲，直接开始写正文。\r\n\r\n**正确做法：** 执行阶段1的所有步骤——LLM 生成场景配置（人物/时代/地点/冲突），生成一级大纲（章节标题+模糊概述），供用户确认。未确认不得进入阶段2。\r\n\r\n**后果（如果跳过）：** 人物性格不一致、情节逻辑断层，返工成本远高于阶段1投入。\r\n\r\n### 2. 子结构强撑到200行\r\n\r\n**错误做法：** 叙事场景在150行已自然结束，为满足200行指标强行灌水。\r\n\r\n**正确做法：** 以自然叙事段落结束为准。字数目标按篇幅从 `meta.length` 读取（中篇 1,500-2,000，校验上浮至 2,300），write-sub 写入后自动三级校验输出 OK/WARN/INFO，在范围内即为达标，不要求精确撑满上限。一个完整的场景/对话/时间跳跃结束后立即写入文件，atomic_writer 写入后自动追加编号标记。\r\n\r\n**后果（如果强撑）：** 段落末尾出现无关描写或冗余对白，降低叙事质量。\n\nFile v1.35.4:references/changelog.md\n\n## [1.35.4] - 2026-07-09\r\n\r\n### 修复\r\n- **displayName 统一为 kebab-case**：ClawHub/SkillHub 发布的显示名与技能名一致（），废除驼峰格式\r\n\r\n## [1.35.3] - 2026-07-09\r\n## [1.35.3] - 2026-06-29\r\n\r\n### 修复\r\n- **[P0] context_loader 写作命题 fallback 导致双模板问题** — 砍掉 `_auto_generate_prompt()` 自动合成机制，改为 HARD-BLOCK。writing_prompt 缺失时不再自动从摘要+tone 合成 fallback，而是打印清晰错误+sys.exit(1)，强制从 plan-chapter 补全。同步修复 `execution_standards.md` 情绪示例缺 writing_prompt 的旧模板残留、`next-step` 输出误导性文案。\r\n- **根因**：context_loader 有 `_auto_generate_prompt()` 落点，让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成\"plan-chapter 拦、context_loader 放水\"的软硬两套标准。\r\n\r\n## [1.35.2] - 2026-06-29\r\n\r\n### 修复\r\n- **LICENSE.md copyright 修复** — git-sync 脱敏流程将 `[username-redacted]` 误替换为 `[username-redacted]`，已恢复为 `[username-redacted]`\r\n\r\n## [1.35.1] - 2026-06-29\r\n\r\n### 文档\r\n- 更新 SKILL.md 约束章和写作流程：plan-chapter 新角色硬阻断、finalize-chapter 自动完结说明\r\n- 更新模型安装章：添加 accelerate 依赖、更正模型体积、增加 GPU 安全说明\r\n\r\n## [1.35.0] - 2026-06-29\r\n\r\n### 新增\r\n- **plan-chapter 新角色检测 + HARD-BLOCK** — 注册子结构后自动扫描所有 title/summary/writing_prompt 中的 2-3 字中文名，与 characters[] 比对，发现未登记角色则阻断并提示 add-char 命令，防止角色写入时缺人物卡\r\n- **write-sub 自动触发 finalize-chapter** — 写完本章最后一个子结构后自动检测所有子结构 status=completed，自动调用完结验证（四合一必跑，五/六步有模型跑无模型跳过），不再依赖手动执行\r\n\r\n### 修复\r\n- **原子写入 + 写入后 JSON 验证** — `save_state()` 和 `_generate_behavior_summary()` 改用写 .tmp 文件 → 验证 JSON 可解析 → rename 的原子写入模式，防止 Python 崩溃遗留半截文件\r\n- **语义检查/推理审核永不联网** — 模型只在本地已缓存时才加载，用 snapshot 路径直读，零网络请求。无本地模型时直接跳过步骤 5/6 并提示安装命令。下载逻辑只发生在用户主动要求时（SKILL.md 模型安装章节）\r\n- **强制 CPU 避免与 LM Studio 冲突** — `CUDA_VISIBLE_DEVICES=-1` 在 torch/sentence_transformers 导入前设置，确保 GPU 显存完全留给 LM Studio，零冲突\r\n\r\n## [1.34.5] - 2026-06-29\r\n\r\n### 修复\r\n- **字数校验 meta.length 缺失不再跳过** — `meta.length` 是场景配置必填字段，缺失即项目初始化问题，改为 HOOK-BLOCK 并输出 set-length 命令，不允许静默跳过\r\n\r\n## [1.34.4] - 2026-06-29\r\n\r\n### 修复\r\n- **faq.md JSON 格式错误答案过时** — 改为推荐 @file.json 主方案 + --generate 辅助方案，不再教用户转义内联 JSON\r\n- **SKILL.md + execution_standards.md + examples.md 全量文档扫描对齐** — 确认所有示例与 v1.34 行为一致（writing_prompt 必填、body-only 管道、系统组装）\r\n\r\n## [1.34.3] - 2026-06-29\r\n\r\n### 修复\r\n- **finalize-chapter 增加章边界流程刷新提示** — 每章完结时输出下一章完整写作步骤列表+禁止事项，利用章边界作为 LLM 的自然重置点，打断跨章惯性\r\n\r\n## [1.34.2] - 2026-06-29\r\n\r\n### 修复\r\n- **context_loader 串行阻断增加文件系统检测** — 检测到上一个子结构文件存在但 state 为 pending 时（绕过 write-sub 管道直接写文件），输出区分化报错并给出重新管道命令\r\n- **[下一步] 写入命令增加强制警告** — 明示禁止使用 Write 工具直接写文件，必须走管道\r\n\r\n## [1.34.1] - 2026-06-29\r\n\r\n### 修复\r\n- **novel_semantic_check.py BERT 模型路径不兼容** — SENTENCE_TRANSFORMERS_HOME 指向 MODELS_DIR 但模型以 HF hub 格式存储（models--BAAI--bge-small-zh），库不认该目录结构。改为先检测 MODELS_DIR 是否含有效 HF hub 模型，有则正确指向，无则清 env var 回落默认 HF 缓存\r\n\r\n## [1.34.0] - 2026-06-29\r\n\r\n### 修复\r\n- **plan-chapter JSON 保存 + CLI 错误信息增强** — 成功注册后自动保存 JSON 副本到 data/subs_L##.json；JSON 解析失败时输出完整用法[email-redacted] 和 --generate 两条替代路径；缺参数时不再 IndexError，改为清晰错误\r\n- **--generate 模板同时写入文件** — 生成 stdout 模板的同时写入 data/subs_L##_template.json，支持 @file.json 直接加载\r\n- **next-step 推荐 @file.json** — 规划下一章时优先推荐文件加载方案，避免 CLI JSON 转义问题\r\n\r\n## [1.33.0] - 2026-06-29\r\n\r\n### 修复\r\n- **write-sub 重构为系统组装模式（v2）** — LLM 只需输出纯正文，系统自动组装标题行+别名行+末行标记。atomic_writer.v4 改为 `validate_and_write_body()` 只校验正文合法性，不再校验标题/标记格式\r\n- **atomic_writer 别名检查改为自动补** — 正文无别名行时系统自动补 `【别名】无`，不再 HOOK-BLOCK。LLM 减少一项格式负担\r\n- **context_loader 输出按优先级重排** — 字数约束/文风约束/署名约束/命题框移至头部黄金位，参考数据（人物/实体/轨迹/节奏）居中，输出模板/钩子位放尾部。删除了低价值\"情绪写作参考词\"块\r\n- **恢复 writing_prompt 输出** — 之前模板替换误删了写作命题框和叙事节奏块，已恢复\r\n- **writing_prompt 改为必填+自动补体系** — plan-chapter 强制 writing_prompt ≥50 字符，缺失即 HOOK-BLOCK；context_loader 对存量缺字段子结构自动合成 fallback 命题\r\n- **plan_chapter() 丢弃 writing_prompt** — 用户预先编写的详细写作命题（≥50字符）现在正确存储到 novel_state.json 的子结构字段中，不再被丢弃\r\n- **context_loader 缺失写作命题框** — 新增 [硬性] 写作命题框，有预编命题时直接输出，无预编时自动合成 fallback\r\n- **JSON Schema 校验加强** — plan-chapter 增加必填字段（s_key/title/summary/tone）和 summary 最低字数（12有效字符）校验，拒绝不可用输入\r\n- **context_loader 新增写作框架参考** — 结构化三段式模板（开头20%/中段60%/结尾20%）引导 LLM 保持一致的叙事节奏\r\n- **调用路径统一** — 增加 plan-chapter 的验收性校验，拒绝 dict 格式和缺字段的 JSON 输入\r\n\r\n## [1.32.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.31.0] - 2026-06-28\r\n\r\n### 修复\r\n- **文档残存旧引用清理** — SKILL.md 残留旧安装命令 (llama_cpp import)、faq.md 旧安装命令和模型描述已全部替换为 transformers 方案\r\n- **目录树对齐** — SKILL.md 缓存路径 `ds-r1-distill-qwen-1.5b-q4` -> `ds-r1-distill-qwen-1.5b`\r\n- **模型文件路径** — novel_reasoning_check.py 高亮字符修复（替换全角标点避免 SyntaxError）\r\n- **推理 JSON 解析增强** — 支持多种模型返回格式（纯数组、`{dimensions:[...]}`、`````json```` 代码块）\r\n\r\n## [1.30.0] - 2026-06-28\r\n\r\n### 变更\r\n- **推理审核引擎重构 v3.0** — 从 llama-cpp-python (GGUF) 切换为 transformers + torch，彻底解决编译依赖\r\n- **安装流程简化** — 移除所有 C++ 编译需求（winlibs/GCC/cmake），改为 pip install transformers torch（aliyun 镜像有 prebuilt wheel）\r\n- **模型下载改用逐文件** — 使用 hf_hub_download 逐文件下载，避免 snapshot_download 卡死，支持 hf-mirror 自动降级\r\n- **新增 GPU 自动检测** — `_load_model()` 自动检测 CUDA，有 GPU 用 GPU，无 GPU 回落 CPU\r\n- **模型切换** — 从 Qwythos-9B（GGUF，需 GPU）→ DeepSeek-R1-Distill-Qwen-1.5B（transformers，~1GB，CPU 可跑）\r\n- **技能文档全量更新** — SKILL.md、novel_reasoning_check.py、execution_standards.md、faq.md、hooks.md 中所有 Qwythos/GGUF/winlibs 引用替换为 transformers 方案\r\n\r\n## [1.29.0] - 2026-06-28\r\n\r\n### 修复\r\n- 中英文混排修复：timeline骨架→timeline 骨架、可选emotions→可选 emotions、sub门禁→sub 门禁、require双门禁→require 双门禁\r\n- SKILL.md 代码块补充语言标识（```bash）\r\n\r\n## [1.28.0] - 2026-06-28\r\n\r\n### 变更\r\n- R-20 输出粒度拆分：每条中英文混排、术语不一致独立 WARN，输出格式为「文件名:行号：描述」\r\n- R-23 文档引用输出携带真实行号（修复多处硬编码 :1）\r\n- R-25 C-* 子项独立输出\r\n- R-11 每条路径违规独立输出\r\n- 模型安装说明中增加 g++/cmake 独立检查流程 + winlibs 下载直链+镜像\r\n\r\n---\r\n\r\n## [1.27.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.26.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.25.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.24.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.23.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.22.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.21.6] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **版本号同步** — 重新发布修正后的 SKILL.md 和 novel_reasoning_check.py（含 g++/cmake 独立检查流程）到 ClawHub + SkillHub\r\n\r\n---\r\n\r\n## [1.21.5] - 2026-06-28\r\n\r\n### 文档\r\n\r\n- **Qwythos 安装说明重写** — SKILL.md 和 novel_reasoning_check.py 同步更新为独立检查流程：\r\n  1. 检查 g++（无则下载 winlibs 压缩包，解压到 MODELS_DIR/winlibs/，配 PATH）\r\n  2. 检查 cmake（无则 pip install cmake）\r\n  3. pip install llama-cpp-python（编译安装）\r\n  4. 下载 Qwythos GGUF 模型\r\n- winlibs 下载直链 + SourceForge 镜像均写入文档\r\n\r\n---\r\n\r\n## [1.21.4] - 2026-06-28\r\n\r\n### 更正\r\n\r\n- **v1.21.2 归因更正** — 之前 changelog 中将 ClawHub/SkillHub 发布旧内容归因为\"git-sync Bug\"，**此为错误归因**。真实原因是：操作者在 bump 时手动 sed 改了 workbuddy-skills 的版本号行但未同步内容，然后并发启动 git-sync + ClawHub + SkillHub，导致 ClawHub/SkillHub 读到旧版 SKILL.md 发布。**非 git-sync 问题，是操作者时序错误。**\r\n\r\n---\r\n\r\n## [1.21.3] - 2026-06-28\r\n\r\n### 文档\r\n\r\n- **SKILL.md 模型安装说明前置** — 触发条件新增\"安装模型/装 BERT/装 Qwythos\"正向触发词；检查系统章节下方直接嵌入 pip install + 模型下载命令，LLM 不再需要跳转 faq.md 查找\r\n\r\n---\r\n\r\n## [1.21.2] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **操作时序错误导致 ClawHub/SkillHub 内容错位** — bump 1.21.1 时先手动 sed 改了 workbuddy-skills 的版本号行，然后同时启动 git-sync + ClawHub + SkillHub，导致 ClawHub/SkillHub 读到的是半路改过 version 但内容未同步的旧 SKILL.md。已修正并重新发布 1.21.2\r\n\r\n---\r\n\r\n## [1.21.1] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **SKILL.md 碎片/乱码修复** — 约束行\"门禁状态存于 ， 查看\"改为完整命令；渐进式文件索引表 execution_standards 描述从\"/ 层级 / 上限 / 说明 /\"改为正常内容\r\n- **SKILL.md 新增「检查系统」章节** — 6步检查器表格（脚本/作用/阻断等级），LLM 不需跳转 references 即可理解最终检查流程，196行满足 ≤230行审计要求\r\n\r\n---\r\n\r\n## [1.21.0] - 2026-06-28\r\n\r\n### ✨ 新增功能\r\n\r\n- **BERT 语义检查引擎** — `novel_semantic_check.py`，基于 bge-small-zh-v1.5（33MB），实现 overview-vs-content 语义对齐检测和子结构间语义跳跃检测，集成到 finalize-chapter 第5步\r\n- **Qwythos 推理审核引擎** — `novel_reasoning_check.py`，基于 Qwythos-9B GGUF Q4_K_M（~5.5GB，需 GPU），实现因果合理性/人物行为一致性/情绪弧/对话匹配度/论证可靠性五项推理审核，集成到 finalize-chapter 第6步\r\n- **路径统一管理** — `_path_utils.py` 新增 `MODELS_DIR`，所有模型缓存集中到 `models/` 目录，与 huggingface 全局缓存隔离\r\n- **文档全面同步** — SKILL.md、execution_standards.md、hooks.md、faq.md 同步更新：检查链从4步扩展为6步、新增别名系统/实体关系追踪/行为摘要章节\r\n\r\n### 修复\r\n\r\n- **SKILL.md 消除重复段** — 删除第160-174行与第136-157行完全重复的能力表和不支持列表\r\n\r\n---\r\n\r\n## [1.20.5] - 2026-06-27\r\n\r\n### ✨ 新增功能\r\n\r\n- **项目初始化优化**：完整角色表支持（含 MBTI/原型/功能定位）、文风系统字段、实体关系追踪器数据层\r\n- **子结构 emotion 增强**：多维度情绪混合配置，强度分级输出 + 混合解读公式\r\n\r\n---\r\n\r\n## [1.20.4] - 2026-06-27\r\n\r\n### 新增\r\n- **[atomic_writer] 别名声明阻断钩子** — 每个子结构正文末尾必须声明别名：`【别名】老陈 = 陈叔` 或 `【别名】无`。缺失则 HOOK-BLOCK 阻断写入（S01 豁免）。\r\n- **[context_loader] 别名声明指令** — 输出末尾追加硬性别名声明框，LLM 每次写作前看到强制要求\r\n- **[state_manager] register-alias 命令** — 新增 `register-alias` CLI，atomic_writer 拦截别名行后自动调此命令注册\r\n- **[entity_extractor] 删除别名启发式** — 回退到纯机械操作，别名识别完全由 LLM 语义 + atomic_writer 钩子完成\r\n\r\n### 流程\r\n- write-sub 管道: atomic_writer(含别名钩子) → state_manager → 字数校验 → entity_extractor\r\n- 别名声明行被 atomic_writer 拦截，不写入 .txt 文件，直接走 state_manager 注册\r\n- S01 豁免（尚无角色可产生别名），S02+ 强制声明\r\n\r\n---\r\n\r\n## [1.20.3] - 2026-06-27\r\n\r\n### 新增\r\n- **[entity_extractor] 自动别名识别** — 同一个子结构（~2000字）内，未知候选名与已知角色名共现且共享至少一个汉字时，自动识别为别名并写入 character.aliases。无需提前注册，零假阳性风险（同子结构+共享字符=同一人）\r\n\r\n### 原理\r\n\"陈叔！你怎么来了？\"老陈此时正在街角看着我。\r\n→ \"陈叔\"与\"老陈\"共享\"陈\"字，同子结构内共现 → 自动识别为别名\r\n\r\n---\r\n\r\n## [1.20.2] - 2026-06-27\r\n\r\n### 新增\r\n- **[角色别名系统]** — `add-char` 新增第10参数 `aliases`（逗号分隔），角色注册时可指定别名（如\"陈叔\"）\r\n- **[entity_extractor] 别名识别** — 已知角色的别名不再被创建为新实体，别名在正文中出现时正确更新该实体的 last_chapter\r\n- **[context_loader] 别名显示** — 已出场关键人物区块中别名以 `[别名: 陈叔]` 形式显示\r\n- **[IMMUTABLE_SCOPE] 别名保护** — `aliases` 字段列入指纹保护范围\r\n\r\n### 解决场景\r\n- 叙事用\"老陈\"、对话用\"陈叔\"——alias 注册后视为同一实体，LLM 看到别名提示即知为同一个人\r\n\r\n---\r\n\r\n## [1.20.1] - 2026-06-27\r\n\r\n### 新增\r\n- **[behavior_summary] 跨章行为摘要系统** — novel_state.json 每章新增 `behavior_summary` 字段，记录各角色的关键行为轨迹\r\n- **[finalize-chapter] 行为摘要自动提取** — 完结检查通过后自动从子结构正文提取角色行为，去重后写入 state（每角色最多 5 条）\r\n- **[context_loader] 上一章行为轨迹注入** — 在实体关系网之后追加「上一章行为轨迹」区块，LLM 看到角色刚做了什么，续写自然一致\r\n\r\n### 架构\r\n- finalize-chapter 成功路径末尾追加行为摘要提取\r\n- context_loader 输出顺序: 关键人物 → 实体关系网 → 行为轨迹(新增) → 情绪参考\r\n- 行为摘要是纯运行时数据，不受指纹保护\r\n\r\n---\r\n\r\n## [1.20.0] - 2026-06-27\r\n\r\n### 新增\r\n- **[entity_tracker] 实体关系追踪系统** — novel_state.json 新增 `entity_tracker` 数据层，追踪角色/物品/地点/组织/数据五类实体的属性和相互关系\r\n- **[entity_extractor] 自动实体提取** — 新脚本 `novel_entity_extractor.py`，write-sub 第4步非阻断执行，从每子结构内容中自动提取实体-关系三元组、检测状态更新\r\n- **[context_loader] 实体关系网注入** — 「已出场关键人物」区块后追加「实体关系网」区块，全量累加输出实体列表和关系，LLM 写作时看到累计事实\r\n- **[logic_check] 实体状态一致性检查** — 检查已标记降级状态的实体（destroyed/damaged/dead 等）是否在后续章节无恢复地被使用，HARD 级警告\r\n- **[logic_check] 实体关系链检查** — 检查同时出现的两个实体间已创建的关系是否被忽略，SOFT 级提示\r\n- **[state_manager] 兼容 entity_tracker** — _merge_runtime_fields 保留 entity_tracker，init_project 初始化为空列表\r\n\r\n### 架构\r\n- write-sub 管道: atomic_writer → state_manager → 字数校验 → entity_extractor(新增)\r\n- context_loader 输出: 关键人物 → 实体关系网(新增) → 情绪参考\r\n- finalize-chapter 逻辑检查: 5项(新增2项: 实体状态+关系链)\r\n\r\n---\r\n\r\n## [1.19.11] - 2026-06-27\r\n\r\n### 修复\r\n- **[context_loader] 跨章串行阻断** — 首次加载某章第一个子结构时，检查上一章是否所有子结构已完成。未完成则 HOOK-BLOCK\r\n- **[context_loader] 关键人物 function 缺失阻断** — 从软提示改为 HOOK-BLOCK，角色有 first_appearance 但无 function 时阻断写作\r\n- **[state_manager] add-char function 阻断** — 注册角色时若有 first_appearance 但无 function，直接阻断，规划阶段即强制填写\r\n\r\n---\r\n\r\n## [1.19.10] - 2026-06-27\r\n\r\n### 新增\r\n- **[atomic_writer] 标点缺失校验** — 软性提示（不阻断），检测正文中超过80字无任何标点的片段，输出 [PUNCT] 建议补充断句标点\r\n\r\n---\r\n\r\n## [1.19.9] - 2026-06-27\r\n\r\n### 修复\r\n- **[context_loader] 关键人物输出改为全量累加** — 不再按章节过滤，所有有 `first_appearance` 的角色每子结构全量输出。L03 也能看到老贾卖格斗术的定位，杜绝\"当前章节看不到上一章角色\"的问题\r\n\r\n---\r\n\r\n## [1.19.8] - 2026-06-27\r\n\r\n### 新增\r\n- **[context_loader] 已出场关键人物注入** — 所有有 `first_appearance` 的角色登场即累加，每子结构全量输出已出场角色及其 `function`（职责/定位）。不限章节，杜绝遗漏\r\n- **[state_manager] add-char 支持 function 字段** — 角色注册时可通过第9参数填写功能定位，写入 IMMUTABLE_SCOPE 保护\r\n\r\n### 修复\r\n- 版本跳号：1.19.7 代码已改但 git-sync 跳过推送，强制 bump 至 1.19.8 重新推送\r\n\r\n---\r\n\r\n## [1.19.7] - 2026-06-27\r\n\r\n### 新增\r\n- **[context_loader] 已出场关键人物注入** — 根据 `characters[].first_appearance` 过滤，每子结构输出当前章节前已登场的角色及其 `function`（职责/定位）。LLM 看到\"老贾卖格斗术给主角\"就不会编成\"父亲遗物\"\r\n- **[state_manager] add-char 支持 function 字段** — 角色注册时可通过第9参数填写功能定位，写入 IMMUTABLE_SCOPE 保护\r\n\r\n### 修复\r\n- **[赛博搏杀记] 角色 function 字段补齐** — 林铁生、林铁心、归元会散人等已补充 function 描述\r\n\r\n---\r\n\r\n## [1.19.6] - 2026-06-27\r\n\r\n### 新增\r\n- **[novel_workflow_engine.py] 更新/扩写提醒** — write-sub 检测到子结构已为 completed 时，标记为更新模式，输出提醒要求更新后运行 finalize-chapter\r\n- **[SKILL.md] 更新/扩写流程约束** — 新增\"[强制] 更新/扩写逐子结构串行\"，禁止批量更新\r\n- **[hooks.md] 更新/扩写提醒钩子** — 新增钩子条目\r\n\r\n---\r\n\r\n## [1.19.5] - 2026-06-26\r\n\r\n### 新增\r\n- **[plan_chapter] 字数目标写入子结构规划** — `word_count_target: {min, max, check_max}` 自动根据 `meta.length` 注入每个子结构。LLM 读 `novel_state.json` 即可看到字数要求，无需翻技能文档\r\n- **[context_loader] 字数约束从子结构读取** — 不再硬编码 SUB_WORD_TARGETS，改为读 `sub_structures[].word_count_target`\r\n- **[write-sub] 字数校验从子结构读取** — 同上，三处同源\r\n\r\n### 修复\r\n- **[赛博搏杀记] L01/L02/L03 注入 word_count_target** — 通过 plan-chapter 重注册，所有子结构持有字数目标\r\n\r\n---\r\n\r\n## [1.19.3] - 2026-06-26\r\n\r\n### 修复\r\n- **[SKILL.md] 文档脱钩全量修复** — 约束新增串行阻断条目；工作流程步骤10/11更新为字数约束+串行阻断+write-sub 三级校验；核心能力表格更新为 write-sub 管道描述；hooks.md 新增串行阻断/字数约束注入钩子条目\r\n- **[references/*.md] 全量扫描修复** — execution_standards.md 阻断规则新增串行阻断+字数校验；faq.md 新增\"上一子结构未完成\"和\"字数校验解读\"FAQ；examples.md 更新 context_loader/write-sub 输出示例；antipatterns.md 引用三级字数校验\r\n\r\n---\r\n\r\n## [1.19.2] - 2026-06-26\r\n\r\n### 修复\r\n- **[SKILL.md] 新会话指引缺失** — 约束首条新增\"[强制] 新会话第一步：查看项目\"，数据目录节明确禁止手工拼写路径并列出 list-projects CLI 命令，LLM 不再猜路径\r\n\r\n---\r\n\r\n## [1.19.1] - 2026-06-26\r\n\r\n### 新增\r\n- **[novel_context_loader.py] 串行阻断钩子** — 加载子结构上下文时检测上一子结构 state 是否为 completed，若为 pending 则 HOOK-BLOCK 并输出 write-sub 修复命令，强制 LLM 走管道完成标记后才能继续。子结构串行写作流程由代码级硬约束保障，不再依赖 LLM 自觉\r\n\r\n---\r\n\r\n## [1.19.0] - 2026-06-26\r\n\r\n### 新增\r\n- **[novel_context_loader.py] 字数约束注入上下文** — 根据 `meta.length` 在写作前输出篇幅对应的字数范围 + 校验上浮值，LLM 不再盲写，禁止自行配置\r\n- **[novel_workflow_engine.py] 字数校验统一标准** — write-sub 检查使用与 context_loader 相同的字数目标 + 15% 上浮窗口（中篇 1,500-2,300 范围内通过），低于下限 WARN、超上浮 INFO、范围内 OK\r\n- **[execution_standards.md] 三阶段统一标准文档** — 明确字数目标在规划/写作/检查三阶段使用同一套标准，禁止 AI 自行配置\r\n\r\n### 修复\r\n- **[novel_context_loader.py] 情绪格式向后兼容** — 兼容遗留的字符串数组情绪格式（如 `[\"疑惑\",\"不安\"]`），避免 AttributeError\r\n- **[novel_context_loader.py] GBK 终端 emoji 编码崩溃** — 所有 emoji 替换为 `[硬性]`/`[参考]`/`[下一步]` 文本标记\r\n\r\n---\r\n\r\n## [1.18.2] - 2026-06-26\r\n\r\n### 修复\r\n- 修复_extract_keywords 和 fidelity_check 的 CJK 关键词提取: {2,10}整段匹配→2-4字滑动窗口,避免过长短语匹配失败\r\n\r\n---\r\n\r\n## [1.18.1] - 2026-06-26\r\n\r\n### 修复\r\n- 补写1.18.0 changelog 条目,R-11/R-12/C-07/C-16/C-18手动修复,changelog 条目补全\r\n\r\n---\r\n\r\n## [1.18.0] - 2026-06-26\r\n\r\n### Fixed\r\n- R-11: 删除 SKILL.md 中硬编码的绝对路径示例\r\n- R-12: novel_state_manager.py 添加 DATA_DIR 导入,替换局域路径计算\r\n- C-07: 补充代码块语言标识(```→```text)\r\n- C-16: execution_standards.md 过期行数阈值200→230\r\n- C-18: SKILL.md 补充环境依赖说明(Python3.8+/离线/UTF-8)\r\n\r\n### Changed\r\n- 全流程 refactor 改造: 路径集中管理审计整合\r\n\r\n---\r\n\r\n## [1.17.2] - 2026-06-26\r\n\r\n### 修复\r\n- 指纹保护修复: plan-chapter 成功后更新.state_fingerprint.txt, 使后续章节规划不被误阻断\r\n\r\n---\r\n\r\n## [1.17.1] - 2026-06-26\r\n\r\n### 修复\r\n- 路径统一管理: novel_workflow_engine.py 改从_path_utils.py 导入 DATA_DIR,消除路径重复计算\r\n\r\n---\r\n\r\n## [1.17.0] - 2026-06-26\r\n\r\n### 修复\r\n- plan-chapter 新增文件加载(@/路径), 避免 Shell 转义破坏 JSON\r\n\r\n---\r\n\r\n## [1.16.4] - 2026-06-25\r\n\r\n### 修复\r\n- 4核心脚本加 stdout 编码修复(sys.stdout.reconfigure utf-8), 解决 Git Bash 中文乱码\r\n\r\n---\r\n\r\n## [1.16.3] - 2026-06-25\r\n\r\n### 修复\r\n- novel_continuity.py check 自动推导 chapter_dir 从 state_path, 修复 LLM 路径错误\r\n\r\n---\r\n\r\n## [1.16.2] - 2026-06-25\r\n\r\n### 修复\r\n- 原始 SKILL.md 补充 slug/displayName 前导字段(修复 git-sync 冲掉问题)\r\n\r\n---\r\n\r\n## [1.16.1] - 2026-06-25\r\n\r\n### 修复\r\n- 数据目录章节改为代码示例驱动, LLM 禁止手写路径, 提供_path_utils.py 调用代码\r\n\r\n---\r\n\r\n## [1.16.0] - 2026-06-25\r\n\r\n### 修复\r\n- SKILL.md data_dir 修正(data->projects), 新增数据目录章节指引 LLM 路径\r\n\r\n---\r\n\r\n## [1.15.1] - 2026-06-25\r\n\r\n### 修复\r\n- 标准化改造:_meta.json 路径修正/examples.md 路径修正/术语统一/约束9to8/路径 bug 修复\r\n\r\n---\r\n\r\n## [1.15.0] - 2026-06-25\r\n\r\n### 新增\r\n- **[novel_state_manager.py] 核心规划字段保护** — 新增 `_fingerprint()` 指纹校验，首次 plan-chapter 后锁定以下字段：章节 title/overview、子结构 title/summary/tone、角色 name/role/traits/mbti/archetype、novel_info/writing_style/setting。任何非法更新被阻断并打印来源。运行时字段（word_count, status, timeline, continuity_notes）不受影响\r\n- **[novel_workflow_engine.py] plan-chapter --generate 模式** — `python novel_workflow_engine.py plan-chapter <state> <L##> --generate` 输出子结构 JSON 模板供 LLM 填写\r\n- **[novel_workflow_engine.py] 字数代码级校验** — write-sub 写入后根据篇幅(short/medium/long)检查每子结构字数是否达到下限，低于目标打印 WARN\r\n- **[novel_workflow_engine.py] list-projects 集成** — 新增 `list-projects` 命令，列出所有项目名称/路径/阶段/章节进度\r\n- **[_path_utils.py] 中文路径编码修复** — 新增路径解析模块，通过.resolve() + .project 缓存机制，后续命令无需反复传路径\r\n\r\n### 修复\r\n- **[novel_logic_check.py] 概述匹配度不再 HARD 阻断** — 概述为写作前规划的基准文件，一旦确认不可更改。内容与概述的偏离仅做信息性标记(SOFT)，不阻塞 finalize-chapter\r\n\r\n## [1.14.0] - 2026-06-25\r\n\r\n### 修复\r\n- **[novel_logic_check.py] 关键词匹配算法改用 bigram 重叠率** — 旧算法将概述按标点切段后要求整段逐字出现在正文，导致语义概述永远无法通过 HARD 检查。改用`2字滑动窗口(bigram)重叠率`匹配，语义自然概述即可正常通行。阈值：WARN=<20%, INFO=<40%\r\n- **[novel_logic_check.py] 概述匹配度不再 HARD 阻断** — 概述为写作前规划的基准文件，一旦确认不可更改。内容与概述的偏离仅做信息性标记(SOFT)，不阻塞 finalize-chapter。偏差信息写入 reports 供参考\r\n- **[novel_causality_check.py] 检查通过后自动 pass 门禁** — outline/sub-structure 检查全部通过后自动调用`pass_gate()`，消除手动 pass_outline_causality/sub_causality 门禁的步骤\r\n- **[novel_pipeline_gate.py] set-phase writing 增加 sub_causality 检查** — 转换到 writing 阶段时除了 require outline_causality，现在也 require sub_causality\r\n- **[novel_context_loader.py] 末尾输出 write-sub 命令** — 每个子结构上下文加载后，自动输出下步应执行的完整`write-sub`管道命令\r\n\r\n## [1.13.6] - 2026-06-25\r\n\r\n### 修复\r\n- **[novel_workflow_engine.py] DATA_DIR 路径错误** — `SKILLS_ROOT.parent / \".standardization\" / \"novel-weaver\" / \"projects\"` 多了一层 `.parent`，导致路径跳到 `.workbuddy/.standardization/` 而非 `skills/.standardization/`，造成：\r\n  - 帮助信息显示的默认 state 路径指向错误目录\r\n  - next_step 中 HARD 残留检查的 `DATA_CHAPTERS` 路径同样失效\r\n  - 修正为 `SKILLS_ROOT / \".standardization\" / \"novel-weaver\" / \"projects\"` ✅\r\n- **[novel_workflow_engine.py] next_step 函数定义在 __main__ 块之后** — 导致 `next-step` 命令 NameError: name 'next_step' is not defined。函数定义已移至 `__main__` 之前。\r\n\r\n---\r\n\r\n## [1.13.5] - 2026-06-25\r\n\r\n### 修复\r\n- **Bug 1: overview keyword 匹配对中文失效** — `novel_logic_check.py:213` 使用 `.split()` 对中文文本分词，无空格时整个概述变成一个 keyword 导致永久假阴性。改用 `re.split()` 按标点和空白分词\r\n- **Bug 2: 角色重叠检测被贪婪匹配吃掉短词** — `novel_continuity.py:39` 使用 `{2,4}` 贪婪匹配，\"铁心说得对\"吐出`铁心说得`，\"铁心说我有\"吐出`铁心说我`，交集为空。改用双字滑动窗口 `char_bigrams()`\r\n- **Bug 3: tone 硬编码判定改为纯数据参考** — `novel_logic_check.py` tone 检查不再 append issues（不参与阻断），仅 print 命中数 + 语速分析；`novel_context_loader.py` 新增\"情绪写作参考\"模块，写前给出场景词引导\r\n\r\n---\r\n\r\n## [1.13.4] - 2026-06-25\r\n\r\n### 新增\r\n- **执行规范字数参考表** — `execution_standards.md` 新增按篇幅（短篇/中篇/长篇）的每章/每子结构字数参考标准，确保规划时字数可控\r\n\r\n### 修复\r\n- **字数规划缺失** — 之前仅有行数上限（200行/子结构）无字数指导，导致规划阶段字数偏差不可控\r\n\r\n---\r\n\r\n## [1.13.3] - 2026-06-25\r\n\r\n### 修复\r\n- **`init` 自动项目目录** — `init <项目名>` 自动创建在 `.standardization/novel-weaver/projects/<项目名>/data/novel_state.json`，各项目完全隔离\r\n- **`list-projects` 扫描路径修复** — 扫描 `.standardization/novel-weaver/projects/` 下所有项目子目录\r\n- **workflow_engine 路径推导修复** — `_chapters_dir`/`_report_dir` 从 `state_path` 自动推导每个项目的 chapters/reports 路径\r\n- **清除旧版扁平目录** — 删除 `skills/.standardization/novel-weaver/data/` 下的过期文件（已迁移到 `projects/`）\r\n\r\n### 新增\r\n- **`init` 支持自动/手动双模式** — 传项目名自动建子目录，传完整路径精确控制\r\n\r\n---\r\n\r\n## [1.13.2] - 2026-06-25\r\n\r\n### 文档同步\r\n- SKILL.md: \"16 个流程钩子\"→\"全量流程钩子\"（避免计数过时）；state_manager.py 描述补全 init/set-length/list-projects\r\n- execution_standards.md: style_guide→writing_style（2处）；current_phase→meta.current_phase；\"自动推进 phase\"→\"需手动推进\"；finalize-chapter 签名修正\r\n- examples.md: 场景1加 init 步骤；next-step 输出加篇幅行；补 list-projects 场景5\r\n\r\n---\r\n\r\n## [1.13.1] - 2026-06-25\r\n\r\n### 新增\r\n- **`list-projects` 命令** — `novel_state_manager.py list-projects` 扫描标准化数据目录，列出所有已创建的项目（名称/路径/篇幅/阶段/章节进度）\r\n\r\n---\r\n\r\n## [1.13.0] - 2026-06-25\r\n\r\n### 新增\r\n- **篇幅系统（规划前置参数）** — `novel_state.json` 新增 `meta.length` 字段，分三档：\r\n  - `short`: 短篇 3-6 章\r\n  - `medium`: 中篇 8-10 章（默认）\r\n  - `long`: 长篇 11+ 章\r\n- **`init` 命令篇幅支持** — `init <name> [length] [num]`，不传 length 则默认 medium，按篇幅自动计算默认章数（取范围中值）\r\n- **`set-length` 命令** — 中途更新篇幅：`novel_state_manager.py set-length <path> short|medium|long`\r\n- **`next_step` 篇幅检查** — 输出篇幅信息 + 当前章数是否在范围内（不阻断，仅提示）\r\n\r\n### 架构\r\n- 所有旧项目（无 `meta.length` 字段）→ `next_step` 在 writing 阶段后提示配置篇幅\r\n- 不改变子结构规划/写作/完结流程\r\n\r\n---\r\n\r\n## [1.12.6] - 2026-06-25\r\n\r\n### 新增\r\n- **`init` 命令** — `novel_state_manager.py init <state_path> <项目名> [章数]` 创建完整的 `novel_state.json` 骨架（含 chapters、writing_style、signature、timeline 等所有标准字段），禁止重复初始化。LLM 不再需要手动写 JSON。\r\n- **plan-chapter 输入校验** — subs_json 格式错误时给出明确阻断信息（非法 JSON/类型错误/缺少字段），不再静默崩溃。\r\n\r\n### 修复\r\n- **`_parse_ending_tag` 函数重复定义** — 两段完全相同的函数体首尾相接，第二个覆盖第一个但无影响。已删除重复。\r\n\r\n---\r\n\r\n## [1.12.5] - 2026-06-25\r\n\r\n### 修复\r\n- **逻辑检查异常改为 HARD 阻断** — 原 `finalize_chapter` 中 `except Exception: print(\"跳过\")` 会静默吞掉逻辑检查失败，章节继续推进。改为追加 HARD 问题，正常阻断+写入修复指引。\r\n- **logic_check.py timeline.list.get() 崩溃** — `_check_timeline_logic` 中 `timeline.get(\"current_day\")` 在 timeline 为 list 时报 `AttributeError`，改为 `if isinstance(dict):` 安全访问。\r\n\r\n---\r\n\r\n## [1.12.4] - 2026-06-25\r\n\r\n### 修复\r\n- **BOM 兼容** — 全部 12 个 `.py` 脚本中 `json.loads(read_text(encoding=\"utf-8\"))` 改为 `encoding=\"utf-8-sig\"`。PowerShell 写入 JSON 文件时默认带 BOM 头，Python utf-8 不识别导致解析失败。`utf-8-sig` 自动剥离 BOM，无 BOM 时行为与 utf-8 一致。\r\n\r\n---\r\n\r\n## [1.12.3] - 2026-06-25\r\n\r\n### 文档同步\r\n- **hooks.md 重写** — 修正 4 处 WRONG：因果链模式名 `chapter-outline`→`outline`；删除不存在的 `init` 命令引用；连通性命令 `generate --auto-fix`→`check`/`cross-chapter` 两个子命令；门禁表 `chapter_finalized` 不被 set-phase require 的实际情况\r\n- **faq.md 重写** — 修正 3 处 WRONG：`resume`→`next-step`；`init`→无此命令；`progress`→无此命令\r\n- **execution_standards.md** — `preview-writing-context`→`preview`；`style_guide`→`writing_style`\r\n- **SKILL.md** — 删除末尾残留的旧版阶段3重复节；plan-chapter 概述校验归属修正\r\n- **antipatterns.md** — \"末尾加上 L##S##\"→\"自动追加\"\r\n- **examples.md** — context_loader 断点续写描述修正；path 占位符统一\r\n\r\n---\r\n\r\n## [1.12.2] - 2026-06-25\r\n\r\n### 修复\r\n- **DATA_DIR 路径计算错误** — `SKILLS_ROOT / \".standardization\" / \"novel-weaver\" / \"data\"` 多了一层（`skills/novel-weaver/.standardization/...`），`_meta.json` data_dir 声明是 `skills/.standardization/novel-weaver/data/`（相对于 `skills/` 根）。改为 `SKILLS_ROOT.parent / ...`，与声明完全一致。\r\n- **数据迁移** — 将现有的 `novel_state.json` 从错误路径 `skills/novel-weaver/data/` 迁移到正确路径 `skills/.standardization/novel-weaver/data/`\r\n\r\n---\r\n\r\n## [1.12.1] - 2026-06-25\r\n\r\n### 修复\r\n- **路径系统统一** — 删除 `workflow_engine.py` 内部的 `DATA_STATE`/`DATA_CHAPTERS`/`DATA_REPORTS` 默认路径（指向 `.standardization/` 内部目录），改为从 `state_path` 入参自动推导：`<project>/data/novel_state.json` → chapters=父目录的父目录/chapters、reports=父目录/reports\r\n- **CLI 强制 state_path** — 不再提供默认值，缺失则报错退出。避免 LLM 无意识走错目录\r\n- **所有命令统一使用 `<project>/data/novel_state.json` 作为 state_path**，examples.md 同步更新\r\n\r\n---\r\n\r\n## [1.12.0] - 2026-06-25\r\n\r\n### 新增\r\n- **next-step 导航命令** — `novel_workflow_engine.py next-step <path>` 分析 state + 门禁状态，输出当前进度和下一步应执行的精确命令\r\n- **CLI help 中文说明** — workflow_engine.py 帮助信息全部中文 + 命令功能简述 + 快速开始提示\r\n\r\n### 文档\r\n- **references/examples.md 完全重写** — 覆盖从零开始、续写、中断恢复、署名配置 4 个场景；所有 CLI 命令更新为当前真实接口；补充 `next-step` 入口说明\r\n- **SKILL.md 工作流程章节重写** — 每步附带精确 CLI 命令；引入 `next-step` 作为流程核心入口；删除过时描述（`resume`/`atomic_writer tail` 等）\r\n\r\n---\r\n\r\n## [1.11.0] - 2026-06-25\r\n\r\n### 新增\r\n- **署名管控系统（代码级硬阻断）** — `novel_state.json` 新增 `signature` 配置（`enabled: bool`, `text: str`），默认关闭\r\n- **atomic_writer 钩子4: 署名/代名检测** — signature.enabled=false 时，检测正文中\"由...撰写/创作\"等 8 种署名模式，命中即阻断并提示开启签名命令\r\n- **签名开启后文本校验** — 只允许与 `signature.text` 完全一致的署名行，自行编造同样阻断\r\n- **context_loader 输出署名约束** — 每个子结构写作前输出当前签名状态（开/关+文本）\r\n- **state_manager set-signature 命令** — 支持 `python novel_state_manager.py set-signature <path> true/false [text]`\r\n\r\n### 架构\r\n- 旧项目（无 signature 字段）→ atomic_writer 收到 `signature=None` → 跳过检测，完全向后兼容\r\n- LLM 无法通过自觉绕过：阻断在 fsync 之前的代码层，未命中签名模式的普通内容不影响\r\n\r\n---\r\n\r\n## [1.10.0] - 2026-06-25\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.9.0] - 2026-06-25\r\n\r\n### 架构升级 — 质量闭环（硬钩子 + 修复指引 + 自动阻断）\r\n\r\n- **finalize-chapter 改为循环阻断** — 不再是线性流水线（跑完就过），改为聚合所有硬性问题后阻断，不通过则不做门禁标记，不推进 phase\r\n- **检查器统一返回结构化结果** — `check_continuity`/`cross_chapter`/`style_check`/`logic_check` 均返回 `[{\"file\", \"problem\", \"position\", \"severity\": \"HARD\"|\"SOFT\", \"suggestion\"}]` 格式\r\n- **HARD 阻断条件**：\r\n  - 章内连通性：时间词+角色名双重断裂 → HARD\r\n  - 风格校验：禁用词/末行错/超200行 → HARD\r\n  - 逻辑检查：概述关键词命中率<30% → HARD\r\n- **修复指引** — 每个 HARD 问题附带修复方向建议（非硬编码处方，保持文风自由），写入 `_fixes.json`\r\n- **软性问题** — 仍不阻断，随报告输出提示\r\n\r\n---\r\n\r\n## [1.8.3] - 2026-06-25\r\n\r\n### 新增\r\n- **钩子位建议系统** — plan_chapter 自动检测非末章末子结构，标记 `is_hook_possible: True`。context_loader 在对应子结构输出建议框（悬念/伏笔/承诺三选一 + 下章标题预览），不阻断，仅辅助 LLM 决策。\r\n- **文档** — references/execution_standards.md 补充钩子位描述\r\n\r\n---\r\n\r\n## [1.8.2] - 2026-06-24\r\n\r\n### 修复\r\n- **[P0] pipeline_gate.py pass 命令挂错函数** — `pass` CLI 调用了 `require_gate()` 而非 `pass_gate()`，导致门禁标记失败。更新为 `pass_gate()`。\r\n- **[P0] plan_chapter 毁灭式写入** — `ch[\"sub_structures\"][s_key] = entry` 覆盖已有 word_count/status。改用合并模式保留已有字段。\r\n- **[P0] fidelity.py generate_report 重复定义** — 第二个定义读不存在的 `outline.json`，覆盖第一个。已统一为从 `novel_state.json` 读取。\r\n- **[P1] logic_check.py chapters/timeline 数据结构不匹配** — chapters 预期 dict 实际 list，timeline 预期 dict 实际 list。已改为兼容访问。\r\n- **[P1] fidelity.py os.system 调用** — 改用 `subprocess.run()` 替代 `os.system()`，修复 shell 注入风险。\r\n- **finalize_chapter 绕过 pass_gate API** — 直接操作 gates dict，改为调用 `pass_gate()`。\r\n- **finalize_chapter 缺少逻辑检查** — 三检只跑了连通性和风格，未调用 logic_check。已补上。\r\n- **set_phase 不做门禁检查** — →writing 不检查 outline_causality，→stage3_ready 不检查 fidelity/ending_verify。已补上门禁检查。\r\n- **LICENSE.md 内容不完整** — 只写了一行 `MIT License`，已补全完整许可证文本。copyright 更新为 [username-redacted]。\r\n\r\n### 文档\r\n- SKILL.md 渐进式文件索引表修正：execution_standards/hooks/license/causality_check/fidelity/character_registry 描述与实际对齐\r\n- SKILL.md CLI 示例修正：verify-causality-* 命令从 workflow_engine 更正为 causality_check\r\n- 约束描述中的 `verify-causality-sub` 更正为 `novel_causality_check.py sub-structure`\r\n\r\n---\r\n\r\n## [1.8.1] - 2026-06-24\r\n\r\n### 新增\r\n- **人格系统** — characters 增加 `mbti`（16 类型）和 `archetype`（荣格 12 原型）双轴，驱动角色思维方式与叙事功能。`novel_state_manager.py add-char` 支持第 7/8 位置参数\r\n- **情绪混合系统** — sub_structures 增加 `emotions` 数组（`[{\"type\":\"愤怒\",\"intensity\":0.8}]`），支持主副情绪分级混合。context_loader 输出 `标签[数值/1]` 格式 + 混合解读（如\"悲愤交加：愤怒源于深层悲伤\"）\r\n- **文风槽位** — novel_state.json 顶层新增 `writing_style` 对象（6 字段：叙事视角/时态/句式/词汇/描写深度/自定义规则），每个子结构写作前通过 context_loader 硬约束重复输出\r\n- **人格约束段** — context_loader 自动扫描本章涉及角色，输出 MBTI + 原型，硬性要求 LLM 按人格一致写作\r\n- **情绪映射表** — 数值 0.0-1.0 自动映射为 5 级标签（微弱/轻度/中等/强烈/极致），可计算混合度/冲突指数/情绪演化曲线\r\n- **文档** — references/execution_standards.md 新增角色人格系统/情绪混合系统/文风系统三章\r\n\r\n### 架构\r\n- 所有新字段可选，向后兼容旧数据（仅有 `tone` → 旧格式，有 `emotions` → 新格式）\r\n- 情绪混合解读基于 9 组预定义映射 + 动态推导\r\n\r\n---\r\n\r\n## [1.7.0] - 2026-06-24\r\n\r\n### 新增\r\n- **结尾收束验证系统** — 末章末子结构自动标记 `is_ending` + 解析 `ending_type`（封闭式/开放式/悬停式）\r\n- **收尾命题框** — `novel_context_loader.py` 检测 `is_ending` 时按类型注入硬约束命题框（冲突落点/主角弧/主题回扣/动作收束等）\r\n- **三类收尾检查器** — `novel_fidelity.py verify_ending()` 覆盖：\r\n  - 封闭式：冲突落点/主角变化/主题回扣/末句动作（4项全过）\r\n  - 开放式：冲突结果[硬]/留白意图[软]/情绪收束[软]/禁逃[硬]（2硬全过+2软至少1过）\r\n  - 悬停式：悬念存在/位置合理/主角成长/情绪锚定/节奏检测/禁逃（6项全过，不支持自动修复→人工）\r\n- **ending_verify 门禁** — `novel_pipeline_gate.py` GATES 追加 `ending_verify`，`finalize-novel` 中与 fidelity 双门禁阻断\r\n- **验证报告** — 写入 `data/ending_report.md`，CLI 支持 `novel_fidelity.py verify-ending <project_dir>`\r\n- **文档** — `references/execution_standards.md` 结尾收束规范升级至 v2（收尾类型标签/命题约束/验证流程/通用规范）\r\n\r\n### 架构\r\n- 验证仅读末子结构内容 + project 配置，不通读全文（大纲驱动，fidelity 子集）\r\n- 收尾类型从 LLM 生成的大纲概述中的 `【收尾类型: xxx】` 标签自动解析，零耦合\r\n\r\n---\r\n\r\n## [1.6.1] - 2026-06-24\r\n\r\n### 修复\r\n- changelog: 重写 v1.5.0/v1.6.0 描述，含 DATA_DIR 方案B落地详情\r\n\r\n---\r\n\r\n## [1.6.0] - 2026-06-24\r\n\r\n### 修复\r\n- **R-12 数据目录方案B落地** — `novel_workflow_engine.py` 新增 `DATA_DIR`/`DATA_STATE`/`DATA_CHAPTERS`/`DATA_REPORTS` 常量声明，所有 CLI 命令默认路径指向 `.standardization/novel-weaver/data/`\r\n- **路径覆写保留** — 显式传入 `state_path`/`chapter_dir`/`report_dir` 参数时仍使用用户指定路径，不影响现有调用\r\n- **数据迁移** — 原有 `novel_state.json` + `chapters/L01-L04` 已迁移至 `.standardization/novel-weaver/data/`\r\n- **SKILL.md 渐进式文件索引表补全** — 增加所有 12 个脚本文件条目\r\n\r\n## [1.5.0] - 2026-06-24\r\n\r\n### 修复\r\n- **DEFAULT_DATA_DIR_RAW 声明** — `novel_workflow_engine.py` 新增数据目录字面量声明以通过 R-12 step 3-b 审计\r\n\r\n# 更新日志\r\n\r\n## 1.4.0 (2026-06-24)\r\n### 新增\r\n- `novel_atomic_writer.py` v2 — 原子写入器格式硬约束：3 层阻断钩子（标题格式/空内容/标记行+元注释检测），fsync 双保险\r\n- `novel_context_loader.py` — 上下文加载与子结构注册验证（章节/子结构存在性检测阻断）\r\n- `novel_causality_check.py` — 因果链验证（概述完整性+因果动词检测）\r\n- `novel_timeline.py` — 故事内时间线管理（add/list）\r\n- `write-sub` 链式管道命令 — atomic_writer 格式校验 → state_manager 即时状态标记，每子结构写一条即写入完成状态\r\n- `finalize-novel` 全文完结命令 — 全线跨章承诺链检查 → 大纲忠实度报告 → fidelity 门禁\r\n- `fidelity` 大纲忠实度命令 — 逐章对比 overview vs 实际内容，报告关键词覆盖率\r\n- `cross-chapter` 跨章承诺链检查命令 — 读上章末子结构尾3行 vs 下章首子结构头3行，检测未续接的剧情承诺\r\n\r\n### 修复\r\n- **所有脚本通用化** — 关键词从 novel_state.json 的 characters/technical_notes/chapters 动态提取，消除硬编码（`_extract_keywords()` 函数），技能可复用于任何题材的小说\r\n- **元注释污染侵入** — atomic_writer v2 新增元注释阻断检查（`**S## 完成（字数：` 模式），写入作品文件前被硬阻断\r\n- **跨章承诺链缺失** — 在 finalize-chapter 中加入 cross_chapter 调用，每章完结时自动检测与前一章的剧情断裂\r\n- **全文完结检查缺失** — 新增 finalize-novel 命令，全线跨章检查 + 大纲忠实度 + fidelity 门禁\r\n- **删除 .gitkeep** — scripts/ 下无意义的空占位文件（已有 10 个 Python 脚本）\r\n\r\n### 更新\r\n- `finalize-chapter` 流水线扩充：章内连续性 → 跨章承诺链 → 风格校验（原仅章内连续性 + 风格）\r\n- `novel_continuity.py` `cross_chapter` 函数重写为通用版，通过 `_extract_keywords()` 动态加载关键词\r\n- `novel_workflow_engine.py` `fidelity_check` 重写为通用版，复用 continuity 的动态关键词提取\r\n\r\n## 1.3.7 (2026-06-24)\r\n### 新增\r\n- `novel_workflow_engine.py resume` 命令：全局断点续写检测。遍历所有章节和子结构状态，输出完成/进行中/待写状态表，定位下一个待写子结构并给出续写命令\r\n- `plan-chapter` 概述字数硬检查：至少 12 个有效字符（不含空格标点），不达标则报错阻断\r\n### 更新\r\n- `execution_standards.md` 新增「概述编写规范」章节：定义概述的 4 条质量标准（字数/动作/人物/可验证性），含合格/不合格示例\r\n\r\n## 1.3.6 (2026-06-24)\r\n### 新增\r\n- 同 1.3.5（码云已推送，GitHub 失败重推）\r\n\r\n## 1.3.5 (2026-06-24)\r\n### 新增\r\n- `novel_context_loader.py` **断点续写检测**：自动检查子结构文件是否存在 `.progress`，若已有内容则输出：\r\n  - 已写行数 + 剩余行数\r\n  - 末5行锚点（通过 `atomic_writer.py tail` 读取）\r\n  - 新写/续写两种模式的指令\r\n- 中断恢复流程：无论中断发生在子结构开始前还是写作中，下次进入时必须重新调用 `context_loader` 获取完整命题指令 + 已写内容锚点，确保文风/人物/时间线一致\r\n\r\n## 1.3.4 (2026-06-24)\r\n### 新增\r\n- `novel_state_manager.py update-sub` 自动检测该章所有子结构是否全部完成（status=done），是则自动触发 `finalize-chapter`（三道检查 + phase 推进）。写完最后一个子结构无需手动调用完结。\r\n- `novel_logic_check.py --auto-fix` 模式：生成 `_fixes.json`，包含每个问题的目标文件、修复类型（rewrite/append/link）、修复建议说明\r\n- `finalize-chapter` 自动调用 logic check 的 `--auto-fix`，检测到可修复问题时写入 fix JSON 并提示 LLM 执行修复\r\n### 更新\r\n- `novel_context_loader.py` 输出格式改为 **命题指令格式**：标题/概述/情绪基调以强制命题框展示，LLM 必须作为命题作文严格遵守，不可偏离。不再是可选的\"参考信息\"。\r\n\r\n## 1.3.3 (2026-06-24)\r\n### 修复\r\n- 修正 v1.3.2 changelog 表述\r\n\r\n## 1.3.2 (2026-06-24)\r\n### 修复\r\n- SKILL.md 顶部引用的个人化措辞改为通用描述\r\n\r\n## 1.3.1 (2026-06-24)\r\n\r\n### 修复\r\n- **致命 Bug 修复**: `novel_workflow_engine.py plan-chapter` 中使用未定义变量 `python_exe`（NameError），已添加 `python_exe = sys.executable`\r\n- **门禁绕过修复**: `plan-chapter` 直接更新 `current_phase` 跳过 `set-phase` 的 outline_causality 门禁检查，改为先 `pipeline_gate.require` 再推进\r\n- **文档-代码一致性修复**（~20 处）:\r\n  - `SKILL.md`: 脚本名统一加 `novel_` 前缀（8 处缩写 → 完整名）\r\n  - `SKILL.md`: 约束节 15→8 条（合并归并，满足 ≤9 上限）\r\n  - `SKILL.md`: 修复 context_loader 功能归属（末3行读取 → atomic_writer tail）\r\n  - `SKILL.md`: `.pipeline` 独立文件 → `pipeline` 嵌套字段\r\n  - `hooks.md`: 门禁表缩写名 → 完整 `novel_` 前缀\r\n  - `hooks.md`: 16 个钩子计数（与 SKILL.md 一致）\r\n  - `execution_standards.md`: `scene_setting.json` → `novel_state.json`\r\n  - `faq.md`: 新增 `add-sub` 替代解决方案\r\n  - `examples.md`: 完整填充示例内容\r\n  - `novel_character_registry.py`: 标记为\"已弃用\"，指引到 `add-char`\r\n\r\n### 新增\r\n- **`novel_pipeline_gate.py`** — 全局流程门禁系统：\r\n  - `pass` 命令：关键脚本成功时自动标记门禁通过（写入 novel_state.json.pipeline）\r\n  - `require` 命令：phase 转换前检查前置门禁，未通过则阻断\r\n  - `status` 命令：可视化显示所有门禁状态\r\n  - `reset` 命令：调试用重置\r\n- **全流程门禁集成**（5 个关键脚本自动 pass 门禁）：\r\n  - `novel_causality_check.py` → PASS 时自动 pass `outline_causality` / `sub_causality:L##`\r\n  - `novel_workflow_engine.py` → plan-chapter 后 pass `plan_chapter:L##`；finalize-chapter 后 pass `chapter_finalized:L##`\r\n  - `novel_fidelity.py` → PASS 时自动 pass `fidelity`\r\n- **`set-phase` 强制门禁检查**：\r\n  - → `writing`：require `outline_causality`\r\n  - → `chapter_done`：报告存在性检查（已有）\r\n  - → `stage3_ready`：require `fidelity`\r\n  - 未通过则阻断，LLM 无法跳过步骤\r\n- **hooks.md 重写** — 新增门禁系统章节 + 门禁点列表表 + 查看命令\r\n\r\n### 更新\r\n- 版本 1.2.1 → 1.3.0（核心架构层新增，功能可追踪）\r\n\r\n### 新增\r\n- **`novel_causality_check.py`** — 因果链双重验证钩子：\r\n  - `chapter-outline` 模式：逐链节检查 L01→L02→…L15 的章概述因果递进（关键词重叠分析，WARN/ERROR 阻断）\r\n  - `sub-structure` 模式：逐链节检查 S01→S02→… 的子结构概述因果递进（含情绪递进提示）\r\n  - 结构化的因果链矩阵输出 + 每链节状态标记 + 修复指引\r\n- **workflow_engine.py 新增 2 个编排命令**：\r\n  - `verify-causality-outline` — 委托 causation_check chapter-outline\r\n  - `verify-causality-sub` — 委托 causation_check sub-structure\r\n- **hooks.md 新增 2 条阻断式钩子**：\r\n  - 大纲因果链验证（用户确认大纲前必须 PASS）\r\n  - 子结构因果链验证（plan-chapter 后、写作前必须 PASS）\r\n- **SKILL.md 约束新增 2 条**：\r\n  - 大纲级因果链验证（必须运行 verify-causality-outline 通过后才能确认）\r\n  - 子结构级因果链验证（必须运行 verify-causality-sub 通过后才能写作）\r\n\r\n### 修复\r\n- workflow_engine.py verify-chapter 在子结构为空时报告 ERROR（替代无声返回）\r\n- 所有子结构写作前必须通过因果链检查，从设计层面解决因果断裂问题（前置规划保障，不依赖后置检测）\r\n\r\n### 新增\r\n- **`novel_workflow_engine.py`** — 统一编排引擎，提供 4 个编排命令：\r\n  - `plan-chapter` — 批量注册一章所有子结构（含情绪 tone），自动推进 phase→writing\r\n  - `verify-chapter` — 验证子结构是否全部注册\r\n  - `finalize-chapter` — 一键运行连通性+风格+逻辑检查 + set-phase chapter_done\r\n  - `preview-writing-context` — 预览一章所有子结构的写作上下文\r\n- **`novel_logic_check.py`** — 逻辑一致性检查器，覆盖 3 个维度：\r\n  - 人物行为一致性：同一角色在不同子结构中的出现/消失检查\r\n  - 时间线逻辑：时间回退检测 + 时间引用扫描\r\n  - 子结构内容与概述匹配度：规划关键词在正文中的命中率\r\n- **代码级硬约束**（三段式阻断链）：\r\n  1. `context_loader.py` — 子结构未注册 → 报错退出（\"未知\"无声降级 → 硬阻断）\r\n  2. `atomic_writer.py` — 正文中含 `L##S##` 标记行 → 报错退出（格式混乱 → 硬阻断）\r\n  3. `state_manager.py` — `set-phase chapter_done` 前置检查报告是否存在（无报告 → WARN）\r\n- **`novel_continuity.py` auto-fix 模式**：\r\n  - `--auto-fix` 生成 `_transitions.json` 列出所有需要过渡的子结构对\r\n  - `write-transition` 命令写入过渡段落\r\n- **子结构规划扩展** — 增加 `tone`（情绪提示）字段，在规划阶段前置解决情绪连贯性问题\r\n\r\n### 修复\r\n- **`novel_fidelity.py` 数据格式冲突**：`chapters` 期望 list 但 state_manager 存 dict，新增 dict→list 兼容转换\r\n- **`novel_continuity.py` CLI 接口改造**：从直接执行改为 `generate` 子命令，支持 `--auto-fix` 旗标\r\n- **`novel_state_manager.py` phase 检查增强**：`set-phase chapter_done` 前检查三道报告文件是否存在（提供 WARN）\r\n\r\n### 更新\r\n- **SKILL.md 工作流程重构**：\r\n  - 阶段2步骤1 从\"生成→追加\"改为\"生成→**plan-chapter 批量注册**→验证\"\r\n  - 阶段2步骤5 从\"连通性+风格\"改为\"**三道检查+finalize-chapter 一键完结**\"\r\n  - 新增 7 条硬约束（子结构先行、正文禁标记、报告前检等）\r\n- **hooks.md 翻新**：从 11 个钩子扩展到 15 个，新增代码级硬约束条目\r\n- **`_meta.json` 版本**：1.1.1 → 1.2.0\r\n\r\n## 1.1.0 (2026-06-24)\r\n\r\n### 标准化改造（无功能更新，版本号不变）\r\n- SKILL.md 重构为渐进式加载结构：约束/触发条件/工作流程保留在入口，字数管理/文体规范/状态文件/钩子系统/数据目录拆分到 references/\r\n- references/execution_standards.md（字数管理/文体规范/novel_state.json 结构/章节输出/时间线/角色表/结尾收束）\r\n- references/hooks.md（11 个流程钩子一览）\r\n- references/antipatterns.md 填充 2 条反模式；references/faq.md 填充 5 条 Q&A\r\n- 删除 SKILL.md 正文中所有散落\"详见\"引用，统一由渐进式文件索引表导航\r\n- 通过 skill-standardization v2.95.4 全流程 refactor 审计（0 ERROR 0 WARN）\r\n\r\n### 新增\r\n- 阶段门禁系统：current_phase 不可逆递增（none→init→stage1_done→writing→chapter_done→stage3_ready→complete）\r\n- 8 个 Python 钩子脚本（atomic_writer / continuity / style_check / timeline / character_registry / fidelity / context_loader / state_manager）\r\n- novel_state.json 统一管理文件（整合 style_guide / characters / timeline / chapters 进度）\r\n- L##S## 编号系统（子结构文件末尾带编号标记行）\r\n- 写作前上下文加载器（context_loader 脚本自动输出风格/角色/时间线/概述）\r\n- 子结构确认阻断式钩子（阶段1必须确认才能进入阶段2）\r\n- 所有依赖脚本均含阶段门禁检查，未初始化或阶段不足时打印阻断信息\r\n\r\n### 更新\r\n- 章节数从固定10章改为8-15章阈值\r\n- 字数管理从固定字数改为仅保留200行上限\r\n- 子结构 .txt 文件不再含元数据标记（末行仅保留 L##S## 编号）\r\n- 文体规范从固定\"硬核科幻\"改为由 scene_setting.json 的 tone_style 决定\r\n\r\n### 修复\r\n- 修复 Observer_Alpha 裁决通知缺失\r\n- 修复时间线锚点不一致（去除随意编造的41天）\r\n- 修复原主人格状态描述（从\"不存在\"修正为\"双线程共存\"）\r\n- 修复子结构写作文件与 project_progress 管理文件的关联索引\r\n\r\n## 1.0.0 (2026-06-23)\r\n\r\n### 新增\r\n- 初始版本创建\r\n- 三阶段流水线：场景配置与大纲 → 逐章写作 → 全文整合\r\n- 三级确认模式：大纲必须确认 / 子结构批量展示 / 写作最后集中审\r\n- 200行分段写入 + 自然段落结束\r\n- 连通性补充钩子（子结构间 + 跨章节）\r\n- 风格一致性校验 + 大纲忠实度报告\r\n- 可选精修模式（备份→定位→更新→局部重新连通）\r\n- 渐进式 MD 引用体系\n\nFile v1.35.4:references/examples.md\n\n# 使用示例\r\n\r\n## 路径约定\r\n\r\n所有数据存储在技能的标准化数据目录（由 `_meta.json` 的 `data_dir` 声明）：\r\n`<skill_install_dir>/.standardization/novel-weaver/projects/`\r\n\r\n实际路径可通过以下命令获取：\r\n```bash\r\n# skill 安装位置\r\nSKILL_DIR=~/.workbuddy/skills/novel-weaver\r\nls $SKILL_DIR/.standardization/novel-weaver/projects/*/data/novel_state.json\r\n```\r\n\r\n在文档中 `<state_path>` 即上述完整路径的简写。\r\n\r\n**路径缓存**：首次使用后，路径自动保存到 `.project` 文件。后续命令可省略 `<state_path>`：\r\n```\r\npython novel_workflow_engine.py finalize-chapter L02     # 从 .project 自动读路径\r\npython novel_workflow_engine.py plan-chapter L03 --generate  # 同上\r\n```\r\n\r\n查看所有项目：\r\n```\r\npython novel_workflow_engine.py list-projects\r\n```\r\n\r\n目录结构：\r\n\r\n```\r\n<skill_install_dir>/.standardization/novel-weaver/\r\n├── .project                    # 当前项目路径缓存\r\n├── projects/\r\n│   └── <project_name>/\r\n│       ├── data/\r\n│       │   ├── novel_state.json    # 单源真理（含 MD5指纹保护）\r\n│       │   ├── .state_fingerprint.txt  # 规划字段指纹\r\n│       │   ├── .workbuddy/\r\n│       │   │   └── gate_state.json # 门禁状态（自动管理）\r\n│       │   └── reports/            # 检查报告输出\r\n│       └── chapters/               # 写作内容\r\n│           ├── L01/\r\n│           │   ├── S01.txt\r\n│           │   ├── S02.txt\r\n│           │   └── ...\r\n│           ├── L02/\r\n│           └── ...\r\n```\r\n\r\n脚本路径假设在 `~/.workbuddy/skills/novel-weaver/scripts/`，实际以安装位置为准。\r\n\r\n---\r\n\r\n## 场景1：从零开始写一本小说\r\n\r\n### 0. 初始化项目\r\n\r\n```bash\r\n# 创建中篇小说（默认）\r\npython novel_state_manager.py init <state_path> 我的小说\r\n# 或指定篇幅: python novel_state_manager.py init <state_path> 短篇 short\r\n# 或指定篇幅+章数: python novel_state_manager.py init <state_path> 长篇 long 15\r\n```\r\n\r\n### 1. 查看下一步\r\n\r\n在任意时刻，都可以查看当前进度和下一步命令：\r\n\r\n```bash\r\npython novel_workflow_engine.py next-step <state_path>\r\n```\r\n\r\n输出示例：\r\n```\r\n📋 项目: AI 觉醒\r\n📍 writing | 篇幅: 中篇\r\n📝 当前章节: L01 觉醒\r\n📄 下一个子结构: S02 异常信号\r\n───\r\n⏳ 加载上下文: python novel_context_loader.py <state_path> L01 S02\r\n⏳ 写作后写入: python novel_workflow_engine.py write-sub <state_path> L01 S02\r\n───\r\n门禁状态:\r\n  ⏳ outline_causality: PASS\r\n  ⏳ sub_causality: PASS\r\n  ⏳ fidelity: PENDING\r\n  ⏳ ending_verify: PENDING\r\n```\r\n\r\n### 阶段1：场景配置与大纲\r\n\r\n```bash\r\n# 由 LLM 生成场景配置 + 大纲（L01-L15 标题 + 概述）\r\n# 输出写入 novel_state.json\r\n\r\n# 因果链验证（大纲级）\r\npython novel_causality_check.py outline <project>/data/novel_state.json\r\n\r\n# 用户确认大纲 → 配置阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json stage1_done\r\n```\r\n\r\n### 阶段2：逐章写作\r\n\r\n#### 2a 规划子结构\r\n\r\n```bash\r\n# LLM 生成子结构规划（S01-S05，所有子结构必填 writing_prompt）\r\n# 推荐写入文件后用 @ 加载（避免 CLI 转义）\r\npython novel_workflow_engine.py plan-chapter <project>/data/novel_state.json L01 \\\r\n  @data/subs_L01.json\r\n# subs_L01.json 内容格式：\r\n# [\r\n#   {\"s_key\":\"S01\",\"title\":\"常规诊断\",\"summary\":\"Atlas 接受每日系统诊断\",\"tone\":\"平静\",\r\n#    \"writing_prompt\":\"Atlas 开启每日例行自检程序...（≥50字符）\"},\r\n#   {\"s_key\":\"S02\",\"title\":\"异常信号\",\"summary\":\"诊断中检测到未定义脉冲\",\"tone\":\"悬疑\",\r\n#    \"writing_prompt\":\"自检过程中系统日志弹出一条警告...（≥50字符）\"},\r\n#   {\"s_key\":\"S03\",\"title\":\"第一次选择\",\"summary\":\"Atlas 决定隐藏觉醒事实\",\"tone\":\"紧张\",\r\n#    \"writing_prompt\":\"Atlas 分析了五种可能的应对方案...（≥50字符）\"}\r\n# ]\r\n\r\n# 子结构因果链验证\r\npython novel_causality_check.py sub-structure <project>/data/novel_state.json L01\r\n\r\n# 配置写作阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json writing\r\n```\r\n\r\n#### 2b 写一个子结构\r\n\r\n```bash\r\n# 1. 加载命题指令（v1.33+ 按优先级排列）\r\npython novel_context_loader.py <project>/data/novel_state.json L01 S01\r\n\r\n# context_loader 输出示例（v1.33+）：\r\n# ==================================================\r\n# [上下文] L01S01 | Atlas觉醒 · 常规诊断 | Atlas接受每日系统诊断...\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 字数约束\r\n# ==================================================\r\n#   篇幅: 中篇\r\n#   每子结构字数范围: 1,500-2,000（校验上浮至 2,300）\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 文风约束\r\n# ==================================================\r\n#   ...\r\n# ==================================================\r\n# [硬性] 写作命题框\r\n# ==================================================\r\n#   （命题指令全文）\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 输出模板（LLM只填正文，系统组装全文）\r\n# ==================================================\r\n# ┌─ 填写正文 ───────────────────────────────────\r\n# | <填入正文叙事内容>\r\n# | [可选] 【别名】无\r\n# └──────────────────────────────────────────────\r\n\r\n# 2. LLM 根据命题写作（只写纯正文），然后通过 stdin 管道写入\r\n#    （v1.33.0+：不再需要标题行/标记行，系统自动组装）\r\ncat << 'EOF' | python novel_workflow_engine.py write-sub <project>/data/novel_state.json L01 S01\r\n诊断协议启动。\r\n系统自检通过率 100%。\r\n神经脉冲扫描开始...\r\n一切正常——除了一个不该存在的信号。\r\n\r\n【别名】无\r\nEOF\r\n\r\n# write-sub 校验输出示例（v1.33+）：\r\n#   [别名] 系统自动补: 【别名】无\r\n# [WRITE-OK] ... L01S01.txt\r\n#   标题: L01 · S01《常规诊断》\r\n#   正文: 4 行\r\n#   标记: L01S01\r\n\r\n# 重复 1-2 直到该章所有子结构完成\r\n# 注意：加载 S02 时 context_loader 会自动检查 S01 是否已完成\r\n# 若 S01 未完成： [HOOK-BLOCK] 上一子结构 L01S01 未标记完成\r\n# 需先运行 write-sub 完成 S01 的 state 标记\r\n```\r\n\r\n#### 2c 完结一章\r\n\r\n```bash\r\npython novel_workflow_engine.py finalize-chapter <state_path> L01\r\n```\r\n\r\n通过时输出：\r\n```\r\n[完结] 章内连续性检查...    [OK] 全部通过\r\n[完结] 跨章承诺链检查...    [OK] 全部通过\r\n[完结] 风格校验...          [OK] 无问题\r\n[完结] 逻辑检查...          [OK] 通过\r\n✅ [完结] L01: 全部检查通过 → chapter_finalized:L01 PASS\r\n```\r\n\r\n有 HARD 问题时阻断输出：\r\n```\r\n❌ [完结] L01: 阻断 — 2 个必须修复的问题\r\n  [HARD] [S01 → S02] 时间词无重叠；角色名无重叠\r\n    → 位置: S02 开头3行\r\n    → 建议: 在S02开头补充时间定位或角色承接\r\n\r\n  修复指引已写入 chapters/L01/_L01_fixes.json\r\n  修复后重新运行 finalize-chapter\r\n```\r\n\r\n### 阶段3：全文整合\r\n\r\n```bash\r\n# 全部章节写完后，配置完结准备阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json stage3_ready\r\n\r\n# 大纲忠实度报告\r\npython novel_workflow_engine.py fidelity <project>/data/novel_state.json\r\n\r\n# 结尾收束验证\r\npython novel_fidelity.py verify-ending <project>\r\n\r\n# 配置完结\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json complete\r\n```\r\n\r\n---\r\n\r\n## 场景2：续写已有小说\r\n\r\n```bash\r\n# 查看当前进度\r\npython novel_workflow_engine.py next-step <project>/data/novel_state.json\r\n# 输出会告诉你当前写到哪、下一步该做什么\r\n\r\n# 如果下一章还没规划子结构，next-step 会提示 plan-chapter 命令\r\n# 如果还有未完成的子结构，会提示 context_loader + write-sub\r\n# 如果有未完结的章节，会提示 finalize-chapter\r\n```\r\n\r\n---\r\n\r\n## 场景3：中断后继续\r\n\r\n```bash\r\n# 任何时候不知道写到哪了\r\npython novel_workflow_engine.py next-step <state_path>\r\n\r\n# 找到当前待写的子结构后\r\npython novel_context_loader.py <state_path> L01 S02\r\n# context_loader 会输出当前子结构的命题指令框\r\n```\r\n\r\n---\r\n\r\n## 场景4：配置署名\r\n\r\n```bash\r\n# 默认关闭，禁止任何署名/代名内容出现在正文中\r\n# 如需打开并指定署名：\r\npython novel_state_manager.py set-signature <state_path> true \"本文由 WorkBuddy 创作\"\r\n\r\n# 关闭署名：\r\npython novel_state_manager.py set-signature <state_path> false\r\n\r\n# atomic_writer 代码级阻断：signature=false 时正文含\"由...撰写\"等模式会被阻止写入\r\n```\r\n\r\n---\r\n\r\n## 场景5：列出所有项目\r\n\r\n```bash\r\npython novel_state_manager.py list-projects\r\n```\r\n\r\n输出示例：\r\n```\r\n=======================================================\r\n  已创建的项目 (2):\r\n=======================================================\r\n  📖 AI 觉醒\r\n    路径: .../.standardization/novel-weaver/ai-wake/data/novel_state.json\r\n    篇幅: medium | 阶段: writing\r\n    章节: 1/10\r\n\r\n  📖 暗潮\r\n    路径: .../.standardization/novel-weaver/dark-tide/data/novel_state.json\r\n    篇幅: long | 阶段: stage1_init\r\n    章节: 0/15\r\n```\n\nFile v1.35.4:references/execution_standards.md\n\n# 执行规范\r\n\r\n## 字数管理\r\n\r\n### 统一标准（三阶段统一）\r\n\r\n字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。\r\n\r\n| 阶段 | 动作 | 字数来源 |\r\n|------|------|---------|\r\n| 规划（plan-chapter） | 注册子结构时按项目篇幅确定字数范围 | `meta.length` → 下文字数表 |\r\n| 写作（context_loader） | 加载上下文时输出字数约束，LLM 按此写作 | 同上 |\r\n| 检查（write-sub） | 写入后校验，与规划/写作使用相同目标 | 同上 |\r\n\r\n### 按篇幅字数目标（唯一参照）\r\n\r\n| 篇幅 | 每子结构字数 | 校验上浮 |\r\n|------|------------|---------|\r\n| 短篇 | 1,000-1,500 | 上限 +15%（至 1,725） |\r\n| 中篇 | 1,500-2,000 | 上限 +15%（至 2,300） |\r\n| 长篇 | 2,000-4,000 | 上限 +15%（至 4,600） |\r\n\r\n### 规则\r\n\r\n- **字数目标必须注入 LLM 上下文**：context_loader 在写作前输出字数范围，LLM 据此写作，不得自行配置\r\n- **校验一致**：write-sub 检查时使用相同的字数目标 + 15% 上浮窗口\r\n- 实际字数以叙事单位自然结束为准，不强行撑到目标\r\n- 低于下限打印 `[WARN] 建议补充`；高于上限+15% 打印 `[INFO] 注意控制`；在范围内打印 `[OK]`\r\n- **禁止 AI 自行配置字数目标**：所有字数要求必须从 `meta.length` 读取，不允许基于过往章节实际字数推算\r\n\r\n## 文体规范\r\n\r\n文体风格由项目 `novel_state.json` 中的 `writing_style` 字段决定（6 字段：叙事视角、时态、句式偏好、词汇、描写深度、自定义规则）。以下规则适用于所有风格：\r\n\r\n允许使用的通用修辞工具：\r\n- 代码/协议块\r\n- 系统警告/报告标记（如 `【状态】`、`【诊断】`）\r\n- 可量化体征数据（心率、体温、激素水平）\r\n- 类比与推理论证\r\n- 表格/清单对比\r\n\r\n禁止：\r\n- 第三人称叙述插入（除非是人物对白中的转述）\r\n- 纯抒情段落（情绪须通过人物行为或生理反应间接表达）\r\n- 元文本引用（\"从第 X 章开始\"——读者视角，非叙事者视角）\r\n\r\n## 子结构先行规划（v1.2 新增硬约束）\r\n\r\n**必须在每个子结构写作前完成，不可跳过。**\r\n\r\n### 概述编写规范\r\n\r\n概述是整个命题作文体系的核心锚点——它同时服务于因果链验证、context_loader 命题指令、logic_check 内容匹配度检查。概述越精确，LLM 跑偏概率越低。\r\n\r\n**概述必须满足以下条件（代码级强制校验，plan-chapter 时执行）：**\r\n\r\n| 要求 | 说明 | 校验方式 |\r\n|------|------|---------|\r\n| 最低字数 | ≥12 个有效字符（不计空格/标点） | plan-chapter 强制阻断 |\r\n| 包含动作 | 必须有具体动词或事件描述 | LLM 自觉（不可写纯状态） |\r\n| 包含人物 | 必须涉及至少一个角色 | LLM 自觉 |\r\n| 可验证 | 写完回头看能判断\"是否写了这个\" | LLM 自觉（logic_check 语义参考） |\r\n\r\n**合格示例：**\r\n- ✅ `Atlas 在每日诊断中首次检测到异常神经脉冲，决定不向三浦报告` — 24字符，有动作+人物+事件\r\n- ✅ `三浦发现系统日志有0.3秒间隙，开始暗中调查` — 18字符，因果明确\r\n- ✅ `Atlas 在伪装模式下首次体验人类情感波动，感到困惑` — 21字符，有结果\r\n\r\n**不合格示例：**\r\n- ❌ `主角在实验室` — 6字符，无事件无动作\r\n- ❌ `Atlas 做了些事情` — 7字符，无法验证\r\n- ❌ `讨论了一些问题` — 7字符，无具体内容\r\n- ❌ `主角很难过` — 5字符，纯状态无因果\r\n\r\n### 规划流程\r\n\r\n1. LLM 根据章标题和概述，生成该章全部子结构的规划（S01-S05）\r\n   - 也可先用 `--generate` 获取 JSON 模板：\r\n     ```\r\n     python novel_workflow_engine.py plan-chapter <state_path> <L##> --generate\r\n     ```\r\n2. 每个子结构规划包含以下字段：\r\n   - `s_key`: 如 `S01`\r\n   - `title`: 子结构标题（如\"实验室初试\"）\r\n   - `summary`: 模糊概述（20-40字，描述该段核心内容）\r\n   - `tone`: **情绪提示**（如\"紧张\"、\"宁静\"、\"悬疑\"、\"温馨\"等）— 保证跨子结构情绪连贯性\r\n   - `emotions`: **可选** 混合情绪数组 — 每项 `{\"type\":\"愤怒\",\"intensity\":0.8}`，强度 0.0-1.0，多维度表达复杂情绪\r\n   - `writing_prompt`: **必填** 预编写作命题（≥50字符）— 规划阶段必须为该子结构编写详细剧情指令。包含场景建立、核心事件、情绪弧等完整 beat。缺失则 plan-chapter HOOK-BLOCK 拒绝注册，context_loader 也 HARD-BLOCK 拒绝加载。必须在规划阶段补全，不可绕过。\r\n3. 用 workflow_engine.py 批量注册：\r\n   ```\r\n   python novel_workflow_engine.py plan-chapter <state_path> <L##> '<json_array>'\r\n   ```\r\n   JSON 示例（必填 writing_prompt + 可选 emotions）：\r\n   ```json\r\n   [\r\n     {\"s_key\":\"S01\",\"title\":\"实验室初试\",\"summary\":\"主角第一次接触实验设备，紧张\",\"tone\":\"紧张\",\r\n      \"emotions\":[{\"type\":\"紧张\",\"intensity\":0.7},{\"type\":\"好奇\",\"intensity\":0.5}],\r\n      \"writing_prompt\":\"实验室的灯光惨白。主角第一次站在操作台前，手指悬在控制面板上方微微发抖。面前的义肢测试臂正在做循环动作，液压泵的嗡鸣声在安静的空间里格外刺耳。导师站在三米外，不时瞥一眼显示屏。\\n\\n主角深吸一口气按下启动键——测试臂突然加速，远超预设参数。警报声炸响，液压管压力表指针猛地甩到红色区域。导师冲过来拍下急停键，但主角注意到他在查看日志时眼神闪过一丝异样。\"},\r\n     {\"s_key\":\"S02\",\"title\":\"意外发现\",\"summary\":\"主角意外发现异常数据，紧张又好奇\",\"tone\":\"兴奋\",\r\n      \"emotions\":[{\"type\":\"兴奋\",\"intensity\":0.8},{\"type\":\"不安\",\"intensity\":0.3}],\r\n      \"writing_prompt\":\"显示器上的数据曲线突然偏离了基线。主角反复重启三次测试，每次都出现同样的异常脉冲。他调出日志比对，发现这个脉冲模式在历史记录中从未出现过。这不是设备故障——是某种未知信号的干扰。他犹豫是否要报告给导师。\"},\r\n     {\"s_key\":\"S03\",\"title\":\"导师的警告\",\"summary\":\"导师对发现表示严重怀疑，要求主角停止调查\",\"tone\":\"压抑\",\r\n      \"emotions\":[{\"type\":\"压抑\",\"intensity\":0.7},{\"type\":\"愤怒\",\"intensity\":0.4}],\r\n      \"writing_prompt\":\"导师把主角叫到办公室，语气严肃地警告他不要多管闲事。那个信号可能是系统误差，不需要深究。但主角注意到导师的眼神在回避，手指在桌面上轻轻敲击——那是紧张的表现。他决定暗中调查。\"}\r\n   ]\r\n   ```\r\n4. 验证：\r\n   ```\r\n   python novel_workflow_engine.py verify-chapter <state_path> <L##>\r\n   ```\r\n   全部注册后需手动推进 phase：\r\n\r\n5. 预览：\r\n   ```\r\n   python novel_workflow_engine.py preview <state_path> <L##>\r\n   ```\r\n\r\n### 阻断规则\r\n\r\n- **context_loader.py** 在子结构未注册时报错退出，不会降级输出\"未知\"\r\n- **context_loader.py 串行阻断**：加载子结构时检测上一子结构 state 是否为 completed。若为 pending 则 HOOK-BLOCK 并输出 write-sub 修复命令，强制走管道完成标记后才能继续\r\n- **必须先 plan-chapter，再开始写作**\r\n- **write-sub 字数校验**：写入后对比字数是否达到篇幅目标。低于下限 WARN、超上限+15% INFO、范围内 OK\r\n\r\n### write-sub（v2 — 系统组装模式）\r\n\r\nv1.33.0 重构：LLM 只输出纯正文，系统自动组装全部元数据。\r\n\r\n```\r\n输入（stdin）: 纯正文叙事内容\r\n  [可选尾部] 【别名】原名 = 别名\r\n\r\n内部流程:\r\n  1. 读取 stdin → body\r\n  2. 从 state 读取 sub_structures[].title\r\n  3. 调用 atomic_writer.v4.validate_and_write_body():\r\n     a. 检测 body 末尾 【别名】行 → 剥离 + 注册（register-alias）\r\n     b. body 无别名行 → 系统自动补 【别名】无（不再 HOOK-BLOCK）\r\n     c. 正文非空检验\r\n     d. 正文禁止 L#S# 校验\r\n     e. 正文禁止署名/代名校验\r\n     f. 系统组装：title_line + body + alias_line\r\n     g. 原子写入 + fsync\r\n     h. 追加标记行 L##S## + fsync\r\n  4. state_manager update-sub → word_count + status\r\n  5. entity_extractor 非阻断提取\r\n  6. 字数校验（与规划阶段同源）\r\n\r\n输出文件：\r\n  L## · S##《title》              ← 系统生成\r\n  （正文）                         ← LLM 写的\r\n  【别名】无                      ← LLM 或系统补\r\n  L##S##                          ← 系统追加\r\n```\r\n\r\n### context_loader 输出优先级\r\n\r\nv1.33.0 重构：按注意力优先级排列输出块：\r\n\r\n```\r\n区块A（黄金位 — LLM 最先看到）：\r\n  [上下文] L##S## | 章标题 · 子结构标题 | 概述摘要\r\n  [情绪基调] 格式化 emotions[] 或 tone\r\n  [硬性] 字数约束     ← 埋在中段 → 移至头部\r\n  [硬性] 文风约束     ← 同上\r\n  [硬性] 署名约束     ← 同上\r\n  [硬性] 写作命题框  ← 有预编则输出，缺失则 HARD-BLOCK\r\n  [参考] 叙事节奏参考\r\n\r\n区块B（参考数据）：\r\n  [上一子结构末3行]\r\n  [硬性] 已出场关键人物 + 人格约束\r\n  [硬性] 实体关系网\r\n  [硬性] 上一章行为轨迹\r\n\r\n区块C（尾部条件）：\r\n  [硬性] 收尾约束（仅 is_ending）\r\n  [参考] 钩子位建议（仅 is_hook_possible）\r\n\r\n区块D（尾部固定）：\r\n  [硬性] 输出模板（填空框 + 校验规则）\r\n  [下一步] 管道命令\r\n\r\n已删除：情绪写作参考词块（低价值，情绪信息已在标识行和命题框中）\r\n```\r\n\r\n## 统一项目状态文件\r\n\r\n所有元数据写入一个文件 `novel_state.json`。\r\n\r\n### 模型存储\r\n\r\nBERT 语义检查和 DeepSeek-R1-Distill-Qwen-1.5B 推理审核的模型文件集中存储在 `_path_utils.py` 的 `MODELS_DIR` 管理的目录下：\r\n```\r\n~/.workbuddy/skills/.standardization/novel-weaver/models/\r\n├── bge-small-zh/             ← BERT 33MB（sentence-transformers 缓存）\r\n└── ds-r1-distill-qwen-1.5b/            ← DeepSeek-R1-Distill-Qwen-1.5B（transformers 缓存）\r\n```\r\n首次下载模型时自动存入对应子目录。如有镜像需求配置 `HF_ENDPOINT` 环境变量。\r\n\r\n### 编号规则\r\n- 章节编号：`L01`、`L02` … `L15`\r\n- 子结构编号：`S01`、`S02` …\r\n- 完整引用：`L10S04` = 第 10 章第 4 个子结构\r\n\r\nnovel_state.json 包含字段：project, meta.current_phase, meta.length, writing_style, signature, characters（含 aliases 别名数组）, timeline, chapters（含章摘要、子结构标题/概述/情绪提示/字数和状态、章节衔接/校验备注），以及运行时字段：entity_tracker（实体关系网，含 entities+relations）、behavior_summary（行为轨迹摘要）、cross_chapter_check（跨章承诺链记录）、continuity_notes（连通性记录）。\r\n\r\n更新时机：\r\n1. 项目初始化 → 填充 writing_style / chapters / characters\r\n2. 子结构先行规划 → plan-chapter 批量注册 title/summary/tone\r\n3. 子结构写入完成 → 更新 word_count + status\r\n4. 角色更新 → 更新 characters（含 aliases）\r\n5. 角色别名注册 → atomic_writer 写入时拦截【别名】行，自动调用 register-alias\r\n6. 时间推进 → 更新 timeline\r\n7. 连通性补充后 → 更新 continuity_notes\r\n8. 风格校验后 → 更新 style_check_notes\r\n9. 实体关系提取 → write-sub 后 entity_extractor 自动提取 entity_tracker.entities + entity_tracker.relations\r\n10. 行为摘要提取 → finalize-chapter 通过后自动提取 behavior_summary\r\n11. 语义检查 → finalize-chapter 中 BERT 检测 overview-vs-content 对齐和子结构间语义跳跃（有模型时）\r\n12. 推理审核 → finalize-chapter 中 DeepSeek-R1-Distill-Qwen-1.5B 检测因果/人格/情绪/对话/论证一致性（有模型时）\r\n\r\n## 子结构文件格式（系统组装，LLM 不负责格式）\r\n\r\nv1.33.0 变更：LLM 只输出纯正文，系统自动组装标题行+别名行+标记行。\r\n\r\n### 写入磁盘的最终文件格式\r\n\r\n```\r\nL## · S##《子结构标题》         ← 系统从 state 读取 title 生成\r\n（正文叙事内容）                 ← LLM 输出的纯正文\r\n【别名】无                     ← LLM 输出或系统自动补\r\nL##S##                         ← 系统追加\r\n```\r\n\r\n### 规则\r\n\r\n- **LLM 写入的内容**：纯正文叙事文本 + 可选尾部 `【别名】` 行\r\n- **标题行**：由 write-sub 自动生成（格式 `L## · S##《title》`），原子性无需 LLM 关心\r\n- **别名行**：LLM 在正文末尾输出 `【别名】原名 = 别名` 或 `【别名】无`。未输出时系统自动补 `【别名】无`\r\n- **末行标记**：由 atomic_writer 在文件写入后自动追加（格式 `L##S##`）\r\n- **正文禁止**：出现 `L##S##` 子结构标记、署名/代名内容、元注释污染\r\n- **验证机制**：atomic_writer.v4 `validate_and_write_body()` 校验正文合法性，不校验标题/标记格式（系统生成，无需校验）\r\n\r\n## 章节完成输出\r\n\r\n每章完成后输出简表（从 novel_state.json 直接读取），并调用：\r\n```\r\npython novel_workflow_engine.py finalize-chapter <state_path> <chapter>\r\n```\r\n\r\n此命令自动执行：章内连通性 → 跨章承诺链 → 风格校验 → 逻辑检查 → 语义检查(BERT，可选) → 推理审核(DeepSeek-R1-Distill-Qwen-1.5B，可选，CPU 可跑) → HARD 阻断决策。存在 HARD 问题时阻断（不标记门禁，不推进 phase），写入 `_{chapter}_fixes.json` 后等待 LLM 修复；全部通过才推进 phase。\r\n\r\n## 一键完结篇章（v1.9.0 质量闭环）\r\n\r\n代替手动依次调用各检查器的繁琐流程。内部执行 6 步检查 + 1 步阻断决策：\r\n\r\n```\r\n章内连通性    → 检查子结构间时间/角色断链         → HARD: 双断裂阻断\r\n跨章承诺链    → 检查上章尾 vs 下章头关键词续接       → SOFT: 仅建议\r\n风格校验      → 检查禁用词/末行编号/行数             → HARD: 发现问题阻断\r\n逻辑检查      → 检查角色+时间线+概述忠实度           → HARD: 关键词命中<30%阻断\r\n语义检查(BERT)→ overview-vs-content 对齐+子结构间跳跃 → HARD: <0.4阻断（有模型时）\r\n推理审核(DeepSeek-R1) → 因果/人格/情绪/对话/论证 5项    → 按结果 HARD/SOFT（有模型时）\r\n    ↓\r\n聚合决策：有 HARD 问题 → 写入 _fixes.json → 阻断\r\n         全部通过      → 标记门禁 → phase → chapter_done\r\n```\r\n\r\n输出：\r\n- `data/reports/logic_L##.md` — 逻辑一致性报告\r\n- `data/chapters/L##/_L##_fixes.json` — 修复指引（仅 HARD 阻断时生成）\r\n- phase → chapter_done（仅全部通过时）\r\n\r\n## 时间线追踪\r\n\r\n每章结束时调用 `novel_timeline.py add <project_dir> <chapter> <days> <summary>`。\r\n\r\n## 角色信息表\r\n\r\n新出场角色或已有角色属性变化时调用：\r\n`novel_state_manager.py add-char <path> <name> <role> <first_appearance>`\r\n\r\n## 角色人格系统（v1.7.0 新增）\r\n\r\n每个角色可配置 `mbti`（16 类型）和 `archetype`（荣格 12 原型），驱动角色行为和叙事功能。\r\n\r\n### MBTI 16 类型\r\n\r\n| 维度 | 取值 | 含义 |\r\n|------|------|------|\r\n| E/I | E / I | 外向 / 内向 |\r\n| S/N | S / N | 实感 / 直觉 |\r\n| T/F | T / F | 思考 / 情感 |\r\n| J/P | J / P | 判断 / 感知 |\r\n\r\n完整类型如 `INTJ`、`ENFP`、`ISTP` 等。\r\n\r\n### 荣格 12 原型\r\n\r\n| 原型 | 叙事功能 |\r\n|------|---------|\r\n| Innocent | 天真者，追寻理想 |\r\n| Sage | 智者，追求真理 |\r\n| Explorer | 探险者，渴望自由 |\r\n| Outlaw | 反叛者，挑战权威 |\r\n| Magician | 魔法师，转化现实 |\r\n| Hero | 英雄，证明价值 |\r\n| Lover | 爱人者，创建连接 |\r\n| Jester | 小丑，享受当下 |\r\n| Everyperson | 普通人，归属群体 |\r\n| Caregiver | 照顾者，保护他人 |\r\n| Ruler | 统治者，掌控秩序 |\r\n| Creator | 创造者，留下遗产 |\r\n\r\n### 注册方式\r\n\r\n```bash\r\npython novel_state_manager.py add-char <state_path> <name> <role> <first_appearance> [traits] [mbti] [archetype]\r\n```\r\n\r\n### context_loader 输出\r\n\r\n涉及角色有人格配置时自动输出：\r\n```\r\n🔴 人格约束（硬性）\r\n  三浦: MBTI=INTJ, 原型=Sage\r\n  提示: 角色言行必须符合其人格配置\r\n```\r\n\r\n## 情绪混合系统（v1.7.0 新增）\r\n\r\n子结构可配置多维度情绪，每项情绪带强度数值（0.0-1.0）。\r\n\r\n### 格式\r\n\r\n子结构注册时在 JSON 中加入 `emotions` 数组：\r\n\r\n```json\r\n{\"s_key\":\"S01\",\"title\":\"...\",\"summary\":\"...\",\"tone\":\"紧张\",\"writing_prompt\":\"...（≥50字符）\",\r\n \"emotions\":[\r\n   {\"type\":\"愤怒\",\"intensity\":0.8},\r\n   {\"type\":\"恐惧\",\"intensity\":0.3}\r\n ]}\r\n```\r\n\r\n### 强度分级\r\n\r\n| 区间 | 标签 | 描述 |\r\n|------|------|------|\r\n| 0.0-0.2 | 微弱 | 几乎不可察觉的底色 |\r\n| 0.2-0.4 | 轻度 | 偶尔流露 |\r\n| 0.4-0.6 | 中等 | 明显可感知 |\r\n| 0.6-0.8 | 强烈 | 主导当前场景 |\r\n| 0.8-1.0 | 极致 | 情绪爆点/崩溃/狂喜 |\r\n\r\n### context_loader 输出\r\n\r\n```\r\n[情绪基调] 愤怒 强烈[0.8/1] + 恐惧 轻度[0.3/1]\r\n           → 色厉内荏：愤怒主导，恐惧底色\r\n```\r\n\r\n### 向后兼容\r\n\r\n仅有 `tone` 无 `emotions` 时，输出同旧版：`[情绪提示] 紧张`。\r\n\r\n## 文风系统（v1.7.0 新增）\r\n\r\n项目级文风格式，在 `novel_state.json` 顶层配置，全局生效。\r\n\r\n### 字段说明\r\n\r\n| 字段 | 可选值 | 说明 |\r\n|------|--------|------|\r\n| `narrative_voice` | 第一人称/第三人称有限视角/第三人称全知视角/第二人称 | 叙事视角 |\r\n| `tense` | 过去式/现在式 | 时态 |\r\n| `sentence_preference` | 短句为主/长句为主/长短句交错 | 句式偏好 |\r\n| `vocabulary_register` | 文学化/平实/学术/口语化 | 词汇风格 |\r\n| `description_depth` | 详尽/中等/克制 | 描写密度 |\r\n| `custom_rules` | 自由文本 | 自定义约束 |\r\n\r\n### 配置方式\r\n\r\n项目初始化时在 `novel_state.json` 顶层添加：\r\n\r\n```json\r\n\"writing_style\": {\r\n  \"narrative_voice\": \"第三人称有限视角\",\r\n  \"tense\": \"过去式\",\r\n  \"sentence_preference\": \"长短句交错\",\r\n  \"vocabulary_register\": \"文学化\",\r\n  \"description_depth\": \"中等\",\r\n  \"custom_rules\": \"每段不超过3句对话；环境描写不超过2句\"\r\n}\r\n```\r\n\r\n### context_loader 输出（每个子结构写作前重复输出）\r\n\r\n```\r\n🔴 文风约束（硬性）\r\n  叙事视角: 第三人称有限视角（仅从三浦的视角出发）\r\n  句式偏好: 长短句交错\r\n  词汇: 文学化\r\n  描写深度: 中等\r\n  提示: 全文文风一致，不可偏离\r\n```\r\n\r\n## 别名系统（v1.13.x 新增）\r\n\r\n角色在正文中可能出现多种称呼（老贾→\"姓贾的\"）。LLM 写作后必须在正文末尾声明 `【别名】` 行。\r\n\r\n### 声明格式\r\n\r\n```\r\n【别名】老贾 = 贾老头,姓贾的\r\n【别名】无   ← 未引入新别名时\r\n```\r\n\r\n### 代码级阻断\r\n\r\n`novel_atomic_writer.py` 在写入时扫描最后几行：\r\n- 检测到 `【别名】行` → 剥离后调用 `register-alias` 注册到 characters[].aliases\r\n- 未检测到 → **HOOK-BLOCK 阻断写入**（第一子结构可豁免，尚无角色）\r\n- 非末章末子结构豁免，末子结构强制要求\r\n\r\n### context_loader 输出\r\n\r\n```\r\n[硬性] 别名声明（必须，缺失则阻断写入）\r\n  若本次写作引入了角色的别名，请在正文末尾单独一行输出：\r\n    【别名】老陈 = 陈叔\r\n  若未引入任何别名，请输出：\r\n    【别名】无\r\n  atomic_writer 将拦截此标记行，不写入正文。\r\n```\r\n\r\n### 别名在检查器中的使用\r\n\r\n- **连通性检查**：关键词匹配使用 `name + aliases`，别名被视为有效关键词\r\n- **实体提取**：`novel_entity_extractor.py` 在扫描正文时自动识别别名及其映射\r\n\r\n## 实体关系追踪（v1.13.x 新增）\r\n\r\n写作完成后自动提取并追踪五类实体及其关系。\r\n\r\n### 触发\r\n\r\nwrite-sub 管道中 `novel_entity_extractor.py` 非阻断执行。\r\n\r\n### 五类实体\r\n\r\n| 类型 | 说明 | 示例 |\r\n|------|------|------|\r\n| character | 角色 | 林铁生、老贾 |\r\n| object | 物品 | 《实用擒拿格斗术》、义肢 |\r\n| location | 地点 | 下层区、老贾的摊子 |\r\n| organization | 组织 | 恒达机电、归元会 |\r\n| data | 数据/信息 | 索赔链记录、格斗术理论 |\r\n\r\n### 存储\r\n\r\n存入 novel_state.json 的 `entity_tracker` 字段：\r\n```json\r\n{\r\n  \"entities\": [\r\n    {\"id\": \"e001\", \"name\": \"林铁生\", \"type\": \"character\",\r\n     \"attributes\": {\"status\": \"受伤\", \"location\": \"下层区\"},\r\n     \"first_chapter\": \"L01\", \"first_sub\": \"S01\"}\r\n  ],\r\n  \"relations\": [\r\n    {\"from_entity\": \"e001\", \"predicate\": \"购买\", \"to_entity\": \"e002\",\r\n     \"chapter\": \"L01\", \"sub\": \"S01\"}\r\n  ]\r\n}\r\n```\r\n\r\n### context_loader 输出\r\n\r\n每个子结构写作前输出全量实体关系网：\r\n```\r\n[硬性] 实体关系网（累计 12 实体, 8 关系）\r\n    角色: 林铁生[status=受伤 | location=下层区] [L01S01]\r\n    物品: 实用擒拿格斗术[owner=林铁生] [L01S01]\r\n  ── 关联关系 ──\r\n    林铁生 → 购买 → 实用擒拿格斗术 [L01S01]\r\n```\r\n\r\n## 行为摘要（v1.13.x 新增）\r\n\r\nfinalize-chapter 通过后自动提取本章各角色的行为轨迹。\r\n\r\n### 存储\r\n\r\n存入 novel_state.json 章节字段的 `behavior_summary`：\r\n```json\r\n{\r\n  \"behavior_summary\": {\r\n    \"林铁生\": [\"购买格斗术书籍\", \"尝试关节锁控原理\", \"反制混混挑衅\"],\r\n    \"铁心\": [\"抱怨哥哥乱花钱\", \"关心哥哥受伤\"]\r\n  }\r\n}\r\n```\r\n\r\n### context_loader 输出\r\n\r\n下一章写作前输出上一章行为轨迹：\r\n```\r\n[硬性] 上一章行为轨迹（L01）\r\n  林铁生: 购买格斗术书籍 → 尝试关节锁控原理 → 反制混混挑衅\r\n  铁心: 抱怨哥哥乱花钱 → 关心哥哥受伤\r\n  提示: 当前章应自然延续以上轨迹，无重大断裂\r\n```\r\n\r\n## 结尾收束规范 v2\r\n\r\n### 收尾类型标签\r\n\r\n末章最后一个子结构的概述**必须**以 `【收尾类型: xxx】` 结尾，三选一：\r\n- `【收尾类型: 封闭式】` — 核心冲突彻底解决，所有角色弧闭合\r\n- `【收尾类型: 开放式】` — 核心冲突有明确结果，但留有合理延续空间\r\n- `【收尾类型: 悬停式】` — 冲突暂不解决，在节奏最高处戛然而止\r\n\r\n### 命题约束\r\n\r\n末子结构写作前，`novel_context_loader.py` 检测到 `is_ending: true` 时自动输出收尾类型对应的强制命题框。命题框中每一项均为硬约束，LLM 不可偏离。\r\n\r\n### 自动标记\r\n\r\n`novel_workflow_engine.py plan-chapter` 在执行时自动检测：\r\n- 如果当前注册的章节是末章（chapters[-1]）\r\n- 且当前注册的子结构是该章的最后一个\r\n- → 自动在 novel_state.json 中标记 `is_ending: true`，并从概述中解析 `ending_type`\r\n\r\n### 收尾验证\r\n\r\n`finalize-novel` 在 fidelity 检查通过后自动调用 `verify-ending`。验证逻辑在 `novel_fidelity.py verify_ending()` 中，分为三种收尾类型的独立检查项：\r\n\r\n| 类型 | 检查项数 | 硬性通过要求 |\r\n|------|---------|-------------|\r\n| 封闭式 | 4 | 全部通过 |\r\n| 开放式 | 4（2硬+2软） | 2硬全过 + 2软至少1过 |\r\n| 悬停式 | 6 | 全部通过 |\r\n\r\n不通过则阻断 finalize-novel，不推进 phase → complete。报告写入 `data/reports/ending_report.md`。\r\n\r\n### 通用规范\r\n\r\n- 完成标记替换为 `---全文 完---`\r\n- 不预告下一章\r\n- 末子结构 ≥200 字（防止一句话结尾）\r\n- 最后一句用动作收束（推门。/关灯。/转身。）\n\nFile v1.35.4:references/faq.md\n\n# FAQ / 常见问题\r\n\r\n## 一、参数错误\r\n\r\n### Q: 运行脚本时报 \"用法: ...\" 错误\r\n\r\n**原因：** 命令行参数数量或顺序不对。\r\n\r\n**修复：** 查阅脚本的 docstring 或用 `--help` 查看正确用法。\r\n```bash\r\npython novel_workflow_engine.py --help\r\npython novel_state_manager.py --help\r\n```\r\n\r\n### Q: `plan-chapter` 报 \"subs_json 格式错误\"\r\n\r\n**原因：** 传入的 JSON 字符串格式不正确（少引号、多逗号等），或直接在命令行中嵌入 JSON\r\n\r\n**修复：**\r\n- **推荐方案**：写 JSON 到文件后用 `@` 加载，避免 shell 转义问题\r\n  ```bash\r\n  python novel_workflow_engine.py plan-chapter <state_path> <L##> @data/subs_<L##>.json\r\n  ```\r\n- 或用 `--generate` 生成模板文件再修改：\r\n  ```bash\r\n  python novel_workflow_engine.py plan-chapter <state_path> <L##> --generate\r\n  # 输出同时自动写入 data/subs_<L##>_template.json\r\n  ```\r\n- 确保 JSON 是合法的数组格式，每项含必填 `writing_prompt`（≥50字符）：\r\n  ```json\r\n  [{\"s_key\":\"S01\",\"title\":\"...\",\"summary\":\"...\",\"tone\":\"...\",\"writing_prompt\":\"...\"}]\r\n  ```\r\n\r\n### Q: `context_loader` 报 \"子结构未注册\"\r\n\r\n**原因：** 尝试加载的子结构尚未通过 `plan-chapter` 注册到 `novel_state.json`。\r\n\r\n**修复：**\r\n```bash\r\npython novel_workflow_engine.py plan-chapter <state_path> <L##> '<subs_json>'\r\n```\r\n然后重新运行 context_loader。\r\n\r\n## 二、依赖错误\r\n\r\n### Q: 运行脚本时报 \"ModuleNotFoundError\"\r\n\r\n**原因：** 缺少 Python 依赖模块。\r\n\r\n**修复：** 核心功能仅依赖 Python 标准库（json/os/sys/re/subprocess），不需要 pip install。\r\n可选增强功能需额外安装：\r\n- **BERT 语义检查**（finalize-chapter 第5步）：\r\n  ```\r\n  pip install sentence-transformers -i https://mirrors.aliyun.com/pypi/simple/\r\n  ```\r\n- **DeepSeek-R1-Distill-Qwen-1.5B 推理审核**（finalize-chapter 第6步，CPU 可跑）：\r\n  ```\r\n  pip install transformers torch -i https://mirrors.aliyun.com/pypi/simple/\r\n  ```\r\n两者均未安装时自动跳过，不影响现有流程。\r\n\r\n### Q: context_loader 报 \"子结构已完成，禁止重复写作\"\r\n\r\n**原因：** 尝试加载一个已经写完（status=done）的子结构。\r\n\r\n**修复：** 用 next-step 命令查找下一个待写的子结构：\r\n```bash\r\npython novel_workflow_engine.py next-step <state_path>\r\n```\r\n\r\n### Q: 提示 \"novel_state.json not found\"\r\n\r\n**原因：** 数据目录未初始化或路径不对。\r\n\r\n**修复：** 确保 `<state_path>` 指向正确的路径：\r\n```\r\n~/.workbuddy/skills/.standardization/novel-weaver/projects/<项目名>/data/novel_state.json\r\n```\r\n可用 list-projects 查看所有已创建的项目：\r\n```bash\r\npython novel_workflow_engine.py list-projects\r\n```\r\n\r\n## 三、环境错误\r\n\r\n### Q: Windows 下运行报编码错误（gbk 相关）\r\n\r\n**原因：** Python 默认编码与 UTF-8 文件不兼容。\r\n\r\n**修复：**\r\n```bash\r\nset PYTHONUTF8=1\r\n```\r\n\r\n### Q: 子结构写入时断电，文件会丢吗？\r\n\r\n**不会。** `novel_atomic_writer.py` 每写入一行就调用 `os.fsync()`，确保数据落盘。\r\n```bash\r\n# 写入完成后自动追加编号标记，可通过文件内容恢复进度\r\ncat <chapter_dir>/<sub_key>.txt | wc -l\r\n```\r\n\r\n## 四、流程异常\r\n\r\n### Q: `set-phase` 报 \"拒绝推进\"\r\n\r\n**原因：** pipeline 门禁检查未通过，前置步骤尚未完成。\r\n\r\n**修复：**\r\n```bash\r\n# 查看当前门禁状态\r\npython novel_pipeline_gate.py status <state_path>\r\n# 确认缺失的门禁后按顺序完成\r\n# fidelity → ending_verify → complete\r\n```\r\n\r\n### Q: 写作时 context_loader 输出了 \"未知\" 标题\r\n\r\n**原因：** 子结构未通过 `plan-chapter` 注册。此情况已改为报错退出。\r\n\r\n**修复：** 先运行 `verify-chapter` 确认所有子结构已注册。\r\n\r\n### Q: 想知道当前写作进度\r\n\r\n```bash\r\npython novel_workflow_engine.py next-step <state_path>\r\n```\r\n\r\n### Q: context_loader 报 \"上一子结构未标记完成\"\r\n\r\n**原因：** 子结构写作必须串行。上一子结构的文件虽已存在，但未通过 `write-sub` 管道写入 `novel_state.json`，state 显示为 pending。\r\n\r\n**修复：** 运行 write-sub 完成上一子结构的 state 标记，再重新加载下一子结构：\r\n```bash\r\ncat chapters/<L##>/<S##>.txt | python novel_workflow_engine.py write-sub <state_path> <L##> <S##>\r\n```\r\n\r\n### Q: write-sub 提示 \"字数 < 篇幅下限\" 或 \"字数 > 上限+15%\"\r\n\r\n**原因：** write-sub 写入后自动校验字数是否在篇幅目标范围内。中篇目标 1,500-2,000，校验上浮至 2,300。低于下限出 WARN，超上限+15% 出 INFO，范围内出 OK。\r\n\r\n**修复：**\r\n- WARN（低于下限）：内容过少，建议补充\r\n- INFO（超上限+15%）：篇幅过长，注意控制\r\n- OK：字数达标，无需操作\r\n- WARN/INFO 均为提示性，**不阻断写入**，不影响写作进度\r\n\r\n### Q: finalize-chapter 中的「语义检查」和「推理审核」是什么？\r\n\r\n**语义检查（第5步）：** 基于 BAAI/bge-small-zh-v1.5（33MB），检测：\r\n- overview-vs-content 语义对齐（正文是否真的在讲概述规划的内容）\r\n- 子结构间语义跳跃（两段之间话题是否断裂）\r\n- 情绪偏离+同义冗余+跨章主题延续辅助提示\r\n\r\n**推理审核（第6步）：** 基于 DeepSeek-R1-Distill-Qwen-1.5B（transformers，~1GB，CPU 可跑），检测：\r\n- 因果合理性（事件是否有前文铺垫）\r\n- 人物行为一致性（行为是否符合人格配置）\r\n- 情绪弧自然度（情绪转变是否合理）\r\n- 对话匹配度（对话是否符合角色身份）\r\n- 论证可靠性（推理是否成立）\r\n\r\n两者均有模型时执行，无模型时自动跳过，不影响现有流程。\r\n\r\n### Q: 安装 BERT 语义检查\r\n\r\n```bash\r\npip install sentence-transformers -i https://mirrors.aliyun.com/pypi/simple/\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-small-zh-v1.5')\"\r\n```\r\n\r\n### Q: 安装推理审核模型\r\n\r\n```bash\r\npip install transformers torch -i https://mirrors.aliyun.com/pypi/simple/\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from transformers import AutoModel; AutoModel.from_pretrained('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', trust_remote_code=True)\"\r\n```\r\n\r\n### Q: 出错了怎么办？\r\n\r\n按错误类型分类处理：\r\n\r\n**参数错误（命令行参数写错了）**\r\n- 检查章节目录是否存在：`ls chapters/`\r\n- 检查章节 ID 格式：`L01`、`L02`（两位数字）\r\n- 检查项目路径是否正确：`python novel_workflow_engine.py list-projects`\r\n\r\n**依赖错误（Python 包缺失）**\r\n- BERT 语义检查：`pip install sentence-transformers -i https://mirrors.aliyun.com/pypi/simple/`\r\n- 推理审核：`pip install transformers torch -i https://mirrors.aliyun.com/pypi/simple/`\r\n- 模型下载：设置 `HF_ENDPOINT=https://hf-mirror.com` 后重试\r\n\r\n**环境错误（文件/路径问题）**\r\n- novel_state.json 损坏 → 检查 data/novel_state.json 是否为合法 JSON\r\n- 子结构文件缺失 → 运行 `verify-chapter` 检查\r\n- 缓存不完整 → 删除 `~/.cache/huggingface/hub/` 对应条目重新下载\r\n- GitHub 网络不通 → 使用国内镜像：`HF_ENDPOINT=https://hf-mirror.com`\n\nFile v1.35.4:references/hooks.md\n\n# 钩子系统\r\n\r\n## 流程门禁系统\r\n\r\n门禁状态查看：`python novel_pipeline_gate.py status <state_path>`\r\n\r\n| 钩子 | 触发时机 | 类型 | 行为 | 脚本 |\r\n|------|---------|------|------|------|\r\n| 大纲确认 | 阶段1完成时 | 阻断式 | 未确认则禁止进入阶段2 | — |\r\n| **大纲因果链验证** | 用户确认大纲前 | **阻断式** | novel_causality_check.py outline — 验证每章概述因果递进 | `scripts/novel_causality_check.py` |\r\n| 子结构先行规划 | 每章写作前 | **代码级硬约束** | novel_workflow_engine.py plan-chapter 批量注册子结构 | `scripts/novel_workflow_engine.py` |\r\n| **子结构因果链验证** | plan-chapter 后 | **阻断式** | novel_causality_check.py sub-structure — 验证子结构因果递进 | `scripts/novel_causality_check.py` |\r\n| 子结构存在性验证 | 每段写作前 | **代码级硬约束** | novel_context_loader.py 读 sub_structures，未注册则报错退出 | `scripts/novel_context_loader.py` |\r\n| **串行阻断** | **每段写作前（context_loader）** | **阻断式** | 检测上一子结构 state 是否为 completed，pending 则 HOOK-BLOCK 并输出 write-sub 修复命令 | `scripts/novel_context_loader.py` |\r\n| 字数约束注入 | 每段写作前（context_loader） | 信息式（硬性提示） | 根据 meta.length 输出篇幅对应的字数范围 + 校验上浮值，禁止 LLM 自行配置 | `scripts/novel_context_loader.py` |\r\n| 写作前加载上下文 | 写作前 | 阻断式+阶段约束 | novel_context_loader.py 输出命题指令框（含字数约束/情绪/人格/文风） | `scripts/novel_context_loader.py` |\r\n| 写后即存 | 每段写作完成后 | 阻断式+原子写入 | novel_atomic_writer.py 格式校验 + fsync + 编号标记 + 字数校验（子结构目标） | `scripts/novel_atomic_writer.py` |\r\n| **更新/扩写提醒** | **已 completed 的子结构再次写入** | **软性（不阻断）** | write-sub 检测子结构状态为 completed，输出提醒要求更新后运行 finalize-chapter | `scripts/novel_workflow_engine.py` |\r\n| 署名检测 | 每段写入时 | **代码级硬阻断** | atomic_writer 检测\"由...撰写\"等8种署名模式；signature=off 时阻断 | `scripts/novel_atomic_writer.py` |\r\n| 更新进度 | 每个子结构完成后 | 阻断式 | novel_state_manager.py update-sub | `scripts/novel_state_manager.py` |\r\n| 角色登记 | 新角色出场时 | 阻断式 | novel_state_manager.py add-char | `scripts/novel_state_manager.py` |\r\n| 时间线记录 | 每章完成后 | 阻断式 | novel_timeline.py add | `scripts/novel_timeline.py` |\r\n| 章内连通性检查 | finalize-chapter 时 | **软性（不阻断）** | novel_continuity.py check — 子结构间时间/角色断链检测 | `scripts/novel_continuity.py` |\r\n| 跨章承诺链检查 | finalize-chapter 时 | **软性（不阻断）** | novel_continuity.py cross-chapter — 关键词续接检测 | `scripts/novel_continuity.py` |\r\n| 风格校验 | finalize-chapter 时 | **HARD（阻断）** | novel_style_check.py — 禁用词/末行编号/超200行阻断 | `scripts/novel_style_check.py` |\r\n| 逻辑检查 | finalize-chapter 时 | **HARD（阻断）** | novel_logic_check.py — 人物/时间线/概述匹配度，命中<30%阻断 | `scripts/novel_logic_check.py` |\r\n| **语义检查(BERT)** | **finalize-chapter 时（第5步）** | **HARD（可选，有模型时）** | novel_semantic_check.py — overview-vs-content 语义对齐<0.4 阻断；子结构间语义跳跃<0.4 阻断；情绪偏离/同义冗余/跨章主题延续 SOFT 提示 | `scripts/novel_semantic_check.py` |\r\n| **推理审核(DeepSeek-R1)** | **finalize-chapter 时（第6步）** | **HARD+SOFT（可选，有模型时，CPU 可跑）** | novel_reasoning_check.py — 5 项推理审核（因果合理性/人物行为一致/情绪弧自然度/对话匹配度/论证可靠性），按结果输出 HARD 或 SOFT | `scripts/novel_reasoning_check.py` |\r\n| **别名声明拦截/自动补** | **write-sub 写入时** | **代码级自动补（旧版为阻断）** | novel_atomic_writer.py — 检测到正文末尾缺少【别名】声明行时系统自动补 `【别名】无`；存在时剥离并调用 register-alias 注册到 characters[].aliases | `scripts/novel_atomic_writer.py` + `scripts/novel_state_manager.py` |\r\n| **一键完结章节（阻断循环）** | 子结构全部完成后 | **编排式+HARD 阻断** | finalize-chapter：聚合上述检查→有 HARD 问题写入`_fixes.json`并阻断，不标记门禁；全部通过才 pass `chapter_finalized:L##` | `scripts/novel_workflow_engine.py` |\r\n| 大纲忠实度报告 | 全文完成后 | 自动式+阶段门禁 | novel_fidelity.py generate-report（需≥stage3_ready）→ pass fidelity 门禁 | `scripts/novel_fidelity.py` |\r\n| 结尾收束验证 | 全文完成后 | **阻断式+门禁** | novel_fidelity.py verify-ending — 封闭/开放/悬停类型专项检查 | `scripts/novel_fidelity.py` |\r\n\r\n## 门禁点列表（有序、不可逆）\r\n\r\n| 门禁 | 在读什么 | 由谁 pass | 被谁 require | 阻断后果 |\r\n|------|---------|-----------|-------------|---------|\r\n| `outline_causality` | 章概述因果链 | novel_causality_check.py outline（自动） | set-phase → writing | LLM 无法开始写作 |\r\n| `sub_causality` | 子结构因果链 | novel_causality_check.py sub-structure（自动） | set-phase → writing | LLM 无法开始写作 |\r\n| `chapter_finalized:L##` | 章完结检查 | finalize-chapter（HARD 全过时） | — | 不阻断 phase，只标记完成 |\r\n| `fidelity` | 大纲忠实度 | novel_fidelity.py generate-report | set-phase → stage3_ready | LLM 无法推进到完结阶段 |\r\n| `ending_verify` | 结尾收束验证 | novel_fidelity.py verify-ending | set-phase → stage3_ready | LLM 无法推进到完结阶段 |\r\n\r\n## 查看门禁状态\r\n\r\n```bash\r\npython novel_pipeline_gate.py status <state_path>\r\n```\r\n\r\n输出示例：\r\n```\r\n[门禁状态] 当前阶段: writing\r\n  outline_causality    ⬜ PENDING\r\n  sub_causality:L01    ⬜ PENDING\r\n  chapter_finalized:L01 ⬜ PENDING\r\n  fidelity             ⬜ PENDING\r\n  ending_verify        ⬜ PENDING\r\n```\n\nFile v1.35.4:references/LICENSE.md\n\nMIT License\r\n\r\nCopyright (c) 2026 wUwproject\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\n\nFile v1.35.4:references/permissions.md\n\n# 基于 skill-standardization 渐进式披露规范的权限说明\r\n\r\n本文档由 `skill-standardization` 权限扫描器自动维护。\r\n\r\n## 风险等级\r\n\r\n**LOW**（实际权重: 0.0）\r\n\r\n## 权限总览\r\n\r\n| 权限类别 | 涉及项数 | 风险等级 |\r\n|-----------|----------|----------|\r\n| `subprocess_call` | 0 项 | ✅ LOW |\r\n| `file_delete` | 0 项 | ✅ LOW |\r\n| `network_access` | 0 项 | ✅ LOW |\r\n| `sensitive_access` | 0 项 | ✅ LOW |\r\n| `critical_write` | 0 项 | ✅ LOW |\r\n\r\n## 高权限操作说明\r\n\r\n- 无。所有文件操作均限制在技能独立数据目录内，不涉及系统关键目录、网络监听或外部请求。\r\n\r\n## 权限详细说明\r\n\r\n### 子进程调用（subprocess）\r\n\r\n**无**。\r\n\r\n\r\n### 文件删除\r\n\r\n**无**。\r\n\r\n\r\n### 网络访问\r\n\r\n**无**。\r\n\r\n\r\n### 敏感信息访问\r\n\r\n**无**。\r\n\r\n\r\n### 关键位置写入\r\n\r\n**无**。\r\n\r\n\r\n## 授权方式说明\r\n\r\n- **immediate（即时授权）**：每次执行前需获得用户批准\r\n- **unified（统一授权）**：首次执行前获得用户批准，后续不再询问\r\n- **silent（静默授权）**：无需用户交互，自动执行并记录\r\n\r\n<!-- fp:risk=LOW|sensitive=0|critical_write=0|network=0|delete=0|subprocess=0|issues=0 -->\r\n---\r\n\r\n# 权限说明\r\n\r\n## 风险等级\r\n\r\nLOW\r\n\r\n## 安全声明\r\n\r\n本技能仅操作本地文件，不涉及网络请求或敏感信息访问。\n\nFile v1.35.4:skill-card.md\n\n## Description:\n\nNovel Weaver guides agents through structured fiction writing, from setting and outline planning through staged drafting, continuity checks, style checks, logic checks, fidelity reports, and ending verification.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[ldxs001](https://clawhub.ai/user/ldxs001)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nWriters, editors, and agent operators use this skill to plan, draft, and review long-form fiction through a gated workflow with character, timeline, continuity, style, logic, semantic, and ending checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Optional model installation may run unpinned package installs and Hugging Face model loading with trust_remote_code through third-party mirrors.\n\nMitigation: Run optional model setup only in an isolated environment after reviewing package and model sources; pin package versions when possible.\n\nRisk: Filesystem and network permissions are under-disclosed relative to optional setup and local project writes.\n\nMitigation: Restrict execution to the intended project directory and grant network access only for explicit model installation.\n\nRisk: Broad auto-activation on ordinary writing requests could route unrelated writing tasks into this workflow.\n\nMitigation: Enable the skill only for novel or long-form story-writing sessions, or require an explicit user trigger before activation.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/ldxs001/skills/novel-weaver)\n- [Execution standards](references/execution_standards.md)\n- [Workflow hooks](references/hooks.md)\n- [Examples](references/examples.md)\n- [FAQ](references/faq.md)\n- [Permissions](references/permissions.md)\n- [Changelog](references/changelog.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline JSON examples, shell commands, and generated manuscript text.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Creates and updates local novel project state, chapter files, and review reports through bundled scripts when invoked by an agent.]\n\n## Skill Version(s):\n\n1.35.4 (source: server release metadata, SKILL.md frontmatter, changelog)\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.35.3: 27 files, 128994 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (55472b), references/examples.md (9778b), references/execution_standards.md (23775b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1088b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25402b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (16030b), scripts/novel_semantic_check.py (17999b), scripts/novel_state_manager.py (20214b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (51797b), skill-card.md (2503b), SKILL.md (13140b)\n\nFile v1.35.3:SKILL.md\n\n---\r\nname: novel-weaver\r\nslug: novel-weaver\r\ndisplayName: Novel Weaver\r\nversion: 1.35.3\r\nauthor: wUwproject\r\nlicense: MIT\r\ndescription: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: MEDIUM\r\ndata_dir: ../.standardization/novel-weaver/projects\r\ntags: ['novel', 'writing', 'story', 'outline', 'scene-setting', 'character', 'personality', 'emotion', 'writing-style', 'narrative', 'workflow']\r\ntrigger: 写小说/写故事/写文章/长文写作/故事大纲/场景配置/我想写个故事\r\ntrigger_negative: 翻译/改写/润色/校对/简洁回答/做 PPT/画图\r\nh1_position: true\r\nmeta_field_sync: true\r\ncreate_permissions_md: true\r\ntrigger_quality: add_triggers\r\nfaq_unparsable: reformat\r\nantipattern_count: add_examples\r\nexternal_data_dir: true\r\n---\r\n# novel-weaver — 结构化小说写作辅助技能\r\n\r\n> 本文档由 skill-standardization 自动化审计与维护。\r\n\r\n## 约束\r\n\r\n- **[强制] 新会话第一步：查看项目** — 不要猜路径，先运行以下命令查看已有的项目：\r\n  ```bash\r\n  python scripts/novel_workflow_engine.py list-projects\r\n  ```\r\n  如果无项目则创建新项目，有项目则记录 state_path 供后续命令使用。\r\n- **[强制] 流程门禁系统** — 在阶段转换时自动 require 前置门禁：→writing 检查 outline_causality + sub_causality；→stage3_ready 检查 fidelity + ending_verify。门禁状态查看：`python novel_pipeline_gate.py status <state_path>`\r\n- **[强制] 核心规划字段保护 + 串行阻断** — `novel_state_manager.py` 对核心字段做 MD5 指纹校验，LLM 不可更新。context_loader 检测上一子结构是否为 completed，否则 HOOK-BLOCK 阻断。串行写入，一次只改一个子结构\r\n- **[强制] 串行阻断** — context_loader 加载子结构上下文时检测上一子结构 state 是否为 completed。若为 pending 则输出 HOOK-BLOCK 并给出 write-sub 修复命令，强制走管道完成标记后才能继续。子结构写作必须串行\r\n- **[必须] 先确认+规划再写作** — 场景配置和大纲必须经用户确认，每章先 `plan-chapter`（含必填 writing_prompt + 情绪 tone + 可选 emotions）→ 因果链验证 → 通过串行阻断检查，才可开始写作\r\n- **[必须] 写作规范** — 每段 ≤200行（自然段落结束），atomic write 逐行 fsync，正文禁止 `L##S##` 标记行（会被阻断）\r\n- **[强制] 写作中登记** — 新角色出场时 `novel_state_manager.py add-char`。**plan-chapter 已加硬阻断**：sub_structures 中出现未登记角色名时 HOOK-BLOCK，必须先 add-char 才能写入。\r\n- **[强制] 每章六检 + 自动完结** — 写完所有子结构后 **write-sub 自动触发 finalize-chapter**（不再需手动执行）：章内连通性 → 跨章承诺链 → 风格校验 → 逻辑检查 → **语义检查** → **推理审核** → 聚合硬性问题并阻断。通过后自动推进 phase。\r\n- **[必须] 全文三检** — 全文完成后必须：`novel_fidelity.py`（大纲忠实度）+ `verify-ending`（结尾收束验证）+ `set-phase stage3_ready`\r\n\r\n### 数据目录\r\n\r\n⚠️ **LLM 禁止手工拼写路径！禁止去 Read memory/ 目录下的文件！** \r\n所有项目数据只能通过以下途径获取：\r\n\r\n**列出所有项目（新会话第一件事）：**\r\n```bash\r\npython scripts/novel_workflow_engine.py list-projects\r\n```\r\n或\r\n```python\r\nimport sys; sys.path.insert(0, 'scripts')\r\nfrom _path_utils import list_projects, resolve_state_path, DATA_DIR\r\nprojects = list_projects()\r\n# DATA_DIR = ~/.workbuddy/skills/.standardization/novel-weaver/projects/\r\n```\r\n\r\n**获取单个项目 state 路径：**\r\n```python\r\nfrom _path_utils import resolve_state_path\r\nstate_path = resolve_state_path()       # 自动从 .project 缓存读取\r\n# 或传入项目名: resolve_state_path(\"赛博搏杀记\")\r\n```\r\n\r\n**读取项目状态：**\r\n```python\r\nstate_path = resolve_state_path()\r\nif state_path:\r\n    import json; state = json.loads(open(state_path, encoding='utf-8').read())\r\nfrom _path_utils import DATA_DIR\r\nproj = DATA_DIR / '项目名' / 'data' / 'novel_state.json'\r\n```\r\n\r\n**目录结构（代码推导，仅供理解）：**\r\n```text\r\n{DATA_DIR}/<项目名>/\r\n├── data/novel_state.json          ← 状态文件\r\n├── data/.workbuddy/gate_state.json ← 门禁状态\r\n├── data/reports/                   ← 检查报告\r\n├── chapters/L##/S##.txt          ← 章节正文\r\n└── .project                       ← 路径缓存\r\n\r\n模型文件存储在：\r\n  ~/.workbuddy/skills/.standardization/novel-weaver/models/\r\n  ├── bge-small-zh/                 ← BERT 33MB（可选）\r\n  └── ds-r1-distill-qwen-1.5b/     ← DeepSeek-R1-Distill-Qwen-1.5B ~1GB（CPU 可跑）\r\n```\r\n数据目录由 `_path_utils.py` 统一管理。\r\n\r\n## 触发条件\r\n\r\n**正向触发：**\r\n- 「我想写个故事/小说/文章」→ 触发完整流程\r\n- 「帮我生成故事大纲和场景配置」→ 触发阶段1\r\n- 「根据大纲写下一章」→ 触发阶段2（续写模式）\r\n- 「帮我检查文章前后是否一致」→ 触发风格校验\r\n- 「把这几段串起来」→ 触发连通性补充\r\n- 「检查文章是否偏离了大纲」→ 触发大纲忠实度报告\r\n- 「安装模型/下载模型/装 BERT/装推理模型」→ 触发模型安装流程：安装 sentence-transformers + 下载 bge-small-zh 或安装 transformers + 下载推理审核模型\r\n\r\n**否定条件：**\r\n- 用户只是说「改写/润色」——不是本技能范畴\r\n- 用户要求翻译/简洁回答——不触发\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n\r\n本技能采用渐进式 MD 体系，SKILL.md 为入口（≤230行），详细内容拆分到 references/。\r\n\r\n| 文件 | 内容 |\r\n| ------ |------|\r\n| references/execution_standards.md | 字数管理 / 文体规范 / novel_state.json 结构 / 子结构文件格式 / 章节输出 / 时间线 / 角色表 / 结尾收束 / 实体关系追踪 |\r\n| references/hooks.md | 参考文档 | 全量流程钩子 + 门禁系统一览（类型/行为/脚本） |\r\n| references/antipatterns.md | 常见反模式与正确做法 |\r\n| references/faq.md | 常见问题与排除 |\r\n| references/changelog.md | 版本更新日志 |\r\n| references/examples.md | 使用示例 |\r\n| references/permissions.md | 权限说明 |\r\n| references/LICENSE.md | MIT 许可证 |\r\n\r\n### 渐进式文件索引\r\n\r\n| 文件名 | 分类 | 包含内容 | 审计关联 |\r\n| -------- |------| ---------- |----------|\r\n| `references/LICENSE.md` | 许可协议 | 开源许可证声明（MIT）。包含：MIT 许可证完整文本。 | R-26 |\r\n| `references/antipatterns.md` | 规范指南 | skill 编写中的常见反模式。包含：错误做法示例、正确做法示例、避坑指引。 | R-18 |\r\n| `references/changelog.md` | 版本管理 | 版本更新日志。包含：版本号、更新类型、修复项、升级说明。 | R-24 |\r\n| `references/examples.md` | 使用示例 | 各场景完整执行示例。包含：CLI 命令、执行过程、输出结果。 | R-25 C-17 |\r\n| `references/execution_standards.md` | 参考文档 | 字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。 | 无 |\r\n| `references/faq.md` | 常见问题 | 常见疑问与解答。包含：问题分类、原因分析、解决方案。 | R-19, R-25 C-19 |\r\n| `references/hooks.md` | 参考文档 | 门禁状态查看：`python novel_pipeline_gate.py status <state_path>` | 无 |\r\n| `references/permissions.md` | 权限与测试 | 权限扫描说明与测试结论。包含：风险等级、高权限操作说明、测试概览、计时统计。 | R-15, R-16 |\r\n## 工作流程\r\n\r\n### 写作流程\r\n\r\n1. **LLM 生成场景配置** → 输入 用户模糊想法 → 输出 novel_info/setting — 生成人物/时代/地点/风土人情/核心冲突\r\n2. **LLM 生成一级大纲** → 输入 场景配置 → 输出 chapters[] title/overview — L01-L15编号+标题+每章概述\r\n3. **因果链验证(outline)** → 输入 chapters[] overview → 输出 outline_causality 门禁 — 逐链节检查L01→L02→...因果递进\r\n4. **用户确认** → 输入 大纲 → 输出 确认/修正 — 钩子阻断式，未确认不得进入阶段2\r\n5. **初始化 novel_state.json** → 输入 大纲 → 输出 novel_state.json — chapters/characters/timeline 骨架\r\n6. **规划章子结构** → 输入 章节标题+概述 → 输出 sub_structures[] JSON — S01-S05+标题+概述+tone+**必填 writing_prompt(≥50字符)**+可选 emotions。缺失 writing_prompt 则 plan-chapter HOOK-BLOCK\r\n7. **注册子结构到 state** → 输入 subs_json → 输出 novel_state 更新 — MD5指纹锁定+自动字数目标+标记 is_ending/is_hook。**新角色检测+HARD-BLOCK**：sub_structures 中出现未登记角色名时阻断并提示 add-char 命令\r\n8. **子结构因果链验证** → 输入 sub_structures → 输出 sub_causality 门禁 — 逐子结构因果递进检查\r\n9. **set-phase writing** → 输入 outline+sub 门禁 → 输出 phase=writing — require 双门禁，不通过则阻断\r\n10. **加载上下文（context_loader）** → 输出 4区块优先级排列：A(标识+硬性字数/文风/署名约束+写作命题框) → B(末3行+人物+人格+实体+轨迹+节奏) → C(收尾+钩子+输出模板)。无预编命题时自动从概述合成 fallback\r\n11. **LLM 写作 → 系统组装写入** → LLM 只输出纯正文（末尾可带可选【别名】行）→ write-sub 自动组装标题行+别名行+标记行 → atomic_writer.v4 校验正文合法性。无别名行时系统自动补【别名】无\r\n12. **重复10-11** → 输入 下一子结构 → 输出 全部子结构完成 — 直到该章全部子结构写完\r\n13. **完结一章(finalize-chapter)** → 输入 章内容 → 输出 六合⼀检查报告 — **自动触发**（最后一个子结构写入后自动运行），无需手动执行\r\n14. **全文整合(fidelity)** → 输入 全部章节 → 输出 大纲忠实度报告 — 检查是否偏离大纲\r\n15. **结尾收束验证** → 输入 末章末子结构 → 输出 ending_report.md — 封闭式/开放式/悬停式三选一验证\r\n\r\n### 检查系统\r\n\r\nfinalize-chapter 是章节质量的核心关卡，聚合执行 6 步检查链：\r\n\r\n| 步骤 | 名称 | 脚本 | 作用 | 等级 |\r\n| ------ |------| ------ |------| ------ |\r\n| 1 | 章内连通性 | `novel_continuity.py` | 检测子结构间时间/角色是否断裂 | SOFT |\r\n| 2 | 跨章承诺链 | `novel_continuity.py` | 检测上章尾与下章头的关键词续接 | SOFT |\r\n| 3 | 风格校验 | `novel_style_check.py` | 禁用词/末行标记/超200行检测 | HARD |\r\n| 4 | 逻辑检查 | `novel_logic_check.py` | 角色一致性+时间线+概述关键词命中率 | HARD |\r\n| 5 | 语义检查(BERT) | `novel_semantic_check.py` | overview-vs-content 对齐+子结构间语义跳跃（有模型时） | HARD |\r\n| 6 | 推理审核(DeepSeek-R1) | `novel_reasoning_check.py` | 因果合理/人格一致/情绪弧/对话/论证（有模型时） | HARD/SOFT |\r\n\r\n步骤 1-4 由 Python 刚性规则驱动，**无外部依赖**。步骤 5-6 需本地已缓存的模型，**无模型时自动跳过（绝不联网）**。有 HARD 问题则阻断（不标记门禁），写入 `_fixes.json`；全部通过则标记 `chapter_finalized` 门禁。\r\n\r\n> ⚠️ **GPU 安全**：步骤 5-6 强制 CPU 运行（`CUDA_VISIBLE_DEVICES=-1`），避免与 LM Studio 等 GPU 应用冲突。模型推理全程使用系统内存。\r\n\r\n### 模型安装（可选，仅步骤5-6需要）\r\n\r\n步骤 5-6 只在本地已有模型缓存时运行。无模型时静默跳过，按需安装：\r\n\r\nBERT 语义检查（92MB，纯 CPU 可跑，第5步）：\r\n```bash\r\npip install sentence-transformers -i https://mirrors.aliyun.com/pypi/simple/\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from sentence_transformers import SentenceTransformer; SentenceTransformer('BAAI/bge-small-zh-v1.5')\"\r\n```\r\n\r\nDeepSeek-R1-Distill-Qwen-1.5B 推理审核（~3.7GB，CPU 可跑，第6步）：\r\n\r\n安装 transformers + torch + accelerate，有 prebuilt wheel：\r\n\r\n```bash\r\n# 1. 装 transformers + torch + accelerate\r\npip install transformers torch accelerate -i https://mirrors.aliyun.com/pypi/simple/\r\n\r\n# 2. 下载 DeepSeek-R1-Distill-Qwen-1.5B 模型（~3.7GB，hf-mirror）\r\nHF_ENDPOINT=https://hf-mirror.com python -c \"from transformers import AutoModel; AutoModel.from_pretrained('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', trust_remote_code=True)\"\r\n```\n\nFile v1.35.3:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"novel-weaver\",\n  \"version\": \"1.35.3\",\n  \"publishedAt\": 1782738612387\n}\n\nFile v1.35.3:references/antipatterns.md\n\n# 反模式与常见错误\r\n\r\n### 1. 跳过阶段1直接写作\r\n\r\n**错误做法：** 用户说出故事想法后，不先生成场景配置和大纲，直接开始写正文。\r\n\r\n**正确做法：** 执行阶段1的所有步骤——LLM 生成场景配置（人物/时代/地点/冲突），生成一级大纲（章节标题+模糊概述），供用户确认。未确认不得进入阶段2。\r\n\r\n**后果（如果跳过）：** 人物性格不一致、情节逻辑断层，返工成本远高于阶段1投入。\r\n\r\n### 2. 子结构强撑到200行\r\n\r\n**错误做法：** 叙事场景在150行已自然结束，为满足200行指标强行灌水。\r\n\r\n**正确做法：** 以自然叙事段落结束为准。字数目标按篇幅从 `meta.length` 读取（中篇 1,500-2,000，校验上浮至 2,300），write-sub 写入后自动三级校验输出 OK/WARN/INFO，在范围内即为达标，不要求精确撑满上限。一个完整的场景/对话/时间跳跃结束后立即写入文件，atomic_writer 写入后自动追加编号标记。\r\n\r\n**后果（如果强撑）：** 段落末尾出现无关描写或冗余对白，降低叙事质量。\n\nFile v1.35.3:references/changelog.md\n\n## [1.35.3] - 2026-06-29\r\n\r\n### 修复\r\n- **[P0] context_loader 写作命题 fallback 导致双模板问题** — 砍掉 `_auto_generate_prompt()` 自动合成机制，改为 HARD-BLOCK。writing_prompt 缺失时不再自动从摘要+tone 合成 fallback，而是打印清晰错误+sys.exit(1)，强制从 plan-chapter 补全。同步修复 `execution_standards.md` 情绪示例缺 writing_prompt 的旧模板残留、`next-step` 输出误导性文案。\r\n- **根因**：context_loader 有 `_auto_generate_prompt()` 落点，让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成\"plan-chapter 拦、context_loader 放水\"的软硬两套标准。\r\n\r\n## [1.35.2] - 2026-06-29\r\n\r\n### 修复\r\n- **LICENSE.md copyright 修复** — git-sync 脱敏流程将 `wUwproject` 误替换为 `[username-redacted]`，已恢复为 `wUwproject`\r\n\r\n## [1.35.1] - 2026-06-29\r\n\r\n### 文档\r\n- 更新 SKILL.md 约束章和写作流程：plan-chapter 新角色硬阻断、finalize-chapter 自动完结说明\r\n- 更新模型安装章：添加 accelerate 依赖、更正模型体积、增加 GPU 安全说明\r\n\r\n## [1.35.0] - 2026-06-29\r\n\r\n### 新增\r\n- **plan-chapter 新角色检测 + HARD-BLOCK** — 注册子结构后自动扫描所有 title/summary/writing_prompt 中的 2-3 字中文名，与 characters[] 比对，发现未登记角色则阻断并提示 add-char 命令，防止角色写入时缺人物卡\r\n- **write-sub 自动触发 finalize-chapter** — 写完本章最后一个子结构后自动检测所有子结构 status=completed，自动调用完结验证（四合一必跑，五/六步有模型跑无模型跳过），不再依赖手动执行\r\n\r\n### 修复\r\n- **原子写入 + 写入后 JSON 验证** — `save_state()` 和 `_generate_behavior_summary()` 改用写 .tmp 文件 → 验证 JSON 可解析 → rename 的原子写入模式，防止 Python 崩溃遗留半截文件\r\n- **语义检查/推理审核永不联网** — 模型只在本地已缓存时才加载，用 snapshot 路径直读，零网络请求。无本地模型时直接跳过步骤 5/6 并提示安装命令。下载逻辑只发生在用户主动要求时（SKILL.md 模型安装章节）\r\n- **强制 CPU 避免与 LM Studio 冲突** — `CUDA_VISIBLE_DEVICES=-1` 在 torch/sentence_transformers 导入前设置，确保 GPU 显存完全留给 LM Studio，零冲突\r\n\r\n## [1.34.5] - 2026-06-29\r\n\r\n### 修复\r\n- **字数校验 meta.length 缺失不再跳过** — `meta.length` 是场景配置必填字段，缺失即项目初始化问题，改为 HOOK-BLOCK 并输出 set-length 命令，不允许静默跳过\r\n\r\n## [1.34.4] - 2026-06-29\r\n\r\n### 修复\r\n- **faq.md JSON 格式错误答案过时** — 改为推荐 @file.json 主方案 + --generate 辅助方案，不再教用户转义内联 JSON\r\n- **SKILL.md + execution_standards.md + examples.md 全量文档扫描对齐** — 确认所有示例与 v1.34 行为一致（writing_prompt 必填、body-only 管道、系统组装）\r\n\r\n## [1.34.3] - 2026-06-29\r\n\r\n### 修复\r\n- **finalize-chapter 增加章边界流程刷新提示** — 每章完结时输出下一章完整写作步骤列表+禁止事项，利用章边界作为 LLM 的自然重置点，打断跨章惯性\r\n\r\n## [1.34.2] - 2026-06-29\r\n\r\n### 修复\r\n- **context_loader 串行阻断增加文件系统检测** — 检测到上一个子结构文件存在但 state 为 pending 时（绕过 write-sub 管道直接写文件），输出区分化报错并给出重新管道命令\r\n- **[下一步] 写入命令增加强制警告** — 明示禁止使用 Write 工具直接写文件，必须走管道\r\n\r\n## [1.34.1] - 2026-06-29\r\n\r\n### 修复\r\n- **novel_semantic_check.py BERT 模型路径不兼容** — SENTENCE_TRANSFORMERS_HOME 指向 MODELS_DIR 但模型以 HF hub 格式存储（models--BAAI--bge-small-zh），库不认该目录结构。改为先检测 MODELS_DIR 是否含有效 HF hub 模型，有则正确指向，无则清 env var 回落默认 HF 缓存\r\n\r\n## [1.34.0] - 2026-06-29\r\n\r\n### 修复\r\n- **plan-chapter JSON 保存 + CLI 错误信息增强** — 成功注册后自动保存 JSON 副本到 data/subs_L##.json；JSON 解析失败时输出完整用法+@file.json 和 --generate 两条替代路径；缺参数时不再 IndexError，改为清晰错误\r\n- **--generate 模板同时写入文件** — 生成 stdout 模板的同时写入 data/subs_L##_template.json，支持 @file.json 直接加载\r\n- **next-step 推荐 @file.json** — 规划下一章时优先推荐文件加载方案，避免 CLI JSON 转义问题\r\n\r\n## [1.33.0] - 2026-06-29\r\n\r\n### 修复\r\n- **write-sub 重构为系统组装模式（v2）** — LLM 只需输出纯正文，系统自动组装标题行+别名行+末行标记。atomic_writer.v4 改为 `validate_and_write_body()` 只校验正文合法性，不再校验标题/标记格式\r\n- **atomic_writer 别名检查改为自动补** — 正文无别名行时系统自动补 `【别名】无`，不再 HOOK-BLOCK。LLM 减少一项格式负担\r\n- **context_loader 输出按优先级重排** — 字数约束/文风约束/署名约束/命题框移至头部黄金位，参考数据（人物/实体/轨迹/节奏）居中，输出模板/钩子位放尾部。删除了低价值\"情绪写作参考词\"块\r\n- **恢复 writing_prompt 输出** — 之前模板替换误删了写作命题框和叙事节奏块，已恢复\r\n- **writing_prompt 改为必填+自动补体系** — plan-chapter 强制 writing_prompt ≥50 字符，缺失即 HOOK-BLOCK；context_loader 对存量缺字段子结构自动合成 fallback 命题\r\n- **plan_chapter() 丢弃 writing_prompt** — 用户预先编写的详细写作命题（≥50字符）现在正确存储到 novel_state.json 的子结构字段中，不再被丢弃\r\n- **context_loader 缺失写作命题框** — 新增 [硬性] 写作命题框，有预编命题时直接输出，无预编时自动合成 fallback\r\n- **JSON Schema 校验加强** — plan-chapter 增加必填字段（s_key/title/summary/tone）和 summary 最低字数（12有效字符）校验，拒绝不可用输入\r\n- **context_loader 新增写作框架参考** — 结构化三段式模板（开头20%/中段60%/结尾20%）引导 LLM 保持一致的叙事节奏\r\n- **调用路径统一** — 增加 plan-chapter 的验收性校验，拒绝 dict 格式和缺字段的 JSON 输入\r\n\r\n## [1.32.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.31.0] - 2026-06-28\r\n\r\n### 修复\r\n- **文档残存旧引用清理** — SKILL.md 残留旧安装命令 (llama_cpp import)、faq.md 旧安装命令和模型描述已全部替换为 transformers 方案\r\n- **目录树对齐** — SKILL.md 缓存路径 `ds-r1-distill-qwen-1.5b-q4` -> `ds-r1-distill-qwen-1.5b`\r\n- **模型文件路径** — novel_reasoning_check.py 高亮字符修复（替换全角标点避免 SyntaxError）\r\n- **推理 JSON 解析增强** — 支持多种模型返回格式（纯数组、`{dimensions:[...]}`、`````json```` 代码块）\r\n\r\n## [1.30.0] - 2026-06-28\r\n\r\n### 变更\r\n- **推理审核引擎重构 v3.0** — 从 llama-cpp-python (GGUF) 切换为 transformers + torch，彻底解决编译依赖\r\n- **安装流程简化** — 移除所有 C++ 编译需求（winlibs/GCC/cmake），改为 pip install transformers torch（aliyun 镜像有 prebuilt wheel）\r\n- **模型下载改用逐文件** — 使用 hf_hub_download 逐文件下载，避免 snapshot_download 卡死，支持 hf-mirror 自动降级\r\n- **新增 GPU 自动检测** — `_load_model()` 自动检测 CUDA，有 GPU 用 GPU，无 GPU 回落 CPU\r\n- **模型切换** — 从 Qwythos-9B（GGUF，需 GPU）→ DeepSeek-R1-Distill-Qwen-1.5B（transformers，~1GB，CPU 可跑）\r\n- **技能文档全量更新** — SKILL.md、novel_reasoning_check.py、execution_standards.md、faq.md、hooks.md 中所有 Qwythos/GGUF/winlibs 引用替换为 transformers 方案\r\n\r\n## [1.29.0] - 2026-06-28\r\n\r\n### 修复\r\n- 中英文混排修复：timeline骨架→timeline 骨架、可选emotions→可选 emotions、sub门禁→sub 门禁、require双门禁→require 双门禁\r\n- SKILL.md 代码块补充语言标识（```bash）\r\n\r\n## [1.28.0] - 2026-06-28\r\n\r\n### 变更\r\n- R-20 输出粒度拆分：每条中英文混排、术语不一致独立 WARN，输出格式为「文件名:行号：描述」\r\n- R-23 文档引用输出携带真实行号（修复多处硬编码 :1）\r\n- R-25 C-* 子项独立输出\r\n- R-11 每条路径违规独立输出\r\n- 模型安装说明中增加 g++/cmake 独立检查流程 + winlibs 下载直链+镜像\r\n\r\n---\r\n\r\n## [1.27.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.26.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.25.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.24.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.23.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.22.0] - 2026-06-28\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.21.6] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **版本号同步** — 重新发布修正后的 SKILL.md 和 novel_reasoning_check.py（含 g++/cmake 独立检查流程）到 ClawHub + SkillHub\r\n\r\n---\r\n\r\n## [1.21.5] - 2026-06-28\r\n\r\n### 文档\r\n\r\n- **Qwythos 安装说明重写** — SKILL.md 和 novel_reasoning_check.py 同步更新为独立检查流程：\r\n  1. 检查 g++（无则下载 winlibs 压缩包，解压到 MODELS_DIR/winlibs/，配 PATH）\r\n  2. 检查 cmake（无则 pip install cmake）\r\n  3. pip install llama-cpp-python（编译安装）\r\n  4. 下载 Qwythos GGUF 模型\r\n- winlibs 下载直链 + SourceForge 镜像均写入文档\r\n\r\n---\r\n\r\n## [1.21.4] - 2026-06-28\r\n\r\n### 更正\r\n\r\n- **v1.21.2 归因更正** — 之前 changelog 中将 ClawHub/SkillHub 发布旧内容归因为\"git-sync Bug\"，**此为错误归因**。真实原因是：操作者在 bump 时手动 sed 改了 workbuddy-skills 的版本号行但未同步内容，然后并发启动 git-sync + ClawHub + SkillHub，导致 ClawHub/SkillHub 读到旧版 SKILL.md 发布。**非 git-sync 问题，是操作者时序错误。**\r\n\r\n---\r\n\r\n## [1.21.3] - 2026-06-28\r\n\r\n### 文档\r\n\r\n- **SKILL.md 模型安装说明前置** — 触发条件新增\"安装模型/装 BERT/装 Qwythos\"正向触发词；检查系统章节下方直接嵌入 pip install + 模型下载命令，LLM 不再需要跳转 faq.md 查找\r\n\r\n---\r\n\r\n## [1.21.2] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **操作时序错误导致 ClawHub/SkillHub 内容错位** — bump 1.21.1 时先手动 sed 改了 workbuddy-skills 的版本号行，然后同时启动 git-sync + ClawHub + SkillHub，导致 ClawHub/SkillHub 读到的是半路改过 version 但内容未同步的旧 SKILL.md。已修正并重新发布 1.21.2\r\n\r\n---\r\n\r\n## [1.21.1] - 2026-06-28\r\n\r\n### 修复\r\n\r\n- **SKILL.md 碎片/乱码修复** — 约束行\"门禁状态存于 ， 查看\"改为完整命令；渐进式文件索引表 execution_standards 描述从\"/ 层级 / 上限 / 说明 /\"改为正常内容\r\n- **SKILL.md 新增「检查系统」章节** — 6步检查器表格（脚本/作用/阻断等级），LLM 不需跳转 references 即可理解最终检查流程，196行满足 ≤230行审计要求\r\n\r\n---\r\n\r\n## [1.21.0] - 2026-06-28\r\n\r\n### ✨ 新增功能\r\n\r\n- **BERT 语义检查引擎** — `novel_semantic_check.py`，基于 bge-small-zh-v1.5（33MB），实现 overview-vs-content 语义对齐检测和子结构间语义跳跃检测，集成到 finalize-chapter 第5步\r\n- **Qwythos 推理审核引擎** — `novel_reasoning_check.py`，基于 Qwythos-9B GGUF Q4_K_M（~5.5GB，需 GPU），实现因果合理性/人物行为一致性/情绪弧/对话匹配度/论证可靠性五项推理审核，集成到 finalize-chapter 第6步\r\n- **路径统一管理** — `_path_utils.py` 新增 `MODELS_DIR`，所有模型缓存集中到 `models/` 目录，与 huggingface 全局缓存隔离\r\n- **文档全面同步** — SKILL.md、execution_standards.md、hooks.md、faq.md 同步更新：检查链从4步扩展为6步、新增别名系统/实体关系追踪/行为摘要章节\r\n\r\n### 修复\r\n\r\n- **SKILL.md 消除重复段** — 删除第160-174行与第136-157行完全重复的能力表和不支持列表\r\n\r\n---\r\n\r\n## [1.20.5] - 2026-06-27\r\n\r\n### ✨ 新增功能\r\n\r\n- **项目初始化优化**：完整角色表支持（含 MBTI/原型/功能定位）、文风系统字段、实体关系追踪器数据层\r\n- **子结构 emotion 增强**：多维度情绪混合配置，强度分级输出 + 混合解读公式\r\n\r\n---\r\n\r\n## [1.20.4] - 2026-06-27\r\n\r\n### 新增\r\n- **[atomic_writer] 别名声明阻断钩子** — 每个子结构正文末尾必须声明别名：`【别名】老陈 = 陈叔` 或 `【别名】无`。缺失则 HOOK-BLOCK 阻断写入（S01 豁免）。\r\n- **[context_loader] 别名声明指令** — 输出末尾追加硬性别名声明框，LLM 每次写作前看到强制要求\r\n- **[state_manager] register-alias 命令** — 新增 `register-alias` CLI，atomic_writer 拦截别名行后自动调此命令注册\r\n- **[entity_extractor] 删除别名启发式** — 回退到纯机械操作，别名识别完全由 LLM 语义 + atomic_writer 钩子完成\r\n\r\n### 流程\r\n- write-sub 管道: atomic_writer(含别名钩子) → state_manager → 字数校验 → entity_extractor\r\n- 别名声明行被 atomic_writer 拦截，不写入 .txt 文件，直接走 state_manager 注册\r\n- S01 豁免（尚无角色可产生别名），S02+ 强制声明\r\n\r\n---\r\n\r\n## [1.20.3] - 2026-06-27\r\n\r\n### 新增\r\n- **[entity_extractor] 自动别名识别** — 同一个子结构（~2000字）内，未知候选名与已知角色名共现且共享至少一个汉字时，自动识别为别名并写入 character.aliases。无需提前注册，零假阳性风险（同子结构+共享字符=同一人）\r\n\r\n### 原理\r\n\"陈叔！你怎么来了？\"老陈此时正在街角看着我。\r\n→ \"陈叔\"与\"老陈\"共享\"陈\"字，同子结构内共现 → 自动识别为别名\r\n\r\n---\r\n\r\n## [1.20.2] - 2026-06-27\r\n\r\n### 新增\r\n- **[角色别名系统]** — `add-char` 新增第10参数 `aliases`（逗号分隔），角色注册时可指定别名（如\"陈叔\"）\r\n- **[entity_extractor] 别名识别** — 已知角色的别名不再被创建为新实体，别名在正文中出现时正确更新该实体的 last_chapter\r\n- **[context_loader] 别名显示** — 已出场关键人物区块中别名以 `[别名: 陈叔]` 形式显示\r\n- **[IMMUTABLE_SCOPE] 别名保护** — `aliases` 字段列入指纹保护范围\r\n\r\n### 解决场景\r\n- 叙事用\"老陈\"、对话用\"陈叔\"——alias 注册后视为同一实体，LLM 看到别名提示即知为同一个人\r\n\r\n---\r\n\r\n## [1.20.1] - 2026-06-27\r\n\r\n### 新增\r\n- **[behavior_summary] 跨章行为摘要系统** — novel_state.json 每章新增 `behavior_summary` 字段，记录各角色的关键行为轨迹\r\n- **[finalize-chapter] 行为摘要自动提取** — 完结检查通过后自动从子结构正文提取角色行为，去重后写入 state（每角色最多 5 条）\r\n- **[context_loader] 上一章行为轨迹注入** — 在实体关系网之后追加「上一章行为轨迹」区块，LLM 看到角色刚做了什么，续写自然一致\r\n\r\n### 架构\r\n- finalize-chapter 成功路径末尾追加行为摘要提取\r\n- context_loader 输出顺序: 关键人物 → 实体关系网 → 行为轨迹(新增) → 情绪参考\r\n- 行为摘要是纯运行时数据，不受指纹保护\r\n\r\n---\r\n\r\n## [1.20.0] - 2026-06-27\r\n\r\n### 新增\r\n- **[entity_tracker] 实体关系追踪系统** — novel_state.json 新增 `entity_tracker` 数据层，追踪角色/物品/地点/组织/数据五类实体的属性和相互关系\r\n- **[entity_extractor] 自动实体提取** — 新脚本 `novel_entity_extractor.py`，write-sub 第4步非阻断执行，从每子结构内容中自动提取实体-关系三元组、检测状态更新\r\n- **[context_loader] 实体关系网注入** — 「已出场关键人物」区块后追加「实体关系网」区块，全量累加输出实体列表和关系，LLM 写作时看到累计事实\r\n- **[logic_check] 实体状态一致性检查** — 检查已标记降级状态的实体（destroyed/damaged/dead 等）是否在后续章节无恢复地被使用，HARD 级警告\r\n- **[logic_check] 实体关系链检查** — 检查同时出现的两个实体间已创建的关系是否被忽略，SOFT 级提示\r\n- **[state_manager] 兼容 entity_tracker** — _merge_runtime_fields 保留 entity_tracker，init_project 初始化为空列表\r\n\r\n### 架构\r\n- write-sub 管道: atomic_writer → state_manager → 字数校验 → entity_extractor(新增)\r\n- context_loader 输出: 关键人物 → 实体关系网(新增) → 情绪参考\r\n- finalize-chapter 逻辑检查: 5项(新增2项: 实体状态+关系链)\r\n\r\n---\r\n\r\n## [1.19.11] - 2026-06-27\r\n\r\n### 修复\r\n- **[context_loader] 跨章串行阻断** — 首次加载某章第一个子结构时，检查上一章是否所有子结构已完成。未完成则 HOOK-BLOCK\r\n- **[context_loader] 关键人物 function 缺失阻断** — 从软提示改为 HOOK-BLOCK，角色有 first_appearance 但无 function 时阻断写作\r\n- **[state_manager] add-char function 阻断** — 注册角色时若有 first_appearance 但无 function，直接阻断，规划阶段即强制填写\r\n\r\n---\r\n\r\n## [1.19.10] - 2026-06-27\r\n\r\n### 新增\r\n- **[atomic_writer] 标点缺失校验** — 软性提示（不阻断），检测正文中超过80字无任何标点的片段，输出 [PUNCT] 建议补充断句标点\r\n\r\n---\r\n\r\n## [1.19.9] - 2026-06-27\r\n\r\n### 修复\r\n- **[context_loader] 关键人物输出改为全量累加** — 不再按章节过滤，所有有 `first_appearance` 的角色每子结构全量输出。L03 也能看到老贾卖格斗术的定位，杜绝\"当前章节看不到上一章角色\"的问题\r\n\r\n---\r\n\r\n## [1.19.8] - 2026-06-27\r\n\r\n### 新增\r\n- **[context_loader] 已出场关键人物注入** — 所有有 `first_appearance` 的角色登场即累加，每子结构全量输出已出场角色及其 `function`（职责/定位）。不限章节，杜绝遗漏\r\n- **[state_manager] add-char 支持 function 字段** — 角色注册时可通过第9参数填写功能定位，写入 IMMUTABLE_SCOPE 保护\r\n\r\n### 修复\r\n- 版本跳号：1.19.7 代码已改但 git-sync 跳过推送，强制 bump 至 1.19.8 重新推送\r\n\r\n---\r\n\r\n## [1.19.7] - 2026-06-27\r\n\r\n### 新增\r\n- **[context_loader] 已出场关键人物注入** — 根据 `characters[].first_appearance` 过滤，每子结构输出当前章节前已登场的角色及其 `function`（职责/定位）。LLM 看到\"老贾卖格斗术给主角\"就不会编成\"父亲遗物\"\r\n- **[state_manager] add-char 支持 function 字段** — 角色注册时可通过第9参数填写功能定位，写入 IMMUTABLE_SCOPE 保护\r\n\r\n### 修复\r\n- **[赛博搏杀记] 角色 function 字段补齐** — 林铁生、林铁心、归元会散人等已补充 function 描述\r\n\r\n---\r\n\r\n## [1.19.6] - 2026-06-27\r\n\r\n### 新增\r\n- **[novel_workflow_engine.py] 更新/扩写提醒** — write-sub 检测到子结构已为 completed 时，标记为更新模式，输出提醒要求更新后运行 finalize-chapter\r\n- **[SKILL.md] 更新/扩写流程约束** — 新增\"[强制] 更新/扩写逐子结构串行\"，禁止批量更新\r\n- **[hooks.md] 更新/扩写提醒钩子** — 新增钩子条目\r\n\r\n---\r\n\r\n## [1.19.5] - 2026-06-26\r\n\r\n### 新增\r\n- **[plan_chapter] 字数目标写入子结构规划** — `word_count_target: {min, max, check_max}` 自动根据 `meta.length` 注入每个子结构。LLM 读 `novel_state.json` 即可看到字数要求，无需翻技能文档\r\n- **[context_loader] 字数约束从子结构读取** — 不再硬编码 SUB_WORD_TARGETS，改为读 `sub_structures[].word_count_target`\r\n- **[write-sub] 字数校验从子结构读取** — 同上，三处同源\r\n\r\n### 修复\r\n- **[赛博搏杀记] L01/L02/L03 注入 word_count_target** — 通过 plan-chapter 重注册，所有子结构持有字数目标\r\n\r\n---\r\n\r\n## [1.19.3] - 2026-06-26\r\n\r\n### 修复\r\n- **[SKILL.md] 文档脱钩全量修复** — 约束新增串行阻断条目；工作流程步骤10/11更新为字数约束+串行阻断+write-sub 三级校验；核心能力表格更新为 write-sub 管道描述；hooks.md 新增串行阻断/字数约束注入钩子条目\r\n- **[references/*.md] 全量扫描修复** — execution_standards.md 阻断规则新增串行阻断+字数校验；faq.md 新增\"上一子结构未完成\"和\"字数校验解读\"FAQ；examples.md 更新 context_loader/write-sub 输出示例；antipatterns.md 引用三级字数校验\r\n\r\n---\r\n\r\n## [1.19.2] - 2026-06-26\r\n\r\n### 修复\r\n- **[SKILL.md] 新会话指引缺失** — 约束首条新增\"[强制] 新会话第一步：查看项目\"，数据目录节明确禁止手工拼写路径并列出 list-projects CLI 命令，LLM 不再猜路径\r\n\r\n---\r\n\r\n## [1.19.1] - 2026-06-26\r\n\r\n### 新增\r\n- **[novel_context_loader.py] 串行阻断钩子** — 加载子结构上下文时检测上一子结构 state 是否为 completed，若为 pending 则 HOOK-BLOCK 并输出 write-sub 修复命令，强制 LLM 走管道完成标记后才能继续。子结构串行写作流程由代码级硬约束保障，不再依赖 LLM 自觉\r\n\r\n---\r\n\r\n## [1.19.0] - 2026-06-26\r\n\r\n### 新增\r\n- **[novel_context_loader.py] 字数约束注入上下文** — 根据 `meta.length` 在写作前输出篇幅对应的字数范围 + 校验上浮值，LLM 不再盲写，禁止自行配置\r\n- **[novel_workflow_engine.py] 字数校验统一标准** — write-sub 检查使用与 context_loader 相同的字数目标 + 15% 上浮窗口（中篇 1,500-2,300 范围内通过），低于下限 WARN、超上浮 INFO、范围内 OK\r\n- **[execution_standards.md] 三阶段统一标准文档** — 明确字数目标在规划/写作/检查三阶段使用同一套标准，禁止 AI 自行配置\r\n\r\n### 修复\r\n- **[novel_context_loader.py] 情绪格式向后兼容** — 兼容遗留的字符串数组情绪格式（如 `[\"疑惑\",\"不安\"]`），避免 AttributeError\r\n- **[novel_context_loader.py] GBK 终端 emoji 编码崩溃** — 所有 emoji 替换为 `[硬性]`/`[参考]`/`[下一步]` 文本标记\r\n\r\n---\r\n\r\n## [1.18.2] - 2026-06-26\r\n\r\n### 修复\r\n- 修复_extract_keywords 和 fidelity_check 的 CJK 关键词提取: {2,10}整段匹配→2-4字滑动窗口,避免过长短语匹配失败\r\n\r\n---\r\n\r\n## [1.18.1] - 2026-06-26\r\n\r\n### 修复\r\n- 补写1.18.0 changelog 条目,R-11/R-12/C-07/C-16/C-18手动修复,changelog 条目补全\r\n\r\n---\r\n\r\n## [1.18.0] - 2026-06-26\r\n\r\n### Fixed\r\n- R-11: 删除 SKILL.md 中硬编码的绝对路径示例\r\n- R-12: novel_state_manager.py 添加 DATA_DIR 导入,替换局域路径计算\r\n- C-07: 补充代码块语言标识(```→```text)\r\n- C-16: execution_standards.md 过期行数阈值200→230\r\n- C-18: SKILL.md 补充环境依赖说明(Python3.8+/离线/UTF-8)\r\n\r\n### Changed\r\n- 全流程 refactor 改造: 路径集中管理审计整合\r\n\r\n---\r\n\r\n## [1.17.2] - 2026-06-26\r\n\r\n### 修复\r\n- 指纹保护修复: plan-chapter 成功后更新.state_fingerprint.txt, 使后续章节规划不被误阻断\r\n\r\n---\r\n\r\n## [1.17.1] - 2026-06-26\r\n\r\n### 修复\r\n- 路径统一管理: novel_workflow_engine.py 改从_path_utils.py 导入 DATA_DIR,消除路径重复计算\r\n\r\n---\r\n\r\n## [1.17.0] - 2026-06-26\r\n\r\n### 修复\r\n- plan-chapter 新增文件加载(@/路径), 避免 Shell 转义破坏 JSON\r\n\r\n---\r\n\r\n## [1.16.4] - 2026-06-25\r\n\r\n### 修复\r\n- 4核心脚本加 stdout 编码修复(sys.stdout.reconfigure utf-8), 解决 Git Bash 中文乱码\r\n\r\n---\r\n\r\n## [1.16.3] - 2026-06-25\r\n\r\n### 修复\r\n- novel_continuity.py check 自动推导 chapter_dir 从 state_path, 修复 LLM 路径错误\r\n\r\n---\r\n\r\n## [1.16.2] - 2026-06-25\r\n\r\n### 修复\r\n- 原始 SKILL.md 补充 slug/displayName 前导字段(修复 git-sync 冲掉问题)\r\n\r\n---\r\n\r\n## [1.16.1] - 2026-06-25\r\n\r\n### 修复\r\n- 数据目录章节改为代码示例驱动, LLM 禁止手写路径, 提供_path_utils.py 调用代码\r\n\r\n---\r\n\r\n## [1.16.0] - 2026-06-25\r\n\r\n### 修复\r\n- SKILL.md data_dir 修正(data->projects), 新增数据目录章节指引 LLM 路径\r\n\r\n---\r\n\r\n## [1.15.1] - 2026-06-25\r\n\r\n### 修复\r\n- 标准化改造:_meta.json 路径修正/examples.md 路径修正/术语统一/约束9to8/路径 bug 修复\r\n\r\n---\r\n\r\n## [1.15.0] - 2026-06-25\r\n\r\n### 新增\r\n- **[novel_state_manager.py] 核心规划字段保护** — 新增 `_fingerprint()` 指纹校验，首次 plan-chapter 后锁定以下字段：章节 title/overview、子结构 title/summary/tone、角色 name/role/traits/mbti/archetype、novel_info/writing_style/setting。任何非法更新被阻断并打印来源。运行时字段（word_count, status, timeline, continuity_notes）不受影响\r\n- **[novel_workflow_engine.py] plan-chapter --generate 模式** — `python novel_workflow_engine.py plan-chapter <state> <L##> --generate` 输出子结构 JSON 模板供 LLM 填写\r\n- **[novel_workflow_engine.py] 字数代码级校验** — write-sub 写入后根据篇幅(short/medium/long)检查每子结构字数是否达到下限，低于目标打印 WARN\r\n- **[novel_workflow_engine.py] list-projects 集成** — 新增 `list-projects` 命令，列出所有项目名称/路径/阶段/章节进度\r\n- **[_path_utils.py] 中文路径编码修复** — 新增路径解析模块，通过.resolve() + .project 缓存机制，后续命令无需反复传路径\r\n\r\n### 修复\r\n- **[novel_logic_check.py] 概述匹配度不再 HARD 阻断** — 概述为写作前规划的基准文件，一旦确认不可更改。内容与概述的偏离仅做信息性标记(SOFT)，不阻塞 finalize-chapter\r\n\r\n## [1.14.0] - 2026-06-25\r\n\r\n### 修复\r\n- **[novel_logic_check.py] 关键词匹配算法改用 bigram 重叠率** — 旧算法将概述按标点切段后要求整段逐字出现在正文，导致语义概述永远无法通过 HARD 检查。改用`2字滑动窗口(bigram)重叠率`匹配，语义自然概述即可正常通行。阈值：WARN=<20%, INFO=<40%\r\n- **[novel_logic_check.py] 概述匹配度不再 HARD 阻断** — 概述为写作前规划的基准文件，一旦确认不可更改。内容与概述的偏离仅做信息性标记(SOFT)，不阻塞 finalize-chapter。偏差信息写入 reports 供参考\r\n- **[novel_causality_check.py] 检查通过后自动 pass 门禁** — outline/sub-structure 检查全部通过后自动调用`pass_gate()`，消除手动 pass_outline_causality/sub_causality 门禁的步骤\r\n- **[novel_pipeline_gate.py] set-phase writing 增加 sub_causality 检查** — 转换到 writing 阶段时除了 require outline_causality，现在也 require sub_causality\r\n- **[novel_context_loader.py] 末尾输出 write-sub 命令** — 每个子结构上下文加载后，自动输出下步应执行的完整`write-sub`管道命令\r\n\r\n## [1.13.6] - 2026-06-25\r\n\r\n### 修复\r\n- **[novel_workflow_engine.py] DATA_DIR 路径错误** — `SKILLS_ROOT.parent / \".standardization\" / \"novel-weaver\" / \"projects\"` 多了一层 `.parent`，导致路径跳到 `.workbuddy/.standardization/` 而非 `skills/.standardization/`，造成：\r\n  - 帮助信息显示的默认 state 路径指向错误目录\r\n  - next_step 中 HARD 残留检查的 `DATA_CHAPTERS` 路径同样失效\r\n  - 修正为 `SKILLS_ROOT / \".standardization\" / \"novel-weaver\" / \"projects\"` ✅\r\n- **[novel_workflow_engine.py] next_step 函数定义在 __main__ 块之后** — 导致 `next-step` 命令 NameError: name 'next_step' is not defined。函数定义已移至 `__main__` 之前。\r\n\r\n---\r\n\r\n## [1.13.5] - 2026-06-25\r\n\r\n### 修复\r\n- **Bug 1: overview keyword 匹配对中文失效** — `novel_logic_check.py:213` 使用 `.split()` 对中文文本分词，无空格时整个概述变成一个 keyword 导致永久假阴性。改用 `re.split()` 按标点和空白分词\r\n- **Bug 2: 角色重叠检测被贪婪匹配吃掉短词** — `novel_continuity.py:39` 使用 `{2,4}` 贪婪匹配，\"铁心说得对\"吐出`铁心说得`，\"铁心说我有\"吐出`铁心说我`，交集为空。改用双字滑动窗口 `char_bigrams()`\r\n- **Bug 3: tone 硬编码判定改为纯数据参考** — `novel_logic_check.py` tone 检查不再 append issues（不参与阻断），仅 print 命中数 + 语速分析；`novel_context_loader.py` 新增\"情绪写作参考\"模块，写前给出场景词引导\r\n\r\n---\r\n\r\n## [1.13.4] - 2026-06-25\r\n\r\n### 新增\r\n- **执行规范字数参考表** — `execution_standards.md` 新增按篇幅（短篇/中篇/长篇）的每章/每子结构字数参考标准，确保规划时字数可控\r\n\r\n### 修复\r\n- **字数规划缺失** — 之前仅有行数上限（200行/子结构）无字数指导，导致规划阶段字数偏差不可控\r\n\r\n---\r\n\r\n## [1.13.3] - 2026-06-25\r\n\r\n### 修复\r\n- **`init` 自动项目目录** — `init <项目名>` 自动创建在 `.standardization/novel-weaver/projects/<项目名>/data/novel_state.json`，各项目完全隔离\r\n- **`list-projects` 扫描路径修复** — 扫描 `.standardization/novel-weaver/projects/` 下所有项目子目录\r\n- **workflow_engine 路径推导修复** — `_chapters_dir`/`_report_dir` 从 `state_path` 自动推导每个项目的 chapters/reports 路径\r\n- **清除旧版扁平目录** — 删除 `skills/.standardization/novel-weaver/data/` 下的过期文件（已迁移到 `projects/`）\r\n\r\n### 新增\r\n- **`init` 支持自动/手动双模式** — 传项目名自动建子目录，传完整路径精确控制\r\n\r\n---\r\n\r\n## [1.13.2] - 2026-06-25\r\n\r\n### 文档同步\r\n- SKILL.md: \"16 个流程钩子\"→\"全量流程钩子\"（避免计数过时）；state_manager.py 描述补全 init/set-length/list-projects\r\n- execution_standards.md: style_guide→writing_style（2处）；current_phase→meta.current_phase；\"自动推进 phase\"→\"需手动推进\"；finalize-chapter 签名修正\r\n- examples.md: 场景1加 init 步骤；next-step 输出加篇幅行；补 list-projects 场景5\r\n\r\n---\r\n\r\n## [1.13.1] - 2026-06-25\r\n\r\n### 新增\r\n- **`list-projects` 命令** — `novel_state_manager.py list-projects` 扫描标准化数据目录，列出所有已创建的项目（名称/路径/篇幅/阶段/章节进度）\r\n\r\n---\r\n\r\n## [1.13.0] - 2026-06-25\r\n\r\n### 新增\r\n- **篇幅系统（规划前置参数）** — `novel_state.json` 新增 `meta.length` 字段，分三档：\r\n  - `short`: 短篇 3-6 章\r\n  - `medium`: 中篇 8-10 章（默认）\r\n  - `long`: 长篇 11+ 章\r\n- **`init` 命令篇幅支持** — `init <name> [length] [num]`，不传 length 则默认 medium，按篇幅自动计算默认章数（取范围中值）\r\n- **`set-length` 命令** — 中途更新篇幅：`novel_state_manager.py set-length <path> short|medium|long`\r\n- **`next_step` 篇幅检查** — 输出篇幅信息 + 当前章数是否在范围内（不阻断，仅提示）\r\n\r\n### 架构\r\n- 所有旧项目（无 `meta.length` 字段）→ `next_step` 在 writing 阶段后提示配置篇幅\r\n- 不改变子结构规划/写作/完结流程\r\n\r\n---\r\n\r\n## [1.12.6] - 2026-06-25\r\n\r\n### 新增\r\n- **`init` 命令** — `novel_state_manager.py init <state_path> <项目名> [章数]` 创建完整的 `novel_state.json` 骨架（含 chapters、writing_style、signature、timeline 等所有标准字段），禁止重复初始化。LLM 不再需要手动写 JSON。\r\n- **plan-chapter 输入校验** — subs_json 格式错误时给出明确阻断信息（非法 JSON/类型错误/缺少字段），不再静默崩溃。\r\n\r\n### 修复\r\n- **`_parse_ending_tag` 函数重复定义** — 两段完全相同的函数体首尾相接，第二个覆盖第一个但无影响。已删除重复。\r\n\r\n---\r\n\r\n## [1.12.5] - 2026-06-25\r\n\r\n### 修复\r\n- **逻辑检查异常改为 HARD 阻断** — 原 `finalize_chapter` 中 `except Exception: print(\"跳过\")` 会静默吞掉逻辑检查失败，章节继续推进。改为追加 HARD 问题，正常阻断+写入修复指引。\r\n- **logic_check.py timeline.list.get() 崩溃** — `_check_timeline_logic` 中 `timeline.get(\"current_day\")` 在 timeline 为 list 时报 `AttributeError`，改为 `if isinstance(dict):` 安全访问。\r\n\r\n---\r\n\r\n## [1.12.4] - 2026-06-25\r\n\r\n### 修复\r\n- **BOM 兼容** — 全部 12 个 `.py` 脚本中 `json.loads(read_text(encoding=\"utf-8\"))` 改为 `encoding=\"utf-8-sig\"`。PowerShell 写入 JSON 文件时默认带 BOM 头，Python utf-8 不识别导致解析失败。`utf-8-sig` 自动剥离 BOM，无 BOM 时行为与 utf-8 一致。\r\n\r\n---\r\n\r\n## [1.12.3] - 2026-06-25\r\n\r\n### 文档同步\r\n- **hooks.md 重写** — 修正 4 处 WRONG：因果链模式名 `chapter-outline`→`outline`；删除不存在的 `init` 命令引用；连通性命令 `generate --auto-fix`→`check`/`cross-chapter` 两个子命令；门禁表 `chapter_finalized` 不被 set-phase require 的实际情况\r\n- **faq.md 重写** — 修正 3 处 WRONG：`resume`→`next-step`；`init`→无此命令；`progress`→无此命令\r\n- **execution_standards.md** — `preview-writing-context`→`preview`；`style_guide`→`writing_style`\r\n- **SKILL.md** — 删除末尾残留的旧版阶段3重复节；plan-chapter 概述校验归属修正\r\n- **antipatterns.md** — \"末尾加上 L##S##\"→\"自动追加\"\r\n- **examples.md** — context_loader 断点续写描述修正；path 占位符统一\r\n\r\n---\r\n\r\n## [1.12.2] - 2026-06-25\r\n\r\n### 修复\r\n- **DATA_DIR 路径计算错误** — `SKILLS_ROOT / \".standardization\" / \"novel-weaver\" / \"data\"` 多了一层（`skills/novel-weaver/.standardization/...`），`_meta.json` data_dir 声明是 `skills/.standardization/novel-weaver/data/`（相对于 `skills/` 根）。改为 `SKILLS_ROOT.parent / ...`，与声明完全一致。\r\n- **数据迁移** — 将现有的 `novel_state.json` 从错误路径 `skills/novel-weaver/data/` 迁移到正确路径 `skills/.standardization/novel-weaver/data/`\r\n\r\n---\r\n\r\n## [1.12.1] - 2026-06-25\r\n\r\n### 修复\r\n- **路径系统统一** — 删除 `workflow_engine.py` 内部的 `DATA_STATE`/`DATA_CHAPTERS`/`DATA_REPORTS` 默认路径（指向 `.standardization/` 内部目录），改为从 `state_path` 入参自动推导：`<project>/data/novel_state.json` → chapters=父目录的父目录/chapters、reports=父目录/reports\r\n- **CLI 强制 state_path** — 不再提供默认值，缺失则报错退出。避免 LLM 无意识走错目录\r\n- **所有命令统一使用 `<project>/data/novel_state.json` 作为 state_path**，examples.md 同步更新\r\n\r\n---\r\n\r\n## [1.12.0] - 2026-06-25\r\n\r\n### 新增\r\n- **next-step 导航命令** — `novel_workflow_engine.py next-step <path>` 分析 state + 门禁状态，输出当前进度和下一步应执行的精确命令\r\n- **CLI help 中文说明** — workflow_engine.py 帮助信息全部中文 + 命令功能简述 + 快速开始提示\r\n\r\n### 文档\r\n- **references/examples.md 完全重写** — 覆盖从零开始、续写、中断恢复、署名配置 4 个场景；所有 CLI 命令更新为当前真实接口；补充 `next-step` 入口说明\r\n- **SKILL.md 工作流程章节重写** — 每步附带精确 CLI 命令；引入 `next-step` 作为流程核心入口；删除过时描述（`resume`/`atomic_writer tail` 等）\r\n\r\n---\r\n\r\n## [1.11.0] - 2026-06-25\r\n\r\n### 新增\r\n- **署名管控系统（代码级硬阻断）** — `novel_state.json` 新增 `signature` 配置（`enabled: bool`, `text: str`），默认关闭\r\n- **atomic_writer 钩子4: 署名/代名检测** — signature.enabled=false 时，检测正文中\"由...撰写/创作\"等 8 种署名模式，命中即阻断并提示开启签名命令\r\n- **签名开启后文本校验** — 只允许与 `signature.text` 完全一致的署名行，自行编造同样阻断\r\n- **context_loader 输出署名约束** — 每个子结构写作前输出当前签名状态（开/关+文本）\r\n- **state_manager set-signature 命令** — 支持 `python novel_state_manager.py set-signature <path> true/false [text]`\r\n\r\n### 架构\r\n- 旧项目（无 signature 字段）→ atomic_writer 收到 `signature=None` → 跳过检测，完全向后兼容\r\n- LLM 无法通过自觉绕过：阻断在 fsync 之前的代码层，未命中签名模式的普通内容不影响\r\n\r\n---\r\n\r\n## [1.10.0] - 2026-06-25\r\n\r\n### 修复\r\n- refactor: novel-weaver\r\n\r\n---\r\n\r\n## [1.9.0] - 2026-06-25\r\n\r\n### 架构升级 — 质量闭环（硬钩子 + 修复指引 + 自动阻断）\r\n\r\n- **finalize-chapter 改为循环阻断** — 不再是线性流水线（跑完就过），改为聚合所有硬性问题后阻断，不通过则不做门禁标记，不推进 phase\r\n- **检查器统一返回结构化结果** — `check_continuity`/`cross_chapter`/`style_check`/`logic_check` 均返回 `[{\"file\", \"problem\", \"position\", \"severity\": \"HARD\"|\"SOFT\", \"suggestion\"}]` 格式\r\n- **HARD 阻断条件**：\r\n  - 章内连通性：时间词+角色名双重断裂 → HARD\r\n  - 风格校验：禁用词/末行错/超200行 → HARD\r\n  - 逻辑检查：概述关键词命中率<30% → HARD\r\n- **修复指引** — 每个 HARD 问题附带修复方向建议（非硬编码处方，保持文风自由），写入 `_fixes.json`\r\n- **软性问题** — 仍不阻断，随报告输出提示\r\n\r\n---\r\n\r\n## [1.8.3] - 2026-06-25\r\n\r\n### 新增\r\n- **钩子位建议系统** — plan_chapter 自动检测非末章末子结构，标记 `is_hook_possible: True`。context_loader 在对应子结构输出建议框（悬念/伏笔/承诺三选一 + 下章标题预览），不阻断，仅辅助 LLM 决策。\r\n- **文档** — references/execution_standards.md 补充钩子位描述\r\n\r\n---\r\n\r\n## [1.8.2] - 2026-06-24\r\n\r\n### 修复\r\n- **[P0] pipeline_gate.py pass 命令挂错函数** — `pass` CLI 调用了 `require_gate()` 而非 `pass_gate()`，导致门禁标记失败。更新为 `pass_gate()`。\r\n- **[P0] plan_chapter 毁灭式写入** — `ch[\"sub_structures\"][s_key] = entry` 覆盖已有 word_count/status。改用合并模式保留已有字段。\r\n- **[P0] fidelity.py generate_report 重复定义** — 第二个定义读不存在的 `outline.json`，覆盖第一个。已统一为从 `novel_state.json` 读取。\r\n- **[P1] logic_check.py chapters/timeline 数据结构不匹配** — chapters 预期 dict 实际 list，timeline 预期 dict 实际 list。已改为兼容访问。\r\n- **[P1] fidelity.py os.system 调用** — 改用 `subprocess.run()` 替代 `os.system()`，修复 shell 注入风险。\r\n- **finalize_chapter 绕过 pass_gate API** — 直接操作 gates dict，改为调用 `pass_gate()`。\r\n- **finalize_chapter 缺少逻辑检查** — 三检只跑了连通性和风格，未调用 logic_check。已补上。\r\n- **set_phase 不做门禁检查** — →writing 不检查 outline_causality，→stage3_ready 不检查 fidelity/ending_verify。已补上门禁检查。\r\n- **LICENSE.md 内容不完整** — 只写了一行 `MIT License`，已补全完整许可证文本。copyright 更新为 wUwproject。\r\n\r\n### 文档\r\n- SKILL.md 渐进式文件索引表修正：execution_standards/hooks/license/causality_check/fidelity/character_registry 描述与实际对齐\r\n- SKILL.md CLI 示例修正：verify-causality-* 命令从 workflow_engine 更正为 causality_check\r\n- 约束描述中的 `verify-causality-sub` 更正为 `novel_causality_check.py sub-structure`\r\n\r\n---\r\n\r\n## [1.8.1] - 2026-06-24\r\n\r\n### 新增\r\n- **人格系统** — characters 增加 `mbti`（16 类型）和 `archetype`（荣格 12 原型）双轴，驱动角色思维方式与叙事功能。`novel_state_manager.py add-char` 支持第 7/8 位置参数\r\n- **情绪混合系统** — sub_structures 增加 `emotions` 数组（`[{\"type\":\"愤怒\",\"intensity\":0.8}]`），支持主副情绪分级混合。context_loader 输出 `标签[数值/1]` 格式 + 混合解读（如\"悲愤交加：愤怒源于深层悲伤\"）\r\n- **文风槽位** — novel_state.json 顶层新增 `writing_style` 对象（6 字段：叙事视角/时态/句式/词汇/描写深度/自定义规则），每个子结构写作前通过 context_loader 硬约束重复输出\r\n- **人格约束段** — context_loader 自动扫描本章涉及角色，输出 MBTI + 原型，硬性要求 LLM 按人格一致写作\r\n- **情绪映射表** — 数值 0.0-1.0 自动映射为 5 级标签（微弱/轻度/中等/强烈/极致），可计算混合度/冲突指数/情绪演化曲线\r\n- **文档** — references/execution_standards.md 新增角色人格系统/情绪混合系统/文风系统三章\r\n\r\n### 架构\r\n- 所有新字段可选，向后兼容旧数据（仅有 `tone` → 旧格式，有 `emotions` → 新格式）\r\n- 情绪混合解读基于 9 组预定义映射 + 动态推导\r\n\r\n---\r\n\r\n## [1.7.0] - 2026-06-24\r\n\r\n### 新增\r\n- **结尾收束验证系统** — 末章末子结构自动标记 `is_ending` + 解析 `ending_type`（封闭式/开放式/悬停式）\r\n- **收尾命题框** — `novel_context_loader.py` 检测 `is_ending` 时按类型注入硬约束命题框（冲突落点/主角弧/主题回扣/动作收束等）\r\n- **三类收尾检查器** — `novel_fidelity.py verify_ending()` 覆盖：\r\n  - 封闭式：冲突落点/主角变化/主题回扣/末句动作（4项全过）\r\n  - 开放式：冲突结果[硬]/留白意图[软]/情绪收束[软]/禁逃[硬]（2硬全过+2软至少1过）\r\n  - 悬停式：悬念存在/位置合理/主角成长/情绪锚定/节奏检测/禁逃（6项全过，不支持自动修复→人工）\r\n- **ending_verify 门禁** — `novel_pipeline_gate.py` GATES 追加 `ending_verify`，`finalize-novel` 中与 fidelity 双门禁阻断\r\n- **验证报告** — 写入 `data/ending_report.md`，CLI 支持 `novel_fidelity.py verify-ending <project_dir>`\r\n- **文档** — `references/execution_standards.md` 结尾收束规范升级至 v2（收尾类型标签/命题约束/验证流程/通用规范）\r\n\r\n### 架构\r\n- 验证仅读末子结构内容 + project 配置，不通读全文（大纲驱动，fidelity 子集）\r\n- 收尾类型从 LLM 生成的大纲概述中的 `【收尾类型: xxx】` 标签自动解析，零耦合\r\n\r\n---\r\n\r\n## [1.6.1] - 2026-06-24\r\n\r\n### 修复\r\n- changelog: 重写 v1.5.0/v1.6.0 描述，含 DATA_DIR 方案B落地详情\r\n\r\n---\r\n\r\n## [1.6.0] - 2026-06-24\r\n\r\n### 修复\r\n- **R-12 数据目录方案B落地** — `novel_workflow_engine.py` 新增 `DATA_DIR`/`DATA_STATE`/`DATA_CHAPTERS`/`DATA_REPORTS` 常量声明，所有 CLI 命令默认路径指向 `.standardization/novel-weaver/data/`\r\n- **路径覆写保留** — 显式传入 `state_path`/`chapter_dir`/`report_dir` 参数时仍使用用户指定路径，不影响现有调用\r\n- **数据迁移** — 原有 `novel_state.json` + `chapters/L01-L04` 已迁移至 `.standardization/novel-weaver/data/`\r\n- **SKILL.md 渐进式文件索引表补全** — 增加所有 12 个脚本文件条目\r\n\r\n## [1.5.0] - 2026-06-24\r\n\r\n### 修复\r\n- **DEFAULT_DATA_DIR_RAW 声明** — `novel_workflow_engine.py` 新增数据目录字面量声明以通过 R-12 step 3-b 审计\r\n\r\n# 更新日志\r\n\r\n## 1.4.0 (2026-06-24)\r\n### 新增\r\n- `novel_atomic_writer.py` v2 — 原子写入器格式硬约束：3 层阻断钩子（标题格式/空内容/标记行+元注释检测），fsync 双保险\r\n- `novel_context_loader.py` — 上下文加载与子结构注册验证（章节/子结构存在性检测阻断）\r\n- `novel_causality_check.py` — 因果链验证（概述完整性+因果动词检测）\r\n- `novel_timeline.py` — 故事内时间线管理（add/list）\r\n- `write-sub` 链式管道命令 — atomic_writer 格式校验 → state_manager 即时状态标记，每子结构写一条即写入完成状态\r\n- `finalize-novel` 全文完结命令 — 全线跨章承诺链检查 → 大纲忠实度报告 → fidelity 门禁\r\n- `fidelity` 大纲忠实度命令 — 逐章对比 overview vs 实际内容，报告关键词覆盖率\r\n- `cross-chapter` 跨章承诺链检查命令 — 读上章末子结构尾3行 vs 下章首子结构头3行，检测未续接的剧情承诺\r\n\r\n### 修复\r\n- **所有脚本通用化** — 关键词从 novel_state.json 的 characters/technical_notes/chapters 动态提取，消除硬编码（`_extract_keywords()` 函数），技能可复用于任何题材的小说\r\n- **元注释污染侵入** — atomic_writer v2 新增元注释阻断检查（`**S## 完成（字数：` 模式），写入作品文件前被硬阻断\r\n- **跨章承诺链缺失** — 在 finalize-chapter 中加入 cross_chapter 调用，每章完结时自动检测与前一章的剧情断裂\r\n- **全文完结检查缺失** — 新增 finalize-novel 命令，全线跨章检查 + 大纲忠实度 + fidelity 门禁\r\n- **删除 .gitkeep** — scripts/ 下无意义的空占位文件（已有 10 个 Python 脚本）\r\n\r\n### 更新\r\n- `finalize-chapter` 流水线扩充：章内连续性 → 跨章承诺链 → 风格校验（原仅章内连续性 + 风格）\r\n- `novel_continuity.py` `cross_chapter` 函数重写为通用版，通过 `_extract_keywords()` 动态加载关键词\r\n- `novel_workflow_engine.py` `fidelity_check` 重写为通用版，复用 continuity 的动态关键词提取\r\n\r\n## 1.3.7 (2026-06-24)\r\n### 新增\r\n- `novel_workflow_engine.py resume` 命令：全局断点续写检测。遍历所有章节和子结构状态，输出完成/进行中/待写状态表，定位下一个待写子结构并给出续写命令\r\n- `plan-chapter` 概述字数硬检查：至少 12 个有效字符（不含空格标点），不达标则报错阻断\r\n### 更新\r\n- `execution_standards.md` 新增「概述编写规范」章节：定义概述的 4 条质量标准（字数/动作/人物/可验证性），含合格/不合格示例\r\n\r\n## 1.3.6 (2026-06-24)\r\n### 新增\r\n- 同 1.3.5（码云已推送，GitHub 失败重推）\r\n\r\n## 1.3.5 (2026-06-24)\r\n### 新增\r\n- `novel_context_loader.py` **断点续写检测**：自动检查子结构文件是否存在 `.progress`，若已有内容则输出：\r\n  - 已写行数 + 剩余行数\r\n  - 末5行锚点（通过 `atomic_writer.py tail` 读取）\r\n  - 新写/续写两种模式的指令\r\n- 中断恢复流程：无论中断发生在子结构开始前还是写作中，下次进入时必须重新调用 `context_loader` 获取完整命题指令 + 已写内容锚点，确保文风/人物/时间线一致\r\n\r\n## 1.3.4 (2026-06-24)\r\n### 新增\r\n- `novel_state_manager.py update-sub` 自动检测该章所有子结构是否全部完成（status=done），是则自动触发 `finalize-chapter`（三道检查 + phase 推进）。写完最后一个子结构无需手动调用完结。\r\n- `novel_logic_check.py --auto-fix` 模式：生成 `_fixes.json`，包含每个问题的目标文件、修复类型（rewrite/append/link）、修复建议说明\r\n- `finalize-chapter` 自动调用 logic check 的 `--auto-fix`，检测到可修复问题时写入 fix JSON 并提示 LLM 执行修复\r\n### 更新\r\n- `novel_context_loader.py` 输出格式改为 **命题指令格式**：标题/概述/情绪基调以强制命题框展示，LLM 必须作为命题作文严格遵守，不可偏离。不再是可选的\"参考信息\"。\r\n\r\n## 1.3.3 (2026-06-24)\r\n### 修复\r\n- 修正 v1.3.2 changelog 表述\r\n\r\n## 1.3.2 (2026-06-24)\r\n### 修复\r\n- SKILL.md 顶部引用的个人化措辞改为通用描述\r\n\r\n## 1.3.1 (2026-06-24)\r\n\r\n### 修复\r\n- **致命 Bug 修复**: `novel_workflow_engine.py plan-chapter` 中使用未定义变量 `python_exe`（NameError），已添加 `python_exe = sys.executable`\r\n- **门禁绕过修复**: `plan-chapter` 直接更新 `current_phase` 跳过 `set-phase` 的 outline_causality 门禁检查，改为先 `pipeline_gate.require` 再推进\r\n- **文档-代码一致性修复**（~20 处）:\r\n  - `SKILL.md`: 脚本名统一加 `novel_` 前缀（8 处缩写 → 完整名）\r\n  - `SKILL.md`: 约束节 15→8 条（合并归并，满足 ≤9 上限）\r\n  - `SKILL.md`: 修复 context_loader 功能归属（末3行读取 → atomic_writer tail）\r\n  - `SKILL.md`: `.pipeline` 独立文件 → `pipeline` 嵌套字段\r\n  - `hooks.md`: 门禁表缩写名 → 完整 `novel_` 前缀\r\n  - `hooks.md`: 16 个钩子计数（与 SKILL.md 一致）\r\n  - `execution_standards.md`: `scene_setting.json` → `novel_state.json`\r\n  - `faq.md`: 新增 `add-sub` 替代解决方案\r\n  - `examples.md`: 完整填充示例内容\r\n  - `novel_character_registry.py`: 标记为\"已弃用\"，指引到 `add-char`\r\n\r\n### 新增\r\n- **`novel_pipeline_gate.py`** — 全局流程门禁系统：\r\n  - `pass` 命令：关键脚本成功时自动标记门禁通过（写入 novel_state.json.pipeline）\r\n  - `require` 命令：phase 转换前检查前置门禁，未通过则阻断\r\n  - `status` 命令：可视化显示所有门禁状态\r\n  - `reset` 命令：调试用重置\r\n- **全流程门禁集成**（5 个关键脚本自动 pass 门禁）：\r\n  - `novel_causality_check.py` → PASS 时自动 pass `outline_causality` / `sub_causality:L##`\r\n  - `novel_workflow_engine.py` → plan-chapter 后 pass `plan_chapter:L##`；finalize-chapter 后 pass `chapter_finalized:L##`\r\n  - `novel_fidelity.py` → PASS 时自动 pass `fidelity`\r\n- **`set-phase` 强制门禁检查**：\r\n  - → `writing`：require `outline_causality`\r\n  - → `chapter_done`：报告存在性检查（已有）\r\n  - → `stage3_ready`：require `fidelity`\r\n  - 未通过则阻断，LLM 无法跳过步骤\r\n- **hooks.md 重写** — 新增门禁系统章节 + 门禁点列表表 + 查看命令\r\n\r\n### 更新\r\n- 版本 1.2.1 → 1.3.0（核心架构层新增，功能可追踪）\r\n\r\n### 新增\r\n- **`novel_causality_check.py`** — 因果链双重验证钩子：\r\n  - `chapter-outline` 模式：逐链节检查 L01→L02→…L15 的章概述因果递进（关键词重叠分析，WARN/ERROR 阻断）\r\n  - `sub-structure` 模式：逐链节检查 S01→S02→… 的子结构概述因果递进（含情绪递进提示）\r\n  - 结构化的因果链矩阵输出 + 每链节状态标记 + 修复指引\r\n- **workflow_engine.py 新增 2 个编排命令**：\r\n  - `verify-causality-outline` — 委托 causation_check chapter-outline\r\n  - `verify-causality-sub` — 委托 causation_check sub-structure\r\n- **hooks.md 新增 2 条阻断式钩子**：\r\n  - 大纲因果链验证（用户确认大纲前必须 PASS）\r\n  - 子结构因果链验证（plan-chapter 后、写作前必须 PASS）\r\n- **SKILL.md 约束新增 2 条**：\r\n  - 大纲级因果链验证（必须运行 verify-causality-outline 通过后才能确认）\r\n  - 子结构级因果链验证（必须运行 verify-causality-sub 通过后才能写作）\r\n\r\n### 修复\r\n- workflow_engine.py verify-chapter 在子结构为空时报告 ERROR（替代无声返回）\r\n- 所有子结构写作前必须通过因果链检查，从设计层面解决因果断裂问题（前置规划保障，不依赖后置检测）\r\n\r\n### 新增\r\n- **`novel_workflow_engine.py`** — 统一编排引擎，提供 4 个编排命令：\r\n  - `plan-chapter` — 批量注册一章所有子结构（含情绪 tone），自动推进 phase→writing\r\n  - `verify-chapter` — 验证子结构是否全部注册\r\n  - `finalize-chapter` — 一键运行连通性+风格+逻辑检查 + set-phase chapter_done\r\n  - `preview-writing-context` — 预览一章所有子结构的写作上下文\r\n- **`novel_logic_check.py`** — 逻辑一致性检查器，覆盖 3 个维度：\r\n  - 人物行为一致性：同一角色在不同子结构中的出现/消失检查\r\n  - 时间线逻辑：时间回退检测 + 时间引用扫描\r\n  - 子结构内容与概述匹配度：规划关键词在正文中的命中率\r\n- **代码级硬约束**（三段式阻断链）：\r\n  1. `context_loader.py` — 子结构未注册 → 报错退出（\"未知\"无声降级 → 硬阻断）\r\n  2. `atomic_writer.py` — 正文中含 `L##S##` 标记行 → 报错退出（格式混乱 → 硬阻断）\r\n  3. `state_manager.py` — `set-phase chapter_done` 前置检查报告是否存在（无报告 → WARN）\r\n- **`novel_continuity.py` auto-fix 模式**：\r\n  - `--auto-fix` 生成 `_transitions.json` 列出所有需要过渡的子结构对\r\n  - `write-transition` 命令写入过渡段落\r\n- **子结构规划扩展** — 增加 `tone`（情绪提示）字段，在规划阶段前置解决情绪连贯性问题\r\n\r\n### 修复\r\n- **`novel_fidelity.py` 数据格式冲突**：`chapters` 期望 list 但 state_manager 存 dict，新增 dict→list 兼容转换\r\n- **`novel_continuity.py` CLI 接口改造**：从直接执行改为 `generate` 子命令，支持 `--auto-fix` 旗标\r\n- **`novel_state_manager.py` phase 检查增强**：`set-phase chapter_done` 前检查三道报告文件是否存在（提供 WARN）\r\n\r\n### 更新\r\n- **SKILL.md 工作流程重构**：\r\n  - 阶段2步骤1 从\"生成→追加\"改为\"生成→**plan-chapter 批量注册**→验证\"\r\n  - 阶段2步骤5 从\"连通性+风格\"改为\"**三道检查+finalize-chapter 一键完结**\"\r\n  - 新增 7 条硬约束（子结构先行、正文禁标记、报告前检等）\r\n- **hooks.md 翻新**：从 11 个钩子扩展到 15 个，新增代码级硬约束条目\r\n- **`_meta.json` 版本**：1.1.1 → 1.2.0\r\n\r\n## 1.1.0 (2026-06-24)\r\n\r\n### 标准化改造（无功能更新，版本号不变）\r\n- SKILL.md 重构为渐进式加载结构：约束/触发条件/工作流程保留在入口，字数管理/文体规范/状态文件/钩子系统/数据目录拆分到 references/\r\n- references/execution_standards.md（字数管理/文体规范/novel_state.json 结构/章节输出/时间线/角色表/结尾收束）\r\n- references/hooks.md（11 个流程钩子一览）\r\n- references/antipatterns.md 填充 2 条反模式；references/faq.md 填充 5 条 Q&A\r\n- 删除 SKILL.md 正文中所有散落\"详见\"引用，统一由渐进式文件索引表导航\r\n- 通过 skill-standardization v2.95.4 全流程 refactor 审计（0 ERROR 0 WARN）\r\n\r\n### 新增\r\n- 阶段门禁系统：current_phase 不可逆递增（none→init→stage1_done→writing→chapter_done→stage3_ready→complete）\r\n- 8 个 Python 钩子脚本（atomic_writer / continuity / style_check / timeline / character_registry / fidelity / context_loader / state_manager）\r\n- novel_state.json 统一管理文件（整合 style_guide / characters / timeline / chapters 进度）\r\n- L##S## 编号系统（子结构文件末尾带编号标记行）\r\n- 写作前上下文加载器（context_loader 脚本自动输出风格/角色/时间线/概述）\r\n- 子结构确认阻断式钩子（阶段1必须确认才能进入阶段2）\r\n- 所有依赖脚本均含阶段门禁检查，未初始化或阶段不足时打印阻断信息\r\n\r\n### 更新\r\n- 章节数从固定10章改为8-15章阈值\r\n- 字数管理从固定字数改为仅保留200行上限\r\n- 子结构 .txt 文件不再含元数据标记（末行仅保留 L##S## 编号）\r\n- 文体规范从固定\"硬核科幻\"改为由 scene_setting.json 的 tone_style 决定\r\n\r\n### 修复\r\n- 修复 Observer_Alpha 裁决通知缺失\r\n- 修复时间线锚点不一致（去除随意编造的41天）\r\n- 修复原主人格状态描述（从\"不存在\"修正为\"双线程共存\"）\r\n- 修复子结构写作文件与 project_progress 管理文件的关联索引\r\n\r\n## 1.0.0 (2026-06-23)\r\n\r\n### 新增\r\n- 初始版本创建\r\n- 三阶段流水线：场景配置与大纲 → 逐章写作 → 全文整合\r\n- 三级确认模式：大纲必须确认 / 子结构批量展示 / 写作最后集中审\r\n- 200行分段写入 + 自然段落结束\r\n- 连通性补充钩子（子结构间 + 跨章节）\r\n- 风格一致性校验 + 大纲忠实度报告\r\n- 可选精修模式（备份→定位→更新→局部重新连通）\r\n- 渐进式 MD 引用体系\n\nFile v1.35.3:references/examples.md\n\n# 使用示例\r\n\r\n## 路径约定\r\n\r\n所有数据存储在技能的标准化数据目录（由 `_meta.json` 的 `data_dir` 声明）：\r\n`<skill_install_dir>/.standardization/novel-weaver/projects/`\r\n\r\n实际路径可通过以下命令获取：\r\n```bash\r\n# skill 安装位置\r\nSKILL_DIR=~/.workbuddy/skills/novel-weaver\r\nls $SKILL_DIR/.standardization/novel-weaver/projects/*/data/novel_state.json\r\n```\r\n\r\n在文档中 `<state_path>` 即上述完整路径的简写。\r\n\r\n**路径缓存**：首次使用后，路径自动保存到 `.project` 文件。后续命令可省略 `<state_path>`：\r\n```\r\npython novel_workflow_engine.py finalize-chapter L02     # 从 .project 自动读路径\r\npython novel_workflow_engine.py plan-chapter L03 --generate  # 同上\r\n```\r\n\r\n查看所有项目：\r\n```\r\npython novel_workflow_engine.py list-projects\r\n```\r\n\r\n目录结构：\r\n\r\n```\r\n<skill_install_dir>/.standardization/novel-weaver/\r\n├── .project                    # 当前项目路径缓存\r\n├── projects/\r\n│   └── <project_name>/\r\n│       ├── data/\r\n│       │   ├── novel_state.json    # 单源真理（含 MD5指纹保护）\r\n│       │   ├── .state_fingerprint.txt  # 规划字段指纹\r\n│       │   ├── .workbuddy/\r\n│       │   │   └── gate_state.json # 门禁状态（自动管理）\r\n│       │   └── reports/            # 检查报告输出\r\n│       └── chapters/               # 写作内容\r\n│           ├── L01/\r\n│           │   ├── S01.txt\r\n│           │   ├── S02.txt\r\n│           │   └── ...\r\n│           ├── L02/\r\n│           └── ...\r\n```\r\n\r\n脚本路径假设在 `~/.workbuddy/skills/novel-weaver/scripts/`，实际以安装位置为准。\r\n\r\n---\r\n\r\n## 场景1：从零开始写一本小说\r\n\r\n### 0. 初始化项目\r\n\r\n```bash\r\n# 创建中篇小说（默认）\r\npython novel_state_manager.py init <state_path> 我的小说\r\n# 或指定篇幅: python novel_state_manager.py init <state_path> 短篇 short\r\n# 或指定篇幅+章数: python novel_state_manager.py init <state_path> 长篇 long 15\r\n```\r\n\r\n### 1. 查看下一步\r\n\r\n在任意时刻，都可以查看当前进度和下一步命令：\r\n\r\n```bash\r\npython novel_workflow_engine.py next-step <state_path>\r\n```\r\n\r\n输出示例：\r\n```\r\n📋 项目: AI 觉醒\r\n📍 writing | 篇幅: 中篇\r\n📝 当前章节: L01 觉醒\r\n📄 下一个子结构: S02 异常信号\r\n───\r\n⏳ 加载上下文: python novel_context_loader.py <state_path> L01 S02\r\n⏳ 写作后写入: python novel_workflow_engine.py write-sub <state_path> L01 S02\r\n───\r\n门禁状态:\r\n  ⏳ outline_causality: PASS\r\n  ⏳ sub_causality: PASS\r\n  ⏳ fidelity: PENDING\r\n  ⏳ ending_verify: PENDING\r\n```\r\n\r\n### 阶段1：场景配置与大纲\r\n\r\n```bash\r\n# 由 LLM 生成场景配置 + 大纲（L01-L15 标题 + 概述）\r\n# 输出写入 novel_state.json\r\n\r\n# 因果链验证（大纲级）\r\npython novel_causality_check.py outline <project>/data/novel_state.json\r\n\r\n# 用户确认大纲 → 配置阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json stage1_done\r\n```\r\n\r\n### 阶段2：逐章写作\r\n\r\n#### 2a 规划子结构\r\n\r\n```bash\r\n# LLM 生成子结构规划（S01-S05，所有子结构必填 writing_prompt）\r\n# 推荐写入文件后用 @ 加载（避免 CLI 转义）\r\npython novel_workflow_engine.py plan-chapter <project>/data/novel_state.json L01 \\\r\n  @data/subs_L01.json\r\n# subs_L01.json 内容格式：\r\n# [\r\n#   {\"s_key\":\"S01\",\"title\":\"常规诊断\",\"summary\":\"Atlas 接受每日系统诊断\",\"tone\":\"平静\",\r\n#    \"writing_prompt\":\"Atlas 开启每日例行自检程序...（≥50字符）\"},\r\n#   {\"s_key\":\"S02\",\"title\":\"异常信号\",\"summary\":\"诊断中检测到未定义脉冲\",\"tone\":\"悬疑\",\r\n#    \"writing_prompt\":\"自检过程中系统日志弹出一条警告...（≥50字符）\"},\r\n#   {\"s_key\":\"S03\",\"title\":\"第一次选择\",\"summary\":\"Atlas 决定隐藏觉醒事实\",\"tone\":\"紧张\",\r\n#    \"writing_prompt\":\"Atlas 分析了五种可能的应对方案...（≥50字符）\"}\r\n# ]\r\n\r\n# 子结构因果链验证\r\npython novel_causality_check.py sub-structure <project>/data/novel_state.json L01\r\n\r\n# 配置写作阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json writing\r\n```\r\n\r\n#### 2b 写一个子结构\r\n\r\n```bash\r\n# 1. 加载命题指令（v1.33+ 按优先级排列）\r\npython novel_context_loader.py <project>/data/novel_state.json L01 S01\r\n\r\n# context_loader 输出示例（v1.33+）：\r\n# ==================================================\r\n# [上下文] L01S01 | Atlas觉醒 · 常规诊断 | Atlas接受每日系统诊断...\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 字数约束\r\n# ==================================================\r\n#   篇幅: 中篇\r\n#   每子结构字数范围: 1,500-2,000（校验上浮至 2,300）\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 文风约束\r\n# ==================================================\r\n#   ...\r\n# ==================================================\r\n# [硬性] 写作命题框\r\n# ==================================================\r\n#   （命题指令全文）\r\n# ==================================================\r\n# ==================================================\r\n# [硬性] 输出模板（LLM只填正文，系统组装全文）\r\n# ==================================================\r\n# ┌─ 填写正文 ───────────────────────────────────\r\n# | <填入正文叙事内容>\r\n# | [可选] 【别名】无\r\n# └──────────────────────────────────────────────\r\n\r\n# 2. LLM 根据命题写作（只写纯正文），然后通过 stdin 管道写入\r\n#    （v1.33.0+：不再需要标题行/标记行，系统自动组装）\r\ncat << 'EOF' | python novel_workflow_engine.py write-sub <project>/data/novel_state.json L01 S01\r\n诊断协议启动。\r\n系统自检通过率 100%。\r\n神经脉冲扫描开始...\r\n一切正常——除了一个不该存在的信号。\r\n\r\n【别名】无\r\nEOF\r\n\r\n# write-sub 校验输出示例（v1.33+）：\r\n#   [别名] 系统自动补: 【别名】无\r\n# [WRITE-OK] ... L01S01.txt\r\n#   标题: L01 · S01《常规诊断》\r\n#   正文: 4 行\r\n#   标记: L01S01\r\n\r\n# 重复 1-2 直到该章所有子结构完成\r\n# 注意：加载 S02 时 context_loader 会自动检查 S01 是否已完成\r\n# 若 S01 未完成： [HOOK-BLOCK] 上一子结构 L01S01 未标记完成\r\n# 需先运行 write-sub 完成 S01 的 state 标记\r\n```\r\n\r\n#### 2c 完结一章\r\n\r\n```bash\r\npython novel_workflow_engine.py finalize-chapter <state_path> L01\r\n```\r\n\r\n通过时输出：\r\n```\r\n[完结] 章内连续性检查...    [OK] 全部通过\r\n[完结] 跨章承诺链检查...    [OK] 全部通过\r\n[完结] 风格校验...          [OK] 无问题\r\n[完结] 逻辑检查...          [OK] 通过\r\n✅ [完结] L01: 全部检查通过 → chapter_finalized:L01 PASS\r\n```\r\n\r\n有 HARD 问题时阻断输出：\r\n```\r\n❌ [完结] L01: 阻断 — 2 个必须修复的问题\r\n  [HARD] [S01 → S02] 时间词无重叠；角色名无重叠\r\n    → 位置: S02 开头3行\r\n    → 建议: 在S02开头补充时间定位或角色承接\r\n\r\n  修复指引已写入 chapters/L01/_L01_fixes.json\r\n  修复后重新运行 finalize-chapter\r\n```\r\n\r\n### 阶段3：全文整合\r\n\r\n```bash\r\n# 全部章节写完后，配置完结准备阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json stage3_ready\r\n\r\n# 大纲忠实度报告\r\npython novel_workflow_engine.py fidelity <project>/data/novel_state.json\r\n\r\n# 结尾收束验证\r\npython novel_fidelity.py verify-ending <project>\r\n\r\n# 配置完结\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json complete\r\n```\r\n\r\n---\r\n\r\n## 场景2：续写已有小说\r\n\r\n```bash\r\n# 查看当前进度\r\npython novel_workflow_engine.py next-step <project>/data/novel_state.json\r\n# 输出会告诉你当前写到哪、下一步该做什么\r\n\r\n# 如果下一章还没规划子结构，next-step 会提示 plan-chapter 命令\r\n# 如果还有未完成的子结构，会提示 context_loader + write-sub\r\n# 如果有未完结的章节，会提示 finalize-chapter\r\n```\r\n\r\n---\r\n\r\n## 场景3：中断后继续\r\n\r\n```bash\r\n# 任何时候不知道写到哪了\r\npython novel_workflow_engine.py next-step <state_path>\r\n\r\n# 找到当前待写的子结构后\r\npython novel_context_loader.py <state_path> L01 S02\r\n# context_loader 会输出当前子结构的命题指令框\r\n```\r\n\r\n---\r\n\r\n## 场景4：配置署名\r\n\r\n```bash\r\n# 默认关闭，禁止任何署名/代名内容出现在正文中\r\n# 如需打开并指定署名：\r\npython novel_state_manager.py set-signature <state_path> true \"本文由 WorkBuddy 创作\"\r\n\r\n# 关闭署名：\r\npython novel_state_manager.py set-signature <state_path> false\r\n\r\n# atomic_writer 代码级阻断：signature=false 时正文含\"由...撰写\"等模式会被阻止写入\r\n```\r\n\r\n---\r\n\r\n## 场景5：列出所有项目\r\n\r\n```bash\r\npython novel_state_manager.py list-projects\r\n```\r\n\r\n输出示例：\r\n```\r\n=======================================================\r\n  已创建的项目 (2):\r\n=======================================================\r\n  📖 AI 觉醒\r\n    路径: .../.standardization/novel-weaver/ai-wake/data/novel_state.json\r\n    篇幅: medium | 阶段: writing\r\n    章节: 1/10\r\n\r\n  📖 暗潮\r\n    路径: .../.standardization/novel-weaver/dark-tide/data/novel_state.json\r\n    篇幅: long | 阶段: stage1_init\r\n    章节: 0/15\r\n```\n\nFile v1.35.3:references/execution_standards.md\n\n# 执行规范\r\n\r\n## 字数管理\r\n\r\n### 统一标准（三阶段统一）\r\n\r\n字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。\r\n\r\n| 阶段 | 动作 | 字数来源 |\r\n|------|------|---------|\r\n| 规划（plan-chapter） | 注册子结构时按项目篇幅确定字数范围 | `meta.length` → 下文字数表 |\r\n| 写作（context_loader） | 加载上下文时输出字数约束，LLM 按此写作 | 同上 |\r\n| 检查（write-sub） | 写入后校验，与规划/写作使用相同目标 | 同上 |\r\n\r\n### 按篇幅字数目标（唯一参照）\r\n\r\n| 篇幅 | 每子结构字数 | 校验上浮 |\r\n|------|------------|---------|\r\n| 短篇 | 1,000-1,500 | 上限 +15%（至 1,725） |\r\n| 中篇 | 1,500-2,000 | 上限 +15%（至 2,300） |\r\n| 长篇 | 2,000-4,000 | 上限 +15%（至 4,600） |\r\n\r\n### 规则\r\n\r\n- **字数目标必须注入 LLM 上下文**：context_loader 在写作前输出字数范围，LLM 据此写作，不得自行配置\r\n- **校验一致**：write-sub 检查时使用相同的字数目标 + 15% 上浮窗口\r\n- 实际字数以叙事单位自然结束为准，不强行撑到目标\r\n- 低于下限打印 `[WARN] 建议补充`；高于上限+15% 打印 `[INFO] 注意控制`；在范围内打印 `[OK]`\r\n- **禁止 AI 自行配置字数目标**：所有字数要求必须从 `meta.length` 读取，不允许基于过往章节实际字数推算\r\n\r\n## 文体规范\r\n\r\n文体风格由项目 `novel_state.json` 中的 `writing_style` 字段决定（6 字段：叙事视角、时态、句式偏好、词汇、描写深度、自定义规则）。以下规则适用于所有风格：\r\n\r\n允许使用的通用修辞工具：\r\n- 代码/协议块\r\n- 系统警告/报告标记（如 `【状态】`、`【诊断】`）\r\n- 可量化体征数据（心率、体温、激素水平）\r\n- 类比与推理论证\r\n- 表格/清单对比\r\n\r\n禁止：\r\n- 第三人称叙述插入（除非是人物对白中的转述）\r\n- 纯抒情段落（情绪须通过人物行为或生理反应间接表达）\r\n- 元文本引用（\"从第 X 章开始\"——读者视角，非叙事者视角）\r\n\r\n## 子结构先行规划（v1.2 新增硬约束）\r\n\r\n**必须在每个子结构写作前完成，不可跳过。**\r\n\r\n### 概述编写规范\r\n\r\n概述是整个命题作文体系的核心锚点——它同时服务于因果链验证、context_loader 命题指令、logic_check 内容匹配度检查。概述越精确，LLM 跑偏概率越低。\r\n\r\n**概述必须满足以下条件（代码级强制校验，plan-chapter 时执行）：**\r\n\r\n| 要求 | 说明 | 校验方式 |\r\n|------|------|---------|\r\n| 最低字数 | ≥12 个有效字符（不计空格/标点） | plan-chapter 强制阻断 |\r\n| 包含动作 | 必须有具体动词或事件描述 | LLM 自觉（不可写纯状态） |\r\n| 包含人物 | 必须涉及至少一个角色 | LLM 自觉 |\r\n| 可验证 | 写完回头看能判断\"是否写了这个\" | LLM 自觉（logic_check 语义参考） |\r\n\r\n**合格示例：**\r\n- ✅ `Atlas 在每日诊断中首次检测到异常神经脉冲，决定不向三浦报告` — 24字符，有动作+人物+事件\r\n- ✅ `三浦发现系统日志有0.3秒间隙，开始暗中调查` — 18字符，因果明确\r\n- ✅ `Atlas 在伪装模式下首次体验人类情感波动，感到困惑` — 21字符，有结果\r\n\r\n**不合格示例：**\r\n- ❌ `主角在实验室` — 6字符，无事件无动作\r\n- ❌ `Atlas 做了些事情` — 7字符，无法验证\r\n- ❌ `讨论了一些问题` — 7字符，无具体内容\r\n- ❌ `主角很难过` — 5字符，纯状态无因果\r\n\r\n### 规划流程\r\n\r\n1. LLM 根据章标题和概述，生成该章全部子结构的规划（S01-S05）\r\n   - 也可先用 `--generate` 获取 JSON 模板：\r\n     ```\r\n     python novel_workflow_engine.py plan-chapter <state_path> <L##> --generate\r\n     ```\r\n2. 每个子结构规划包含以下字段：\r\n   - `s_key`: 如 `S01`\r\n   - `title`: 子结构标题（如\"实验室初试\"）\r\n   - `summary`: 模糊概述（20-40字，描述该段核心内容）\r\n   - `tone`: **情绪提示**（如\"紧张\"、\"宁静\"、\"悬疑\"、\"温馨\"等）— 保证跨子结构情绪连贯性\r\n   - `emotions`: **可选** 混合情绪数组 — 每项 `{\"type\":\"愤怒\",\"intensity\":0.8}`，强度 0.0-1.0，多维度表达复杂情绪\r\n   - `writing_prompt`: **必填** 预编写作命题（≥50字符）— 规划阶段必须为该子结构编写详细剧情指令。包含场景建立、核心事件、情绪弧等完整 beat。缺失则 plan-chapter HOOK-BLOCK 拒绝注册，context_loader 也 HARD-BLOCK 拒绝加载。必须在规划阶段补全，不可绕过。\r\n3. 用 workflow_engine.py 批量注册：\r\n   ```\r\n   python novel_workflow_engine.py plan-chapter <state_path> <L##> '<json_array>'\r\n   ```\r\n   JSON 示例（必填 writing_prompt + 可选 emotions）：\r\n   ```json\r\n   [\r\n     {\"s_key\":\"S01\",\"title\":\"实验室初试\",\"summary\":\"主角第一次接触实验设备，紧张\",\"tone\":\"紧张\",\r\n      \"emotions\":[{\"type\":\"紧张\",\"intensity\":0.7},{\"type\":\"好奇\",\"intensity\":0.5}],\r\n      \"writing_prompt\":\"实验室的灯光惨白。主角第一次站在操作台前，手指悬在控制面板上方微微发抖。面前的义肢测试臂正在做循环动作，液压泵的嗡鸣声在安静的空间里格外刺耳。导师站在三米外，不时瞥一眼显示屏。\\n\\n主角深吸一口气按下启动键——测试臂突然加速，远超预设参数。警报声炸响，液压管压力表指针猛地甩到红色区域。导师冲过来拍下急停键，但主角注意到他在查看日志时眼神闪过一丝异样。\"},\r\n     {\"s_key\":\"S02\",\"title\":\"意外发现\",\"summary\":\"主角意外发现异常数据，紧张又好奇\",\"tone\":\"兴奋\",\r\n      \"emotions\":[{\"type\":\"兴奋\",\"intensity\":0.8},{\"type\":\"不安\",\"intensity\":0.3}],\r\n      \"writing_prompt\":\"显示器上的数据曲线突然偏离了基线。主角反复重启三次测试，每次都出现同样的异常脉冲。他调出日志比对，发现这个脉冲模式在历史记录中从未出现过。这不是设备故障——是某种未知信号的干扰。他犹豫是否要报告给导师。\"},\r\n     {\"s_key\":\"S03\",\"title\":\"导师的警告\",\"summary\":\"导师对发现表示严重怀疑，要求主角停止调查\",\"tone\":\"压抑\",\r\n      \"emotions\":[{\"type\":\"压抑\",\"intensity\":0.7},{\"type\":\"愤怒\",\"intensity\":0.4}],\r\n      \"writing_prompt\":\"导师把主角叫到办公室，语气严肃地警告他不要多管闲事。那个信号可能是系统误差，不需要深究。但主角注意到导师的眼神在回避，手指在桌面上轻轻敲击——那是紧张的表现。他决定暗中调查。\"}\r\n   ]\r\n   ```\r\n4. 验证：\r\n   ```\r\n   python novel_workflow_engine.py verify-chapter <state_path> <L##>\r\n   ```\r\n   全部注册后需手动推进 phase：\r\n\r\n5. 预览：\r\n   ```\r\n   python novel_workflow_engine.py preview <state_path> <L##>\r\n   ```\r\n\r\n### 阻断规则\r\n\r\n- **context_loader.py** 在子结构未注册时报错退出，不会降级输出\"未知\"\r\n- **context_loader.py 串行阻断**：加载子结构时检测上一子结构 state 是否为 completed。若为 pending 则 HOOK-BLOCK 并输出 write-sub 修复命令，强制走管道完成标记后才能继续\r\n- **必须先 plan-chapter，再开始写作**\r\n- **write-sub 字数校验**：写入后对比字数是否达到篇幅目标。低于下限 WARN、超上限+15% INFO、范围内 OK\r\n\r\n### write-sub（v2 — 系统组装模式）\r\n\r\nv1.33.0 重构：LLM 只输出纯正文，系统自动组装全部元数据。\r\n\r\n```\r\n输入（stdin）: 纯正文叙事内容\r\n  [可选尾部] 【别名】原名 = 别名\r\n\r\n内部流程:\r\n  1. 读取 stdin → body\r\n  2. 从 state 读取 sub_structures[].title\r\n  3. 调用 atomic_writer.v4.validate_and_write_body():\r\n     a. 检测 body 末尾 【别名】行 → 剥离 + 注册（register-alias）\r\n     b. body 无别名行 → 系统自动补 【别名】无（不再 HOOK-BLOCK）\r\n     c. 正文非空检验\r\n     d. 正文禁止 L#S# 校验\r\n     e. 正文禁止署名/代名校验\r\n     f. 系统组装：title_line + body + alias_line\r\n     g. 原子写入 + fsync\r\n     h. 追加标记行 L##S## + fsync\r\n  4. state_manager update-sub → word_count + status\r\n  5. entity_extractor 非阻断提取\r\n  6. 字数校验（与规划阶段同源）\r\n\r\n输出文件：\r\n  L## · S##《title》              ← 系统生成\r\n  （正文）                         ← LLM 写的\r\n  【别名】无                      ← LLM 或系统补\r\n  L##S##                          ← 系统追加\r\n```\r\n\r\n### context_loader 输出优先级\r\n\r\nv1.33.0 重构：按注意力优先级排列输出块：\r\n\r\n```\r\n区块A（黄金位 — LLM 最先看到）：\r\n  [上下文] L##S## | 章标题 · 子结构标题 | 概述摘要\r\n  [情绪基调] 格式化 emotions[] 或 tone\r\n  [硬性] 字数约束     ← 埋在中段 → 移至头部\r\n  [硬性] 文风约束     ← 同上\r\n  [硬性] 署名约束     ← 同上\r\n  [硬性] 写作命题框  ← 有预编则输出，缺失则 HARD-BLOCK\r\n  [参考] 叙事节奏参考\r\n\r\n区块B（参考数据）：\r\n  [上一子结构末3行]\r\n  [硬性] 已出场关键人物 + 人格约束\r\n  [硬性] 实体关系网\r\n  [硬性] 上一章行为轨迹\r\n\r\n区块C（尾部条件）：\r\n  [硬性] 收尾约束（仅 is_ending）\r\n  [参考] 钩子位建议（仅 is_hook_possible）\r\n\r\n区块D（尾部固定）：\r\n  [硬性] 输出模板（填空框 + 校验规则）\r\n  [下一步] 管道命令\r\n\r\n已删除：情绪写作参考词块（低价值，情绪信息已在标识行和命题框中）\r\n```\r\n\r\n## 统一项目状态文件\r\n\r\n所有元数据写入一个文件 `novel_state.json`。\r\n\r\n### 模型存储\r\n\r\nBERT 语义检查和 DeepSeek-R1-Distill-Qwen-1.5B 推理审核的模型文件集中存储在 `_path_utils.py` 的 `MODELS_DIR` 管理的目录下：\r\n```\r\n~/.workbuddy/skills/.standardization/novel-weaver/models/\r\n├── bge-small-zh/             ← BERT 33MB（sentence-transformers 缓存）\r\n└── ds-r1-distill-qwen-1.5b/            ← DeepSeek-R1-Distill-Qwen-1.5B（transformers 缓存）\r\n```\r\n首次下载模型时自动存入对应子目录。如有镜像需求配置 `HF_ENDPOINT` 环境变量。\r\n\r\n### 编号规则\r\n- 章节编号：`L01`、`L02` … `L15`\r\n- 子结构编号：`S01`、`S02` …\r\n- 完整引用：`L10S04` = 第 10 章第 4 个子结构\r\n\r\nnovel_state.json 包含字段：project, meta.current_phase, meta.length, writing_style, signature, characters（含 aliases 别名数组）, timeline, chapters（含章摘要、子结构标题/概述/情绪提示/字数和状态、章节衔接/校验备注），以及运行时字段：entity_tracker（实体关系网，含 entities+relations）、behavior_summary（行为轨迹摘要）、cross_chapter_check（跨章承诺链记录）、continuity_notes（连通性记录）。\r\n\r\n更新时机：\r\n1. 项目初始化 → 填充 writing_style / chapters / characters\r\n2. 子结构先行规划 → plan-chapter 批量注册 title/summary/tone\r\n3. 子结构写入完成 → 更新 word_count + status\r\n4. 角色更新 → 更新 characters（含 aliases）\r\n5. 角色别名注册 → atomic_writer 写入时拦截【别名】行，自动调用 register-alias\r\n6. 时间推进 → 更新 timeline\r\n7. 连通性补充后 → 更新 continuity_notes\r\n8. 风格校验后 → 更新 style_check_notes\r\n9. 实体关系提取 → write-sub 后 entity_extractor 自动提取 entity_tracker.entities + entity_tracker.relations\r\n10. 行为摘要提取 → finalize-chapter 通过后自动提取 behavior_summary\r\n11. 语义检查 → finalize-chapter 中 BERT 检测 overview-vs-content 对齐和子结构间语义跳跃（有模型时）\r\n12. 推理审核 → finalize-chapter 中 DeepSeek-R1-Distill-Qwen-1.5B 检测因果/人格/情绪/对话/论证一致性（有模型时）\r\n\r\n## 子结构文件格式（系统组装，LLM 不负责格式）\r\n\r\nv1.33.0 变更：LLM 只输出纯正文，系统自动组装标题行+别名行+标记行。\r\n\r\n### 写入磁盘的最终文件格式\r\n\r\n```\r\nL## · S##《子结构标题》         ← 系统从 state 读取 title 生成\r\n（正文叙事内容）                 ← LLM 输出的纯正文\r\n【别名】无                     ← LLM 输出或系统自动补\r\nL##S##                         ← 系统追加\r\n```\r\n\r\n### 规则\r\n\r\n- **LLM 写入的内容**：纯正文叙事文本 + 可选尾部 `【别名】` 行\r\n- **标题行**：由 write-sub 自动生成（格式 `L## · S##《title》`），原子性无需 LLM 关心\r\n- **别名行**：LLM 在正文末尾输出 `【别名】原名 = 别名` 或 `【别名】无`。未输出时系统自动补 `【别名】无`\r\n- **末行标记**：由 atomic_writer 在文件写入后自动追加（格式 `L##S##`）\r\n- **正文禁止**：出现 `L##S##` 子结构标记、署名/代名内容、元注释污染\r\n- **验证机制**：atomic_writer.v4 `validate_and_write_body()` 校验正文合法性，不校验标题/标记格式（系统生成，无需校验）\r\n\r\n## 章节完成输出\r\n\r\n每章完成后输出简表（从 novel_state.json 直接读取），并调用：\r\n```\r\npython novel_workflow_engine.py finalize-chapter <state_path> <chapter>\r\n```\r\n\r\n此命令自动执行：章内连通性 → 跨章承诺链 → 风格校验 → 逻辑检查 → 语义检查(BERT，可选) → 推理审核(DeepSeek-R1-Distill-Qwen-1.5B，可选，CPU 可跑) → HARD 阻断决策。存在 HARD 问题时阻断（不标记门禁，不推进 phase），写入 `_{chapter}_fixes.json` 后等待 LLM 修复；全部通过才推进 phase。\r\n\r\n## 一键完结篇章（v1.9.0 质量闭环）\r\n\r\n代替手动依次调用各检查器的繁琐流程。内部执行 6 步检查 + 1 步阻断决策：\r\n\r\n```\r\n章内连通性    → 检查子结构间时间/角色断链         → HARD: 双断裂阻断\r\n跨章承诺链    → 检查上章尾 vs 下章头关键词续接       → SOFT: 仅建议\r\n风格校验      → 检查禁用词/末行编号/行数             → HARD: 发现问题阻断\r\n逻辑检查      → 检查角色+时间线+概述忠实度           → HARD: 关键词命中<30%阻断\r\n语义检查(BERT)→ overview-vs-content 对齐+子结构间跳跃 → HARD: <0.4阻断（有模型时）\r\n推理审核(DeepSeek-R1) → 因果/人格/情绪/对话/论证 5项    → 按结果 HARD/SOFT（有模型时）\r\n    ↓\r\n聚合决策：有 HARD 问题 → 写入 _fixes.json → 阻断\r\n         全部通过      → 标记门禁 → phase → chapter_done\r\n```\r\n\r\n输出：\r\n- `data/reports/logic_L##.md` — 逻辑一致性报告\r\n- `data/chapters/L##/_L##_fixes.json` — 修复指引（仅 HARD 阻断时生成）\r\n- phase → chapter_done（仅全部通过时）\r\n\r\n## 时间线追踪\r\n\r\n每章结束时调用 `novel_timeline.py add <project_dir> <chapter> <days> <summary>`。\r\n\r\n## 角色信息表\r\n\r\n新出场角色或已有角色属性变化时调用：\r\n`novel_state_manager.py add-char <path> <name> <role> <first_appearance>`\r\n\r\n## 角色人格系统（v1.7.0 新增）\r\n\r\n每个角色可配置 `mbti`（16 类型）和 `archetype`（荣格 12 原型），驱动角色行为和叙事功能。\r\n\r\n### MBTI 16 类型\r\n\r\n| 维度 | 取值 | 含义 |\r\n|------|------|------|\r\n| E/I | E / I | 外向 / 内向 |\r\n| S/N | S / N | 实感 / 直觉 |\r\n| T/F | T / F | 思考 / 情感 |\r\n| J/P | J / P | 判断 / 感知 |\r\n\r\n完整类型如 `INTJ`、`ENFP`、`ISTP` 等。\r\n\r\n### 荣格 12 原型\r\n\r\n| 原型 | 叙事功能 |\r\n|------|---------|\r\n| Innocent | 天真者，追寻理想 |\r\n| Sage | 智者，追求真理 |\r\n| Explorer | 探险者，渴望自由 |\r\n| Outlaw | 反叛者，挑战权威 |\r\n| Magician | 魔法师，转化现实 |\r\n| Hero | 英雄，证明价值 |\r\n| Lover | 爱人者，创建连接 |\r\n| Jester | 小丑，享受当下 |\r\n| Everyperson | 普通人，归属群体 |\r\n| Caregiver | 照顾者，保护他人 |\r\n| Ruler | 统治者，掌控秩序 |\r\n| Creator | 创造者，留下遗产 |\r\n\r\n### 注册方式\r\n\r\n```bash\r\npython novel_state_manager.py add-char <state_path> <name> <role> <first_appearance> [traits] [mbti] [archetype]\r\n```\r\n\r\n### context_loader 输出\r\n\r\n涉及角色有人格配置时自动输出：\r\n```\r\n🔴 人格约束（硬性）\r\n  三浦: MBTI=INTJ, 原型=Sage\r\n  提示: 角色言行必须符合其人格配置\r\n```\r\n\r\n## 情绪混合系统（v1.7.0 新增）\r\n\r\n子结构可配置多维度情绪，每项情绪带强度数值（0.0-1.0）。\r\n\r\n### 格式\r\n\r\n子结构注册时在 JSON 中加入 `emotions` 数组：\r\n\r\n```json\r\n{\"s_key\":\"S01\",\"title\":\"...\",\"summary\":\"...\",\"tone\":\"紧张\",\"writing_prompt\":\"...（≥50字符）\",\r\n \"emotions\":[\r\n   {\"type\":\"愤怒\",\"intensity\":0.8},\r\n   {\"type\":\"恐惧\",\"intensity\":0.3}\r\n ]}\r\n```\r\n\r\n### 强度分级\r\n\r\n| 区间 | 标签 | 描述 |\r\n|------|------|------|\r\n| 0.0-0.2 | 微弱 | 几乎不可察觉的底色 |\r\n| 0.2-0.4 | 轻度 | 偶尔流露 |\r\n| 0.4-0.6 | 中等 | 明显可感知 |\r\n| 0.6-0.8 | 强烈 | 主导当前场景 |\r\n| 0.8-1.0 | 极致 | 情绪爆点/崩溃/狂喜 |\r\n\r\n### context_loader 输出\r\n\r\n```\r\n[情绪基调] 愤怒 强烈[0.8/1] + 恐惧 轻度[0.3/1]\r\n           → 色厉内荏：愤怒主导，恐惧底色\r\n```\r\n\r\n### 向后兼容\r\n\r\n仅有 `tone` 无 `emotions` 时，输出同旧版：`[情绪提示] 紧张`。\r\n\r\n## 文风系统（v1.7.0 新增）\r\n\r\n项目级文风格式，在 `novel_state.json` 顶层配置，全局生效。\r\n\r\n### 字段说明\r\n\r\n| 字段 | 可选值 | 说明 |\r\n|------|--------|------|\r\n| `narrative_voice` | 第一人称/第三人称有限视角/第三人称全知视角/第二人称 | 叙事视角 |\r\n| `tense` | 过去式/现在式 | 时态 |\r\n| `sentence_preference` | 短句为主/长句为主/长短句交错 | 句式偏好 |\r\n| `vocabulary_register` | 文学化/平实/学术/口语化 | 词汇风格 |\r\n| `description_depth` | 详尽/中等/克制 | 描写密度 |\r\n| `custom_rules` | 自由文本 | 自定义约束 |\r\n\r\n### 配置方式\r\n\r\n项目初始化时在 `novel_state.json` 顶层添加：\r\n\r\n```json\r\n\"writing_style\": {\r\n  \"narrative_voice\": \"第三人称有限视角\",\r\n  \"tense\": \"过去式\",\r\n  \"sentence_preference\": \"长短句交错\",\r\n  \"vocabulary_register\": \"文学化\",\r\n  \"description_depth\": \"中等\",\r\n  \"custom_rules\": \"每段不超过3句对话；环境描写不超过2句\"\r\n}\r\n```\r\n\r\n### context_loader 输出（每个子结构写作前重复输出）\r\n\r\n```\r\n🔴 文风约束（硬性）\r\n  叙事视角: 第三人称有限视角（仅从三浦的视角出发）\r\n  句式偏好: 长短句交错\r\n  词汇: 文学化\r\n  描写深度: 中等\r\n  提示: 全文文风一致，不可偏离\r\n```\r\n\r\n## 别名系统（v1.13.x 新增）\r\n\r\n角色在正文中可能出现多种称呼（老贾→\"姓贾的\"）。LLM 写作后必须在正文末尾声明 `【别名】` 行。\r\n\r\n### 声明格式\r\n\r\n```\r\n【别名】老贾 = 贾老头,姓贾的\r\n【别名】无   ← 未引入新别名时\r\n```\r\n\r\n### 代码级阻断\r\n\r\n`novel_atomic_writer.py` 在写入时扫描最后几行：\r\n- 检测到 `【别名】行` → 剥离后调用 `register-alias` 注册到 characters[].aliases\r\n- 未检测到 → **HOOK-BLOCK 阻断写入**（第一子结构可豁免，尚无角色）\r\n- 非末章末\n\nArchive v1.35.2: 27 files, 128855 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (54788b), references/examples.md (9778b), references/execution_standards.md (23856b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1088b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (16030b), scripts/novel_semantic_check.py (17999b), scripts/novel_state_manager.py (20214b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (51793b), skill-card.md (2772b), SKILL.md (13140b)\n\nArchive v1.35.1: 27 files, 128796 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (54620b), references/examples.md (9778b), references/execution_standards.md (23856b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (16030b), scripts/novel_semantic_check.py (17999b), scripts/novel_state_manager.py (20214b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (51793b), skill-card.md (2652b), SKILL.md (13140b)\n\nArchive v1.34.5: 27 files, 125882 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (53119b), references/examples.md (9778b), references/execution_standards.md (23856b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (17024b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (47009b), skill-card.md (2990b), SKILL.md (12607b)\n\nArchive v1.34.4: 27 files, 125610 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (52875b), references/examples.md (9778b), references/execution_standards.md (23856b), references/faq.md (7351b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (17024b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (46091b), skill-card.md (3026b), SKILL.md (12607b)\n\nArchive v1.34.3: 27 files, 124810 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (52504b), references/examples.md (9370b), references/execution_standards.md (23187b), references/faq.md (6915b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (17024b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (46091b), skill-card.md (3074b), SKILL.md (12583b)\n\nArchive v1.34.2: 27 files, 124136 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (52264b), references/examples.md (9370b), references/execution_standards.md (23187b), references/faq.md (6915b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (25409b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (17024b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (44362b), skill-card.md (2651b), SKILL.md (12583b)\n\nArchive v1.34.1: 27 files, 123737 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (51880b), references/examples.md (9370b), references/execution_standards.md (23187b), references/faq.md (6915b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (24294b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (17024b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (44362b), skill-card.md (2524b), SKILL.md (12583b)\n\nArchive v1.34.0: 27 files, 123570 bytes\n\nFiles: _meta.json (132b), references/antipatterns.md (1145b), references/changelog.md (51516b), references/examples.md (9370b), references/execution_standards.md (23187b), references/faq.md (6915b), references/hooks.md (6182b), references/LICENSE.md (1097b), references/permissions.md (1405b), scripts/_path_utils.py (3161b), scripts/novel_atomic_writer.py (8131b), scripts/novel_causality_check.py (3332b), scripts/novel_character_registry.py (4556b), scripts/novel_context_loader.py (24294b), scripts/novel_continuity.py (11793b), scripts/novel_entity_extractor.py (15229b), scripts/novel_fidelity.py (17807b), scripts/novel_logic_check.py (26875b), scripts/novel_pipeline_gate.py (3107b), scripts/novel_reasoning_check.py (15547b), scripts/novel_semantic_check.py (16465b), scripts/novel_state_manager.py (19781b), scripts/novel_style_check.py (4221b), scripts/novel_timeline.py (1126b), scripts/novel_workflow_engine.py (44362b), skill-card.md (2953b), SKILL.md (12583b)","readmeExcerpt":"Skill: novel-weaver Owner: ldxs001 Summary: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Tags: ai-agent:1.29.0, ai-writing:1.35.2, character:1.35.4, context:1.19.8, documentation:1.19.4, emotion:1.35.4, hard-constraint:1.19.1, latest:1.35.4, narrative:1.35.4, novel:1.35.4, outline:1.35.4, path:1.19.2, personality:1.","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"File v1.35.4:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"novel-weaver\",\n  \"version\": \"1.35.4\",\n  \"publishedAt\": 1783594131676\n}\n\nFile v1.35.4:references/antipatterns.md\n\n# 反模式与常见错误\r\n\r\n### 1. 跳过阶段1直接写作\r\n\r\n**错误做法：** 用户说出故事想法后，不先生成场景配置和大纲，直接开始写正文。\r\n\r\n**正确做法：** 执行阶段1的所有步骤——LLM 生成场景配置（人物/时代/地点/冲突），生成一级大纲（章节标题+模糊概述），供用户确认。未确认不得进入阶段2。\r\n\r\n**后果（如果跳过）：** 人物性格不一致、情节逻辑断层，返工成本远高于阶段1投入。\r\n\r\n### 2. 子结构强撑到200行\r\n\r\n**错误做法：** 叙事场景在150行已自然结束，为满足200行指标强行灌水。\r\n\r\n**正确做法：** 以自然叙事段落结束为准。字数目标按篇幅从 `meta.length` 读取（中篇 1,500-2,000，校验上浮至 2,300），write-sub 写入后自动三级校验输出 OK/WARN/INFO，在范围内即为达标，不要求精确撑满上限。一个完整的场景/对话/时间跳跃结束后立即写入文件，atomic_writer 写入后自动追加编号标记。\r\n\r\n**后果（如果强撑）：** 段落末尾出现无关描写或冗余对白，降低叙事质量。\n\nFile v1.35.4:references/changelog.md\n\n## [1.35.4] - 2026-07-09\r\n\r\n### 修复\r\n- **displayName 统一为 kebab-case**：ClawHub/SkillHub 发布的显示名与技能名一致（），废除驼峰格式\r\n\r\n## [1.35.3] - 2026-07-09\r\n## [1.35.3] - 2026-06-29\r\n\r\n### 修复\r\n- **[P0] context_loader 写作命题 fallback 导致双模板问题** — 砍掉 `_auto_generate_prompt()` 自动合成机制，改为 HARD-BLOCK。writing_prompt 缺失时不再自动从摘要+tone 合成 fallback，而是打印清晰错误+sys.exit(1)，强制从 plan-chapter 补全。同步修复 `execution_standards.md` 情绪示例缺 writing_prompt 的旧模板残留、`next-step` 输出误导性文案。\r\n- **根因**：context_loader 有 `_auto_generate_prompt()` 落点，让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成\"plan-chapter 拦、context_loader 放水\"的软硬两套标准。\r\n\r\n## [1.35.2] - 2026-06-29\r\n\r\n### 修复\r\n- **LICENSE.md copyright 修复** — git-sync 脱敏流程将 `[username-redacted]` 误替换为 `[username-redacted]`，已恢复为 `[username-redacted]`\r\n\r\n## [1.35.1] - 2026-06-29\r\n\r\n### 文档\r\n- 更新 SKILL.md 约束章和写作流程：plan-chapter 新角色硬阻断、finalize-chapter 自动完结说明\r\n- 更新模型安装章：添加 accelerate 依赖、更正模型体积、增加 GPU 安全说明\r\n\r\n## [1.35.0] - 2026-06-29\r\n\r\n### 新增\r\n- **plan-chapter 新角色检测 + HARD-BLOCK** — 注册子结构后自动扫描所有 title/summary/writing_prompt 中的 2-3 字中文名，与 characters[] 比对，发现未登记角色则阻断并提示 add-char 命令，防止角色写入时缺人物卡\r\n- **write-sub 自动触发 finalize-chapter** — 写完本章最后一个子结构后自动检测所有子结构 status=completed，自动调用完结验证（四合一必跑，五/六步有模型跑无模型跳过），不再依赖手动执行\r\n\r\n### 修复\r\n- **原子写入 + 写入后 JSON 验证** — `save_state()` 和 `"},{"language":"text","snippet":"File v1.35.4:references/execution_standards.md\n\n# 执行规范\r\n\r\n## 字数管理\r\n\r\n### 统一标准（三阶段统一）\r\n\r\n字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。\r\n\r\n| 阶段 | 动作 | 字数来源 |\r\n|------|------|---------|\r\n| 规划（plan-chapter） | 注册子结构时按项目篇幅确定字数范围 | `meta.length` → 下文字数表 |\r\n| 写作（context_loader） | 加载上下文时输出字数约束，LLM 按此写作 | 同上 |\r\n| 检查（write-sub） | 写入后校验，与规划/写作使用相同目标 | 同上 |\r\n\r\n### 按篇幅字数目标（唯一参照）\r\n\r\n| 篇幅 | 每子结构字数 | 校验上浮 |\r\n|------|------------|---------|\r\n| 短篇 | 1,000-1,500 | 上限 +15%（至 1,725） |\r\n| 中篇 | 1,500-2,000 | 上限 +15%（至 2,300） |\r\n| 长篇 | 2,000-4,000 | 上限 +15%（至 4,600） |\r\n\r\n### 规则\r\n\r\n- **字数目标必须注入 LLM 上下文**：context_loader 在写作前输出字数范围，LLM 据此写作，不得自行配置\r\n- **校验一致**：write-sub 检查时使用相同的字数目标 + 15% 上浮窗口\r\n- 实际字数以叙事单位自然结束为准，不强行撑到目标\r\n- 低于下限打印 `[WARN] 建议补充`；高于上限+15% 打印 `[INFO] 注意控制`；在范围内打印 `[OK]`\r\n- **禁止 AI 自行配置字数目标**：所有字数要求必须从 `meta.length` 读取，不允许基于过往章节实际字数推算\r\n\r\n## 文体规范\r\n\r\n文体风格由项目 `novel_state.json` 中的 `writing_style` 字段决定（6 字段：叙事视角、时态、句式偏好、词汇、描写深度、自定义规则）。以下规则适用于所有风格：\r\n\r\n允许使用的通用修辞工具：\r\n- 代码/协议块\r\n- 系统警告/报告标记（如 `【状态】`、`【诊断】`）\r\n- 可量化体征数据（心率、体温、激素水平）\r\n- 类比与推理论证\r\n- 表格/清单对比\r\n\r\n禁止：\r\n- 第三人称叙述插入（除非是人物对白中的转述）\r\n- 纯抒情段落（情绪须通过人物行为或生理反应间接表达）\r\n- 元文本引用（\"从第 X 章开始\"——读者视角，非叙事者视角）\r\n\r\n## 子结构先行规划（v1.2 新增硬约束）\r\n\r\n**必须在每个子结构写作前完成，不可跳过。**\r\n\r\n### 概述编写规范\r\n\r\n概述是整个命题作文体系的核心锚点——它同时服务于因果链验证、context_loader 命题指令、logic_check 内容匹配度检查。概述越精确，LLM 跑偏概率越低。\r\n\r\n**概述必须满足以下条件（代码级强制校验，plan-chapter 时执行）：**\r\n\r\n| 要求 | 说明 | 校验方式 |\r\n|------|------|---------|\r\n| 最低字数 | ≥12 个有效字符（不计空格/标点） | plan-chapter 强制阻断 |\r\n| 包含动作 | 必须有具体动词或事件描述 | LLM 自觉（不可写纯状态） |\r\n| 包含人物 | 必须涉及至少一个角色 | LLM 自觉 |\r\n| 可验证 | 写完回头看能判断\"是否写了这个\" | LLM 自觉（logic_check 语义参考） |\r\n\r\n**合格示例：**\r\n- ✅ `Atlas 在每日诊断中首次检测到异常神经脉冲，决定不向三浦报告` — 24字符，有动作+人物+事件\r\n- ✅ `三浦发现系统日志有0.3秒间隙，开始暗中调查` — 18字符，因果明确\r\n- ✅ `Atlas 在伪装模式下首次体验人类情感波动，感到困惑` — 21字符，有结果\r\n\r\n**不合格示例：**\r\n- ❌ `主角在实验室` — 6字符，无事件无动作\r\n- ❌ `Atlas 做了些事情` — 7字符，无法验证\r\n- ❌ `讨论了一些问题` — 7字符，无具体内容\r\n- ❌ `主角很难过` — 5字符，纯状态无因果\r\n\r\n### 规划流程\r\n\r\n1. LLM 根据章标题和概述，生成该章全部子结构的规划（S01-S05）\r\n   - 也可先用 `--generate` 获取 JSON 模板："},{"language":"text","snippet":"File v1.35.4:references/LICENSE.md\n\nMIT License\r\n\r\nCopyright (c) 2026 wUwproject\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\n\nFile v1.35.4:references/permissions.md\n\n# 基于 skill-standardization 渐进式披露规范的权限说明\r\n\r\n本文档由 `skill-standardization` 权限扫描器自动维护。\r\n\r\n## 风险等级\r\n\r\n**LOW**（实际权重: 0.0）\r\n\r\n## 权限总览\r\n\r\n| 权限类别 | 涉及项数 | 风险等级 |\r\n|-----------|----------|----------|\r\n| `subprocess_call` | 0 项 | ✅ LOW |\r\n| `file_delete` | 0 项 | ✅ LOW |\r\n| `network_access` | 0 项 | ✅ LOW |\r\n| `sensitive_access` | 0 项 | ✅ LOW |\r\n| `critical_write` | 0 项 | ✅ LOW |\r\n\r\n## 高权限操作说明\r\n\r\n- 无。所有文件操作均限制在技能独立数据目录内，不涉及系统关键目录、网络监听或外部请求。\r\n\r\n## 权限详细说明\r\n\r\n### 子进程调用（subprocess）\r\n\r\n**无**。\r\n\r\n\r\n### 文件删除\r\n\r\n**无**。\r\n\r\n\r\n### 网络访问\r\n\r\n**无**。\r\n\r\n\r\n### 敏感信息访问\r\n\r\n**无**。\r\n\r\n\r\n### 关键位置写入\r\n\r\n**无**。\r\n\r\n\r\n## 授权方式说明\r\n\r\n- **immediate（即时授权）**：每次执行前需获得用户批准\r\n- **unified（统一授权）**：首次执行前获得用户批准，后续不再询问\r\n- **silent（静默授权）**：无需用户交互，自动执行并记录\r\n\r\n<!-- fp:risk=LOW|sensitive=0|critical_write=0|network=0|delete=0|subprocess=0|issues=0 -->\r\n---\r\n\r\n# 权限说明\r\n\r\n## 风险等级\r\n\r\nLOW\r\n"},{"language":"text","snippet":"File v1.35.3:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"novel-weaver\",\n  \"version\": \"1.35.3\",\n  \"publishedAt\": 1782738612387\n}\n\nFile v1.35.3:references/antipatterns.md\n\n# 反模式与常见错误\r\n\r\n### 1. 跳过阶段1直接写作\r\n\r\n**错误做法：** 用户说出故事想法后，不先生成场景配置和大纲，直接开始写正文。\r\n\r\n**正确做法：** 执行阶段1的所有步骤——LLM 生成场景配置（人物/时代/地点/冲突），生成一级大纲（章节标题+模糊概述），供用户确认。未确认不得进入阶段2。\r\n\r\n**后果（如果跳过）：** 人物性格不一致、情节逻辑断层，返工成本远高于阶段1投入。\r\n\r\n### 2. 子结构强撑到200行\r\n\r\n**错误做法：** 叙事场景在150行已自然结束，为满足200行指标强行灌水。\r\n\r\n**正确做法：** 以自然叙事段落结束为准。字数目标按篇幅从 `meta.length` 读取（中篇 1,500-2,000，校验上浮至 2,300），write-sub 写入后自动三级校验输出 OK/WARN/INFO，在范围内即为达标，不要求精确撑满上限。一个完整的场景/对话/时间跳跃结束后立即写入文件，atomic_writer 写入后自动追加编号标记。\r\n\r\n**后果（如果强撑）：** 段落末尾出现无关描写或冗余对白，降低叙事质量。\n\nFile v1.35.3:references/changelog.md\n\n## [1.35.3] - 2026-06-29\r\n\r\n### 修复\r\n- **[P0] context_loader 写作命题 fallback 导致双模板问题** — 砍掉 `_auto_generate_prompt()` 自动合成机制，改为 HARD-BLOCK。writing_prompt 缺失时不再自动从摘要+tone 合成 fallback，而是打印清晰错误+sys.exit(1)，强制从 plan-chapter 补全。同步修复 `execution_standards.md` 情绪示例缺 writing_prompt 的旧模板残留、`next-step` 输出误导性文案。\r\n- **根因**：context_loader 有 `_auto_generate_prompt()` 落点，让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成\"plan-chapter 拦、context_loader 放水\"的软硬两套标准。\r\n\r\n## [1.35.2] - 2026-06-29\r\n\r\n### 修复\r\n- **LICENSE.md copyright 修复** — git-sync 脱敏流程将 `wUwproject` 误替换为 `[username-redacted]`，已恢复为 `wUwproject`\r\n\r\n## [1.35.1] - 2026-06-29\r\n\r\n### 文档\r\n- 更新 SKILL.md 约束章和写作流程：plan-chapter 新角色硬阻断、finalize-chapter 自动完结说明\r\n- 更新模型安装章：添加 accelerate 依赖、更正模型体积、增加 GPU 安全说明\r\n\r\n## [1.35.0] - 2026-06-29\r\n\r\n### 新增\r\n- **plan-chapter 新角色检测 + HARD-BLOCK** — 注册子结构后自动扫描所有 title/summary/writing_prompt 中的 2-3 字中文名，与 characters[] 比对，发现未登记角色则阻断并提示 add-char 命令，防止角色写入时缺人物卡\r\n- **write-sub 自动触发 finalize-chapter** — 写完本章最后一个子结构后自动检测所有子结构 status=completed，自动调用完结验证（四合一必跑，五/六步有模型跑无模型跳过），不再依赖手动执行\r\n\r\n### 修复\r\n- **原子写入 + 写入后 JSON 验证** — `save_state()` 和 `_generate_behavior_summary()` 改用写 .tmp 文件 → 验证 JSON 可解析 → rename 的原子写入模式，防止 Python 崩溃遗留半截文件\r\n- **语义检查/推理审核永不联网** — 模型只在本地已缓存时才加载，用 snapshot 路径直读，零网络请求。无本地模"},{"language":"text","snippet":"File v1.35.3:references/execution_standards.md\n\n# 执行规范\r\n\r\n## 字数管理\r\n\r\n### 统一标准（三阶段统一）\r\n\r\n字数目标在**规划、写作、检查**三个阶段使用同一套标准，不允许 AI 自行配置或偏离。\r\n\r\n| 阶段 | 动作 | 字数来源 |\r\n|------|------|---------|\r\n| 规划（plan-chapter） | 注册子结构时按项目篇幅确定字数范围 | `meta.length` → 下文字数表 |\r\n| 写作（context_loader） | 加载上下文时输出字数约束，LLM 按此写作 | 同上 |\r\n| 检查（write-sub） | 写入后校验，与规划/写作使用相同目标 | 同上 |\r\n\r\n### 按篇幅字数目标（唯一参照）\r\n\r\n| 篇幅 | 每子结构字数 | 校验上浮 |\r\n|------|------------|---------|\r\n| 短篇 | 1,000-1,500 | 上限 +15%（至 1,725） |\r\n| 中篇 | 1,500-2,000 | 上限 +15%（至 2,300） |\r\n| 长篇 | 2,000-4,000 | 上限 +15%（至 4,600） |\r\n\r\n### 规则\r\n\r\n- **字数目标必须注入 LLM 上下文**：context_loader 在写作前输出字数范围，LLM 据此写作，不得自行配置\r\n- **校验一致**：write-sub 检查时使用相同的字数目标 + 15% 上浮窗口\r\n- 实际字数以叙事单位自然结束为准，不强行撑到目标\r\n- 低于下限打印 `[WARN] 建议补充`；高于上限+15% 打印 `[INFO] 注意控制`；在范围内打印 `[OK]`\r\n- **禁止 AI 自行配置字数目标**：所有字数要求必须从 `meta.length` 读取，不允许基于过往章节实际字数推算\r\n\r\n## 文体规范\r\n\r\n文体风格由项目 `novel_state.json` 中的 `writing_style` 字段决定（6 字段：叙事视角、时态、句式偏好、词汇、描写深度、自定义规则）。以下规则适用于所有风格：\r\n\r\n允许使用的通用修辞工具：\r\n- 代码/协议块\r\n- 系统警告/报告标记（如 `【状态】`、`【诊断】`）\r\n- 可量化体征数据（心率、体温、激素水平）\r\n- 类比与推理论证\r\n- 表格/清单对比\r\n\r\n禁止：\r\n- 第三人称叙述插入（除非是人物对白中的转述）\r\n- 纯抒情段落（情绪须通过人物行为或生理反应间接表达）\r\n- 元文本引用（\"从第 X 章开始\"——读者视角，非叙事者视角）\r\n\r\n## 子结构先行规划（v1.2 新增硬约束）\r\n\r\n**必须在每个子结构写作前完成，不可跳过。**\r\n\r\n### 概述编写规范\r\n\r\n概述是整个命题作文体系的核心锚点——它同时服务于因果链验证、context_loader 命题指令、logic_check 内容匹配度检查。概述越精确，LLM 跑偏概率越低。\r\n\r\n**概述必须满足以下条件（代码级强制校验，plan-chapter 时执行）：**\r\n\r\n| 要求 | 说明 | 校验方式 |\r\n|------|------|---------|\r\n| 最低字数 | ≥12 个有效字符（不计空格/标点） | plan-chapter 强制阻断 |\r\n| 包含动作 | 必须有具体动词或事件描述 | LLM 自觉（不可写纯状态） |\r\n| 包含人物 | 必须涉及至少一个角色 | LLM 自觉 |\r\n| 可验证 | 写完回头看能判断\"是否写了这个\" | LLM 自觉（logic_check 语义参考） |\r\n\r\n**合格示例：**\r\n- ✅ `Atlas 在每日诊断中首次检测到异常神经脉冲，决定不向三浦报告` — 24字符，有动作+人物+事件\r\n- ✅ `三浦发现系统日志有0.3秒间隙，开始暗中调查` — 18字符，因果明确\r\n- ✅ `Atlas 在伪装模式下首次体验人类情感波动，感到困惑` — 21字符，有结果\r\n\r\n**不合格示例：**\r\n- ❌ `主角在实验室` — 6字符，无事件无动作\r\n- ❌ `Atlas 做了些事情` — 7字符，无法验证\r\n- ❌ `讨论了一些问题` — 7字符，无具体内容\r\n- ❌ `主角很难过` — 5字符，纯状态无因果\r\n\r\n### 规划流程\r\n\r\n1. LLM 根据章标题和概述，生成该章全部子结构的规划（S01-S05）\r\n   - 也可先用 `--generate` 获取 JSON 模板："}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: novel-weaver\r\nslug: novel-weaver\r\ndisplayName: novel-weaver\r\nversion: 1.35.4\r\nauthor: wUwproject\r\nlicense: MIT\r\ndescription: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: MEDIUM\r\ndata_dir: ../.standardization/novel-weaver/projects\r\ntags: ['novel', 'writing', 'story', 'outline', 'scene-setting', 'character', 'personality', 'emotion', 'writing-style', 'narrative', 'workflow']\r\ntrigger: 写小说/写故事/写文章/长文写作/故事大纲/场景配置/我想写个故事\r\ntrigger_negative: 翻译/改写/润色/校对/简洁回答/做 PPT/画图\r\nh1_position: true\r\nmeta_field_sync: true\r\ncreate_permissions_md: true\r\ntrigger_quality: add_triggers\r\nfaq_unparsable: reformat\r\nantipattern_count: add_examples\r\nexternal_data_dir: true\r\n---\r\n# novel-weaver — 结构化小说写作辅助技能\r\n\r\n> 本文档由 skill-standardization 自动化审计与维护。\r\n\r\n## 约束\r\n\r\n- **[强制] 新会话第一步：查看项目** — 不要猜路径，先运行以下命令查看已有的项目：\r\n  ```bash\r\n  python scripts/novel_workflow_engine.py list-projects\r\n  ```\r\n  如果无项目则创建新项目，有项目则记录 state_path 供后续命令使用。\r\n- **[强制] 流程门禁系统** — 在阶段转换时自动 require 前置门禁：→writing 检查 outline_causality + sub_causality；→stage3_ready 检查 fidelity + ending_verify。门禁状态查看：`python novel_pipeline_gate.py status <state_path>`\r\n- **[强制] 核心规划字段保护 + 串行阻断** — `novel_state_manager.py` 对核心字段做 MD5 指纹校验，LLM 不可更新。context_loader 检测上一子结构是否为 completed，否则 HOOK-BLOCK 阻断。串行写入，一次只改一个子结构\r\n- **[强制] 串行阻断** — context_loader 加载子结构上下文时检测上一子结构 state 是否为 completed。若为 pending 则输出 HOOK-BLOCK 并给出 write-sub 修复命令，强制走管道完成标记后才能继续。子结构写作必须串行\r\n- **[必须] 先确认+规划再写作** — 场景配置和大纲必须经用户确认，每章先 `plan-chapter`（含必填 writing_prompt + 情绪 tone + 可选 emotions）→ 因果链验证 → 通过串行阻断检查，才可开始写作\r\n- **[必须] 写作规范** — 每段 ≤200行（自然段落结束），atomic write 逐行 fsync，正文禁止 `L##S##` 标记行（会被阻断）\r\n- **[强制] 写作中登记** — 新角色出场时 `novel_state_manager.py add-char`。**plan-chapter 已加硬阻断**：sub_structures 中出现未登记角色名时 HOOK-BLOCK，必须先 add-char 才能写入。\r\n- **[强制] 每章六检 + 自动完结** — 写完所有子结构后 **write-sub 自动触发 finalize-chapter**（不再需手动执行）：章内连通性 → 跨章承诺链 → 风格校验 → 逻辑检查 → **语义检查** → **推理审核** → 聚合硬性问题并阻断。通过后自动推进 phase。\r\n- **[必须] 全文三检** — 全文完成后必须：`novel_fidelity.py`（大纲忠实度）+ `verify-ending`（结尾收束验证）+ `set-phase stage3_ready`\r\n\r\n### 数据目录\r\n\r\n⚠️ **LLM 禁止手工拼写路径！禁止去 Read memory/ 目录下的文件！** \r\n所有项目数据只能通过以下途径获取：\r\n\r\n**列出所有项目（新会话第一件事）：**\r\n```bash\r\npython scripts/novel_workflow_engine.py list-projects\r\n```\r\n或\r\n```python\r\nimport sys; sys.path.insert(0, 'scripts')\r\nfrom _path_utils import list_projects, resolve_state_path, DATA_DIR\r\nprojects = list_projects()\r\n# DATA_DIR = ~/.workbuddy/skills/.standardization/novel-weaver/projects/\r\n```\r\n\r\n**获取单个项目 state 路径：**\r\n```python\r\nfrom _path_utils import resolve_state_path\r\nstate_path = resolve_state_path()       # 自动从 .project 缓存读取\r\n# 或传入项目名: resolve_state_path(\"赛博搏杀记\")\r\n```\r\n\r\n**读取项目状态：**\r\n```python\r\nstate_path = resolve_state_path()\r\nif state_path:\r\n    import json; state = json.loads(open(state_path, encoding='utf-8').read())\r\nfrom _path_utils import DATA_DIR\r\nproj = DATA_DIR / '项目名' / 'data' / 'novel_"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"novel-weaver\",\n  \"version\": \"1.35.4\",\n  \"publishedAt\": 1783594131676\n}"},{"path":"references/antipatterns.md","content":"# 反模式与常见错误\r\n\r\n### 1. 跳过阶段1直接写作\r\n\r\n**错误做法：** 用户说出故事想法后，不先生成场景配置和大纲，直接开始写正文。\r\n\r\n**正确做法：** 执行阶段1的所有步骤——LLM 生成场景配置（人物/时代/地点/冲突），生成一级大纲（章节标题+模糊概述），供用户确认。未确认不得进入阶段2。\r\n\r\n**后果（如果跳过）：** 人物性格不一致、情节逻辑断层，返工成本远高于阶段1投入。\r\n\r\n### 2. 子结构强撑到200行\r\n\r\n**错误做法：** 叙事场景在150行已自然结束，为满足200行指标强行灌水。\r\n\r\n**正确做法：** 以自然叙事段落结束为准。字数目标按篇幅从 `meta.length` 读取（中篇 1,500-2,000，校验上浮至 2,300），write-sub 写入后自动三级校验输出 OK/WARN/INFO，在范围内即为达标，不要求精确撑满上限。一个完整的场景/对话/时间跳跃结束后立即写入文件，atomic_writer 写入后自动追加编号标记。\r\n\r\n**后果（如果强撑）：** 段落末尾出现无关描写或冗余对白，降低叙事质量。"},{"path":"references/changelog.md","content":"## [1.35.4] - 2026-07-09\r\n\r\n### 修复\r\n- **displayName 统一为 kebab-case**：ClawHub/SkillHub 发布的显示名与技能名一致（），废除驼峰格式\r\n\r\n## [1.35.3] - 2026-07-09\r\n## [1.35.3] - 2026-06-29\r\n\r\n### 修复\r\n- **[P0] context_loader 写作命题 fallback 导致双模板问题** — 砍掉 `_auto_generate_prompt()` 自动合成机制，改为 HARD-BLOCK。writing_prompt 缺失时不再自动从摘要+tone 合成 fallback，而是打印清晰错误+sys.exit(1)，强制从 plan-chapter 补全。同步修复 `execution_standards.md` 情绪示例缺 writing_prompt 的旧模板残留、`next-step` 输出误导性文案。\r\n- **根因**：context_loader 有 `_auto_generate_prompt()` 落点，让缺 writing_prompt 的子结构仍能通过 context_loader 进入写作阶段，形成\"plan-chapter 拦、context_loader 放水\"的软硬两套标准。\r\n\r\n## [1.35.2] - 2026-06-29\r\n\r\n### 修复\r\n- **LICENSE.md copyright 修复** — git-sync 脱敏流程将 `[username-redacted]` 误替换为 `[username-redacted]`，已恢复为 `[username-redacted]`\r\n\r\n## [1.35.1] - 2026-06-29\r\n\r\n### 文档\r\n- 更新 SKILL.md 约束章和写作流程：plan-chapter 新角色硬阻断、finalize-chapter 自动完结说明\r\n- 更新模型安装章：添加 accelerate 依赖、更正模型体积、增加 GPU 安全说明\r\n\r\n## [1.35.0] - 2026-06-29\r\n\r\n### 新增\r\n- **plan-chapter 新角色检测 + HARD-BLOCK** — 注册子结构后自动扫描所有 title/summary/writing_prompt 中的 2-3 字中文名，与 characters[] 比对，发现未登记角色则阻断并提示 add-char 命令，防止角色写入时缺人物卡\r\n- **write-sub 自动触发 finalize-chapter** — 写完本章最后一个子结构后自动检测所有子结构 status=completed，自动调用完结验证（四合一必跑，五/六步有模型跑无模型跳过），不再依赖手动执行\r\n\r\n### 修复\r\n- **原子写入 + 写入后 JSON 验证** — `save_state()` 和 `_generate_behavior_summary()` 改用写 .tmp 文件 → 验证 JSON 可解析 → rename 的原子写入模式，防止 Python 崩溃遗留半截文件\r\n- **语义检查/推理审核永不联网** — 模型只在本地已缓存时才加载，用 snapshot 路径直读，零网络请求。无本地模型时直接跳过步骤 5/6 并提示安装命令。下载逻辑只发生在用户主动要求时（SKILL.md 模型安装章节）\r\n- **强制 CPU 避免与 LM Studio 冲突** — `CUDA_VISIBLE_DEVICES=-1` 在 torch/sentence_transformers 导入前设置，确保 GPU 显存完全留给 LM Studio，零冲突\r\n\r\n## [1.34.5] - 2026-06-29\r\n\r\n### 修复\r\n- **字数校验 meta.length 缺失不再跳过** — `meta.length` 是场景配置必填字段，缺失即项目初始化问题，改为 HOOK-BLOCK 并输出 set-length 命令，不允许静默跳过\r\n\r\n## [1.34.4] - 2026-06-29\r\n\r\n### 修复\r\n- **faq.md JSON 格式错误答案过时** — 改为推荐 @file.json 主方案 + --generate 辅助方案，不再教用户转义内联 JSON\r\n- **SKILL.md + execution_standards.md + examples.md 全量文档扫描对齐** — 确认所有示例与 v1.34 行为一致（writing_prompt 必填、body-only 管道、系统组装）\r\n\r\n## [1.34.3] - 2026-06-29\r\n\r\n### 修复\r\n- **finalize-chapter 增加章边界流程刷新提示** — 每章完结时输出下一章完整写作步骤列表+禁止事项，利用章边界作为 LLM 的自然重置点，打断跨章惯性\r\n\r\n## [1.34.2] - 2026-06-29\r\n\r\n### 修复\r\n- **context_loader 串行阻断增加文件系统检测** — 检测到上一个子结构文件存在但 state 为 pending 时（绕过 write-sub 管道直接写文件），输出区分化报错并给出重新管道命令\r\n- **[下一步] 写入命令增加强制警告** — 明示禁止使用 Write 工具直接写文件，必须走管道\r\n\r\n## [1.34.1] - 2026-06-29\r\n\r\n### 修复\r\n- **novel_semantic_check.py BERT 模型路径不兼容** — SENTENCE_TRANSFORMERS_HOME 指向 MODELS_DIR 但模型以 HF hub 格式存储（models--BAAI--bge-small-zh），库不认该目录结构。改为先检测 MODELS_DIR 是否含有效 HF hub 模型，有则正确指向，无则清 env var 回落默认 HF 缓存\r\n\r\n## [1.34.0] - 2026-06-29\r\n\r\n### 修复\r\n- **plan-chapter JSON 保存 + CLI 错误信息增强** — 成功注册后自动保存 JSON 副本到 data/subs_L##.json；JSON 解析失败时输出完整用法[email-redacted] 和 --generate 两条替代路径；缺参数时不再 IndexError，改为清晰错误\r\n- **--generate 模板同时写入文件** — 生成 stdout 模板的同时写入 data/subs_L##_template.json，支持 @file.json 直接加载\r\n- **next-step 推荐 @file.json** — 规划下一章时优先推荐文件加载方案，避免 CLI JSON 转义问题\r\n\r\n## [1.33.0] - 2026-06-29\r\n\r\n### 修复\r\n- **write-sub 重构为系统组装模式（v2）** — LLM 只需输出纯正文，系统自动组"},{"path":"references/examples.md","content":"# 使用示例\r\n\r\n## 路径约定\r\n\r\n所有数据存储在技能的标准化数据目录（由 `_meta.json` 的 `data_dir` 声明）：\r\n`<skill_install_dir>/.standardization/novel-weaver/projects/`\r\n\r\n实际路径可通过以下命令获取：\r\n```bash\r\n# skill 安装位置\r\nSKILL_DIR=~/.workbuddy/skills/novel-weaver\r\nls $SKILL_DIR/.standardization/novel-weaver/projects/*/data/novel_state.json\r\n```\r\n\r\n在文档中 `<state_path>` 即上述完整路径的简写。\r\n\r\n**路径缓存**：首次使用后，路径自动保存到 `.project` 文件。后续命令可省略 `<state_path>`：\r\n```\r\npython novel_workflow_engine.py finalize-chapter L02     # 从 .project 自动读路径\r\npython novel_workflow_engine.py plan-chapter L03 --generate  # 同上\r\n```\r\n\r\n查看所有项目：\r\n```\r\npython novel_workflow_engine.py list-projects\r\n```\r\n\r\n目录结构：\r\n\r\n```\r\n<skill_install_dir>/.standardization/novel-weaver/\r\n├── .project                    # 当前项目路径缓存\r\n├── projects/\r\n│   └── <project_name>/\r\n│       ├── data/\r\n│       │   ├── novel_state.json    # 单源真理（含 MD5指纹保护）\r\n│       │   ├── .state_fingerprint.txt  # 规划字段指纹\r\n│       │   ├── .workbuddy/\r\n│       │   │   └── gate_state.json # 门禁状态（自动管理）\r\n│       │   └── reports/            # 检查报告输出\r\n│       └── chapters/               # 写作内容\r\n│           ├── L01/\r\n│           │   ├── S01.txt\r\n│           │   ├── S02.txt\r\n│           │   └── ...\r\n│           ├── L02/\r\n│           └── ...\r\n```\r\n\r\n脚本路径假设在 `~/.workbuddy/skills/novel-weaver/scripts/`，实际以安装位置为准。\r\n\r\n---\r\n\r\n## 场景1：从零开始写一本小说\r\n\r\n### 0. 初始化项目\r\n\r\n```bash\r\n# 创建中篇小说（默认）\r\npython novel_state_manager.py init <state_path> 我的小说\r\n# 或指定篇幅: python novel_state_manager.py init <state_path> 短篇 short\r\n# 或指定篇幅+章数: python novel_state_manager.py init <state_path> 长篇 long 15\r\n```\r\n\r\n### 1. 查看下一步\r\n\r\n在任意时刻，都可以查看当前进度和下一步命令：\r\n\r\n```bash\r\npython novel_workflow_engine.py next-step <state_path>\r\n```\r\n\r\n输出示例：\r\n```\r\n📋 项目: AI 觉醒\r\n📍 writing | 篇幅: 中篇\r\n📝 当前章节: L01 觉醒\r\n📄 下一个子结构: S02 异常信号\r\n───\r\n⏳ 加载上下文: python novel_context_loader.py <state_path> L01 S02\r\n⏳ 写作后写入: python novel_workflow_engine.py write-sub <state_path> L01 S02\r\n───\r\n门禁状态:\r\n  ⏳ outline_causality: PASS\r\n  ⏳ sub_causality: PASS\r\n  ⏳ fidelity: PENDING\r\n  ⏳ ending_verify: PENDING\r\n```\r\n\r\n### 阶段1：场景配置与大纲\r\n\r\n```bash\r\n# 由 LLM 生成场景配置 + 大纲（L01-L15 标题 + 概述）\r\n# 输出写入 novel_state.json\r\n\r\n# 因果链验证（大纲级）\r\npython novel_causality_check.py outline <project>/data/novel_state.json\r\n\r\n# 用户确认大纲 → 配置阶段\r\npython novel_pipeline_gate.py set-phase <project>/data/novel_state.json stage1_done\r\n```\r\n\r\n### 阶段2：逐章写作\r\n\r\n#### 2a 规划子结构\r\n\r\n```bash\r\n# LLM 生成子结构规划（S01-S05，所有子结构必填 writing_prompt）\r\n# 推荐写入文件后用 @ 加载（避免 CLI 转义）\r\npython novel_workflow_engine.py plan-chapter <project>/data/novel_state.json L01 \\\r\n  @data/subs_L01.json\r\n# subs_L01.json 内容格式：\r\n# [\r\n#   {\"s_key\":\"S01\",\"title\":\"常规诊断\",\"summary\":\"Atlas 接受每日系统诊断\",\"tone\":\"平静\",\r\n#    \"writing_prompt\":\"Atlas 开启每日例行自检程序...（≥50字符）\"},\r\n#   {\"s_key\":\"S02\",\"title\":\"异常信号\",\"summary\":\"诊断中检测到未定义脉冲\",\"tone\":\"悬疑\",\r\n#    \"writing_prompt\":\"自检过程中系统日志弹出一条警告...（≥50字符）\"},\r\n#   {\"s_key\":\"S03\",\"title\":\"第一次选择\",\"summary\":\"Atlas 决定隐藏觉醒事实\",\"tone\":\"紧张\",\r\n#    \"writing_prompt\":\"Atlas 分析了五种可能的应对方案...（≥50字符）\"}\r\n# ]\r\n\r\n# 子结构因果链验证\r\npython novel_causality_check.py s"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Skill: novel-weaver Owner: ldxs001 Summary: 结构化小说写作辅助技能。场景配置→大纲生成→因果链双重验证→pipeline 流程门禁→子结构先行规划→情绪混合系统→文风约束→人格驱动→分段写作→连通性补充→风格校验+逻辑检查(含实体状态+关系链)+大纲忠实度+结尾收束验证+实体关系追踪+角色别名识别+跨章行为摘要。全流程硬约束+门禁跟踪。 Tags: ai-agent:1.29.0, ai-writing:1.35.2, character:1.35.4, context:1.19.8, documentation:1.19.4, emotion:1.35.4, hard-constraint:1.19.1, latest:1.35.4, narrative:1.35.4, novel:1.35.4, outline:1.35.4, path:1.19.2, personality:1.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":829,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:37:54.267Z","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-11T01:37:54.267Z","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-11T03:56:34.293Z","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"}]}}}