-- B10确定性规则诊断的逐例证据与最小公开凭据;B06拥有启停与消费历史。 CREATE TABLE evaluation.muse_rule_diagnostic_run ( run_id uuid PRIMARY KEY, author_id text NOT NULL, dataset_version_id uuid NOT NULL REFERENCES evaluation.muse_dataset_version(version_id), target jsonb NOT NULL CHECK (jsonb_typeof(target)='object'), policy jsonb NOT NULL CHECK (jsonb_typeof(policy)='object'), policy_hash text NOT NULL CHECK (policy_hash ~ '^[0-9a-f]{64}$'), plan_hash text NOT NULL CHECK (plan_hash ~ '^[0-9a-f]{64}$'), created_at timestamptz NOT NULL DEFAULT clock_timestamp(), UNIQUE(author_id,dataset_version_id,policy_hash) ); CREATE TABLE evaluation.muse_rule_diagnostic_result ( run_id uuid NOT NULL REFERENCES evaluation.muse_rule_diagnostic_run(run_id), sample_id text NOT NULL, 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(), PRIMARY KEY(run_id,sample_id) ); CREATE TABLE evaluation.muse_rule_diagnostic_assessment ( run_id uuid PRIMARY KEY REFERENCES evaluation.muse_rule_diagnostic_run(run_id), 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 TABLE evaluation.muse_rule_diagnostic_stop ( run_id uuid PRIMARY KEY REFERENCES evaluation.muse_rule_diagnostic_run(run_id), author_id text NOT NULL, command_id text NOT NULL, stopped_at timestamptz NOT NULL DEFAULT clock_timestamp(), UNIQUE(author_id,command_id) ); CREATE TRIGGER rule_diagnostic_run_guard BEFORE UPDATE OR DELETE ON evaluation.muse_rule_diagnostic_run FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER rule_diagnostic_result_guard BEFORE UPDATE OR DELETE ON evaluation.muse_rule_diagnostic_result FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER rule_diagnostic_assessment_guard BEFORE UPDATE OR DELETE ON evaluation.muse_rule_diagnostic_assessment FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE TRIGGER rule_diagnostic_stop_guard BEFORE UPDATE OR DELETE ON evaluation.muse_rule_diagnostic_stop FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); -- 只有maintenance可导出;production和evaluation只读不含oracle的最小投影。 CREATE TABLE public.muse_rule_diagnostic_receipt ( receipt_id uuid PRIMARY KEY, author_id text NOT NULL, run_id uuid NOT NULL REFERENCES evaluation.muse_rule_diagnostic_run(run_id), rule_version_id uuid NOT NULL REFERENCES public.muse_rule_version(version_id), payload jsonb NOT NULL CHECK (jsonb_typeof(payload)='object'), payload_hash text NOT NULL CHECK (payload_hash ~ '^[0-9a-f]{64}$'), valid_until timestamptz NOT NULL, created_at timestamptz NOT NULL DEFAULT clock_timestamp(), UNIQUE(author_id,run_id,payload_hash) ); REVOKE ALL ON public.muse_rule_diagnostic_receipt FROM muse_app,muse_eval; CREATE TRIGGER rule_diagnostic_receipt_guard BEFORE UPDATE OR DELETE ON public.muse_rule_diagnostic_receipt FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history(); CREATE VIEW public.muse_rule_diagnostic_status WITH (security_barrier=true) AS SELECT r.receipt_id,r.author_id,r.run_id,r.rule_version_id,r.payload,r.payload_hash, r.valid_until, EXISTS ( SELECT 1 FROM evaluation.muse_rule_diagnostic_stop s WHERE s.run_id=r.run_id ) AS stopped FROM public.muse_rule_diagnostic_receipt r; REVOKE ALL ON public.muse_rule_diagnostic_status FROM muse_app,muse_eval; GRANT SELECT ON public.muse_rule_diagnostic_status TO muse_app,muse_eval; -- 当前投影可变,但每次变更都先追加不可变事件。 CREATE TABLE public.muse_rule_activation_event ( event_id uuid PRIMARY KEY, author_id text NOT NULL, rule_id text NOT NULL, activation_revision bigint NOT NULL CHECK (activation_revision > 0), version_id uuid NOT NULL REFERENCES public.muse_rule_version(version_id), action text NOT NULL CHECK (action IN ('enable','disable')), credential_id uuid REFERENCES public.muse_rule_diagnostic_receipt(receipt_id), candidate_id text NOT NULL, candidate_hash text NOT NULL CHECK (candidate_hash ~ '^[0-9a-f]{64}$'), review_id uuid NOT NULL REFERENCES public.muse_author_review(review_id), command_id text NOT NULL, created_at timestamptz NOT NULL DEFAULT clock_timestamp(), UNIQUE(author_id,rule_id,activation_revision), UNIQUE(author_id,command_id) ); CREATE TABLE public.muse_rule_activation_current ( author_id text NOT NULL, rule_id text NOT NULL, activation_revision bigint NOT NULL CHECK (activation_revision > 0), version_id uuid NOT NULL REFERENCES public.muse_rule_version(version_id), state text NOT NULL CHECK (state IN ('active','disabled')), credential_id uuid REFERENCES public.muse_rule_diagnostic_receipt(receipt_id), latest_event_id uuid NOT NULL REFERENCES public.muse_rule_activation_event(event_id), updated_at timestamptz NOT NULL DEFAULT clock_timestamp(), PRIMARY KEY(author_id,rule_id) ); CREATE TRIGGER rule_activation_event_guard BEFORE UPDATE OR DELETE ON public.muse_rule_activation_event FOR EACH ROW EXECUTE FUNCTION public.muse_guard_literary_history();