日期: 2026-04-14 状态: 草案 v1 定位: 基于当前代码真实状态,把 Story System 从“半成品并存”收束到“六层主链 + 消费端同步”的最终 spec
前面的文档已经分别回答了三个问题:
current-system-diagnosis.md
2026-04-12-story-system-evolution-spec.md
2026-04-14-context-agent-writing-brief-design.md
这份 spec 解决的是更直接的问题:
在不考虑向后兼容的前提下,如何把现在的代码、CSV、合同、提交链、投影链和消费端,一次性收束到最终可用状态。
这次收束的目标不是“再补一个模块”,而是:
context_manager 降级为纯 JSON 组装器CSV_CONFIG + 裁决表 + 合同树 + commit/projection 成为唯一主链这轮 brainstorming 已经确认以下决策,不再反复摇摆:
context_managerCSV_CONFIGreference_search.py 里ui-ux-pro-max/core.pyfile / search_cols / output_cols / poison_cols / role裁决规则.csvanti-ai-guide.md 与 core-constraints.mdanti-ai-guide.md 保留为 md 真源
core-constraints.md 不再整篇读取
CHAPTER_COMMIT这次先做好 7 个题材:
其余题材不在本轮收束范围内。
最终链路固定为:
知识表 / 裁决表
↓
CSV_CONFIG + reference_search
↓
story_system_engine
↓
MASTER / VOLUME / CHAPTER / REVIEW
↓
context_manager(只出 JSON)
↓
context-agent(按示例写任务书)
↓
webnovel-write Step 2(只吃任务书)
↓
review / data-agent
↓
CHAPTER_COMMIT
↓
projection writers
↓
state / index / summaries / memory / vector
这里有两个硬边界:
CHAPTER_COMMIT -> projection 进入各存储CSV_CONFIG 注册层在 reference_search.py 里引入注册式 CSV_CONFIG,替代当前全局硬编码的:
_SEARCH_FIELD_WEIGHTS_CONTENT_COLUMNS改成每张表自己定义:
filesearch_colsoutput_colspoison_colsroleCSV_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",
},
}
reference_search.py
CSV_CONFIG 读取 per-table 配置story_system_engine.py
CSV_CONFIGCSV_CONFIGREADME.mdsearch_colsCSV_CONFIG 的每张表字段都能在 CSV 头里找到对现有表做一次统一审计和修补,让它们能稳定被裁决层和合同层消费。
把以下旧列统一改名为 毒点:
反面写法忌讳写法常见误区常见崩盘误区题材与调性推理.csv 至少补齐:
推荐基础表推荐动态表默认调性风格锚点所有补全都手工做,不写自动迁移脚本。
最低要求:
意图与同义词 至少 3 个同义表达毒点 非空README.md 必须同步更新:
毒点README 与 CSV_CONFIG 对齐新建 裁决规则.csv,作为独立 Reasoning Layer。
它不负责“查哪些表”,只负责:
这正是 ui-ux-pro-max 里:
products.csvui-reasoning.csv的对应关系。
裁决规则.csv 至少包含:
题材风格优先级爽点优先级节奏默认策略毒点权重冲突裁决contract注入层反模式先覆盖 7 个题材,各 1 行。
source_trace 能追溯到裁决表冲突裁决现在的 story_system_engine.build() 只有:
没有显式裁决层。
改成:
_route()_collect_tables()_load_reasoning()_apply_reasoning()_rank_anti_patterns()_assemble_contract()_load_reasoning(genre)_apply_reasoning(reasoning, base, dynamic)_rank_anti_patterns(reasoning, ...)_assemble_contract(ranked, anti_patterns, reasoning)source_trace最终进入合同的内容都要带:
source_tablesource_idreasoning_rulepriority_rankinject_targetwriting_guidance 顺序符合裁决表source_trace 都有 reasoning_rulecontext_manager 瘦身把 context_manager.py 从:
降级为:
genre_profilewriting_guidancereader_signalplot_structureprewrite_validation_render_*build_context() 只返回:
{
"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": {}
}
snapshot_manager.py
extract_chapter_context.py
context-agent 直接根据 JSON payload + 示例生成context_manager.py 行数压到 400 行以下现在仍有两条写入路径并存:
data-agent -> chapter-commit -> projectionstate / index / summaries / memory这必须收束成一条。
webnovel-writestate set-chapter-statusstate set-chapter-statusindex process-chapterstate/index/memory 的描述只保留:
webnovel-initwebnovel-plan都不在创作主链内。
chapter_status不再由 skill 分步手推。
改成:
chapter_committedchapter_rejectedskills/ 和 agents/ 里不再有 state set-chapter-statusskills/ 和 agents/ 里不再有 index process-chapter确认 CHAPTER_COMMIT -> projection 是唯一写入链路,并补完 event 路由覆盖。
EventProjectionRouter对照 story_event_schema.py,确保事件类型覆盖完整。
chapter_status 统一由 state_projection_writer 推进chapter_committedchapter_rejectedprojection_status 回写 commit最终 commit 文件里不允许残留 pending。
单个 writer 失败:
failedprojection_status 最终都是 done / failed / skippedagents/context-agent.mdagents/data-agent.mdagents/reviewer.md(必要时)skills/webnovel-write/SKILL.mdskills/webnovel-review/SKILL.mdskills/webnovel-query/SKILL.mdskills/webnovel-plan/SKILL.md(检查)skills/webnovel-init/SKILL.md(检查)skills/webnovel-dashboard/SKILL.mdskills/webnovel-write/evals/evals.jsondocs/guides/commands.mdwebnovel-writecore-constraints / anti-ai-guidecontext-agentdata-agentstate/index/memorywebnovel-querytest_prompt_integrity.py 至少新增:
data-agent 不直写不引入真正的图引擎,不做新项目级图谱系统。
这轮只做两件轻量事:
EventProjectionRouter给关键事件加 vector 路由:
character_state_changedpower_breakthroughrelationship_changedworld_rule_revealedworld_rule_brokenartifact_obtainedvector_projection_writer.py职责:
accepted_eventsentity_deltas转成自然语言句子,再写入向量库。
例如:
第47章:韩立突破筑基初期第47章:韩立与陈巧倩关系变为合作新建 knowledge_query.py,提供:
entity_state_at_chapter(entity_id, chapter)entity_relationships_at_chapter(entity_id, chapter)供 context-agent research 阶段调用。
neo4jpetgraph这轮按严格串行走:
CSV_CONFIGcontext_manager 瘦身原因很简单:
这份 spec 的最终判断可以压成五句话:
core-constraints 要被拆成具体约束,不再整篇读anti-ai-guide 保留,但只由上游吸收后转写CHAPTER_COMMIT -> projection 是唯一写后真源路径做到这一步,webnovel-writer 才算真正从“半成品并存”进入“统一主链”状态。