Cooperative surveillanceImplementation status: BidirectionalInput supportedOutput supported

AIS: vessel reports in and out, with the sentinels handled properly

The Automatic Identification System broadcasts vessel position, identity and voyage data over VHF. SynapseCommand publishes a bidirectional AIS adapter, and the part of it that matters most is the handling of values that look like measurements but mean not available.

About the standard

What AIS is

An AIS message arrives as one or more NMEA 0183 sentences carrying an armoured binary payload. Position reports, base station reports, static and voyage data, and aid to navigation reports each have their own fixed bit layout.

The layouts are fully allocated. There is no spare field and no vendor extension block, which has consequences for what can be written back out.

AIS spells not available as an in-band value inside a field that otherwise carries a real measurement, and every one of those values is a plausible-looking number.

Operational relevance

Why this matters to a commander

Maritime and subsea infrastructure protection begins with knowing which vessels have declared themselves, where, and with what stated intent.

The interesting cases are the disagreements: a vessel whose declared draught is impossible for its declared cargo, or whose reported behaviour does not match its declared voyage. Those comparisons are only possible if the unavailable values were not silently turned into zeros first.

Because AIS is self-reported, a decision layer must be able to distinguish what a vessel said, what it did not say, and what nobody knows. Those are three different facts.

What is implemented

The exact behaviour, not a capability claim

Ingest turns one message, delivered as one or more sentences, into an Entity and an Event.

Every unavailable sentinel becomes an absent canonical field rather than a value: the latitude one degree past the pole, the longitude past the antimeridian, the speed value the not-available convention uses, the bearing outside the valid range, the nine-bit heading with every bit set, the rate of turn at the signed floor, and the zero draught, which is the dangerous one because it is also a plausible reading. A forwarder that nulls the other six can still state that a laden tanker draws nothing.

Which fields the source itself marked unavailable is recorded on the object, because a vessel saying it does not know its heading and an adapter having nothing to say are different facts and only one of them belongs in the data.

A position at zero latitude and zero longitude is a real position and is translated as one. A speed at the top of the reportable range means that speed or higher, so it is kept as a floored measurement with the floor recorded.

The one-bit position accuracy flag is not written into the metres-valued accuracy field. A threshold is not a measurement, so the flag is parked and the accuracy field stays unknown.

Time comes from three places depending on what the message actually says. A base station report carries a full date and time and is used directly. Position reports carry a second of the minute, and the instant chosen is the one bearing that second nearest the reception time. Static and voyage data carry no time at all, so the reception instant is used and the object says exactly that. Where the feed provides a receiver timestamp in the sentence tag block it is read; otherwise the injected clock is used, never the system wall clock.

Egress emits sentences. An Entity emits the message type it arrived as, and a Track emits one position report per sample in the track's own order.

  • 01
    Types 1, 2, 3
    Class A position reports.
  • 02
    Type 4
    Base station report, the only type carrying a full date and time.
  • 03
    Type 5
    Static and voyage related data.
  • 04
    Types 18, 19
    Class B position report and Class B extended report.
  • 05
    Type 21
    Aid to navigation report.
  • 06
    Out of scope
    Every other type, each named in the coverage document with the reason it is out.
Direction of exchange

Which way the data actually moves

Into the canonical model

  1. NMEA 0183 AIS sentences
    One message, possibly across several sentences.
  2. Entity and Event
    Sentinels absent, unavailable fields recorded, time basis named.

Out of the canonical model

  1. Entity or Track
    Canonical objects.
  2. AIS sentences
    One position report per track sample.
Workflows

Where this data is used

Maritime picture ingest

Declared vessel data enters the canonical model with absences preserved as absences, so a comparison against observed behaviour is a comparison of like with like.

Anomaly reasoning

Because what a vessel did not state is recorded separately from what it stated, the ISR Fusion Agent can reason about silence as well as about content.

Subsea infrastructure watch

Vessel behaviour near a cable or pipeline corridor is assessed against the declared voyage, with the reliability of each declared field visible rather than assumed.

Implementation evidence

Every claim above has a file behind it

These paths are in the public repository, published under Apache 2.0. The adapter module for this page is ais.

Source and fixtures

  • Adapter source
    packages/cdm/synapse_cdm/adapters/ais.py

    Both directions, the full sentinel table and the three time paths.

  • Fixtures
    packages/cdm/synapse_cdm/fixtures/ais/

    Raw sentences, parsed twins, golden canonical output and egress fixtures.

  • Field by field coverage
    FORMAT_COVERAGE.md

    The AIS row set, including every excluded message type and every declared transform.

Test evidence

  • Harness test
    tests/test_cdm_ais_adapter.py

    Replayed by the validation harness shipped in the same package, which runs six checks per fixture including a never-drop lossless check.

  • Lossless check
    tests/test_cdm_lossless.py

    Unpacks the armoured payload rather than exempting it, so the bits inside are measured too.

Manifest-backed assurance

Maturity is declared in each generated adapter manifest and checked against suite eligibility. VERIFIED is a separate claim-status axis. Neither means external certification or integration with a named system.

  • ais
    Maturity L4Claim VERIFIED
What these maturity levels mean

L3 means required provenance survives translation. L4 adds applicable roundtrip evidence. L5 would require every applicable public conformance gate to pass. L6 requires an independent real implementation or system and cannot be awarded from this repository's synthetic fixtures.

Status and limits

What is claimed, and what is not

Implementation status: Bidirectional

The published adapter implements both translation directions: the format into the canonical data model, and the canonical data model back out to the format. Both directions are replayed by the validation harness against shipped fixtures.

Last reviewed against the published implementation on 2026-09-06.

Limitations

  • Egress is lossy for canonical facts that AIS has nowhere to carry, including identifiers, track quality and the provenance block. That is a property of the format, which has no extension point, and the round trip test excludes those fields by name with a reason attached to each rather than measuring a loss it cannot fix.
  • Fragment reassembly across payloads is out of scope, for the same reason global position decoding is out of scope in the ADS-B adapter: it would require state inside a translator.
  • Only the message types listed above are implemented.
  • The one-bit accuracy flag never becomes a metres-valued accuracy.

Security boundary

  • The published layer translates payloads and holds nothing. No vessel data, no receiver configuration and no site information appear in the repository.
  • Every fixture is synthetic or public, and none carries operational traffic.
Questions

Frequently asked

How does the adapter handle values that mean not available?
Each one becomes an absent canonical field rather than a number, and the transform is declared so it appears in every harness report. Which fields the source marked unavailable is recorded separately, because a vessel stating that it does not know something is a different fact from nobody having said anything.
Is AIS egress lossless?
No, and it cannot be. The AIS bit layouts are fully allocated with no extension point, so canonical facts such as identifiers, track quality and provenance have nowhere to go. The affected fields are excluded from the round trip test by name, each with a reason, and every field AIS can carry is measured.
Which AIS message types are supported?
Types 1, 2, 3, 4, 5, 18, 19 and 21. Every other type is named in the published coverage document together with the reason it is out of scope.