-- 结算不产生执行事件;账目变化由独立版本及只追加命令回执表达。 ALTER TABLE public.muse_task ADD COLUMN accounting_revision bigint NOT NULL DEFAULT 0; ALTER TABLE evaluation.muse_task ADD COLUMN accounting_revision bigint NOT NULL DEFAULT 0; CREATE TABLE public.muse_call_settlement ( task_id uuid NOT NULL REFERENCES public.muse_task(task_id), command_id text NOT NULL CHECK (btrim(command_id) <> ''), receipt_id uuid NOT NULL UNIQUE, request_hash text NOT NULL CHECK (request_hash ~ '^[0-9a-f]{64}$'), receipt jsonb NOT NULL, created_at timestamptz NOT NULL DEFAULT clock_timestamp(), PRIMARY KEY(task_id,command_id) ); CREATE TABLE evaluation.muse_call_settlement (LIKE public.muse_call_settlement INCLUDING ALL); ALTER TABLE evaluation.muse_call_settlement ADD FOREIGN KEY(task_id) REFERENCES evaluation.muse_task(task_id); CREATE TRIGGER muse_call_settlement_immutable BEFORE UPDATE OR DELETE ON public.muse_call_settlement FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_call_settlement_immutable BEFORE UPDATE OR DELETE ON evaluation.muse_call_settlement FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); GRANT SELECT,INSERT ON public.muse_call_settlement TO muse_app; GRANT SELECT,INSERT ON evaluation.muse_call_settlement TO muse_eval; REVOKE ALL ON public.muse_call_settlement FROM muse_eval; -- 验证专用绑定不能被业务配置读取入口消费,不需要草案先启用。 CREATE TABLE public.muse_config_probe_binding ( task_id uuid PRIMARY KEY REFERENCES public.muse_task(task_id), config_id text NOT NULL, version text NOT NULL, content_hash text NOT NULL CHECK (content_hash ~ '^[0-9a-f]{64}$'), content jsonb NOT NULL, created_at timestamptz NOT NULL DEFAULT clock_timestamp() ); CREATE TABLE evaluation.muse_config_probe_binding (LIKE public.muse_config_probe_binding INCLUDING ALL); ALTER TABLE evaluation.muse_config_probe_binding ADD FOREIGN KEY(task_id) REFERENCES evaluation.muse_task(task_id); CREATE TRIGGER muse_config_probe_immutable BEFORE UPDATE OR DELETE ON public.muse_config_probe_binding FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_config_probe_immutable BEFORE UPDATE OR DELETE ON evaluation.muse_config_probe_binding FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); GRANT SELECT,INSERT ON public.muse_config_probe_binding TO muse_app; GRANT SELECT,INSERT ON evaluation.muse_config_probe_binding TO muse_eval; REVOKE ALL ON public.muse_config_probe_binding FROM muse_eval; CREATE TABLE public.muse_call_reconciliation ( task_id uuid NOT NULL REFERENCES public.muse_task(task_id), command_id text NOT NULL CHECK (btrim(command_id) <> ''), request_hash text NOT NULL CHECK (request_hash ~ '^[0-9a-f]{64}$'), receipt jsonb NOT NULL, PRIMARY KEY(task_id,command_id) ); CREATE TABLE evaluation.muse_call_reconciliation (LIKE public.muse_call_reconciliation INCLUDING ALL); ALTER TABLE evaluation.muse_call_reconciliation ADD FOREIGN KEY(task_id) REFERENCES evaluation.muse_task(task_id); CREATE TRIGGER muse_call_reconciliation_immutable BEFORE UPDATE OR DELETE ON public.muse_call_reconciliation FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER muse_call_reconciliation_immutable BEFORE UPDATE OR DELETE ON evaluation.muse_call_reconciliation FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); GRANT SELECT,INSERT ON public.muse_call_reconciliation TO muse_app; GRANT SELECT,INSERT ON evaluation.muse_call_reconciliation TO muse_eval; REVOKE ALL ON public.muse_call_reconciliation FROM muse_eval;