feat: integrate AI candidate review and automatic publication

This commit is contained in:
2026-10-09 22:33:38 +08:00
parent 04dbeb2ac6
commit 86f1e7a897
46 changed files with 2460 additions and 2362 deletions
@@ -0,0 +1,25 @@
CREATE TABLE veyra_ai_review_policy (
id varchar(36) PRIMARY KEY CHECK(id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
enabled boolean NOT NULL DEFAULT false,
auto_publish boolean NOT NULL DEFAULT false,
version bigint NOT NULL DEFAULT 1 CHECK(version>0),
updated_by varchar(36) REFERENCES veyra_user(id),
updated_at timestamptz NOT NULL DEFAULT now()
);
INSERT INTO veyra_ai_review_policy(id) VALUES('a945c2bf-9c77-4d4a-9f4f-a986b729776c');
CREATE TABLE veyra_candidate_analysis (
id varchar(36) PRIMARY KEY CHECK(id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
candidate_revision_id varchar(36) NOT NULL REFERENCES veyra_candidate_revision(id),
input_version bigint NOT NULL CHECK(input_version>0),
policy_version bigint NOT NULL CHECK(policy_version>0),
status varchar(24) NOT NULL CHECK(status IN ('RUNNING','FAILED','APPROVED','REJECTED','PUBLISHED','STALE')),
attempts integer NOT NULL DEFAULT 1 CHECK(attempts BETWEEN 1 AND 3),
claim_token varchar(36) NOT NULL CHECK(claim_token ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
lease_until timestamptz NOT NULL,
primary_model varchar(120) NOT NULL DEFAULT '', review_model varchar(120) NOT NULL DEFAULT '',
primary_version bigint NOT NULL DEFAULT 0, review_version bigint NOT NULL DEFAULT 0,
analysis jsonb, review jsonb, message varchar(1000) NOT NULL DEFAULT '',
created_at timestamptz NOT NULL DEFAULT now(),updated_at timestamptz NOT NULL DEFAULT now(),
UNIQUE(candidate_revision_id,input_version,policy_version)
);
CREATE INDEX veyra_candidate_analysis_recent_idx ON veyra_candidate_analysis(updated_at DESC);