All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
CotEventobject model withfrom_xml()/to_xml()serialization and round-trip fidelity for unknown attributes and detail blocks.- Spec-compliant position handling: reads the
<point>child element with legacy attribute-style fallback; serialization emits<point>per spec. - Tolerant parsing of empty/invalid numeric attributes on real-world feeds.
- Detail-block setters (
set_contact,set_group,set_track,set_remarks,set_status,set_precision_location,set_color) that upsert into the raw detail tree without destroying unknown siblings. - Event factories:
marker,sa_report,chat_message(ATAK 5.8 GeoChatb-t-fwire format),chat_receipt(b-t-f-d/b-t-f-r),emergency_alert,emergency_cancel. - Semantic predicates:
is_sa(),is_marker(),is_chat(),is_emergency(); robust multi-format CoT timestamp parsing. - Identity conveniences: constructor kwargs and read/write properties for
callsign,team,role,remarks;set_cot_type(). - Initial SA identification:
CotStream.connect()optionally announces a fully valid identity SA (contact with geochat-capability endpoint marker, group, status, takv with OS/version info) right after connecting — the server only routes everything (e.g. GeoChat) to identified clients. - Own type and position management:
cot_type/positionkwargs,set_cot_type()with automatic re-announcement,set_position()firing an out-of-interval SA report on every change. - Parent-producer attribution: non-self SA/markers get a
<link>block pointing back at our UID/callsign (set_parent_link()plus automatic application inCotStream.send()). - Graceful disconnect:
close()sends at-x-d-ddelete task referencing ourselves before closing the connection. - Keepalive per the TAK client implementation: background inbound pump,
t-x-c-tpings after 15 s idle (max every 4.5 s), dead connection detection after 25 s silence, and a periodic SA refresh every 30 s. - Affiliation accessors:
affilanddomainproperties parsed from the CoT type string. - Example receiver with ANSI affiliation coloring (h/s red, f blue, n green, u/o yellow).
- Round-trip regression corpus (12 ATAK-exported CoT samples) and XSD
reference collection under
reference/takcot/. - Convenience helpers:
callsignaccessor,age(),is_stale(). - Automatic fill of missing
time/start/staletimestamps on send. CotStream: async bidirectional CoT event streaming over TCP with an async iterator interface.- Unit test suite covering parsing, round trips and stream handling.
- Live integration test harness against a real TAK server (local config only).
- Strict quality gates: pre-commit hooks with black, ruff, pylint, mypy strict, bandit, detect-secrets, gitleaks, dependency auditing and secret / cert-material guards.
- Project scaffolding: Poetry-managed environment, README, changelog.