dcdc8d1ddd
全栈知识治理平台首次入库(P1-P10 + 发布链路模拟验证闭环): - 治理核心:源目录/变更集/人工审核/发布批次/发布执行(fail-closed 闸口) - 测试通道:WeKnora 测试 KB 上传/轮询/验收;poll 完成时写入 parser_generation/index_generation,修复 manual/seed 路径发布闸口永久拦截 - 发布适配器 v071(本地 source=测试角色 / 云端 target=生产角色 模拟验证通过): * ES 导出/导入 mapping 自适应(.keyword 子字段、可选 tenant_id) * OSS locator 支持嵌套 scheme;chunks.seq_id 由目标序列分配 * bundle 归档同身份重试原子替换;verifier 按 bundle chunk_type 计数 * 回滚 job payload 支持 prior_execution_id(strict 解码) - 三通道发布+回滚演练实测:publish 4/4 verified,检索命中, rollback 4/4 rolled_back,目标端 PG is_enabled=false、ES is_enabled=false - 前端 A·Data-console 风格全站统一,120 用例通过 - 门禁:go vet / go test 全包通过,gofmt 干净
58 lines
2.3 KiB
SQL
58 lines
2.3 KiB
SQL
CREATE TABLE IF NOT EXISTS directory_scope_rules (
|
|
source_connection_id VARCHAR(36) NOT NULL
|
|
REFERENCES source_connections(id) ON DELETE RESTRICT,
|
|
directory_path TEXT NOT NULL DEFAULT '',
|
|
visibility VARCHAR(20) NOT NULL
|
|
CHECK (visibility IN ('internal', 'external')),
|
|
updated_by VARCHAR(128) NOT NULL,
|
|
reason VARCHAR(500) NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (source_connection_id, directory_path)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS source_item_scope_overrides (
|
|
source_item_id VARCHAR(36) NOT NULL
|
|
REFERENCES source_items(id) ON DELETE RESTRICT,
|
|
visibility VARCHAR(20) NOT NULL
|
|
CHECK (visibility IN ('internal', 'external')),
|
|
updated_by VARCHAR(128) NOT NULL,
|
|
reason VARCHAR(500) NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (source_item_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scope_change_events (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
target_type VARCHAR(16) NOT NULL
|
|
CHECK (target_type IN ('directory', 'item')),
|
|
source_connection_id VARCHAR(36)
|
|
REFERENCES source_connections(id) ON DELETE RESTRICT,
|
|
directory_path TEXT NOT NULL DEFAULT '',
|
|
source_item_id VARCHAR(36)
|
|
REFERENCES source_items(id) ON DELETE RESTRICT,
|
|
action VARCHAR(16) NOT NULL
|
|
CHECK (action IN ('set', 'clear')),
|
|
previous_visibility VARCHAR(20)
|
|
CHECK (previous_visibility IS NULL OR previous_visibility IN ('internal', 'external')),
|
|
decided_visibility VARCHAR(20)
|
|
CHECK (decided_visibility IS NULL OR decided_visibility IN ('internal', 'external')),
|
|
operator_ref VARCHAR(128) NOT NULL,
|
|
reason VARCHAR(500) NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
CHECK (
|
|
(target_type = 'directory' AND source_connection_id IS NOT NULL AND source_item_id IS NULL)
|
|
OR
|
|
(target_type = 'item' AND source_connection_id IS NULL AND source_item_id IS NOT NULL)
|
|
),
|
|
CHECK (
|
|
(action = 'set' AND decided_visibility IS NOT NULL)
|
|
OR
|
|
(action = 'clear' AND decided_visibility IS NULL)
|
|
)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_scope_change_events_target
|
|
ON scope_change_events (target_type, source_connection_id, source_item_id, created_at DESC);
|