Tactical situational awarenessImplementation status: BidirectionalInput supportedOutput supported

Cursor-on-Target: the implemented event translation

Cursor-on-Target is the compact XML event format used across the TAK ecosystem and beyond. SynapseCommand publishes a bidirectional CoT adapter: contact atoms become canonical objects, and canonical plans become free-form drawings.

This adapter is at TRL 8 as part of the complete, qualified SynapseCommand product. The supported edition, exchange direction and interface scope are listed below. What TRL 8 covers and how it differs from the engineering levels below. All current adapters are listed on the interoperability hub.

About the standard

What CoT is

A CoT event is a small XML document describing what, where, when and how sure. The type string encodes affiliation and battle dimension, the point element carries position with error estimates, and the detail element is an open container that implementations extend.

Its virtue is its size and its ubiquity. Its cost is that almost everything meaningful lives in convention rather than in the schema, so two conformant implementations can disagree about what a field means while both remaining valid.

That is why a published, field level mapping is worth more here than a claim of support. Anyone integrating can read exactly which conventions this implementation follows.

The TAK Server integration scope distinguishes this document adapter from server transport, authentication and a validated end-to-end connection.

Operational relevance

Why this matters to a commander

CoT is how a dismounted user's position, a sighting and a sketched control measure move between tactical clients today.

For a decision-support layer, being able to emit a plan as a drawing means a recommended course of action can appear on the same screen the user already has, without asking anyone to adopt a new client.

Reading atoms means the same layer can see the reported picture as the edge sees it, rather than as a headquarters system has already reconciled it.

What is implemented

The exact behaviour, not a capability claim

Ingest takes one CoT atom, a contact report, and produces one Entity and one Event. The atom describes a thing that exists and a thing that happened, which is the same split every adapter in the set uses.

Egress takes one canonical object and produces one CoT event document. A plan object becomes a free-form drawing, and an Entity becomes an atom, which is what makes the ingest path round-trippable. Entity egress is not an extra: the harness calls the egress path on whatever ingest produced for every fixture, so an adapter that could only emit drawings would fail its own gate.

A drawing arriving on ingest is not special-cased. The CoT adapter does not produce a plan object from an incoming drawing; other adapters in release 3.3.0, such as GeoJSON and GeoPackage, do produce plan objects on ingest, so this is a CoT adapter choice rather than a rule of the data model. Such a payload is still translated, with affiliation and type resolving to unknown and its fields parked under the adapter's declared loss accounting.

The CoT sentinel for an unavailable height or error estimate is translated to an absent value rather than forwarded, because forwarding it would place a contact nine thousand kilometres up with nine thousand kilometres of error. The translation is declared, so it appears as a printed line in every harness report.

A position at zero latitude and zero longitude is not treated as a sentinel, because it is a real point in the Gulf of Guinea. An event with no point element yields no position; an event at zero and zero yields a position there.

An unrecognised how value resolves to estimated rather than to a satellite fix, because understating a fix is the safe direction when a commander is using that field to tell a measurement from a guess in a navigation-denied environment. The source's own value is kept either way.

XML parsing is guarded. A document carrying a document type definition is refused before the parser sees it, since a CoT event has no legitimate use for one and internal entity expansion is a memory amplification attack on bytes that arrive off a network.

  • 01
    Ingest
    CoT atoms, meaning contact reports, as XML bytes or as the parsed dictionary twin.
  • 02
    Egress
    Canonical Entity to atom; canonical plan object to a free-form drawing.
  • 03
    Not ingested
    Drawings. Deliberate, and stated in the adapter.
  • 04
    Sentinels
    The unavailable value for height and error estimates becomes an absent field, declared as a transform.
  • 05
    Security
    Documents carrying a document type definition are refused before parsing.
Direction of exchange

Which way the data actually moves

Into the canonical model

  1. CoT event XML
    One atom.
  2. Entity and Event
    Affiliation and battle dimension mapped; the full type string parked.

Out of the canonical model

  1. Entity or plan object
    Canonical objects.
  2. CoT event XML
    Atom, or free-form drawing for a plan.
