zizi 96aa1e61a3 框架(数据库+读取器): 落库 100 规划+冻结表,建冻结落库模块
- example_planning_section(规划/细纲/设定,书级/章级双部分唯一索引,shadow→confirmed)
  + example_context_freeze(冻结清单,append-only,manifestSha256 幂等)
- persist_context_freeze.py:assemble_context 之后由调用方落冻结(manifest/context哈希+纳入来源+省略项+预算),
  组装器保持不碰库(合同如此);dry-run 已验证
- read-context SKILL.md 增冻结落库挂点说明
2026-07-31 22:29:55 +08:00

71 lines
7.4 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: read-context
description: 统一创作数据读取器的操作合同。按冻结点从 PostgreSQL 读取可信来源,组装完整审计上下文,再为各角色生成最小可见投影。
disable-model-invocation: true
---
# 统一读取器
本 skill 只落实读取与投影,不另行定义产品设计。四层语义、WriterContext 和评测边界以[专题-03](../../../../design-docs/专题-03-AI编排上下文与质量评测实现规范.md)为 SoT;字段授权与统一读取规则以[专题-06](../../../../design-docs/专题-06-元数据驱动的智能体架构.md)为 SoT。
## 输入
- `workId`、`targetChapter`、`asOf`、scenario、purpose。
- 已确认细纲、叙事状态、来源授权快照、卡索引版本、原文索引版本和上下文预算。
- `asOf` 必须早于目标章;所有历史来源必须能证明 `chapter <= asOf`。
scenario 映射功能链分类:生成类为 `generation`,抽取类为 `extraction`,规划类为 `planning`,检测类为 `detection`,质量评审使用对应 writer 或 evaluator 的专用投影。此分类只标 scenario 走哪条功能合同,不是 WriterContext 的 `purpose` 字段——写手正文生成投影的 `purpose` 固定为 `production`(评测用 `evaluation`、诊断用 `diagnostic`),与 `writer_contract.py` 的枚举一致,传其它值会被安全拒绝。purpose 决定字段授权,scenario 决定功能合同,两者不得互相替代。
## PostgreSQL 可信读取链
1. **冻结检索计划**:从已确认细纲的实体、关系和硬事件生成 RetrievalPlan。查询、过滤器、索引版本、预算和稳定排序在模型调用前固定。
2. **卡只作索引**:生产只读 active Canonical 卡和有效 binding。卡提供实体身份、当前状态和原文指针;卡摘要本身不能替代历史正文,也不能直接成为 `supported/pass` 证据。
3. **按指针回读原文**:在 `REPEATABLE READ READ ONLY` 事务中按 `sourceVersion/sourceRefs/stateAsOf` 回读 Canonical block。缺少可验证指针的内容只能作为未验证索引提示,不能进入事实证据。
4. **双证据组装**:连续前四章全文构成近期基线;卡指针召回的历史正文作为补充并按不可变来源去重。`factEvidence` 只接受冻结历史原文、正式设定、Canonical 状态或细纲明确声明的新事实,并保留各自权威引用。
5. **确定性冻结**:按 `score DESC, sourceVersion ASC, sourceId ASC, sourceOffset ASC` 排序,生成完整 `WriterContext v1`、RetrievalManifest、来源省略原因和上下文 hash。预算裁剪必须可审计,不能静默丢失硬约束或连续正文基线。
6. **冻结落库(assemble 之后,调用方负责)**:`assemble_context()` 算出冻结后,调用方(生产编排 / 回放编排)调 `scripts/persist_context_freeze.py`,把冻结清单(manifestSha256/contextSha256/纳入来源/省略项/预算)落一行 `example_context_freeze`(append-only,manifestSha256 幂等)。组装器本身不碰库(合同如此),落库是调用方的事;回执表的 `context_sha256` 连本表 `context_sha256` 列。
对应机械实现:`scripts/writer_contract.py`、`scripts/retrieve_writer_sources.py`、`scripts/assemble_writer_context.py`、`scripts/persist_context_freeze.py`(冻结落库)。其中 `retrieve_writer_sources.py` 的冻结来源校验、内容泄漏审计与冻结原文只读装载复用 **snapshot** skill(`build_snapshot.py`/`check_snapshot.py`/`audit_leakage.py`/`load_reference_work.py`),单向向下依赖,不复制 SQL 或第二套权限语义。
## 四层稳定语义
| 层 | 稳定含义 | 主要内容 | 裁剪纪律 |
|---|---|---|---|
| L0 当前任务 | 本次目标与输出合同 | 目标章、细纲、叙事状态、篇幅合同、用户本次约束 | 不得裁掉硬约束;易变指令尾置 |
| L1 历史正文 | 叙事连续性证据 | 连续前四章全文、按卡指针回读的补充原文 | 先保连续基线;补充证据按预算稳定裁剪 |
| L2 作品事实 | 冻结事实与状态 | Canonical 卡索引、正式设定、叙事状态、已声明新事实 | 逐字段授权,不倾倒整库,不把未来状态降格为当前事实 |
| L3 授权参考 | 非作品事实的授权资料 | 范式、样张、外部参考及其授权快照 | 只在 scenario 明确需要时加入,不得反向污染抽取事实 |
四层是编排器的审计结构,不等于把四层完整对象都交给模型。完整 WriterContext 留在可信边界,模型只收到角色专用投影。
## 角色可见性
| 角色 | 模型输入 | 明确不可见 |
|---|---|---|
| writer | `WriterCreativeInput v2`:fineOutline、narrativeState、factConstraints、proseExcerpts、patternReferences、lengthContract、styleConstraints | runId、权限、manifest、hash、候选版本、实验臂、oracle、评审结论、检索工具 |
| semantic detector | `semantic-detector-input-v3` 的模型投影:当前候选、细纲/硬约束、事实证据、历史原文证据、asOf | 真实实验臂、raw 路径、oracle、其他候选/评委、输入与候选 hash、receipt |
| blind judge | `writer-blind-input-v4` 的模型投影:匿名候选正文、共同细纲、oracle 断言、通用指标与当前场景评分策略 | 真实 A/B/C、卡注入、证据策略、候选 hash、reviewer 身份、raw、其他评委结果 |
| planner | 冻结规划视图;只在 planning 授权下读取全局方向和未来规划 | 未授权原文、目标章之后的参考事实、评测答案 |
| extractor | 待处理原文、schema 合同和判重所需的既有知识 | 范式参考、未来内容、无来源推断 |
writer 的 `factConstraints=[]` 在冻结读取确实没有可确认事实时合法,但不代表事实已验证。候选中无法由现有证据判断的主张由 semantic detector 返回 `unknown/evidenceGaps`,由编排器补证、冻结新上下文并启动 fresh writer 调用。
## 可信绑定
- writer 只返回 `WriterDraft v2` 的 `candidateBody`;adapter 生成 CandidateEnvelope v2,并绑定运行身份、候选版本、正文 hash 与上下文 hash。
- semantic detector 和 blind judge 只返回各自模型草稿;字符 offset、输入/报告 hash、模型回执和最终状态均由 adapter 计算。
- A/C 单变量回执比较 `build_writer_creative_input()` 的结果,只允许预注册卡处理与证据策略导致 `factConstraints`、`proseExcerpts` 与 `patternReferences` 差异;A 的 `patternReferences` 恒空,B/C 使用同一组冻结公共范式卡,细纲、叙事状态、篇幅和风格必须一致。
## 回显与存储
- 安全回显只包含来源 ID/版本、章号、字符数、裁剪原因、状态和 hash,不包含原文、完整 prompt/response 或供应商原始响应。
- 需要保留的 raw 输入、prompt、response、候选和 evaluator-only oracle 只能进入仓库外受控 raw vault,受显式授权、租约、保留期和清理回执约束。
- 不生成或读取旧文件式上下文;PostgreSQL Canonical 数据与冻结回执才是运行事实。
## 红线
- 模型不得自行访问数据库、搜索卡、回读文件或扩张检索计划。
- 不得把卡摘要当正文替代品,不得因为有卡减少历史原文检索。
- 不得把完整 WriterContext、raw 路径、授权密钥、真实实验臂或未来信息塞给模型。
- 来源、字段授权、冻结点、hash 或预算任何一项无法验证时失败关闭,不靠重试或人工说明绕过。