merge: integrate leader summary webhook delivery
# Conflicts: # control-plane/README.md # control-plane/src/db.ts # control-plane/test/control-plane.test.ts
This commit is contained in:
commit
295409bff0
21 files changed
+1260
-1269
No files matched your search
@@ -0,0 +1,74 @@
|
||||
-- Replace AgentBus-routed team-lead summaries with one organization-level
|
||||
-- external webhook delivery stream. Legacy rows remain for audit/history but
|
||||
-- cannot be claimed after this migration.
|
||||
|
||||
UPDATE leader_task_summary_subscriptions
|
||||
SET enabled = false,
|
||||
target_verified_at = NULL,
|
||||
revision = revision + 1,
|
||||
updated_at = now()
|
||||
WHERE enabled = true OR target_verified_at IS NOT NULL;
|
||||
|
||||
UPDATE leader_task_summary_deliveries
|
||||
SET delivery_status = 'cancelled',
|
||||
last_error = '组长摘要已切换为外部 Webhook,旧 AgentBus 待发记录已取消。',
|
||||
updated_at = now()
|
||||
WHERE delivery_status IN ('pending', 'sending', 'failed');
|
||||
|
||||
CREATE TABLE IF NOT EXISTS leader_task_summary_webhook_state (
|
||||
organization_id uuid PRIMARY KEY REFERENCES organizations(id) ON DELETE CASCADE,
|
||||
enabled boolean NOT NULL DEFAULT false,
|
||||
starts_at timestamptz NOT NULL DEFAULT now(),
|
||||
revision integer NOT NULL DEFAULT 0,
|
||||
configuration_fingerprint text NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
CONSTRAINT leader_task_summary_webhook_state_revision_check
|
||||
CHECK (revision >= 0),
|
||||
CONSTRAINT leader_task_summary_webhook_state_fingerprint_check
|
||||
CHECK (configuration_fingerprint ~ '^[a-f0-9]{64}$')
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS leader_task_summary_webhook_deliveries (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
organization_id uuid NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
||||
webhook_revision integer NOT NULL,
|
||||
task_id uuid NOT NULL,
|
||||
source_outbox_event_id bigint NOT NULL,
|
||||
milestone text NOT NULL,
|
||||
payload_ciphertext text NOT NULL,
|
||||
payload_fingerprint text NOT NULL,
|
||||
delivery_status text NOT NULL DEFAULT 'pending',
|
||||
attempt_count integer NOT NULL DEFAULT 0,
|
||||
response_status integer,
|
||||
last_error text,
|
||||
accepted_at timestamptz,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_milestone_check
|
||||
CHECK (milestone IN ('final', 'needs_review', 'resolved')),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_status_check
|
||||
CHECK (delivery_status IN ('pending', 'sending', 'accepted', 'failed', 'uncertain', 'cancelled')),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_attempt_check
|
||||
CHECK (attempt_count BETWEEN 0 AND 1),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_revision_check
|
||||
CHECK (webhook_revision >= 0),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_response_status_check
|
||||
CHECK (response_status IS NULL OR response_status BETWEEN 100 AND 599),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_payload_fingerprint_check
|
||||
CHECK (payload_fingerprint ~ '^[a-f0-9]{64}$'),
|
||||
CONSTRAINT leader_task_summary_webhook_deliveries_task_scope_fkey
|
||||
FOREIGN KEY (organization_id, task_id)
|
||||
REFERENCES tasks (organization_id, id)
|
||||
ON DELETE CASCADE,
|
||||
UNIQUE (organization_id, webhook_revision, task_id, milestone)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS leader_task_summary_webhook_deliveries_pending_idx
|
||||
ON leader_task_summary_webhook_deliveries
|
||||
(organization_id, webhook_revision, delivery_status, created_at, id)
|
||||
WHERE delivery_status = 'pending';
|
||||
|
||||
CREATE INDEX IF NOT EXISTS leader_task_summary_webhook_deliveries_task_idx
|
||||
ON leader_task_summary_webhook_deliveries
|
||||
(organization_id, task_id, created_at DESC);
|
||||
Reference in new issue
Block a user