v1.4.1
A patch release. One refusal changes its exception class, two messages change what they cite, and
no importable name is added, removed or retyped.
Package version 1.4.1 · CDM schema_version 1.0.0. No schema moved and the diff over
schemas/ since 1.4.0 is empty, which is the check that decided SCHEMA_VERSION stays where it is
rather than an assumption that it would.
The one change a caller can see
klv_codec.decode_ber_length now raises KLVFramingError for a BER length whose first octet is
0x80, where it raised UnderivableFromPinnedCopy. KLVFramingError is a ValueError and
UnderivableFromPinnedCopy is a NotImplementedError, so they share no base but Exception:
a caller catching UnderivableFromPinnedCopy to handle indefinite lengths must catch
KLVFramingError instead. Nothing else about the function moved — the same inputs are accepted
and every length it decodes decodes to the same value.
SMPTE ST 336:2017 §5.3 states what the octet means, no held MISB document defines the alternative
end-finding method the standard's condition requires, so the bytes are wrong and the decoder now
says so. Note the scope: ST 336 permits 0x80 — the refusal is the MISB profile's.
The long-form ceiling message now cites ST 336:2017 §5.3 NOTE 1 and ISO/IEC 8825-1 §8.1.3.5(c);
BER_LENGTH_OF_LENGTH_MAX is unmoved at 127 and that tighter bound of 126 is recorded and
deliberately not enforced, because X.690 is not held and the text sits in an informative annex.
Park 8 — SMPTE ST 336 — closed on both editions, obtained free from the publisher's own library.
Register entries KLV 11 and KLV 13 closed with it.
Why this is a PATCH
gates/bump_derivation.py classifies the diff over the distribution between v1.4.0 and this tree
and reports PATCH over 14 signals. Two units the table cannot decide carry Bump rulings in
MIGRATIONS.md's 1.4.1 section — decode_ber_length and _CEILING_RESIDUE, both PATCH — and the
gate reads them back and refuses one that outlives its case. The number is derived, not chosen.
Derived off the tagged tree (release condition 4)
Fourteen adapters, from --list-adapters in the run summary: adsb, ais, cat021, cat023,
cat034, cat048, cat062, gmti, legion, pntmap, stanag4586, stanag4609, stanag4676,
tak — 432 fixture verdicts, 0 failed, unchanged from 1.4.0 because this release adds no
fixture and removes none.
Six schemas, regenerating byte-identical from the models: cdm_object, entity, event,
payload_gnss_interference, plan_object, track.
Suite at the tag, on the runner: 3403 passed, 69 skipped. A CI green is not a maintainer's — the
pinned specification PDFs are gitignored, so a fresh clone skips the tests that read them, and the
skip list is printed with -rs in the "Condition 1" step.
Artefacts
Built once by run 33847019240,
gated as that build, and uploaded as those same files through PyPI Trusted Publishing over OIDC with
no token anywhere in the workflow.
1d0b021f61fd089852ce2be3e5928853542e54a69d89e00d831b958e3e0d75a4 synapse_cdm-1.4.1-py3-none-any.whl
09ca1652c3b03f6134de7e39dd7c9c1499e015457c77f87405a76ebd6f494344 synapse_cdm-1.4.1.tar.gz
4 152 919 bytes and 2 254 352 bytes. PUBLICATION.md ledger entry 13 records these digests read
back from six independent places, together with the run that produced them.
pip install synapse-cdm==1.4.1For what 1.4.0 was — STANAG 4586 telemetry ingest — see the 1.4.0 release.