feat: add bounded workflow decisions and durable result inbox

This commit is contained in:
2026-09-18 01:11:42 +08:00
parent 520e98d9d1
commit 0f7ac5203b
20 changed files with 1909 additions and 9 deletions

View File

@@ -0,0 +1,18 @@
-- Weave内部结果保存独立快照,避免外部结果日志清理或任务后续核查改变历史输入。
ALTER TABLE weave_inbox
ADD COLUMN source_task_id BINARY(16) NULL COMMENT '来源Pulse任务标识;仅迁移前无法核实的历史记录允许为空',
ADD COLUMN source_activation_id BINARY(16) NULL COMMENT '事件发生时的Weave激活标识,保留旧激活归属;仅未核实历史记录可空',
ADD COLUMN source_revision BIGINT UNSIGNED NULL COMMENT '来源任务的状态版本,必须大于零;仅未核实历史记录可空',
ADD COLUMN snapshot MEDIUMTEXT NULL COMMENT 'schema_version版本化结果JSON文本,保留精确数字与当时状态;仅未核实历史记录可空';
-- 旧记录缺少冻结结果,不能用当前任务状态倒推历史并自动推进。
UPDATE weave_inbox SET state='QUARANTINED',lease_owner=NULL,lease_until=NULL,
error_code='LEGACY_RESULT_UNVERIFIED',revision=revision+1,updated_at=UTC_TIMESTAMP(6)
WHERE state<>'PROCESSED';
ALTER TABLE weave_inbox
ADD UNIQUE KEY uq_weave_task_result (namespace_id,source_task_id,source_revision),
ADD CONSTRAINT ck_weave_inbox_source CHECK (
(state IN ('PROCESSED','QUARANTINED') AND source_task_id IS NULL AND source_activation_id IS NULL AND source_revision IS NULL AND snapshot IS NULL)
OR (source_task_id IS NOT NULL AND source_activation_id IS NOT NULL AND source_revision IS NOT NULL AND source_revision>0 AND snapshot IS NOT NULL AND OCTET_LENGTH(snapshot)<=524288 AND JSON_VALID(snapshot))
);