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.
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.
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.
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.
- 01IngestCoT atoms, meaning contact reports, as XML bytes or as the parsed dictionary twin.
- 02EgressCanonical Entity to atom; canonical plan object to a free-form drawing.
- 03Not ingestedDrawings. Deliberate, and stated in the adapter.
- 04SentinelsThe unavailable value for height and error estimates becomes an absent field, declared as a transform.
- 05SecurityDocuments carrying a document type definition are refused before parsing.
Which way the data actually moves
Into the canonical model
- CoT event XMLOne atom.
- Entity and EventAffiliation and battle dimension mapped; the full type string parked.
Out of the canonical model
- Entity or plan objectCanonical objects.
- CoT event XMLAtom, or free-form drawing for a plan.
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.
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 sourcepackages/cdm/synapse_cdm/adapters/tak.py
Both directions, the sentinel rules, the type mapping and the guarded parse.
- Fixturespackages/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 coveragepackages/cdm/synapse_cdm/FORMAT_COVERAGE.md
The CoT row set, including which rows are egress only.
Test evidence
- Harness testtests/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 checktests/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.
What is claimed, and what is not
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.
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.