58 lines
4.7 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.

---
name: write-next-chapter
description: 按已确认细纲、冻结事实和动态篇幅合同生成下一整章候选。作品需要续写下一章且输入合同完整时使用;不自行检索、不改规划、不把候选直接写入 Canonical。
disable-model-invocation: true
---
# 续写(scenario: continuation | purpose: generation | 槽位: 写作→writer)
何时用:按大纲细纲产出下一整章候选。
## 元数据驱动(schema 怎么控制本功能)
- **章结构=字段合同**:`candidateBody` 只承载正文,不包含 frontmatter;Canonical 写入层依据 `meta/schemas/chapter.yaml` 与 `scene.yaml` 组装章结构。
- **行为约束=字段值**:文风(style 实例逐条)、人物言行(character.行事逻辑/说话方式/知情范围)、能力边界(power_system.代价限制)、地点规则(location.规则特例)——全部从上下文包字段读,不硬编。
## 输入(`WriterCreativeInput v2`)
可信 adapter 先校验完整的 `WriterContext v1`,再只通过 stdin 传入创作所需投影 `WriterCreativeInput v2`:
- `fineOutline`:本章细纲硬骨架。
- `narrativeState`:目标章前的叙事状态。
- `factConstraints`:由卡索引和原文证据归纳出的事实约束。
- `proseExcerpts`:用于连续性与叙事声音的历史正文摘录。
- `patternReferences`:可参考的写作范式——每条给名字(name)、一句话摘要(summary)与写法要点(writingPoints);只供借鉴写法,不是事实约束。
- `lengthContract`:本章动态篇幅合同。
- `styleConstraints`:文风约束;生产组装时还包含 `prevent-ai-flavor` 生成的有限人感前置约束(规则/声音账指纹只留在完整 WriterContext,不投影给 writer)。
Writer 不接收 `runId`、权限信息、manifest、hash、候选版本、验收状态、实验臂、oracle 或目标章之后的内容,也不得自行检索;投影里没有的设定不应被当作已确认事实。
## 功能约束
0. 每次生成前必须经过 `prevent-ai-flavor` 合同组装;缺失时不伪造通用真人文风,保留规则为空的诚实合同并由章后诊断兜底。
1. 一次一整章;篇幅以 `lengthContract.targetChars/minChars/maxChars` 为唯一口径,由目标章之前有效 Canonical 章长中位数和细纲密度确定性计算,并受 2000–10000 汉字硬边界约束;不得再使用固定字数范围。
2. 伏笔只按细纲动作执行:说埋就埋、说推就推、说收就收;不擅自提前回收,不新开大坑。
3. 前情衔接与上一章末场景无缝;章末钩子按文风画像的钩子风格。
4. 缺少细纲字段、`factConstraints` 字段或篇幅合同属于 adapter 输入错误,必须在模型调用前失败。`factConstraints=[]` 在冻结检索确实没有可确认事实时是合法输入,不等于“事实已验证”或“可以自由补造”;候选中的未知事实仍由 semantic detector 标记为 `unknown/evidenceGaps`。
5. detector 发现事实或证据缺口后,由编排层补证并冻结新的上下文快照,再启动无会话继承的 Writer 调用;Writer 输出不承载补证请求或审查结论。
## 生产落库
- 生产编排走 `run_writer_pipeline`(机械门→语义 detector→补证/重写有限环),状态链用 `scripts/candidate_cas.py` 的 `PostgresCasStateStore` 持久化到 `example_candidate_cas`(一次运行一条链,revision 单调,DB 触发器锁方向闭集);内存 `InMemoryCasStateStore` 仅供离线测试。
- `run_writer_with_receipt()` 只负责可信 writer adapter;生产编排在组装后调用 `assemble-context/scripts/persist_context_freeze.py`,审查落库调用 `scripts/persist_writer_run.py`。
- `persist_writer_run.py` 要求本次 `run_id` 已有成功 writer 调用的 raw 指针,随后登记 `example_candidate`(传入 `semantic_report` 时校验绑定并把 `semantic_status`/`semantic_report_sha256` 固化到候选行)、追加 `example_run_receipt` 和机械/语义两行 `example_quality_result`;它不接受正文,Shadow→Canonical 仍只能由 `decide-candidate/scripts/write_canonical.py` 完成(接受通道 DB 级兜底复检 `state=passed` 且 `semantic_status=passed`)。
## 输出合同
只返回严格 `WriterDraft v2` JSON,不写文件:
```json
{"candidateBody":"..."}
```
缺字段、多字段、非字符串或空正文都必须失败。可信 adapter 负责正文 NFC/LF 规范化、计算 hash、绑定运行元数据和篇幅校验,并生成 `CandidateEnvelope v2`;该信封只是待检测候选,不是 Candidate Decision Envelope。机械门与独立语义 detector 通过后才允许进入 Shadow。
## 红线
不调用工具,不读写文件,不持久化会话;细纲硬骨架不得删除、反转或提前回收;不得把新设定冒充已确认事实,不得自行给候选生成 hash、版本、验收或审查结论。