Skip to content

fix(cot): derive CoT types from NATO classification - #2213

Open
mbuckton wants to merge 9 commits into
developmentfrom
MSG-247-cot-nato-symbol-mapping
Open

mbuckton wants to merge 9 commits into
developmentfrom
MSG-247-cot-nato-symbol-mapping

Conversation

@mbuckton

@mbuckton mbuckton commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Derive outbound Cursor-on-Target atom types from preserved NATO/MIL-STD-2525 classification data when it is available on a DroneTwin, rather than reducing every vehicle to the existing hard-coded VehicleClass mapping.

Scope

  • Add a Java implementation of the numeric MIL-STD-2525 / APP-6D to CoT type conversion used by node-CoT / @orbat-mapper/convert-symbology.
  • Reuse the STANAG entity description already preserved in DroneTwin.description; no STANAG-specific fields are added to the generic Twin model.
  • Preserve the existing VehicleClass CoT mappings as fallback behaviour for non-NATO twins or incomplete NATO classification.
  • Preserve mapper-derived CoT classification through CotEventPolicy; policy now only applies the configured affiliation to an existing atom type and falls back to VehicleClass mapping only when no type was produced.
  • Refine a broad NATO sea-surface result such as a-f-S to a-f-S-C-U when the twin is already explicitly classified as VehicleClass.USV, without mutating the shared twin description or STANAG output.
  • Keep CONTACT policy behaviour unchanged.
  • Include the atomic MIL-STD mapping data required by the converter and retain the upstream MIT attribution/license notice.
  • Add focused converter, TakEventMapper, and policy tests covering full hierarchy mapping, affiliation, air/land/sea mapping, fallback, NATO precedence, broad sea-surface USV refinement, and downstream type preservation.

Notably, APP-6D unmanned aircraft classification maps to a-f-A-M-F-Q; the previous generic UAV fallback remains unchanged for compatibility when no NATO classification is available.

Validation

Targeted tests are included. The policy regression tests now use the live Stickleback-style broad description (FRIEND / SEA_SURFACE / 11 / 00 / 00) and verify that a configured USV maps to a-f-S-C-U and remains a-f-S-C-U through CotEventPolicy. A configured affiliation still changes only the affiliation segment (a-h-S-C-U) without replacing the classification hierarchy.

Maven could not be executed from this ChatGPT execution environment because outbound DNS access to GitHub/Maven repositories is unavailable; repository CI should perform the authoritative build/test run.

Refs: MSG-247

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 9b15895c-ce78-4891-bb6f-437c820d6169

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mbuckton
mbuckton force-pushed the MSG-247-cot-nato-symbol-mapping branch 2 times, most recently from 0b99dbb to 8a6c725 Compare September 14, 2026 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant