Skip to content

Latest commit

 

History

History
57 lines (52 loc) · 3.15 KB

CHANGELOG.md

File metadata and controls

57 lines (52 loc) · 3.15 KB

Changelog

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.

[Unreleased]

Added

  • CotEvent object model with from_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 GeoChat b-t-f wire 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 / position kwargs, 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 in CotStream.send()).
  • Graceful disconnect: close() sends a t-x-d-d delete task referencing ourselves before closing the connection.
  • Keepalive per the TAK client implementation: background inbound pump, t-x-c-t pings 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: affil and domain properties 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: callsign accessor, age(), is_stale().
  • Automatic fill of missing time / start / stale timestamps 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.