Link 16 / TADIL-J Normalized Event Contract
This blueprint describes a safe event contract for Link 16 / TADIL-J J-series-derived events after an authorized gateway has already performed network participation, authorization, tactical validation, redaction, and normalization.
nats-sinks does not parse MIL-STD-6016, participate in Link 16 networks,
operate terminals, handle cryptography, validate tactical procedures, or
interpret classified J-series semantics. Its role is to persist an already
authorized normalized event with commit-then-ACK delivery behavior.
Boundary
flowchart LR
Gateway[Authorized tactical gateway] --> Normalizer[External Link 16 normalizer]
Normalizer --> JS[NATS JetStream]
JS --> Sink[nats-sinks]
Sink --> Store[Oracle Database or file sink]
Store --> Audit[Audit / replay / reporting]
The gateway owns protocol and release decisions. nats-sinks owns envelope
validation, metadata validation, idempotent sink writes, DLQ handling, and ACK
after durable success.
Synthetic Event Shape
{
"event_id": "synthetic-link16-0001",
"source_gateway": "gateway-placeholder",
"source_system": "mission-integration-placeholder",
"message_family": "TADIL-J",
"message_type": "J-series",
"message_name": "Jx.x",
"event_time": "2026-05-31T10:00:00Z",
"receive_time": "2026-05-31T10:00:01Z",
"track_id": "track-placeholder-001",
"correlation_id": "correlation-placeholder-001",
"sequence": "sequence-placeholder-001",
"payload_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"raw_payload_reference": "artifact://synthetic/link16/0001",
"normalized_payload": {
"synthetic": true,
"message_status": "observed",
"placeholder_fields": {
"field_a": "value-a",
"field_b": "value-b"
}
},
"classification": "NATO UNCLASSIFIED",
"labels": ["synthetic", "link16", "custody"],
"security_labels": {
"profile": "example-security-label-v1",
"handling": "synthetic-only"
},
"mission_metadata": {
"profile": "normalized-link-event",
"profile_version": 1,
"mission_id": "mission-placeholder"
},
"schema_profile": "normalized-link16-event",
"schema_version": 1
}
This example is unclassified and fabricated. It must not be replaced with real tracks, call signs, target data, network parameters, frequencies, keys, or controlled message fields in public documentation or GitHub evidence.
Mapping Guidance
| Destination | Recommended Mapping |
|---|---|
| NATS subject | Use an operator-defined subject such as mission.synthetic.link16.normalized or another approved internal pattern. |
NatsEnvelope metadata |
Carry priority, classification, labels, message ID, stream sequence, and mission metadata through the existing core fields. |
| Oracle Database | Store stable search fields such as event_id, source_system, source_gateway, message_family, message_type, track_id, correlation_id, timestamps, and idempotency key in columns where needed. Store profile-specific content in JSON. |
| File sink | Persist the full normalized envelope and metadata for local audit, replay preparation, or disconnected handoff. |
| DLQ | Route malformed JSON, failed metadata validation, unsupported profile values, or sink failures according to the configured DLQ policy. |
Idempotency Strategy
Use a deterministic key that survives redelivery and gateway retry. Common
inputs include event_id, source_gateway, source_system, sequence,
event_time, correlation_id, and payload_sha256. Duplicate delivery should
produce an update or no-op rather than duplicate mission records.
Related Documentation
Safety Notes
This contract is conceptual and intended only for authorized environments. It does not provide controlled Link 16 implementation detail, MIL-STD-6016 field catalogues, cryptographic behavior, tactical procedures, targeting workflows, or terminal behavior.