webnovel-writer 六层主链收束实录:从「半成品并存」到「合同 + 投影」统一架构

webnovel-writer 六层主链收束实录:从「半成品并存」到「合同 + 投影」统一架构 webnovel-writer 六层主链收束实录从「半成品并存」到「合同 投影」统一架构【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统解决 AI 写作中的「遗忘」和「幻觉」问题支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer核心主题本文围绕 webnovel-writer 的 Story System「最终收束」设计文档讲解如何把散落的知识表、裁决表、合同树、提交链与投影链一次性收敛为单一主链并验证文档中的九个 Section 在仓库中的真实落地状态。应用场景面向正在维护或二次开发 webnovel-writer 的开发者、以及想理解「CSV 知识层 → 合同 → 任务书 → 提交 → 投影」全链路如何防止 AI 写作「遗忘与幻觉」的工程师。读完你将掌握CSV_CONFIG注册式配置的写法与检索语义、裁决规则.csv的字段设计与裁决算法、story_system_engine六步流水线、context_manager瘦身后的 JSON 契约以及CHAPTER_COMMIT → projection唯一写后真源路径的落地验证方法。1. 这份 Spec 在解决什么问题在 webnovel-writer 中Story System 曾长期处于「半成品并存」状态老式说明书文本输出、直接读写 state/index 的散写路径、运行时直读 CSV 补洞的 fallback与新引入的合同树、提交链、投影链同时存在。docs/archive/superpowers/specs/2026-04-14-story-system-final-convergence-spec.md下文简称「最终收束 Spec」给出的答案不是「再补一个模块」而是六层全做知识层、裁决层、合同层、提交层、投影层、消费端一次收束旧散写路径直接删不考虑向后兼容能删就删不保留 deprecated 双路径context_manager降级为纯 JSON 组装器不再负责 text 渲染与 snapshotCSV_CONFIG 裁决表 合同树 commit/projection成为唯一主链所有消费者只吃合同和投影视图不再允许运行时直接读 CSV / md / reference 来补洞。该 Spec 的定位继承自三份前序文档current-system-diagnosis.md诊断散乱点、2026-04-12-story-system-evolution-spec.md六层主链形态、2026-04-14-context-agent-writing-brief-design.md写前任务书入口本篇则是把三者收束成「一次性到位」的执行方案。1.1 总链路一条不可绕过的流水线最终链路被固定为知识表 / 裁决表 ↓ CSV_CONFIG reference_search ↓ story_system_engine ↓ MASTER / VOLUME / CHAPTER / REVIEW ↓ context_manager只出 JSON ↓ context-agent按示例写任务书 ↓ webnovel-write Step 2只吃任务书 ↓ review />CSV_CONFIG { 命名规则: { file: 命名规则.csv, search_cols: [关键词, 意图与同义词, 核心摘要], output_cols: [编号, 命名对象, 核心摘要, 大模型指令, 详细展开], poison_cols: [毒点], role: base, }, 场景写法: { file: 场景写法.csv, search_cols: [关键词, 意图与同义词, 核心摘要], output_cols: [编号, 模式名称, 核心摘要, 大模型指令, 详细展开], poison_cols: [毒点], role: base, }, 题材与调性推理: { file: 题材与调性推理.csv, search_cols: [题材关键词, 别名], output_cols: [题材, 默认调性, 推荐基础表, 推荐动态表], poison_cols: [毒点], role: route, }, 裁决规则: { file: 裁决规则.csv, search_cols: [题材], output_cols: [ 题材, 风格优先级, 爽点优先级, 节奏默认策略, 毒点权重, 冲突裁决, contract注入层, 反模式, ], poison_cols: [], role: reasoning, }, }2.2 仓库中的真实实现字段已升级当前 reference_search.py 中的CSV_CONFIG不仅落实了 Spec 的五个字段还额外补充了工程化字段search_cols从字符串列表升级为带权重的 dict如{关键词: 3, 意图与同义词: 4, 核心摘要: 2}直接作为 BM25 的词项加权来源新增poison_col单数统一命名毒点与contract_inject指定命中内容注入合同树的哪一层例如MASTER_SETTING.base_context、CHAPTER_BRIEF.dynamic_context、MASTER_SETTING.route、CHAPTER_BRIEF.writing_guidance新增prefix如NR、SP、WT、TR、PA、CH、SY、GR、RS与required_cols供校验脚本核对 CSV 表头。表角色role与检索可见性直接挂钩_table_visible_for_search()会把route/reasoning这类内部表从普通 skill 的跨表检索中隐藏reference_search.py只有显式指定表名或skill story-system时才可见避免裁决表、路由表被写作检索误命中。2.3 检索语义per-table 的 BM25-litesearch()入口reference_search.py的流程是load_tables()按表加载 CSVUTF-8 BOM用适用技能、适用题材列做 skill / genre 过滤题材先经genre_taxonomy.resolve_canonical_genre归一化「全部」恒匹配按CSV_CONFIG[tbl][search_cols]的权重把命中行转成加权词项_build_doc_terms逐表计算简化 BM25 分数对中文复合词启用「子串匹配」兜底qt in dt or dt in qt缓解无分词器时的召回缺口按分数倒序返回max_results条每条带编号 / 表 / 分类 / 层级 / 适用题材 / 内容摘要 / 大模型指令。Spec 的验收点「同一 CLI 在不同表上确实用的是不同search_cols」在此被满足每张表都从自己的配置取权重而不再是全局一份权重。命令行用法为python webnovel-writer/scripts/reference_search.py --skill write --table 命名规则 --query 战斗描写 --max-results 3 python webnovel-writer/scripts/reference_search.py --skill story-system --table 裁决规则 --query 仙侠 --genre 仙侠3. Section 2CSV 内容修补Spec 要求对现有表做统一审计修补重点解决四类问题毒点列命名不统一、路由表字段不足、同义词填充不足、各题材覆盖不均衡。3.1 毒点列统一把旧列反面写法、忌讳写法、常见误区、常见崩盘误区统一改名为毒点。当前 references/csv/ 下的 9 张知识表中命名规则.csv、场景写法.csv、写作技法.csv、桥段套路.csv、爽点与节奏.csv、人设与关系.csv、金手指与设定.csv、题材与调性推理.csv均以毒点作为毒点列裁决规则.csv则通过poison_col: 显式声明「本表无毒点列」其毒点信息以反模式列表达。3.2 路由表补字段题材与调性推理.csv至少补齐推荐基础表、推荐动态表、默认调性、风格锚点。仓库中的实现为推荐基础检索表/推荐动态检索表/核心调性/canonical_genre/题材别名并在CSV_CONFIG中登记为role: route、contract_inject: MASTER_SETTING.route即路由行本身也是合同树的route段来源。3.3 内容补全规则与 README 同步补全全部手工进行不写自动迁移脚本最低要求是「每张表至少覆盖 7 个题材的常见场景」「每条意图与同义词至少 3 个同义表达」「每条毒点非空」同时 references/csv/README.md 同步更新毒点列命名、路由表新字段与 schema 描述保证 README 与CSV_CONFIG对齐。相关校验逻辑可在 validate_csv.py 及其测试 test_validate_csv.py 中查看。4. Section 3裁决表——独立的 Reasoning Layer4.1 与路由表的边界路由表题材与调性推理.csv回答「查哪些表」裁决表裁决规则.csv回答「查到之后怎么用」——多条命中怎么选、哪类爽点优先、哪类毒点更致命、结果注入合同树哪一层。这对应ui-ux-pro-max中products.csv与ui-reasoning.csv的分工模式。4.2 字段设计Spec 要求至少包含题材、风格优先级、爽点优先级、节奏默认策略、毒点权重、冲突裁决、contract注入层、反模式。仓库中 裁决规则.csv 的表头完全对齐并补上了编号RS-001起、适用技能story-system、分类、层级推理层、关键词、意图与同义词、适用题材、大模型指令、核心摘要等通用列。4.3 首批覆盖从 7 个题材扩展到 17 行Spec 要求先覆盖 7 个题材各 1 行当前仓库实际已覆盖17 个题材RS-001~RS-017西方奇幻、东方仙侠、科幻末世、都市日常、都市修真、都市高武、历史古代、玄幻、悬疑、游戏电竞、古言、现言、幻言、年代、种田经营、快穿、衍生同人。以东方仙侠为例RS-002, story-system, 裁决, 推理层, 东方仙侠|仙侠|修仙|系统流|无限流, 东方仙侠怎么写|修仙怎么写, 仙侠, 按冲突裁决排序命中条目, 东方仙侠裁决规则, 仙侠, 冷硬算计 超然物外 热血冲突, 境界碾压 底牌揭晓 因果兑现, 慢蓄快爆 修炼段精简 斗法段拉满, 修炼水字数 圣母病 逻辑断裂, 爽点与节奏 桥段套路 场景写法, CHAPTER_BRIEF.writing_guidance, 修炼变流水账|境界突破无代价|感悟靠顿悟标签各字段语义风格优先级、爽点优先级、毒点权重、冲突裁决用分隔的有序序列前者优先冲突裁决多表命中时的表级排序如仙侠为爽点与节奏 桥段套路 场景写法contract注入层命中内容进入合同树的哪一层统一为CHAPTER_BRIEF.writing_guidance反模式本题材专属的禁区条目供引擎追加进反模式列表。5. Section 4engine 接入裁决表5.1 从「路由 检索 组装」到六步流水线Spec 指出旧story_system_engine.build()只有路由、检索、直接组装三步没有显式裁决层目标流程改为_route()_collect_tables()_load_reasoning()_apply_reasoning()_rank_anti_patterns()_assemble_contract()在 story_system_engine.py 中StorySystemEngine.build()已按此六步落地先_route选定路由行关键词/别名命中 → 显式题材兜底 → 文本推断题材兜底再分别以top_k1和top_k2检索基础表与动态表随后加载裁决行、应用裁决排序、排序反模式最后组装MASTER_SETTING与CHAPTER_BRIEF两级合同。5.2 裁决如何影响排序与反模式_load_reasoning(genre)story_system_engine.py按题材名精确匹配再按关键词、意图与同义词别名匹配裁决规则.csv_apply_reasoning(...)story_system_engine.py解析冲突裁决的表序为每个命中行打上_priority_rank、_reasoning_rule、_chapter_keyword_score再计算综合排序分——裁决优先级占 40%、本章关键词相关度占 60%_combined_rank_score既尊重题材规则又不丢失单章焦点_rank_anti_patterns(...)story_system_engine.py按毒点权重的有序序列给反模式排序并把裁决行的反模式去重追加为source_table: 裁决规则的条目。5.3source_trace带裁决元数据最终进入合同的内容都会带source_table / source_id / reasoning_rule / priority_rank / inject_target由_build_source_trace_with_reasoning()组装story_system_engine.py。这直接满足 Spec 验收writing_guidance顺序符合裁决表、source_trace都有reasoning_rule、低优先级冲突条目可被过滤或降级。6. Section 5context_manager瘦身为纯 JSON 组装器6.1 职责边界Spec 要求把 context_manager.py 从「数据组装 文本渲染 snapshot 缓存 checklist/评分说明书」降级为纯 JSON payload 组装器保留读 contracts、读 runtime sources组装genre_profile/writing_guidance/reader_signal/plot_structure/prewrite_validation返回统一 dict删除所有_render_*、旧说明书式 text 输出、为 text 渲染服务的 snapshot 管理、与已拆 builder 重复的内联逻辑。6.2 输出契约build_context()只返回统一 JSON payload{ meta: {context_contract_version: v3, chapter: 12}, story_contract: {}, runtime_status: {}, latest_commit: {}, prewrite_validation: {}, plot_structure: {}, scene: {}, writing_guidance: {}, reader_signal: {}, genre_profile: {}, long_term_memory: {}, core: {} }仓库中ContextManager._assemble_json_payload()context_manager.py正是按SECTION_ORDER把pack中各段组装进 payload并在meta写入context_contract_version: v3_build_pack()context_manager.py则负责加载 state、runtime sources、章纲、最近摘要、场景角色、story contract、写作指导、读者信号、题材画像、plot structure 与 prewrite validation。其配套的模板权重、题材画像、写作指导组装均已拆分为独立模块context_weights.py、genre_profile_builder.py、writing_guidance_builder.py。6.3 相关要求snapshot_manager.py若无其他消费方则整文件删除extract_chapter_context.py 不再承担旧审计式文本说明书职责最终写作任务书由 context-agent.md 直接根据 JSON payload 示例生成——agent 明确定位为「写前 research输出写作任务书」只返回任务书、不落盘、不暴露系统术语并按五段任务书完整性记录completed / partial / failed状态。Spec 验收context_manager.py行数压到 400 行以下、不再有字符串拼接型说明书输出、snapshot 逻辑已删除。当前文件约 835 行仍偏长含 weight 模板与大量辅助方法实际收束程度需结合持续重构判断但「只出 JSON」的契约形态已完整确立。7. Section 6旧散写路径清理7.1 两条路径并存的危害旧系统中同时存在两条写入路径新链data-agent - chapter-commit - projection旧链skill / agent 直接写state / index / summaries / memory。收束的目标是只保留新链webnovel-write的 Step 2 / Step 4 不再直接state set-chapter-statusskill / agent 中任何index process-chapter均删除data-agent不再直接写state/index/memory。7.2 合法直写保留只保留三类不在创作主链内的直写webnovel-init项目初始化、webnovel-plan规划期、运维类人工修复命令。7.3chapter_status不再分步手推章节状态改由投影链自动推进accepted commit → projection 推到chapter_committedrejected commit → projection 推到chapter_rejected。7.4 静态防线test_prompt_integrity.py负责在测试层封堵回归校验 skill / agent 不得引用已删散写命令、data-agent不直写、CLI 子命令引用都在注册表内对应文件test_prompt_integrity.py。验收标准即「skills/和agents/里不再有state set-chapter-status与index process-chapter各存储只由对应 projection writer 写入」。8. Section 7projection 层收束——唯一写后真源路径8.1EventProjectionRouter事件路由Spec 要求对照story_event_schema.py补全事件类型覆盖。当前 event_projection_router.py 的TABLE已登记 10 类事件到 4 类投影的映射事件类型路由到的投影 writercharacter_state_changedstate、memory、vectorpower_breakthroughstate、memory、vectorrelationship_changedindex、vectorworld_rule_revealed/world_rule_brokenmemory、vectoropen_loop_created/open_loop_closedstate、memorypromise_created/promise_paid_offmemoryartifact_obtainedindex、vectorrequired_writers()还根据 commit 状态决定投影集合rejected只写state用于推进chapter_rejectedaccepted固定写stateindex有entity_deltas追加index有summary_text追加summary最后按事件表并集出vector等。8.2 失败隔离与投影状态回写单个 writer 失败不阻断其他 writer失败项写failed允许只补跑失败 writer最终 commit 文件里不允许残留pendingprojection_status终态为done / failed / skippedaccepted commit 后状态自动推进chapter_committedrejected 则推进chapter_rejected。对应测试可在 test_event_projection_router.py、test_projection_log.py 等测试文件中追踪。9. Section 8消费端同步9.1 需要同步的文件清单Spec 列出消费端必须同步收束的文件agents/context-agent.md、agents/data-agent.md、agents/reviewer.md必要时、skills/webnovel-write/SKILL.md、skills/webnovel-review/SKILL.md、skills/webnovel-query/SKILL.md、skills/webnovel-plan/SKILL.md检查、skills/webnovel-init/SKILL.md检查、skills/webnovel-dashboard/SKILL.md、skills/webnovel-write/evals/evals.json、docs/guides/commands.md。9.2 关键改动webnovel-write删除 Step 2/4 的状态直写删除 Step 2 直接加载core-constraints/anti-ai-guideStep 1 生成任务书Step 2 只吃任务书Step 5 简化为「调 contenteditable="false">【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统解决 AI 写作中的「遗忘」和「幻觉」问题支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考