zizi b0bc7a8745 框架: 技能按动作-对象重组 + 先审后入创作闭环
一、技能重组(动作-对象命名)
- 旧目录 clean/confirm/continuation/db/detect/embed/… 重组为
  clean-book-text/decide-candidate/write-next-chapter/access-database/
  check-content-consistency/embed-knowledge/…(git 识别为 rename,内容保持)
- agents/*.md、AGENTS.md/CLAUDE.md 收编、example_skill 登记表同步新名

二、先审后入创作闭环(本次核心)
正文接受从"机械门一过就写正典"改为"机械门+语义审查双通过+用户批准+单事务原子提交",
DB 级兜底,编排层跳步即被硬拒。
- candidate_cas.py + example_candidate_cas(109):持久化 CAS 状态链
- fact_delta.py + example_fact_delta/example_fact_ledger(106):结构化事实增量,
  模型只提六型闭集增量+正文证据引文,仅用户批准的增量随正文同事务入账本
- projection_registry.py + example_projection_run(107):投影登记与恢复
- acceptance_state.py:接受前置实时状态重读
- lesson_registry.py + example_lesson(108):经验升格链,禁止自动升格
- DDL 105:example_candidate 增 semantic_status/semantic_report_sha256
- write_canonical.accept:语义兜底+同事务合并增量+登记投影;
  run_writer_pipeline/persist_writer_run/run_writer_semantic_detector/step2 接入全链
- claude_runtime:兼容新 CLI modelUsage 信息字段

三、审查修复(独立子代理四维审查后)
- 事实增量 propose→approve 翻态正道,不撞唯一键
- 冻结配置探针重刷(CLI 2.1.211→2.1.231 漂移),profileSha256/adapterVersion 再登记
- 可视化合同悬空路径/五六空间矛盾、 SoT 旧技能名漂移、行尾空白清理

测试:离线 65 套 + 真实库集成 5 套(CAS/接受故障注入/事实增量/投影/经验升格)+ 回放 79 项全绿。
创作内容(docs/design、生成正文 artifacts)按"框架与创作分开"未入本提交。
2026-08-14 10:24:08 +08:00

222 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 创作流程领域 SoT
## 1. 唯一职责
创作流程领域拥有单用户正向创作链的步骤、状态和失败收敛。它回答"用户的创作意图怎样变成待审候选(Shadow)、候选怎样经过检查、用户决策怎样把候选写为库内正式正文(Canonical)"。
本领域不拥有作品正文内容、实体字段、范式内容、Agent Prompt、评分量表或存储表结构(存储归 [01-作品领域](01-作品领域.md) 和 [08-数据权威与可视化领域](08-数据权威与可视化领域.md))。
一切输入产出必须落库可见——横切合同见索引 §3。
## 1A. 前期创作阶段(正向创作链的前段)
本节拥有正文生成**之前**的五阶段串行流程:定盘 → 大纲/卷纲 → 设定拆条 → 范式与文风选定 → 细纲。它回答"一部书在动笔写正文之前,要依次产出哪些规划事实、每步卡在什么门禁上、满足什么条件才允许进入下一步"。§2 的正向流程从本节阶段 4 产出的细纲往后接续。
本领域拥有这五阶段的**顺序、进入/退出条件和门禁**,不拥有各阶段产物的字段合同与存储表结构——字段权威在 [`meta/schemas/`](../../../../meta/schemas/README.md),存储与确认链分别在 [01-作品领域](01-作品领域.md)、[02-实体领域](02-实体领域.md)、[03-范式领域](03-范式领域.md),本节只引用、不重复定义。
两条贯穿五阶段的硬合同(均为既有合同,本节只引用):
- **横切总闸**:一切规划候选先落 Shadow,经用户确认翻 Confirmed 后才进入生成上下文(Shadow/Canonical 双轨,见 [架构-02](../../../../../design-docs/架构-02-核心数据结构与双轨模型.md))。
- **上层约束下层**:大纲派生卷纲、卷纲派生细纲;下层规划不得与已确认的上层规划相悖,冲突时以下层退回为准。
### 阶段定义
除特别注明外,各阶段规划产出都经 `persist_planning` 落 `example_planning_section`(默认 `state='shadow'`),用户确认后翻 `confirmed`。
**阶段 0 · 定盘**
- 进入条件:作品已创建(作品行存在,见 [01-作品领域](01-作品领域.md))。
- 产出:`work_core`(题材定位 / 核心卖点 / 主题立意 / 基调 / 禁区 / 核心悬念 / 谜底与真相 / 结局方向 / 目标读者,字段权威见 `meta/schemas/work_core.yaml`)+ `novel_work` 的篇幅目标(目标章数 × 单章字数区间 × 分卷数,见 `meta/schemas/novel_work.yaml`)。落 `section_type='setting'`。
- 机械门禁:**篇幅目标三要素齐全**——当前为文档纪律,待升级为落库校验。
- 退出条件:`work_core` 九字段与篇幅目标三要素齐备且用户确认(`confirmed`)。
**阶段 1 · 大纲 / 卷纲**
- 进入条件:阶段 0 已确认。
- 产出:`outline`(`scope=work`,字段权威见 `meta/schemas/outline.yaml`)——主线一句话、分卷粗纲(每卷:卷名 · 卷目标 · 核心冲突 · 情绪终点)、当前卷细纲、未来卷粗纲(防续写提前收线)、弃案记录(防 AI 复活旧方向)。落 `section_type='outline'`。
- 机械门禁:**主线一句话 ≤ 50 字**、**每卷四要素齐**、**卷粗纲 ≈ 卷正文 0.3–0.5%**、**卷数 = 篇幅目标.分卷数**——当前均为文档纪律,待升级为落库机械校验(卷数合同是本次新增的架构空白之一,见本节"现状与待建")。
- 退出条件:大纲 `confirmed`,且卷数与篇幅目标.分卷数一致。
**阶段 2 · 设定拆条**
- 进入条件:阶段 1 已确认。
- 产出:把设定拆成结构本体 23 型条目(`world` / `power_system` / `faction` / `character` / `item` / `location` / `event` / `character_relation` 等,型与字段权威见 [`meta/schemas/`](../../../../meta/schemas/README.md))。主落点是实体入库链:`muse_knowledge_draft` → 用户确认 → `muse_knowledge_entity`(关系另落 `muse_knowledge_relation`),确认链由 [02-实体领域](02-实体领域.md) 拥有。每条实体带「演变历程」(已发生的 `{章, 台阶, 周期}`,周期取 登场/成长/高光/退场/结局)与「成长弧线」(未来计划)。
- 机械门禁:
1. **payload ↔ schema 字段覆盖**(落库机械校验,带「字段存疑:原因」逃生口)——**已建**:`persist_planning` 落库按 `meta/schemas/<型>.yaml` 校验必填字段,缺必填失败关闭;`fine_outline` 型已标「字段覆盖门禁:强制」,其余型字段(中文键)与 payload 对齐后逐步纳入;推荐字段缺失只报告不拦,确无依据的字段可显式标「字段存疑:原因」放行。
2. **设定全书闭环**:每条设定须有 登场 → … → 结局 的计划弧线,有始有终——目标合同,待建(本次新增架构空白之一)。
3. **全书设定台账**:设定 × 章消费矩阵,标记未被碰 / 未收口——目标合同,待建(本次新增架构空白之一)。
- 退出条件:设定条目经用户确认入正式实体表,且字段覆盖、闭环、台账三项校验通过(三项建成前,以用户确认为退出准绳)。
**阶段 3 · 范式与文风选定**
- 进入条件:阶段 2 已确认。
- 产出:
- 规划期 `select_patterns` 从公共范式卡(`work_id=0`)选定本作范式,绑定 `pattern_bindings`;范式内容与消费尺寸合同见 [03-范式领域](03-范式领域.md)。
- 装配 `assembly`:把已选范式与本作事实组织为待装配集合,落 `section_type='assembly'`(装配此前无领域 owner,本节收编,见下"归属收编")。
- `style` 文风画像八字段(叙事人称视角 / 句式 / 叙述配比 / 用词质感 / AI 味黑名单 / 对话风格 / 章末钩子风格 / 达标样张,字段权威见 `meta/schemas/style.yaml`)。
- 机械门禁:**`assembly` 经用户确认(`confirmed`)才进正文上下文**、**`assemble` 只消费已绑定范式**(对齐 [专题-07](../../../../../design-docs/专题-07-知识消费契约与质量闭环.md):公共范式只走规划期决策、写作期引用,不作写作期临场海选)、**`style` 真注入 writer**——**取数端与生产接线已建**:assemble-context 三个一等取数端(`load_confirmed_fine_outline` / `load_confirmed_pattern_bindings` / `load_confirmed_style`)已建并由生产编排(`docs/write-chapter/step2_write_chapter.py`)接线;范式只读已确认 assembly 绑定注入(实验仓承载,见 [03-范式领域 §6](03-范式领域.md)),确认文风投影为 `styleConstraints` 随冻结上下文注入 writer(不再写死为空)。**待建**:当前注入的是设定行的一句话文风(书12 现状),结构化 `style` 八字段画像的书级抽取尚未建;写作期范式须可回指 confirmed 绑定的门禁尚未机械强制。评测 A/B/C 臂走独立冻结注入,不读生产绑定。
- 退出条件:`assembly` 已 `confirmed` 并完成 `pattern_bindings` 绑定,`style` 八字段齐备。
**阶段 4 · 细纲**
- 进入条件:阶段 3 已确认,且当前卷大纲已确认。
- 产出:逐章 `fine_outline`(章细纲 ≈ 章正文 3–5%,是结构骨架不是缩写,超比例退回),落 `section_type='fine_outline'` 且必须带 `target_chapter`。细纲字段合同见 [`meta/schemas/`](../../../../meta/schemas/README.md) 与 [细纲合同(plan-chapter)](../../../../.claude/skills/plan-chapter/SKILL.md)。
- 机械门禁:
- **硬门禁(既有,代码失败关闭)**:`section_type='fine_outline'` 必带 `target_chapter`、`payload` 为非空 JSON、细纲须为结构化对象且数组/字符串字段类型稳定(落库即拒)。
- **内容门禁(文档纪律,待升级)**:硬事件 / 伏笔动作(埋 · 推 · 收)/ 必须出场实体 / 章末钩子齐备;**细纲硬约束覆盖率 100%**(回放评测维度,见 [专题-04](../../../../../design-docs/专题-04-生成质量门控与创作健康度设计方案.md));**细纲产出形与 writer 装配消费形统一——已建**:唯一字段权威 [`meta/schemas/fine_outline.yaml`](../../../../meta/schemas/fine_outline.yaml)(必填集满足装配与机械门、推荐集保留规划表达力),`plan-chapter` 与 writer 装配同指它,结束此前两套字段不相交的漂移。
- 退出条件:该章细纲 `confirmed`,硬约束覆盖率达标,产出形可被 writer 装配直接消费。
### 五阶段共用的落库机械门禁(既有,代码失败关闭)
这四条由 `persist_planning` / `decide-candidate` 在库侧强制,不靠调用方自觉:
1. `section_type` 只接受 `setting / outline / state / assembly / fine_outline`,非法值拒落。
2. `fine_outline` 缺 `target_chapter` 拒落。
3. `payload` 必须是非空 JSON 对象。
4. 规划确认只走 `shadow → confirmed` 单通道,非 `shadow` 不可确认;未 `confirmed` 的规划不进生成上下文。
### 归属收编登记
以下四个既成事实此前散落在别处或无 owner,本节在流程里给它们一个明确阶段位置;**字段与存储 owner 不变**,本领域只拥有它们所处的阶段、进入/退出与门禁。
| 既成事实 | 本流程位置 | 字段 / 存储 owner(只引用) |
|---|---|---|
| 卷纲 | 阶段 1 产出的一部分 | `outline` schema + [01-作品领域 §5](01-作品领域.md)(规划存储与确认);此前仅 01 一笔带过 |
| 设定拆条 | 阶段 2 | 23 型 schema + [02-实体领域](02-实体领域.md)(入库与确认链);此前仅为纪律 |
| 装配 `assembly` | 阶段 3 | `example_planning_section.section_type='assembly'`;此前无领域 owner,由本节收编 |
| 范式规划期绑定 | 阶段 3 | [03-范式领域 §5/§6](03-范式领域.md)(消费合同;规划期绑定消费侧已建、作品行承载列待建)+ `pattern_bindings`([01-作品领域 §3](01-作品领域.md) 已声明字段) |
### 现状与待建
- **已建成(引用即可)**:五阶段顺序与产出落点、`example_planning_section` 的 `section_type` 白名单与 `fine_outline` 必带章号、`shadow → confirmed` 单通道、公共范式卡与 `select_patterns`;以及本轮落地的——细纲唯一字段合同(`meta/schemas/fine_outline.yaml`,产出形与装配消费形统一)、落库字段覆盖门禁(`fine_outline` 型已强制失败关闭)、assemble-context 三个一等取数端(`load_confirmed_fine_outline` / `load_confirmed_pattern_bindings` / `load_confirmed_style`)并由生产编排 `step2_write_chapter.py` 接线(细纲统一消费、范式只读已确认 assembly 绑定、文风投影为 `styleConstraints` 注入 writer)。
- **决策已定、机械落地待建(三个架构空白)**:合同见 02/01/03 三域决策记录——
1. 设定全书闭环校验 + 全书设定台账(把「演变历程」从只追加日志升级为闭环义务,新增设定 × 章消费矩阵视图;见 [02-实体领域 §8](02-实体领域.md))。
2. 卷数合同:`novel_work` 篇幅目标增「分卷数」,`outline` 分卷粗纲卷数须与之一致并机械校验(见 [01-作品领域 §6](01-作品领域.md))。
3. 范式规划期绑定:消费侧已通;作品行 `pattern_bindings` 承载列为主仓生产方向(实验仓暂以已确认 assembly 行承载,见 [03-范式领域 §6](03-范式领域.md))。
- **待建(其余门禁升级与取数补全)**:阶段 0–1 的字数 / 比例 / 四要素校验、阶段 2 字段覆盖门禁扩到其余型(中文键 schema 与英文 payload 对齐后纳入)、阶段 4 细纲硬约束覆盖率门禁、结构化 `style` 八字段画像的书级抽取(当前注入设定行一句话文风)、写作期范式须可回指 confirmed 绑定的机械门禁。字段层面的回填(`novel_work` 分卷数、`pattern_bindings` 库列)属各 owner 文档与 `meta/schemas`,不在本节。
### 本节验收条件
1. 五阶段可机械读出先后:任一早阶段的规划未 `confirmed` 时,其直接后续阶段的规划不允许进入生成上下文(查询 `example_planning_section` 的 `state` 与依赖关系可验证)。
2. 每条规划产出都在库内有 `section_type`、`state`、`target_chapter`(细纲)记录,只读看板可据此渲染前期全流程。
3. 任一 `fine_outline` 行必带非空 `target_chapter` 与非空 `payload`(查询可验证,缺者在落库时即被拒)。
4. 未 `confirmed` 的 `assembly` 不出现在正文生成上下文里;正文上下文引用的范式均可回读到 `pattern_bindings` 绑定记录(绑定库列建成后可机械验证)。
5. 阶段门禁失败(字数超限、卷数与分卷数不一致、字段覆盖不足、闭环缺弧线、覆盖率不达标)会阻断进入下一阶段,而不是静默放行(各门禁升级落库后逐项可机械验证)。
## 2. 正向流程
```text
用户意图
-> 从库内读取作品目标、已确认规划和当前正式正文
-> 组装并冻结角色上下文
-> Planner/Fine-outline 产生规划候选(按需)
-> 用户确认规划
-> Writer 产生正文待审候选(Shadow)
-> 确定性检查(机械门)
-> 语义检测(Semantic Detector)
-> 质量策略与有限修订(补证≤3 次 / 重写≤2 次)
-> 展示候选、风险、来源和质量摘要
-> 用户:原样接受 / 修改后合并 / 丢弃
-> accept preflight 与 revision 校验
-> 写库内正式正文(= 写库内正文块,不写任何本地文件)
-> 生成实体/范式观察草稿
-> 继续创作
```
写正式正文 = 写库内正文块。候选在用户接受之前已落库(候选表),只读看板随时可见。
用户也可以直接在库内编辑并保存正式正文,不要求先运行 Agent 或配置范式。
## 3. 状态合同
待审候选状态采用有限状态机(设计合同):
```text
DRAFT -> CHECKING -> PASSED -> ACCEPTED
| |
| -> ARCHIVED
-> REJECTED
DRAFT/CHECKING/PASSED -> DISCARDED(用户明确决策)
```
- 状态应持久化到库(候选表),使只读看板能渲染每个候选的当前命运。
- 状态迁移必须绑定 `run_id` + `attempt` + `candidate_version` + `candidate_sha256`。
- 迟到检测结果、旧版本候选和 revision 冲突不能覆盖新状态。
- `PASSED` 只表示候选可展示、可进入接受前置校验,不表示已成为正式正文。
- 诊断和评测候选固定不可接受(四层机械强制:资格由 run 类型机械派生、合同硬校验拒绝、接受入口硬拒、产出钉死评测区)。
> **现状标注**:候选状态已持久化。生产运行级 CAS 链落 `example_candidate_cas`(`PostgresCasStateStore`,一次运行一条链:DRAFT / CHECKING / PASSED / REJECTED,revision 单调 +1,DB 触发器锁方向闭集与身份不可变),生产编排 `step2_write_chapter.py` 已接它。候选表 `example_candidate` 承载业务态(含 accepted / discarded),接受/丢弃经 `write_canonical` 单通道翻态。ARCHIVED 态仍未启用。
## 4. 用户决策
只有三类改变候选命运的用户决策:
- **原样接受**:当前候选正文写为库内正式正文。
- **修改后合并**:用户修改产生新 `candidate_version`,必须重新检测和接受前置校验。
- **丢弃**:正式正文不变,候选标记为丢弃并留在库内可查。
决策记录落库(存储结构归 [01-作品领域](01-作品领域.md))。
重新生成、查看来源、展开评分和取消运行是辅助操作,不等于接受、合并或丢弃。
## 5. ReAct 编排
主 Agent 负责观察库内当前状态、选择下一项 Skill、读取结果并决定是否继续。它不能绕过以下保护步骤:
1. schema 与来源校验。
2. 上下文冻结。
3. 确定性检查(机械门)。
4. 语义检测。
5. 用户接受前置校验(accept preflight)。
6. 正式正文 revision 比较与库内原子写(CAS 乐观锁,冲突则收敛到明确终态)。
正文、规划、提取、检测和评审分别由单一职责角色执行。主 Agent 不把多个角色合成一次模型调用。
已落地的编排合同(`run_writer_pipeline`):机械门 → 语义检测 → 补证≤3 / 重写≤2、CAS 乐观锁 + 失败收敛终态、动态篇幅合同、评测候选四层强制。
## 6. 运行与落库
- 正式内容和候选都在 PostgreSQL 内;Git 只管代码与文档,不承载正式内容。
- 模型调用失败时保留库内已有正式内容不受损;重试产生新 `attempt`。
- 任一步失败必须进入明确终态,不留下无法判断是否可接受的处理中候选。
- 一切输入产出落库(见索引 §3):用户意图、冻结上下文、候选正文、检测与评分、决策、运行回执、补证与重写记录。
> **现状与待建**:
> - 写库写入层:**已建**——`write_canonical.accept` 单事务写正文块(revision CAS)+ 来源归因 + 命令幂等 + 决策归档 + 候选翻态,任一失败整体回滚;DB 级兜底复检 `run_type=production`、`state=passed`、`semantic_status=passed`(先审后入,语义未过不得接受)。
> - 状态机持久化:**已建**——运行级 CAS 链 `example_candidate_cas`,业务态落 `example_candidate`;ARCHIVED 态未启用。
> - 结构化事实增量:**已建**——`example_fact_delta`(提案)+ `example_fact_ledger`(正典账本);模型只提六型闭集增量且必须带正文证据引文,只有用户批准的增量随正文同事务入账本,抽取结果不自动升格。
> - 待建:生产链上的质量评分环节(盲评仍只接离线评测);补证重组装在语义缺口下的自动接线(当前缺口失败关闭);章后抽取的异步执行(接受时只登记 pending 投影)。
## 7. 开发评测边界
Gate A/B、A/B/C 三臂、参考书标准答案和盲评只属于开发期离线验收,不进入普通创作链。离线评测可以复用 Writer、Detector、Judge 和上下文合同,但:
- 所有评测候选固定不可接受(四层机械强制,见 §3)。
- 评测产出不反写作品、实体或范式正式事实。
- 评测产出钉死评测区,只读看板可按区查看但不混入正式内容视图。
- **访问分离,不是隔离**(harness 改造原则,见 [docs/2026-08-01-评测harness改造设计](../../../../docs/2026-08-01-评测harness改造设计.md)):评测与生产同库,靠逻辑隔离(`run_type` + 状态机 + 访问控制),不是物理隔离。强制须收拢到引擎单点:评测行对生产读默认不可见、`run_type` 插入后不可变(使 `(eval, accepted)` 永不可达),不靠每条查询自觉过滤。
- **oracle 读侧红线**:oracle / 标准答案 / 全文**不进任何模型输入上下文**,只供人走查——可机械验证的硬红线,与冻结合同同级(写侧已有硬强制,读侧不能只靠查询纪律)。
- **从预防迁到发现**:逻辑隔离不能全靠预防,配常设不变量持续抓越界——没有评测派生卡绑定到生产、没有评测质量结果出现在任何生产视图、没有正式正文块的来源能追溯到评测候选,违反即报警。
## 8. 验收条件
1. 单用户可以完成新建作品、规划、生成、审核和接受正文,全流程在库内闭环。
2. 每个待审候选在库内有明确状态、版本、来源和用户决策记录。
3. 修改后合并一定产生新版本并重跑检测。
4. 任何评测候选都不能成为库内正式正文(四层强制可机械验证:查询候选表 `run_type` 为评测类型的行,`status` 不得为 ACCEPTED)。
5. 中途失败不损坏库内已有的作品、实体或范式正式事实。
6. 只读看板能渲染每个候选的当前状态——看板看不到 = 没落库 = 不合规。
## 9. 关联 SoT
- 作品与决策存储:[01-作品领域](01-作品领域.md)——正式正文、规划存储、决策记录、`pattern_bindings` 字段声明的表结构归它。
- 设定拆条与实体入库:[02-实体领域](02-实体领域.md)——阶段 2 设定条目的 `draft → entity` 确认链与演变历程归它。
- 范式规划期绑定:[03-范式领域](03-范式领域.md)——阶段 3 范式消费尺寸合同与规划期绑定(消费侧已建、作品行承载列待建)归它。
- 上下文输入:[04-上下文领域](04-上下文领域.md)——冻结上下文的选择与裁剪。
- 质量步骤:[06-质量与复利领域](06-质量与复利领域.md)——机械门、语义检测、评分的合同。
- 数据权威与落库:[08-数据权威与可视化领域](08-数据权威与可视化领域.md)——库权威层级、落库机制、只读看板。
- 结构本体字段权威:[`meta/schemas/`](../../../../meta/schemas/README.md)——前期五阶段各产出(work_core / novel_work / outline / style / 23 型)的字段合同。
- 接受上级合同:[专题-01](../../../../../design-docs/专题-01-正文建议接受%28Accept%20Suggestion%29实现规范.md)——accept preflight 的产品级规范。
- 细纲硬约束覆盖率:[专题-04](../../../../../design-docs/专题-04-生成质量门控与创作健康度设计方案.md)——阶段 4 覆盖率门禁的回放评测维度。
- 范式规划期决策:[专题-07](../../../../../design-docs/专题-07-知识消费契约与质量闭环.md)——公共范式只走规划期决策、写作期引用的上级合同。