51 lines
2.8 KiB
SQL
51 lines
2.8 KiB
SQL
-- Durable, server-owned protocol state for agent-guided rectification turns.
|
|
alter table public.birth_time_rectification_cases
|
|
add column if not exists turn_version bigint not null default 0,
|
|
add column if not exists turn_state jsonb not null default '{}'::jsonb,
|
|
add column if not exists evidence_draft jsonb,
|
|
add column if not exists processed_action_ids uuid[] not null default '{}'::uuid[],
|
|
add column if not exists adaptive_round integer not null default 0,
|
|
add column if not exists asked_domains text[] not null default '{}'::text[];
|
|
|
|
alter table public.birth_time_rectification_cases
|
|
drop constraint if exists birth_time_rectification_cases_turn_state_check,
|
|
drop constraint if exists birth_time_rectification_cases_evidence_draft_check,
|
|
drop constraint if exists birth_time_rectification_cases_processed_action_ids_check,
|
|
drop constraint if exists birth_time_rectification_cases_adaptive_round_check,
|
|
drop constraint if exists birth_time_rectification_cases_asked_domains_check;
|
|
|
|
alter table public.birth_time_rectification_cases
|
|
add constraint birth_time_rectification_cases_turn_state_check
|
|
check (jsonb_typeof(turn_state) = 'object'),
|
|
add constraint birth_time_rectification_cases_evidence_draft_check
|
|
check (evidence_draft is null or jsonb_typeof(evidence_draft) = 'object'),
|
|
add constraint birth_time_rectification_cases_processed_action_ids_check
|
|
check (cardinality(processed_action_ids) <= 100),
|
|
add constraint birth_time_rectification_cases_adaptive_round_check
|
|
check (adaptive_round between 0 and 3),
|
|
add constraint birth_time_rectification_cases_asked_domains_check
|
|
check (asked_domains <@ array['education', 'relocation', 'relationship', 'career', 'health_pressure']::text[]);
|
|
|
|
create table if not exists public.birth_time_rectification_scoring_jobs (
|
|
id uuid primary key default gen_random_uuid(),
|
|
case_id uuid not null references public.birth_time_rectification_cases(id) on delete cascade,
|
|
user_id uuid not null references auth.users(id) on delete cascade,
|
|
evidence_fingerprint text not null,
|
|
algorithm_version text not null,
|
|
status text not null default 'pending'
|
|
check (status in ('pending', 'processing', 'completed', 'failed')),
|
|
expires_at timestamptz not null,
|
|
result jsonb,
|
|
failure_code text,
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now(),
|
|
completed_at timestamptz,
|
|
unique (case_id, evidence_fingerprint, algorithm_version),
|
|
check (result is null or jsonb_typeof(result) = 'object')
|
|
);
|
|
|
|
alter table public.birth_time_rectification_scoring_jobs enable row level security;
|
|
revoke all on table public.birth_time_rectification_scoring_jobs from anon, authenticated;
|
|
revoke all on table public.birth_time_rectification_scoring_jobs from service_role;
|
|
grant all on table public.birth_time_rectification_scoring_jobs to service_role;
|