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

73 lines
5.8 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: check-content-consistency
description: 检查正文或细纲候选的结构、事实、角色状态、能力代价、伏笔和证据缺口。候选进入用户决策或独立评分前使用;只产检测报告,不修改候选。
disable-model-invocation: true
---
# 检测(scenario: validation / consistency_check | purpose: detection | 槽位: 检测→detector)
何时用:候选章生成后、用户三决策前的伴随检查(C4);也可对既有章回溯检查。
## 正文候选执行顺序
1. 先运行 `scripts/check_writer_candidate.py`;它只做确定性机械硬门,不调用模型。
2. 机械硬门阻塞时直接返回结构化失败码,保留审查轨迹,不调用语义 detector。
3. 机械硬门通过后,编排层构造 `semantic-detector-input-v3`(生产构造器:`scripts/run_writer_semantic_detector.py` 的 `build_semantic_input_v3`,从 WriterContext + 候选投影并闭集校验,sourceRef 清洗成合同形状),再以 fresh 无会话调用执行一个候选的语义核查。
4. 模型只返回 `semantic-detection-draft-v3`;adapter 负责绑定输入、候选、上下文、模型回执、字符 offset、状态和报告 hash,形成 `SemanticDetection v3`。异常、非法结构或绑定不一致全部失败关闭。
当前机械硬门覆盖:WriterContext v1、CandidateEnvelope v2、上下文与候选 hash、篇幅、细纲事件/角色/伏笔/章末钩子锚点。事实断言、角色知情范围、能力代价、语义冲突、新设定识别和证据缺口属于 semantic detector,不得塞回 writer 输出或机械门。
## 元数据驱动(本功能的核心机制)
**检查清单由字段生成,不硬编**:凡 aiContext 含 `detection` 的字段,自动成为一个检查项——
| 字段(来源) | 检查什么 |
|---|---|
| character.知情范围 | 角色说出/表现出不该知道的事("说漏嘴"是第一大穿帮) |
| character.行事逻辑/说话方式 | 言行与语言指纹逐一核对 |
| power_system.代价限制 | 境界与能力是否越过体系代价 |
| location.规则特例 | 地点规则是否被违反 |
| item 能力边界 | 物品表现是否超出卡面 |
| 演变历程(各实体型) | 演变连续性/跳级穿帮(上一章还4级、这一章突然7级;登场/退场节点缺失或时间线倒挂) |
| outline.伏笔动作 | 埋/推/收是否照细纲执行,有无擅自新开或提前回收 |
| work_core.谜底与真相/结局方向 | **防提前泄底**——这正是检测可见底牌的原因 |
| style 黑名单与画像 | Grep 逐词扫黑名单;宣告情绪/形容词堆叠/无三件套场景抽查 |
| narrative_state | 时间线/即时局面/角色位置衔接 |
schema 给字段加上 detection 用途,检查项自动+1,本 skill 与 detector 一字不改。
## 输出合同
模型草稿必须精确包含:
`schemaVersion / claims[] / findings[] / assertionVerdicts[] / hardConstraintVerdicts[] / newSettingCandidates[] / evidenceGaps[]`
`claims` 明确候选中的事实主张与覆盖状态;`findings` 记录可定位问题;verdict 完整覆盖输入登记的 assertion/constraint ID。只有 `evidenceGaps` 或 `unknown` 可以触发编排器补证;纯机械失败或明确语义失败直接拒绝,不以同一输入重试。补证后必须冻结新的上下文快照和新的 WriterCreativeInput,再启动 fresh writer 调用。
正文回放检测每臂最多调用三次。模型已返回但结构/引文不合约时,可用剩余额度回喂上一稿纠错;带可信成本回执的瞬时 `SEMANTIC_DETECTOR_API_ERROR` 最多重发同一输入一次,并与结构纠错共用三次总额度。认证、预算、本地合同、成本未知或连续第二次 API 错误均失败关闭,不得重试绕过。
最终 SemanticDetection v3 由 adapter 增加运行身份、候选/上下文 hash、字符 offset、模型回执、状态和报告 hash。模型不得输出这些可信字段。
## 细纲回放分支(`fine_outline_replay`)
何时用:`plan-chapter` 产出的 `fine_outline` 候选进入独立评分前。检测器只看冻结到 `as_of` 的规划上下文和候选,不看目标章标准事实,不把评测答案倒灌回规划侧。
检查对象和证据格式:
| 检查对象 | 检查项 | 高严重度条件 | 证据必须包含 |
|---|---|---|---|
| 候选结构 | 必填字段、目标章号、事件 ID、事件顺序 | 缺字段、重复事件或目标章错误导致无法评估 | 字段路径 + 候选值摘要 |
| 因果链 | 事件触发、行动、结果方向是否自洽 | 后一事件无前置、结果与前置状态矛盾 | 事件 ID 对 + 冲突原因 |
| 实体状态 | 角色/势力/地点/能力是否违反冻结事实 | 引用未来事实或越过 N 时点能力边界 | `sourceId` + 冻结字段 |
| 伏笔动作 | 埋、推进、回收和不确定标记 | 将未知或未来回收写成确定事实 | 伏笔标识 + 当前台账定位 |
| 来源引用 | `sourceRefs` 是否来自快照、是否包含目标章及以后 | 目标章/未来来源出现在候选引用中 | 来源 ID + 章号范围 |
| 未知项纪律 | `unknowns` / `assumptions` 是否显式承载缺口 | 用无来源断言替代未知项 | 候选字段路径 |
机器报告的类别是闭集:`findings.category` 只允许 `candidate_structure`、`causal_chain`、`entity_state`、`foreshadowing_action`、`source_reference`、`unknowns_discipline`;`coverageFindings.category` 只允许 `frozen_context_gap`。未登记类别不得用近义词或变体绕过,编排器必须失败关闭。
报告仍然只产审查结果,不修改候选。回放中任一高严重度问题阻断该臂进入 judge;目标章新角色是否缺卡需要目标章标准事实,detector 无权判断,归 judge/eval。
## 红线
只产报告,不改任何创作文件;证据先行——无依据的观感问题归「建议」并标明主观;底牌信息仅用于检测判断。