1 · Write path (same DB txn)
App / service
User System, upgrades, Core writes
Designed
→same txn
Neon Core DB
User / settings / business rows
Designed
+Outbox row
Outbox table
status=pending · indexed
Locked
2 · Publisher (CF Wave 1 preferred)
Workers Cron
Claim pending · ~15–60s
Designed
→SQL / Hyperdrive
SKIP LOCKED
pending → publishing
Locked
→HTTP produce
VPC Service
http → broker :8080
Open
→POST /topics
Pulsar
DOKS · in-cluster topics
Designed
→mark done
published
+ published_at
Locked
3 · Failure / retry (no event drop)
Pulsar / VPC down
Produce fails
Locked
→do not mark
Stay unpublished
pending / failed + attempts
Locked
→next tick
Retry claim
Drain backlog
Designed
↛no CF Queue
No CF Queue W1
Outbox is the buffer
Locked
4 · Cleaner (separate Cron)
Cleaner Cron
Separate from publisher
Designed
→published > 14d
Purge / archive
Keep failed until cleared
Designed
5 · Fallback (do not run both)
Argo CronWorkflow
DOKS · Johny PIC
Available
→native client
DOKS publisher
In-cluster → Pulsar
Open
⚠Argo 0/0 now
Stage 1 parked
Needs node + scale-up
Open
Status machine & indexes
pending→
publishing→
published /
failed
- Claim:
FOR UPDATE SKIP LOCKED on pending — no single global cursor
- Index:
(status, id) for publisher; (status, published_at) for cleaner
- Retention: published ~14 days then purge; failed until cleared
- Consumers: at-least-once + idempotent on Pulsar side
Locks & open
- Anson: Core not latency-sensitive; free-tier Neon; Outbox required
- Arjun: Workers VPC HTTP produce; verify broker
:8080 before VPC Service
- Not Wave 1: binary Pulsar
6650, CF Queue, Debezium dual-path
- Open: Anson GO on CF vs DOKS path; Bernard DDL; produce VPC Service