Skip to main content
All MQTT payloads: UTF-8 JSON, uncompressed on the wire.

Row batch — sync/rows/batch

Primary path for Omega today.
Dedup: per row (device_id, source_table, journal_epoch, source_pk_hash, commit_seq).

Telemetry batch — sync/telemetry/batch

Dedup: (device_id, batch_id). batch_seq monotonic per table — stale/duplicate seq rejected. Omega telemetry publish: not fully implemented — use row batches meanwhile.

Schema observation — sync/schema/observe

Advisory only — classification triggered by data batch with unseen hash.

Ingest ACK — sync/ingest/ack

Required response to every downlink control:

Ingest request — sync/ingest/request

URL request:
Finalize (after PUT to presigned URL):
segment_kind: bootstrap_snapshot | payload_spill

Schema fingerprint (hash input)

Canonical JSON before SHA-256:
Columns sorted by name. Affinity from SQLite rules. Hash = lowercase hex SHA-256 of canonical JSON. Schema governance

Forbidden payload fields

Do not include in device JSON (broker strips or rejects):
  • device_id, org_id, project_id, fleet_id
Tenant scope comes from MQTT session only.