feat(db): add workflow schema v2 and catalog governance migrations
Introduce catalog governance tables and extend workflow schema v2 so only the three official workflows are selectable at runtime. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
committed by
weichen
co-authored by
Cursor
parent
90f77eac93
commit
543ca310da
@@ -1,10 +1,10 @@
|
||||
-- +goose Up
|
||||
-- Schema v2: executor registry metadata on workflow_versions (JSONB 已存 definition)
|
||||
-- Schema v2: executor registry metadata on workflow_versions (JSONB 已存 definition_json)
|
||||
|
||||
ALTER TABLE workflow_versions
|
||||
ADD COLUMN IF NOT EXISTS schema_version INT NOT NULL DEFAULT 1;
|
||||
|
||||
UPDATE workflow_versions SET schema_version = COALESCE((definition->>'schema_version')::int, 1)
|
||||
UPDATE workflow_versions SET schema_version = COALESCE((definition_json->>'schema_version')::int, 1)
|
||||
WHERE schema_version = 1;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS workflow_executor_registry (
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
-- +goose Up
|
||||
-- 三工作流目录治理 + 上下文快照 + 实例终止元数据
|
||||
|
||||
ALTER TABLE workflow_definitions
|
||||
ADD COLUMN IF NOT EXISTS project_selectable BOOLEAN NOT NULL DEFAULT false;
|
||||
|
||||
ALTER TABLE workflow_definitions
|
||||
ADD COLUMN IF NOT EXISTS catalog_order INT NOT NULL DEFAULT 0;
|
||||
|
||||
UPDATE workflow_definitions
|
||||
SET project_selectable = true,
|
||||
catalog_order = CASE def_key
|
||||
WHEN 'main' THEN 10
|
||||
WHEN 'product_manager' THEN 20
|
||||
WHEN 'test_manager' THEN 30
|
||||
ELSE catalog_order
|
||||
END,
|
||||
name = CASE def_key
|
||||
WHEN 'main' THEN '商务对接流程'
|
||||
WHEN 'product_manager' THEN '智能产品经理流程'
|
||||
WHEN 'test_manager' THEN '智能测试工程师流程'
|
||||
ELSE name
|
||||
END
|
||||
WHERE def_key IN ('main', 'product_manager', 'test_manager');
|
||||
|
||||
UPDATE workflow_definitions
|
||||
SET project_selectable = false,
|
||||
status = CASE WHEN def_key IN ('main', 'product_manager', 'test_manager') THEN status ELSE 'retired' END
|
||||
WHERE def_key NOT IN ('main', 'product_manager', 'test_manager');
|
||||
|
||||
INSERT INTO workflow_executor_registry (executor_key, description) VALUES
|
||||
('bizdev.feasibility_dev.v1', '设计开发可行性评估'),
|
||||
('bizdev.user_requirements.v1', '用户需求表编制')
|
||||
ON CONFLICT (executor_key) DO NOTHING;
|
||||
|
||||
ALTER TABLE project_workflow_instances
|
||||
ADD COLUMN IF NOT EXISTS completed_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS completed_by BIGINT REFERENCES users(id) ON DELETE SET NULL,
|
||||
ADD COLUMN IF NOT EXISTS terminated_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS terminated_by BIGINT REFERENCES users(id) ON DELETE SET NULL,
|
||||
ADD COLUMN IF NOT EXISTS termination_reason TEXT NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS previous_instance_id BIGINT REFERENCES project_workflow_instances(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS project_context_snapshots (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
project_id BIGINT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||
task_key TEXT NOT NULL DEFAULT '',
|
||||
cutoff_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
aggregate_hash TEXT NOT NULL DEFAULT '',
|
||||
source_count INT NOT NULL DEFAULT 0,
|
||||
created_by BIGINT REFERENCES users(id) ON DELETE SET NULL,
|
||||
frozen BOOLEAN NOT NULL DEFAULT true,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_project_context_snapshots_project
|
||||
ON project_context_snapshots(project_id, created_at DESC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS project_context_snapshot_sources (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
snapshot_id BIGINT NOT NULL REFERENCES project_context_snapshots(id) ON DELETE CASCADE,
|
||||
source_type TEXT NOT NULL,
|
||||
source_id TEXT NOT NULL DEFAULT '',
|
||||
source_version TEXT NOT NULL DEFAULT '',
|
||||
content_hash TEXT NOT NULL DEFAULT '',
|
||||
authority_level TEXT NOT NULL DEFAULT '',
|
||||
permission_scope TEXT NOT NULL DEFAULT 'project',
|
||||
referenced BOOLEAN NOT NULL DEFAULT false,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT uq_snapshot_source UNIQUE (snapshot_id, source_type, source_id, source_version)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_context_snapshot_sources_snapshot
|
||||
ON project_context_snapshot_sources(snapshot_id);
|
||||
|
||||
ALTER TABLE project_doc_task_instances DROP CONSTRAINT IF EXISTS chk_pdti_status;
|
||||
ALTER TABLE project_doc_task_instances
|
||||
ADD CONSTRAINT chk_pdti_status CHECK (status IN (
|
||||
'pending', 'in_progress', 'reviewing', 'approved', 'skipped', 'skipped_disabled'
|
||||
));
|
||||
|
||||
ALTER TABLE project_doc_task_instances
|
||||
ADD COLUMN IF NOT EXISTS output_doc_title TEXT NOT NULL DEFAULT '';
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS project_context_snapshot_sources;
|
||||
DROP TABLE IF EXISTS project_context_snapshots;
|
||||
ALTER TABLE project_workflow_instances
|
||||
DROP COLUMN IF EXISTS previous_instance_id,
|
||||
DROP COLUMN IF EXISTS termination_reason,
|
||||
DROP COLUMN IF EXISTS terminated_by,
|
||||
DROP COLUMN IF EXISTS terminated_at,
|
||||
DROP COLUMN IF EXISTS completed_by,
|
||||
DROP COLUMN IF EXISTS completed_at;
|
||||
ALTER TABLE workflow_definitions DROP COLUMN IF EXISTS catalog_order;
|
||||
ALTER TABLE workflow_definitions DROP COLUMN IF EXISTS project_selectable;
|
||||
Reference in New Issue
Block a user