muse-agent-example/db/ddl/105-example候选语义审查.sql
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

29 lines
1.9 KiB
SQL
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.

-- 先审后入加固(05 §5):候选接受必须同时通过机械门与语义审查。
-- 背景:生产链曾在机械门通过后直接接受正文,语义 detector 未跑(双口径缺陷)。
-- 本次把语义审查结果固化到候选行,write_canonical 接受通道在 DB 级兜底检查,
-- 不靠编排层自觉;冻结表同时补授权快照列,供接受前置检查做实时重读比对。
-- 全部语句幂等:ADD COLUMN IF NOT EXISTS + 约束存在性检查,重复 apply 安全。
-- ══ example_candidate:补语义审查两列 ══
-- semantic_status 是缓存位(权威是语义报告本身与 quality_result 账本),语义同 acceptance_eligible 的派生位模式。
ALTER TABLE example_candidate ADD COLUMN IF NOT EXISTS semantic_status VARCHAR(20);
ALTER TABLE example_candidate ADD COLUMN IF NOT EXISTS semantic_report_sha256 CHAR(64);
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'chk_example_candidate_semantic_status') THEN
ALTER TABLE example_candidate ADD CONSTRAINT chk_example_candidate_semantic_status
CHECK (semantic_status IS NULL
OR semantic_status IN ('passed','failed','needs_evidence','blocked'));
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'chk_example_candidate_semantic_sha256') THEN
ALTER TABLE example_candidate ADD CONSTRAINT chk_example_candidate_semantic_sha256
CHECK (semantic_report_sha256 IS NULL OR semantic_report_sha256 ~ '^[0-9a-f]{64}$');
END IF;
END
$$;
-- ══ example_context_freeze:补授权快照列(接受前置检查实时重读用)══
-- append-only 表加列不影响既有行;新冻结行落 authorizationSnapshot 全形(snapshotId/allowedPurpose/verifiedAt/sourceVersion)。
ALTER TABLE example_context_freeze ADD COLUMN IF NOT EXISTS authorization_snapshot JSONB;