Type / Priority
Feature / High
Summary
Outbound webhooks are scaffolded but never delivered and have no management UI.
Current state (evidence)
queue.PublishWebhook (api/internal/queue/queue.go:92) is never called; the consumer uses NoopWebhookDeliverer (cmd/api/main.go:120, queue/consumer.go:173-174) which only logs.
model/webhook.go has no event-type columns; no webhook_logs table; no webhook CRUD routes (only inbound /webhooks/github, router.go:494); the settings tab is a placeholder ("Webhooks settings will be available when the API is connected", SettingsPage.tsx:3866-3874). No webhookService.
Proposed scope
Add event-type columns; fire PublishWebhook from mutating services; a real HTTP deliverer with HMAC-SHA256 signing + retries; a webhook_logs table + delivery history; CRUD handlers/routes under /api/workspaces/:slug/webhooks/; a webhookService and management UI.
Type / Priority
Feature / High
Summary
Outbound webhooks are scaffolded but never delivered and have no management UI.
Current state (evidence)
queue.PublishWebhook(api/internal/queue/queue.go:92) is never called; the consumer usesNoopWebhookDeliverer(cmd/api/main.go:120,queue/consumer.go:173-174) which only logs.model/webhook.gohas no event-type columns; nowebhook_logstable; no webhook CRUD routes (only inbound/webhooks/github,router.go:494); the settings tab is a placeholder ("Webhooks settings will be available when the API is connected",SettingsPage.tsx:3866-3874). NowebhookService.Proposed scope
Add event-type columns; fire
PublishWebhookfrom mutating services; a real HTTP deliverer with HMAC-SHA256 signing + retries; awebhook_logstable + delivery history; CRUD handlers/routes under/api/workspaces/:slug/webhooks/; awebhookServiceand management UI.