All notable changes to com.babelqueue:babelqueue-core are documented here.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
The envelope wire format is versioned separately by meta.schema_version
(currently 1) — see the contract at babelqueue.com.
1.0.0 - 2026-06-07
1.0.0 — the public API is now SemVer-stable: breaking changes require a MAJOR,
following the deprecation policy. The wire envelope is unchanged
(schema_version: 1). Full reference at babelqueue.com.
- Build adds JaCoCo (line-coverage gate ≥90%, bound to
verify) and SpotBugs (effort=Max,threshold=Medium); both run in CI viamvn verify. Added JSON codec edge-case + exception tests to clear the gate. A documentedspotbugs-exclude.xmlwaives the EI_EXPOSE patterns on the read-only envelope records (no hot-path defensive copy — GR-8). - GR-8 latency benchmark (
OverheadBenchmarkTest) — asserts the envelope encode/decode path adds ≤2% over plain-JSON serialization vs a conservative 750µs broker round-trip.
0.1.0 - 2026-06-06
EnvelopeCodec— builds (make,fromMessage), encodes and decodes the canonical{job, trace_id, data, meta, attempts}envelope (schema_version1). The single Java implementation of the wire format.Envelope/Meta/DeadLetterimmutablerecordtypes.EnvelopeCodec.encodeemits compact UTF-8 JSON (slashes/unicode unescaped) — byte-identical to the PHP, Python and Node cores (insertion order preserved).EnvelopeCodec.urn(...)— resolve the URN (job, acceptingurnas an alias).EnvelopeCodec.accepts(...)— consumer-side validation (rejects empty URN, unsupportedmeta.schema_version, missingdata, blanktrace_id).DeadLetters.annotate(...)— additivedead_letterblock builder.- Contracts
PolyglotMessage/HasTraceId. UnknownUrnStrategy(FAIL/DELETE/RELEASE/DEAD_LETTER);BabelQueueException/UnknownUrnException.- A built-in minimal JSON reader/writer so the core ships with zero dependencies — no Jackson/Gson forced on consumers.
- Shared cross-SDK conformance suite under
src/test/resources/conformance/(vendored from the canonicalconformance/set) plus a runner.
- Pre-1.0: the public API may change before the
1.0.0tag. - Zero runtime dependencies (pure JDK); requires Java 17+.