-- 文学片结果和完整报告由B06持有,任务运行只记录引用和执行证据。 CREATE TABLE public.muse_literary_shard ( task_id uuid NOT NULL REFERENCES public.muse_task(task_id), shard_id text NOT NULL CHECK (shard_id ~ '^[0-9a-f]{64}$'), attempt_id uuid NOT NULL REFERENCES public.muse_attempt(attempt_id), call_id text NOT NULL, author_id text NOT NULL, snapshot_id uuid NOT NULL REFERENCES public.muse_context_snapshot(snapshot_id), basis_hash text NOT NULL CHECK (basis_hash ~ '^[0-9a-f]{64}$'), payload jsonb NOT NULL CHECK (jsonb_typeof(payload) = 'object'), payload_hash text NOT NULL CHECK (payload_hash ~ '^[0-9a-f]{64}$'), evidence jsonb NOT NULL CHECK (jsonb_typeof(evidence) = 'object'), created_at timestamptz NOT NULL DEFAULT clock_timestamp(), PRIMARY KEY (task_id, shard_id), UNIQUE (task_id, call_id) ); CREATE TABLE public.muse_literary_report ( report_id uuid PRIMARY KEY, task_id uuid NOT NULL UNIQUE REFERENCES public.muse_task(task_id), author_id text NOT NULL, revision bigint NOT NULL DEFAULT 1 CHECK (revision = 1), payload jsonb NOT NULL CHECK (jsonb_typeof(payload) = 'object'), payload_hash text NOT NULL CHECK (payload_hash ~ '^[0-9a-f]{64}$'), created_at timestamptz NOT NULL DEFAULT clock_timestamp() ); CREATE FUNCTION public.muse_guard_literary_history() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION '文学片结果与报告只追加,不改写或删除历史'; END; $$; CREATE TRIGGER muse_literary_shard_guard BEFORE UPDATE OR DELETE ON public.muse_literary_shard FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_literary_report_guard BEFORE UPDATE OR DELETE ON public.muse_literary_report FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history();