Repository navigation
1.4.1
The credibility-repair release. Full details in the CHANGELOG and ADR-0009.
Fixed
- The decoder-parity marquee now actually executes the comparison 1.4.0 claimed. As shipped in 1.4.0, CI could never run it (tagged out on the 9.6 row, a PG15 gate no plugin row satisfied, an empty 9.6 URL on the 12 row) — the "byte-identical across decoders" claim rested on a silently narrowed, plugin-vs-plugin-only comparison. The geometry is fixed end to end: CI's 12 row runs pgoutput against both plugins on one server plus both plugins again on a real 9.6 secondary, a missing expected leg FAILS LOUD instead of narrowing, and the comparison covers every delivered field including column metadata — which exposed and fixed a real defect (REPLICA IDENTITY FULL key flags diverging under pglogical and wal2json).
- wal2json JSON-number normalization is fail-closed instead of silently re-rendered (Elixir's
1.0e20is not float8out's1e+20); the value-text boundary is documented per server vintage. - The wal2json schema guard no longer stacks timers across reconnects (fast reconnect cycles multiplied the tick rate).
- Records corrected to match reality: README, the released-1.4.0 CHANGELOG sentence (struck with a pointer), ROADMAP A7, the example README, ADR-0009's Consequences (in-stream drop rules, the DROP+ADD deferral window) and its receipts — including the binding CI run ids.
- CI gains a 15 plugin lane (per-major wal2json pins in the committed Dockerfile) so the truncate+message parity variant runs in CI against the repo's own pinned bytes; the
wal2json2_4option-halt lever is lane-aware; a spuriouspublish_candidateerror annotation no longer appears on green runs; postgres readiness gates require stable consecutive probes.