New features
Dedicated edge worker
Edge sync now runs on its own worker bound toedge_ingress_exchange and edge_exchange, replacing the previous shared integration-worker path. You get faster ingest, clearer ownership of downlink control, and isolated failure domains for edge traffic.
- After upgrading, confirm the edge worker is registered and ingress queues exist.
- See Edge sync overview and How it works.
Dual-pipeline ingest with shared staging
Every synced table now flows through one of two pipelines on a shared lineage:- Pipeline A — Telemetry for time-series-shaped tables (
sync/telemetry/batch). - Pipeline B — State rows for transactional tables (
sync/rows/batch).
Cloud state write-back API
Push desired rows from the cloud to a device’s local SQLite for tables markedcloud_authoritative:
- 1–500 rows per request,
Idempotency-Keyrequired. - The edge worker upserts cloud state and dispatches a
state_writedownlink that the device ACKs and applies locally. - Good for config rollout, setpoints, mode changes, and other cloud-driven desired state.
EdgeIngestControlRequestedV2 downlink path
Downlink control messages (pause_lineage, resume_lineage, url_grant, state_write) now flow through a v2 outbox on the MQTT downlink exchange, consumed by the MQTT broker for QoS 1 delivery on sync/ingest/control. Wire envelope is unchanged for devices.
→ Downlink control messages
Updates
Omega scaffold improvements
golain omega scaffold and the Deploy Omega TUI wizard now make first-time edge setup repeatable:
--transport=tlsflag, with automatic fall-back when QUIC is unavailable on a project.--verify-tablesseeds uniquevrf_*tables to avoid lineage collisions in shared projects.- Wizard now bundles cert issuance, Omega + SQLite extension downloads, and systemd/launchd/OpenRC service setup in one flow.
Backpressure defaults
Volume backpressure caps per lineage are now documented and enforced at:- 100,000 staged rows or 1 GiB triggers
pause_lineage. - Auto-resume when the backlog drops below 80% of caps.
Materialization circuit breaker
After 5+ permanent materialization errors, a lineage is paused and the device is sentpause_lineage. Clear the error state and resume with:
Fixes
- Edge sync batches no longer share a queue with integration traffic, so a stuck integration consumer cannot block edge ingest.
sync/ingest/ackandsync/ingest/requestare now consistently handled as device→cloud topics onedge_ingress_exchange, fixing cases where ACKs were misrouted on busy projects.