# description
The transport-neutral DCP envelope. Carries SEMANTIC fields only (type, version, correlation) and exactly one Event. It carries NO transport, trust, identity, routing, signing, delivery, or retry semantics; those belong to the transport layer (e.g. AgentixMesh). A DcpMessage is independently readable and validatable regardless of how it is transported.

# properties.dcp_version.description
Protocol version, major.minor. Consumers MUST parse this as two integers, never as a float (so 1.10 > 1.9).

# properties.message_id.description
Stable identity for this DCP message, for AUDIT/CORRELATION only. Uniqueness is producer-asserted and is NOT verifiable by DCP. This is NOT a transport/delivery/idempotency id; deduplication and delivery guarantees belong to the transport layer.

# properties.message_type.description
A denormalized convenience copy of '<body.entity_type>.<body.verb>' for human/operator readability. It is NOT protocol authority: the normative source is always the body. Validators MUST check that it equals '<body.entity_type>.<body.verb>'; on conflict the body wins. Transports MUST NOT route, authorize, or trust on this field.

# properties.issued_at.description
When this DCP message was composed (not when it was delivered).

# properties.correlation_id.description
Optional SEMANTIC link to a prior DcpMessage.message_id (project-meaning correlation only, never a transport thread id). DCP gives no guarantee that the referenced message exists, was authentic, or came from the same source. Consumers MUST NOT make security-relevant decisions on it alone.