muse-agent-example/db/ddl/110-example-voice-baseline.sql

35 lines
2.6 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.

-- 声音账(voice baseline):技能 1「定基线」的库内载体。
-- 一部作品一行一版本:新版本 append 一行并把旧行 superseded,历史版本保留审计。
-- 声音账只读已确认正文与作者样张产出(专题-09 §5.1);脚本层强制账内每个
-- 口癖/保护片段必须能在来源正文中找到(grounding 门),数据库层只锁结构与状态。
-- ledger 同时兼容 deai.gates.protected_checks 的 voice_thin 形状
-- (untouchable_verbal_tics / protected_spans),修订门禁直接消费。
CREATE TABLE IF NOT EXISTS example_voice_baseline (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
work_ref VARCHAR(256) NOT NULL, -- 作品逻辑引用(与案例卡 work_ref 同域)
version INTEGER NOT NULL, -- 作品内单调版本号(1 起)
ledger JSONB NOT NULL, -- 声音账全文(结构由 establish-voice-baseline 脚本校验)
ledger_sha256 VARCHAR(64) NOT NULL, -- ledger 规范化 JSON 的 sha256
source_text_sha256 VARCHAR(64) NOT NULL, -- 定基线所依据的已确认正文 sha256(可多文拼接)
reviewer VARCHAR(64) NOT NULL DEFAULT '', -- 人工确认人(基线必须人确认,专题-09 §5.1)
note TEXT NOT NULL DEFAULT '',
superseded BOOLEAN NOT NULL DEFAULT FALSE, -- 被更新版本取代;保留审计不删除
creator VARCHAR(64) NOT NULL DEFAULT '1',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '1',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 1,
CONSTRAINT uk_example_voice_baseline UNIQUE (tenant_id, work_ref, version),
CONSTRAINT chk_example_voice_baseline_version CHECK (version >= 1),
CONSTRAINT chk_example_voice_baseline_ledger_sha CHECK (ledger_sha256 ~ '^[0-9a-f]{64}$'),
CONSTRAINT chk_example_voice_baseline_source_sha CHECK (source_text_sha256 ~ '^[0-9a-f]{64}$'),
-- 未确认的基线不得冒充当前有效:只有带确认人的最新版本可被消费(脚本层取 latest 时同样强制)
CONSTRAINT chk_example_voice_baseline_reviewer CHECK (superseded OR reviewer <> '')
);
CREATE INDEX IF NOT EXISTS idx_example_voice_baseline_work
ON example_voice_baseline(tenant_id, work_ref, version DESC) WHERE deleted = FALSE;
CREATE OR REPLACE TRIGGER trg_example_voice_baseline_updated_at
BEFORE UPDATE ON example_voice_baseline FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();