Skip to content

synapse-cdm 2.0.0 — SC-OES ships, and the wire contract moves with it

Choose a tag to compare

@decentcybersecurity decentcybersecurity released this 07 Sep 12:03
· 73 commits to main since this release

A major release, and what it adds is a semantic layer over the model this package has always carried. SC-OES — the SynapseCommand Operational Event Specification, v0.1.0 Draft — attaches operational-event semantics to a CDM object after source-format translation: what kind of assertion an event is, which governed semantic type it claims, what it relates to and with which role, and how sure its source was. It is a wire-semantic contract, not a new format and not a replacement for one.

Package version 2.0.0 · CDM schema_version 2.0.0. If you consume CDM objects this is a breaking change. The two numbers being equal is a coincidence of two independently justified major changes and not a derivation, and synapse_cdm/version.py states the six version axes and their independence in one place. A package at 2.0.0 does not mean SC-OES 2.0: SC_OES_VERSION is 0.1.0 and it is a Draft.

What a 1.x consumer must do. Two optional keys are what makes this a major: Event.oes, the SC-OES block, null unless the producer made an assertion; and Entity.ontology_types, a list of governed ontology identifiers, empty unless one was asserted. Both default to nothing, so legacy data is structurally representable without change — and that is not compatibility. The canonical objects are extra="forbid" and the published schemas are additionalProperties: false, so a 1.x strict reader meeting either key rejects the object rather than ignoring it; version.compatible("2.0.0", "1.0.0") is False, and that refusal is the message this major exists to carry. There is no migration tooling and none was written: packages/cdm/synapse_cdm/MIGRATIONS.md's 2.0.0 section carries the migration statements instead, because nothing was removed, renamed or narrowed.

What ships beside the two keys. The specification at spec/sc-oes/, sixteen documents plus a README; the SynapseCommand Operational Ontology, whose Turtle is the authority and whose JSON-LD context and packaged term registry are generated from it and drift-tested against it, with nothing at runtime parsing RDF; three packaged registries under synapse_cdm/registry/sc_oes/event_types.json, ontology_terms.json and profiles.json — which load through importlib.resources and need no checkout and no network; offline conformance tooling (python -m synapse_cdm.conformance, installed as cdm-conformance) reporting five separately named dimensions with no aggregate score and four exit codes; the pntmap adapter as a reference producer; fourteen worked examples, thirteen individual and one linked operational chain; and seven profile documents.

Dimension D is executable for exactly one profile. The PNT Profile 0.1.0 is the first profile with a conformance rule of its own; the other six are specification-only and dimension D against them is SKIP — a known profile with no executable rules, which is a different fact from a profile name that does not exist and a different fact again from an object that failed. A PASS drawn from an empty rule set would be a claim manufactured out of the absence of anything to check. The permitted claim names one assessed object and is not a certification: this work creates no certification programme.

The full notes are RELEASE_NOTES.md at this tag.

Derived from the tree at the tag, not remembered

  • The number is a person's over the gate's floor, and the gate says so itself. gates/bump_derivation.py on this tree reports declared 2.0.0 / declared_kind MAJOR / derived_kind MINOR, with the version rule MAJOR ruled for 1.8.0 → 2.0.0. It derives a MINOR floor from 697 signals across 558 distribution files — every file the arc moved carries at least one — because every signal it can prove is an addition and no importable name is removed. What decides the number is what the diff cannot reach: a third party's consumer written against 1.8.0 does not work against this distribution. docs/adr/0005-cdm-schema-version-impact.md argues it, and MIGRATIONS.md's 2.0.0 section carries the ruling. Ten units in the arc carry a person's ruling — seven MINOR, three PATCH — and pending.unruled is [], which is the pre-step the release procedure requires before a version number is typed.
  • Fourteen adapters, harness-verified: adsb, ais, cat021, cat023, cat034, cat048, cat062, gmti, stanag4609, stanag4676, tak (bidirectional); legion, pntmap, stanag4586 (ingest). 538 fixture verdicts, 0 failed; the workflow's gate ran them in both schema modes — harness PASS 14 adapters x 2 schema modes, 1076 fixture verdicts, 0 failed. The roster did not move this arc.
  • Six schemas, CURRENT at 2.0.0: cdm_object, entity, event, payload_gnss_interference, plan_object, track. python -m synapse_cdm.schemas --check --out schemas reports CURRENT: schemas vs models at 2.0.0, and the workflow's gate regenerated all six from outside the repository byte-identical.
  • Thirty pinned specification documents, pin_paths reading 30 present, 30 matched, 30 copies, 0 failedthe set 1.8.0 shipped, unmoved: git diff --name-only v1.8.0..v2.0.0 -- '*_pin.json' is empty. The parks table is empty for the second release runninggates/parks_table.py reads 13 rows — 0 open [], 13 closed [1…13], 0 set-claims, 0 failed.
  • The suite at the tag, as the runner saw it: 4429 passed, 78 skipped (condition 1, run 34117343838). A CI green is not a maintainer's green — the pinned specification documents are gitignored, so the clone skips the tests that read them; the skip list is in the step's log, printed with -rs.

Artefacts

Built once by run 34117343838, gated as that build, and uploaded as those same bytes over PyPI Trusted Publishing (OIDC, no API token) after the pypi environment's required reviewer approved.

4f0714f0015bec6309954016f7041b63c06b36539371f4495a4cfd2633d3c2e5  synapse_cdm-2.0.0-py3-none-any.whl
ab86ff396eda58d9d5c73a718f6bfd49b89001f7555fdb40bb7f16a9cc2ab8c5  synapse_cdm-2.0.0.tar.gz

PUBLICATION.md ledger entry 18 records the readings of each digest and the trusted-publisher values PyPI states for the attestations.

pip install synapse-cdm==2.0.0
python -m synapse_cdm.harness --list-adapters
python -m synapse_cdm.conformance --help