Astro~/0.4
** Conformance / CDM * PAGE 29 / 30
** Astro * Conformance
** /conformance/cdm

Conjunction Data Message

Coverage matrix: what this package implements, clause by clause.

Conformance Statement for pkg/cdm, CCSDS 508.0-B-1

CCSDS 508.0-B-1 annex A ships an Implementation Conformance Statement. What follows fills in its shape for both forms: the key-value notation of section 3 and the XML form of section 4.


A1 IDENTIFICATION

FieldValue
Date of Statement (DD/MM/YYYY)04/09/2026
ICS Serial NumberASTRO-CDM-ICS-001
Implementation Nameastro/pkg/cdm
Implementation VersionSee go.mod / latest commit on main
SupplierRavi Suhag
Contact Point for QueriesGitHub, github.com/ravisuhag/astro
SpecificationCCSDS 508.0-B-1 (Conjunction Data Message, Blue Book, June 2013, with updates through Corrigendum 2)
Time formatsCCSDS 301.0-B-4 ASCII time codes A and B, via pkg/tcf
Have any exceptions been required?Yes [X] No [ ], see A3

A2 REQUIREMENTS

Structure

FeatureReferenceStatusSupport
Plain text, one keyword per line3.1.1, 6.3.1.4M
XML form4, CCSDS 505.0-B-3M
Exactly two segments in XML505.0-B-3 clause 3.4.2M
relativeMetadataData before the first segment505.0-B-3 clause 3.4.2M
NDM combined instantiation505.0-B-3 clause 4.11O
Header, relative metadata/data, then two object sections3.1.1M
Data for a single conjunction event3.1.2M
Keyword order fixed by the standard6.3.1.9M
OBJECT separates the object sectionsTable 3-3M

Header, table 3-1

FeatureStatusSupport
CCSDS_CDM_VERSMY
COMMENTOY
CREATION_DATEMY: UTC
ORIGINATORMY: not checked against the SANA registry, see A3
MESSAGE_FOROY: exists in no other navigation message
MESSAGE_IDMY: obligatory here, optional everywhere else
No CLASSIFICATIONY: refused, since table 3-1 does not list it

Relative metadata and data, table 3-2

FeatureStatusSupport
TCAMY
MISS_DISTANCEMY: metres
RELATIVE_SPEED, relative position and velocity in RTNOY
Screening period, volume shape, frame and extentsOY
SCREEN_ENTRY_TIME, SCREEN_EXIT_TIMEOY
COLLISION_PROBABILITYOY
COLLISION_PROBABILITY_METHOD obligatory with the probabilityCY: ErrMissingKeyword

Object metadata, table 3-3

FeatureStatusSupport
OBJECT, one of OBJECT1 or OBJECT2MY: ErrObjectValue, ErrObjectRepeated
OBJECT_DESIGNATOR, CATALOG_NAME, OBJECT_NAME, INTERNATIONAL_DESIGNATORMY
EPHEMERIS_NAME, COVARIANCE_METHOD, MANEUVERABLE, REF_FRAMEMY
OBJECT_TYPE, operator contact keywords, ORBIT_CENTEROY
Force model keywords: gravity, atmosphere, n-body, SRP, tides, thrustOY

Object data, tables 3-4 to 3-8

FeatureStatusSupport
OD parameters: last observation times, spans, counts, residuals, weighted RMSOY
Additional parameters: areas, mass, area over mass, thrust acceleration, SEDROY
State vector, six componentsMY: km and km/s
Covariance, the obligatory 6×6 lower triangle in RTNMY: 21 elements, metres
Covariance rows 7 to 9: drag, solar radiation, thrustOY: CovarianceOrder reports how many were present

A3 EXCEPTIONS AND UNSUPPORTED FEATURES

No conjunction analysis. Nothing propagates either object, recomputes the miss distance or relative velocity from the two state vectors, or calculates a collision probability. Every one of those is the originator's work, reported in the message. A library that recomputed them would be substituting its own force models for the originator's, which is the opposite of what a warning is for.

Keyword order is not enforced on read. Clause 6.3.1.9 fixes the order. This package accepts the keywords of a section in any order and writes them in the order it read them, so a decoded message re-encodes in the standard's order and a hand-built one comes out in the order its fields were appended. Refusing an out-of-order file would refuse messages that are otherwise unambiguous, and the section boundaries — which do carry meaning — are enforced.

The covariance is not checked for positive definiteness. A message whose matrix is not a valid covariance is structurally valid and is read without complaint. Whether it is usable is a question for whatever computes a probability from it.

Registry values are not checked. ORIGINATOR points at the SANA organizations registry filtered to the Conjunction Data Message Originator role, and CATALOG_NAME at the SANA CATALOG_NAME registry. Neither is validated: checking would mean shipping a copy of a registry that changes without this package.

Enumerated values are not enforced beyond OBJECT. MANEUVERABLE, COVARIANCE_METHOD, OBJECT_TYPE, SCREEN_VOLUME_SHAPE and the rest have normative value sets. They are carried as written. Maneuverable reports YES as true and anything else as false, and reports separately whether the keyword was present at all, so N/A is distinguishable from absent.


A4 IMPLEMENTATION LIMITS

LimitValueSource
Line length254 charactersClause 6.3.1
Objects per messageexactly 2Clause 3.1.2
Covariance order6 to 9Table 3-8
Keywords per sectionbounded by the inputNo ceiling imposed

Wire test vectors

The files backing this statement live in the vector corpus — 1 decode vector and 1 corpus file.

File
cdm/conjunction.json1 vector
cdm/obligatory-keywords.kvnthe clause 3.6.2 example as a readable file

Both are published text rather than derived values: clause 3.6.2 prints the example.

One transcription change is recorded in the vector's note. The Blue Book renders its minus signs as U+2212 and the corpus file uses ASCII hyphen-minus, because clause 6.3.1 allows only printable ASCII — the typography in the PDF is a rendering artefact rather than what a real file holds.

The vector asserts the conjunction, the identity of each object, whether each can manoeuvre, and how many rows of covariance each carried. That last one matters because it is not recoverable from the numbers: an absent row and a row of zeroes are identical in the matrix. The floats are checked in pkg/cdm against the same text.

See CONTRACT.md for how to consume these, and how this is verified for what rests on a published vector versus a reading of the clause.