M4: implement n8n automation

Outbox dispatcher (background thread, FOR UPDATE SKIP LOCKED claim, exponential backoff, no transaction held during HTTP I/O). n8n callback endpoint with shared-secret auth and idempotency by event ID. Automation nav + UI with manual retry. 49 backend tests passing, ruff clean. Fixed a crash-on-redelivery bug in seeded outbox payloads and made the dispatcher defensive against malformed payloads. Verified the full live round trip against a real n8n instance: return -> outbox -> dispatcher -> n8n workflow -> callback -> succeeded, including the S5 failed-retry demo scenario.
This commit is contained in:
NuklearRabbit
2026-08-01 22:39:25 +02:00
parent a7cbeaae3b
commit 59d663a43a
17 changed files with 814 additions and 7 deletions
+6
View File
@@ -220,6 +220,12 @@ a { color: #1f5c8f; }
background: white; font-weight: 700; cursor: pointer;
}
.data-table td button {
padding: 6px 14px; border-radius: 8px; border: 1px solid #14324f;
background: #14324f; color: white; font-weight: 700; cursor: pointer; font-size: 0.85rem;
}
.data-table td button:disabled { opacity: 0.6; cursor: not-allowed; }
@media (max-width: 700px) {
.app-header { flex-direction: column; align-items: flex-start; }
.user-badge { margin-left: 0; }