Workflows

Where this data is used

Recommended course of action to the edge

A canonical plan object is emitted as a drawing, so a proposed scheme of manoeuvre can be rendered by a client that already speaks CoT. Authority stays with the human decision gate; the drawing is a proposal, not an order.

Reported picture ingest

Atoms become canonical Entities and Events, with position source qualified rather than assumed, which is what allows the Blue-Force Posture Agent to reason about reporting quality.

Round trip verification

A shipped fixture can be translated in and back out with the published harness, which is how an integrator checks the conventions rather than negotiating them.

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 tak.

Source and fixtures

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

    Both directions, the sentinel rules, the type mapping and the guarded parse.

  • Fixtures
    packages/cdm/synapse_cdm/fixtures/tak/

    Event documents, parsed twins and golden canonical output. Each ingest fixture ships twice so the lossless check can run on the structured form.

  • Field by field coverage
    packages/cdm/synapse_cdm/FORMAT_COVERAGE.md

    The CoT row set, including which rows are egress only.

Test evidence

  • Harness test
    tests/test_cdm_tak_adapter.py

    Replayed by the validation harness shipped in the same package. Its six fixture checks keep PASS, FAIL and SKIP distinct and assess loss only within the adapter's declared scope.

  • Loss accounting check
    tests/test_cdm_lossless.py

    Checks source-value preservation, declared transformations, residual fields and explicitly reported loss within the supported scope.

Conformance levels (L3, L4) are scoped adapter evidence declared in each release manifest for the published fixtures and supported subset. They are not product or agent Technology Readiness Levels, and neither is certification or validated integration with a named system.

Manifest-backed assurance, release 2.2.0 record

The cards below are the historical 2.2.0 manifest record, linked at that release's commit. The current release is 3.3.0; its manifests are at the v3.3.0 commit. VERIFIED is a scoped claim-status axis. Neither maturity nor claim status means external certification or integration with a named system.

  • tak
    CLI alias:
    tak
    Module:
    tak
    Direction:
    bidirectional
    Edition/profile:
    Unknown
    Level (3.3.0):
    L3, manifest-declared
    Claim (3.3.0):
    VERIFIED, not deployed-system acceptance
    Preservation basis:
    Value-presence heuristic
    Round trip:
    values-level tolerance on published fixtures
    2.2.0 record:
    L4 VERIFIED, historical release-specific record. Release 3.3.0 declares L3: L4 now requires declared field mappings and a loss ledger, not the value-presence check

    Cursor-on-Target contact atoms on ingest; atoms and drawing shapes on egress.

    Limit: Document translation only. No server connection, authentication, enrolment, subscription or drawing ingest is implemented.

What these conformance levels mean

Conformance levels (L3, L4) are scoped adapter evidence declared in each release manifest for the published fixtures and supported subset. They are not product or agent Technology Readiness Levels, and neither is certification or validated integration with a named system.

L3 means required provenance survives translation. L4 adds applicable roundtrip evidence under the adapter's declared tolerance. 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

  • Drawings are emitted but not ingested.
  • The adapter is a translator with no transport. It does not connect to a server, subscribe to a stream or authenticate to anything.
  • Only contact atoms are ingested. Other event families are not claimed.
  • Conventions differ across the ecosystem. The mapping this implementation follows is published so a difference can be found before an integration begins rather than during it.

Security boundary

  • No credentials, certificates, endpoints or enrolment procedures appear in the published layer or on this page.
  • The refusal of document type definitions is a deliberate hardening decision on a network-facing parser.
Questions

Frequently asked

Is the Cursor-on-Target support bidirectional?
Yes. Atoms are ingested and both atoms and free-form drawings are emitted. Drawings are not ingested, which is a deliberate decision recorded in the adapter.
Does the adapter connect to a TAK server?
No. It translates event documents. There is no network client, no certificate handling and no subscription logic in the published layer, and none is claimed.
How are unknown values handled?
The CoT unavailable sentinel becomes an absent canonical field, declared as a transform so it appears in every harness report. A position at zero and zero is treated as a real position, because it is one.