Node Manifest Mission v0.2.0
This document is the normative description of the Node Manifest mission block for schemaVersion 0.2.0. The mission block is an optional structure that declares mission identity, the planned execution window, and a declarative region. It does not change envelope selection or eligibility semantics. Its purpose is to provide stable identifiers and a minimal space-time footprint for later correlation, receipts, and analysis.
The JSON Schema at schema/node-manifest.v0.schema.json describes the shape of the mission block. This document defines the meaning and expected behaviour of the fields exposed there. If there is any ambiguity in how to interpret a field, this text is definitive.
Mission object
When present, the top-level mission field of a Node Manifest is an object with required fields missionLabel, missionWindow, and region. The absence of a mission object means that the producer has not declared mission identity or region for this manifest. Consumers must not guess or invent mission details in that case.
Mission identity fields
The mission block includes three identity fields: missionLabel, operationId, and sortieId.
The missionLabel field is required and is a human-readable label for the mission slice described by this manifest. It is intended for briefings, logs, and operator interfaces.
The operationId field is optional. It identifies the broader operation or campaign that groups related manifests across nodes and time. It is an opaque string from the schema's point of view; it may be a code name, an operation number, or an internal registry identifier.
The sortieId field is optional. It identifies the per-node flight, sortie, or deployment associated with this manifest. It is also an opaque string. Producers should keep sortieId stable across all manifests that represent replans of the same flight, and change it when a new sortie begins.
All three identity fields are informational. They do not affect manifest selection or eligibility, and they must not be used to override the envelope semantics defined in spec/ENVELOPE-v0.2.0.md.
Mission window
The missionWindow field is required when mission is present. It contains two required timestamps, start and end, both expressed as RFC 3339 date-time values in UTC. The start timestamp must be strictly earlier than the end timestamp. Open-ended mission windows are not allowed in this schema line.
The mission window represents the planned execution interval for this mission slice. It is distinct from the envelope validity window. The envelope controls whether a manifest is admissible; the mission window expresses planning intent inside that envelope.
Containment within envelope validity
When an envelope validity object is present, the mission window must be contained within the envelope's effective start and expiry. The effective start is defined as validity.notBefore if present, otherwise the manifest's issuedAt timestamp. The effective expiry is defined as validity.notAfter plus validity.graceSeconds if notAfter is present; if notAfter is absent, the envelope does not impose an upper bound.
For a manifest to be well-formed for operational use, missionWindow.start must be greater than or equal to the effective start, and missionWindow.end must be less than or equal to the effective expiry when an expiry exists. This containment rule is a semantic invariant enforced by reference helpers and tests, not by JSON Schema. The TypeScript binding exposes isMissionWindowWithinEnvelope as the reference implementation of this check.
Mission region
The region field is required when mission is present. It declares a minimal, platform-agnostic footprint for the mission slice. In schemaVersion 0.2.0 the only supported reference frame is WGS84, expressed as the literal string "wgs84" in the frame field. Other frames may be added in later schema versions.
The region is expressed as either a polygon or a circle. Exactly one of these shapes must be present.
Polygon region
A polygon region is an object with a points array of at least three latitude/longitude points. Each point is an object with lat and lon fields. Latitude must be between -90 and 90 inclusive. Longitude must be between -180 and 180 inclusive. The polygon is implicitly closed; the first and last points do not need to match. Winding order is not semantically significant in this version.
Circle region
A circle region is an object with a center point and a radiusMeters field. The center uses the same lat and lon bounds as polygon points. The radius is a positive integer in meters and must be at least 1. Zero or negative radii are invalid.
Relationship to envelope and selection
The mission block does not change how manifests are selected or considered eligible at a given time. The reference helper selectActiveManifestForNode ignores mission and uses only envelope fields. Producers and consumers must not allow mission identity, mission windows, or regions to influence selection. Two manifests that are identical in their envelope and differ only in mission fields are considered equally eligible; the usual issuedAt and manifestId tie-breakers apply.
This separation is intentional. The envelope defines when a manifest applies to a node; the mission block records what the manifest is about in time and space without altering that eligibility logic.