feat(workbench): add dynamic task approval lifecycle

This commit is contained in:
2026-09-24 16:36:12 +08:00
parent db092b0f5e
commit ad813a7c16
35 changed files with 2956 additions and 564 deletions
@@ -0,0 +1,56 @@
-- Task-scoped, reviewable data access requests for dynamic investigations.
-- This migration is deliberately restricted to the verified tjwater_v2 BizDB.
BEGIN;
SET LOCAL lock_timeout = '5s';
DO $$
BEGIN
IF current_database() <> 'tjwater_v2' THEN
RAISE EXCEPTION 'Operational access-request migration is restricted to tjwater_v2';
END IF;
END $$;
CREATE TABLE IF NOT EXISTS workbench.operational_task_access_requests (
project_id uuid NOT NULL,
task_id uuid NOT NULL,
access_request_id uuid NOT NULL,
node_id text NOT NULL CHECK (length(node_id) > 0),
status text NOT NULL CHECK (status IN ('pending','approved','rejected')),
version bigint NOT NULL CHECK (version >= 1),
document jsonb NOT NULL,
requested_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
PRIMARY KEY (project_id,task_id,access_request_id),
FOREIGN KEY (project_id,task_id)
REFERENCES workbench.operational_tasks(project_id,task_id) ON DELETE CASCADE,
CHECK ((document->>'access_request_id'=access_request_id::text
AND document->>'status'=status
AND (document->>'version')::bigint=version) IS TRUE)
);
CREATE INDEX IF NOT EXISTS operational_task_access_pending_idx
ON workbench.operational_task_access_requests(project_id,status,requested_at)
WHERE status='pending';
COMMENT ON TABLE workbench.operational_task_access_requests IS
'动态调查中的任务级数据访问申请;与动作审批分离,保存申请范围及人工审核结果。';
COMMENT ON COLUMN workbench.operational_task_access_requests.project_id IS
'所属项目标识;当前仍要求一个项目独占一个 BizDB。';
COMMENT ON COLUMN workbench.operational_task_access_requests.task_id IS
'所属工况任务标识。';
COMMENT ON COLUMN workbench.operational_task_access_requests.access_request_id IS
'访问申请的稳定标识,同时用于计划审核节点引用。';
COMMENT ON COLUMN workbench.operational_task_access_requests.node_id IS
'发起申请的执行计划节点标识。';
COMMENT ON COLUMN workbench.operational_task_access_requests.status IS
'人工审核状态:pending、approved 或 rejected。';
COMMENT ON COLUMN workbench.operational_task_access_requests.version IS
'用于乐观并发控制的申请修订号。';
COMMENT ON COLUMN workbench.operational_task_access_requests.document IS
'经过接口模型校验的完整访问申请文档。';
COMMENT ON COLUMN workbench.operational_task_access_requests.requested_at IS
'Agent 发起访问申请的时间。';
COMMENT ON COLUMN workbench.operational_task_access_requests.updated_at IS
'申请最近一次状态变更时间。';
COMMIT;