REMIT · Data Model

Generated reference · LinkML (DEC-57)

REMIT — v1 Data Model

The serialisable object core of REMIT's v1 mission-planning model — the shapes mission planning is built from. This LinkML schema is the Doc-owned source of truth (DEC-57): one schema generates JSON Schema, TypeScript types, and this hyperlinked reference + ER diagrams. `docs/remit-data-model.md` is the prose spine; the field names and structures here are reconciled against the objects the walking-skeleton app actually constructs (`app/js/**`), so the schema agrees with the running code.

7 modules69 classes 25 enumsJSON Schema & TypeScript generated alongside

The model at a glance

The serialisable object core, split into 7 modules.

Whole-model ER diagram

Every typed association across the modules, drawn in your browser (Mermaid). Scroll to zoom, drag to pan, click a box to jump to its class.

Show the 69-class diagram
erDiagram
  Attribution {
  }
  DataProvenance {
  }
  Lineage {
  }
  Waypoint {
  }
  HexCell {
  }
  CommitmentProvenance {
  }
  Requirement {
  }
  Commitment {
  }
  Capture {
  }
  Answer {
  }
  Ambiguity {
  }
  Activity {
  }
  CellPredicate {
  }
  TimingConstraint {
  }
  TimeWindow {
  }
  DurationBound {
  }
  ActivityModifiers {
  }
  Baseline {
  }
  Changepoint {
  }
  Medium {
  }
  Grid2D {
  }
  Cell {
  }
  Channel {
  }
  ChannelParams {
  }
  FactLayer {
  }
  MovementModel {
  }
  Excursion {
  }
  ChannelDelta {
  }
  CellPatch {
  }
  Effect {
  }
  AOPackage {
  }
  Profile {
  }
  SpeedByMedium {
  }
  Endurance {
  }
  State {
  }
  Entity {
  }
  Aspect {
  }
  Orbat {
  }
  Asset {
  }
  BlueParams {
  }
  RedParams {
  }
  GreenParams {
  }
  Stamp {
  }
  StartState {
  }
  Appetite {
  }
  Constraint {
  }
  Strategy {
  }
  Plan {
  }
  Materialisation {
  }
  ScheduleLeg {
  }
  TrajectoryPoint {
  }
  StateCurves {
  }
  Scores {
  }
  Satisfaction {
  }
  TideDecision {
  }
  Conflict {
  }
  SelectionRationale {
  }
  ChosenBands {
  }
  ExecutionLog {
  }
  LogEntry {
  }
  Alert {
  }
  AlertCause {
  }
  Observation {
  }
  FactDelta {
  }
  Waiver {
  }
  Replan {
  }
  Delta {
  }
  SteeringDelta {
  }
  ExecutionDelta {
  }
  Requirement ||--o| Attribution : "provenance"
  Requirement ||--o{ Commitment : "commitments"
  Requirement ||--o| Lineage : "lineage"
  Commitment ||--|| Activity : "activity"
  Commitment ||--o| CommitmentProvenance : "provenance"
  Commitment ||--o| Capture : "capture"
  Capture ||--o{ Answer : "answers"
  Capture ||--o{ Ambiguity : "ambiguities"
  Activity ||--o| Waypoint : "where"
  Activity ||--o| CellPredicate : "where_predicate"
  Activity ||--o| TimingConstraint : "when"
  Activity ||--o| DurationBound : "duration"
  Activity ||--o| ActivityModifiers : "modifiers"
  Activity ||--o{ Effect : "effects"
  Activity ||..o{ Channel : "relevant_channels"
  CellPredicate ||--o{ CellPredicate : "children"
  TimingConstraint ||--o| TimeWindow : "window"
  Baseline ||--o| Medium : "medium"
  Baseline ||--o{ Cell : "cells"
  Baseline ||--o{ Channel : "channels"
  Baseline ||--o| FactLayer : "facts"
  Baseline ||--o{ Changepoint : "forecast_changepoints"
  Baseline ||--o| Lineage : "lineage"
  Changepoint ||..o| Channel : "channel"
  Medium ||--o| Grid2D : "grid"
  Channel ||--o| ChannelParams : "params"
  FactLayer ||--o{ Observation : "observations"
  Excursion ||..o| Baseline : "base"
  Excursion ||--o{ ChannelDelta : "delta"
  ChannelDelta ||--o{ CellPatch : "patches"
  Effect ||..o| Plan : "source_plan"
  Effect ||--o| ChannelDelta : "delta"
  AOPackage ||..o{ Baseline : "baseline_versions"
  AOPackage ||..o{ Excursion : "excursions"
  AOPackage ||..o{ Profile : "profiles"
  AOPackage ||..o{ Entity : "entities"
  Profile ||--o| SpeedByMedium : "speed_by_medium"
  Profile ||--o| Endurance : "endurance"
  State ||--o| Waypoint : "position"
  Entity ||--o| DataProvenance : "provenance"
  Entity ||--o{ Aspect : "aspects"
  Aspect ||..o| Channel : "channel_ref"
  Orbat ||--o{ Asset : "assets"
  Orbat ||--o| Lineage : "lineage"
  Asset ||--o| HexCell : "position"
  Asset ||--o| BlueParams : "blue"
  Asset ||--o| RedParams : "red"
  Asset ||--o| GreenParams : "green"
  BlueParams ||--o| TimeWindow : "availability_window"
  RedParams ||--o{ TimeWindow : "active_windows"
  Stamp ||..o| Requirement : "requirement_version"
  Stamp ||..o| Baseline : "baseline_version"
  Stamp ||..o{ Excursion : "excursions"
  Stamp ||..o| Profile : "profile_version"
  Stamp ||--o| StartState : "start"
  Stamp ||--o{ Appetite : "appetites"
  Stamp ||--o{ Constraint : "steering"
  Constraint ||--o{ HexCell : "cells"
  Plan ||--|| Strategy : "strategy"
  Plan ||--o| Stamp : "stamp"
  Plan ||--o| Materialisation : "materialisation"
  Plan ||--|| Scores : "scores"
  Plan ||--o| TideDecision : "tide_decision"
  Plan ||--o{ Conflict : "conflicts"
  Materialisation ||--o{ ScheduleLeg : "schedule"
  Materialisation ||--o{ TrajectoryPoint : "trajectory"
  Materialisation ||--o| StateCurves : "state_curves"
  Materialisation ||--o| TideDecision : "tide"
  ScheduleLeg ||..o| Commitment : "commitment_id"
  Scores ||--o{ Satisfaction : "satisfaction"
  Satisfaction ||..o| Commitment : "commitment_id"
  Conflict ||..o{ Commitment : "parties"
  SelectionRationale ||..o| Plan : "chosen"
  SelectionRationale ||..o{ Plan : "beaten"
  SelectionRationale ||--o{ Appetite : "appetites"
  SelectionRationale ||--o| ChosenBands : "chosen_bands"
  ExecutionLog ||--o{ LogEntry : "entries"
  Alert ||--o| AlertCause : "cause"
  Observation ||--o| FactDelta : "fact_delta"
  Waiver ||..o| Commitment : "commitment_id"
  Replan ||..o| Plan : "from"
  Replan ||..o| Plan : "to"
  Replan ||..o| SelectionRationale : "rationale_ref"
  SteeringDelta ||--o{ Constraint : "constraints"
  ExecutionDelta ||--o| HexCell : "cell"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Common 5 classes · 20 enums

Shared value objects and the enum vocabulary used across the REMIT data model. Imported by every other module.

erDiagram
  Attribution {
  }
  DataProvenance {
  }
  Lineage {
  }
  Waypoint {
  }
  HexCell {
  }

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Attribution

Who decided, under what authority, when. Stamped on every committing act — this is universal rule 2 (DEC-15, NF2).

fieldtypecarddescription
issuing_rolestring0..1the role-hat the author wore
authoritystring0..1the authority the act was taken under
bystring0..1the author
atdatetime0..1ISO timestamp of the act

DataProvenance

The source and trust of a datum or entity (DEC-19). Trivial defaults in v1.

fieldtypecarddescription
kindstring1source-class — one of: self, planned, forecast, observed, provider. The prose model separates entity kind (self/actor/feature/phenomenon) from data provenance (planned/forecast/observed); the skeleton folds them, using self/forecast/provider. A documented string rather than an enum (see the AspectType note).
confidenceConfidenceLevel0..1
freshnessstring0..1how recent — e.g. "provisioned"

Lineage

Hash-link back to the version this one supersedes (universal rule 1).

fieldtypecarddescription
previous_versionstring0..1id of the prior Requirement version
amending_order_refstring0..1reference to the amending order, if any

Waypoint

A single grid location.

fieldtypecarddescription
xinteger1
yinteger1
aliasstring0..1a human-friendly name, e.g. "OP-21,3"

HexCell

A single H3 hex location — the hex-grid successor to Waypoint (ADR-0014). Identified by its H3 index, with an optional lat/lng centre for rendering.

fieldtypecarddescription
h3string1the H3 cell index (res 9)
latfloat0..1cell-centre latitude
lngfloat0..1cell-centre longitude

Requirement 12 classes

The requirement and the promises in it: Requirement -> Commitment -> Activity (DEC-5/16/17/18).

erDiagram
  CommitmentProvenance {
  }
  Requirement {
  }
  Commitment {
  }
  Capture {
  }
  Answer {
  }
  Ambiguity {
  }
  Activity {
  }
  CellPredicate {
  }
  TimingConstraint {
  }
  TimeWindow {
  }
  DurationBound {
  }
  ActivityModifiers {
  }
  Requirement ||--o| Attribution : "provenance"
  Requirement ||--o{ Commitment : "commitments"
  Requirement ||--o| Lineage : "lineage"
  Commitment ||--|| Activity : "activity"
  Commitment ||--o| CommitmentProvenance : "provenance"
  Commitment ||--o| Capture : "capture"
  Capture ||--o{ Answer : "answers"
  Capture ||--o{ Ambiguity : "ambiguities"
  Activity ||--o| Waypoint : "where"
  Activity ||--o| CellPredicate : "where_predicate"
  Activity ||--o| TimingConstraint : "when"
  Activity ||--o| DurationBound : "duration"
  Activity ||--o| ActivityModifiers : "modifiers"
  Activity ||--o{ Effect : "effects"
  Activity ||..o{ Channel : "relevant_channels"
  CellPredicate ||--o{ CellPredicate : "children"
  TimingConstraint ||--o| TimeWindow : "window"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

CommitmentProvenance

A commitment's ownership and waiver authority (B3).

fieldtypecarddescription
issuing_rolestring0..1
authoritystring0..1
ownerstring0..1
waiver_authoritystring0..1who may waive this commitment
expirydatetime0..1
rationalestring0..1

Requirement

identified

The command's narrative intent, owned as a versioned immutable object (DEC-5/18). Amend it and you get a new version with lineage — the original stands. Content-addressed: its id is the hash of its canonical form.

fieldtypecarddescription
ididstring1content id (sha256:…) of the canonical form (DEC-35)
versioninteger0..1amendment → new version (B5)
intentstring1the command's narrative, in their words
provenanceAttribution0..1issuing role/authority + time
commitmentsCommitment1..*the promises it decomposes into
lineageLineage0..1

Commitment

identified

One thing the plan must achieve (DEC-16/17/22). Either hard (must hold) or soft with a priority. Carries the negotiated contract text and any unresolved ambiguities, and walks a lifecycle of states.

fieldtypecarddescription
ididstring1e.g. "cmt-1"
activityActivity1
criticalityCriticality1
provenanceCommitmentProvenance0..1
captureCapture0..1the negotiated contract record (DEC-17)
stateCommitmentState0..1

Capture

The negotiation record behind a commitment — answers, the canonical contract text, open ambiguities (DEC-17).

fieldtypecarddescription
answersAnswer0..*
echo_backstring0..1the canonical contract text read back to the operator
ambiguitiesAmbiguity0..*resolvable-later

Answer

fieldtypecarddescription
slotstring0..1which question slot
valuestring0..1
statusAnswerStatus0..1
bystring0..1
atdatetime0..1

Ambiguity

fieldtypecarddescription
questionstring0..1
statusAmbiguityStatus0..1
consequencestring0..1what hinges on resolving it

Activity

The verb of a commitment — visit, loiter, avoid, transit, maintain (DEC-16/21). `where` is a Waypoint or a boolean predicate over map cells (DEC-33); `when` is a window, before/after, or recurring. Always inlined in its Commitment (no independent identity).

fieldtypecarddescription
typeActivityType1
whereWaypoint0..1the location — a map cell (skeleton uses {x, y, alias})
where_predicateCellPredicate0..1alternative to `where` — a boolean predicate tree over cells (DEC-33)
whenTimingConstraint0..1
durationDurationBound0..1
modifiersActivityModifiers0..1
effectsEffect0..*"v1: self-state delta / persistent marker (always empty in the skeleton)"
outcome_modelstring0..1"v1: boolean | duration; pluggable (probabilistic = H3)"
relevant_channelsChannel0..*channel ids to sample / trigger on (DEC-21)

CellPredicate

A boolean tree over map cells (DEC-33): an atom, or and/or/not of sub-predicates. Atoms are a pluggable registry (land-cover, elevation, slope, static-LOS, near(feature, dist)). Conceptual — the skeleton uses Waypoints only.

fieldtypecarddescription
opstring0..1"atom | and | or | not"
atomstring0..1the atom name when op = atom (e.g. land-cover, slope)
paramsstring0..1atom parameters
childrenCellPredicate0..*sub-predicates for and/or/not

TimingConstraint

When an activity must happen — exactly one form is used (DEC-16).

fieldtypecarddescription
windowTimeWindow0..1an absolute or anchored interval
before_mininteger0..1deadline, in mission minutes
after_mininteger0..1earliest start, in mission minutes
recurringstring0..1"recurring(period, anchor) — conceptual"

TimeWindow

fieldtypecarddescription
start_mininteger0..1
end_mininteger0..1

DurationBound

fieldtypecarddescription
min_mininteger0..1minimum dwell, in minutes
max_mininteger0..1

ActivityModifiers

fieldtypecarddescription
stationaryboolean0..1
be_at_rolestring0..1"entry | exit | visit"
afterstring0..1sequencing — id of a commitment this must follow (e.g. "cmt-1")

World 14 classes

The world the plan moves through: baseline, channels, movement, excursions, effects (DEC-7/19/20/21).

erDiagram
  Baseline {
  }
  Changepoint {
  }
  Medium {
  }
  Grid2D {
  }
  Cell {
  }
  Channel {
  }
  ChannelParams {
  }
  FactLayer {
  }
  MovementModel {
  }
  Excursion {
  }
  ChannelDelta {
  }
  CellPatch {
  }
  Effect {
  }
  AOPackage {
  }
  Baseline ||--o| Medium : "medium"
  Baseline ||--o{ Cell : "cells"
  Baseline ||--o{ Channel : "channels"
  Baseline ||--o| FactLayer : "facts"
  Baseline ||--o{ Changepoint : "forecast_changepoints"
  Baseline ||--o| Lineage : "lineage"
  Changepoint ||..o| Channel : "channel"
  Medium ||--o| Grid2D : "grid"
  Channel ||--o| ChannelParams : "params"
  FactLayer ||--o{ Observation : "observations"
  Excursion ||..o| Baseline : "base"
  Excursion ||--o{ ChannelDelta : "delta"
  ChannelDelta ||--o{ CellPatch : "patches"
  Effect ||..o| Plan : "source_plan"
  Effect ||--o| ChannelDelta : "delta"
  AOPackage ||..o{ Baseline : "baseline_versions"
  AOPackage ||..o{ Excursion : "excursions"
  AOPackage ||..o{ Profile : "profiles"
  AOPackage ||..o{ Entity : "entities"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Baseline

identified

The world as known truth (DEC-7/20/28): a medium (land/sea/air grid) carrying channels and per-cell attributes, plus a single fact layer that observations append to. Immutable and versioned; the kernel always evaluates baseline ⊕ excursion ⊕ plan-effects-to-date (DEC-19).

fieldtypecarddescription
ididstring1content id of the canonical form (DEC-35)
namestring0..1
versioninteger0..1
mediumMedium0..1
cellsCell0..*the grid cells (skeleton, row-major)
channelsChannel0..*
factsFactLayer0..1the one truth; observations append here
forecast_changepointsChangepoint0..*when the world is expected to shift
lineageLineage0..1

Changepoint

A forecast time at which a channel is expected to shift (e.g. a tidal ford opening) (DEC-21).

fieldtypecarddescription
at_mininteger0..1mission minutes
channelChannel0..1the channel that shifts
changestring0..1what changes, in words

Medium

The domain, grid and cell-attribute schema of a baseline (DEC-20/28).

fieldtypecarddescription
domainDomain1
gridGrid2D0..1
cell_attrsstring0..*the names of the per-cell attributes carried (e.g. mobility, cover)

Grid2D

fieldtypecarddescription
winteger1
hinteger1
cell_minteger0..1cell edge length, in metres

Cell

One grid cell's attributes (skeleton mobility raster).

fieldtypecarddescription
terrainTerrain0..1
mobilityfloat0..10–1 speed factor (0 = impassable)
coverfloat0..10–1 concealment

Channel

identified

A field over space and time — tide, cloud, risk, mobility (DEC-19/21). Its values are conceptually `f(cell, t)`, however realised; that function is resolved across the seam (DEC-49) and is *not* a data slot here. For parametric/periodic channels the realising parameters (`params`) *are* data and are modelled.

fieldtypecarddescription
ididstring1e.g. "tide", "mobility"
domain_typestring0..1what the field measures, e.g. "water_level", "speed_factor"
realisationRealisation0..1
confidenceConfidenceLevel0..1
freshnessstring0..1
sampling_step_mininteger0..1sampling cadence (tide coarse, cloud fine) (DEC-21)
predictabilityPredictability0..1
paramsChannelParams0..1realising parameters for parametric channels

ChannelParams

Parameters of a parametric/periodic channel — e.g. the skeleton's tidal ford (ADR-0006).

fieldtypecarddescription
period_mininteger0..1
low_tide_mininteger0..1first low tide, in mission minutes
open_half_width_mininteger0..1±minutes around low tide the ford is wadeable
applies_tostring0..1the cell/feature the params apply to (e.g. the ford alias)

FactLayer

The single truth layer; observations append here (E5). Collapses excursions and forecast entities over time.

fieldtypecarddescription
observationsObservation0..*

MovementModel

Per-domain cost of travel, and anisotropic — a property of the edge between cells, not the cell (DEC-49/34): slope-along-direction on land, current/wind vectors at sea and in air. Its cost function `cost_speed = f(cell→cell, t, profile)` is behaviour, resolved across the seam — only `domain` and `realisation` are data here. Not yet implemented in the v1 skeleton.

fieldtypecarddescription
domainDomain0..1
realisationRealisation0..1"parametric(type, params) | provider"

Excursion

identified

A named, versioned set of deltas layered on a baseline — "what if the weather turns?" — without disturbing the underlying truth (DEC-7). Not yet implemented in the v1 skeleton.

fieldtypecarddescription
ididstring1
namestring0..1
versioninteger0..1
baseBaseline0..1the baseline version it sits on
deltaChannelDelta0..*

ChannelDelta

How the world is edited (DEC-34): a parametric delta (time-shift, scale, mask) from a pluggable registry, or a raw cell patch (the escape hatch). Not yet implemented in the v1 skeleton.

fieldtypecarddescription
kindstring0..1"parametric | cell_patch"
typestring0..1the parametric delta type (registry) — when kind = parametric
paramsstring0..1parameters for the parametric delta
patchesCellPatch0..*raw (cell, t, value) patches — when kind = cell_patch

CellPatch

fieldtypecarddescription
xinteger0..1
yinteger0..1
tinteger0..1mission minutes
valuestring0..1the patched value

Effect

A delta a plan's activity applies from a point in time (DEC-19/34) — a ChannelDelta or a self-state delta. Referenced from Activity.effects; always empty in the v1 skeleton.

fieldtypecarddescription
source_planPlan0..1
source_activitystring0..1the activity that applies the effect
active_frominteger0..1mission minutes
deltaChannelDelta0..1

AOPackage

Everything provisioned for an Area of Operations, packaged ready to plan against (DEC-11/12/52). Not yet assembled as one object in the v1 skeleton.

fieldtypecarddescription
baseline_versionsBaseline0..*
excursionsExcursion0..*
profilesProfile0..*
entitiesEntity0..*located things to display

Own force 4 classes

Own force: the platform fixed capabilities (Profile) and live condition (State) (DEC-19/20/52).

erDiagram
  Profile {
  }
  SpeedByMedium {
  }
  Endurance {
  }
  State {
  }
  Profile ||--o| SpeedByMedium : "speed_by_medium"
  Profile ||--o| Endurance : "endurance"
  State ||--o| Waypoint : "position"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Profile

identified

What a platform can do — the fixed capabilities a sensitivity sweep varies (DEC-19/20, F5). Immutable and versioned, content-addressed.

fieldtypecarddescription
ididstring1content id of the canonical form (DEC-35)
namestring0..1
versioninteger0..1
domainDomain0..1
speed_by_mediumSpeedByMedium0..1how fast, where
enduranceEndurance0..1
sensorsstring0..*what it can perceive
dynamicsstring0..1how it manoeuvres (e.g. "wheeled")

SpeedByMedium

Speed per medium (skeleton: land only).

fieldtypecarddescription
land_kphfloat0..1
sea_kphfloat0..1
air_kphfloat0..1

Endurance

fieldtypecarddescription
fuel_pctfloat0..1starting fuel, 0–100
hoursfloat0..1how long it can keep going

State

The platform right now — the live condition the kernel re-anchors to during execution (DEC-19). It is the privileged self-entity (DEC-52): its fields are the dynamic aspects of the `self` Entity (position → map/distance; endurance/availability → state curves).

fieldtypecarddescription
positionWaypoint0..1which cell
clock_mininteger0..1the current mission time, in minutes
endurance_fuel_pctfloat0..1how much fuel is left, 0–100
availabilitystring0..1"available | down"

Entities 2 classes

Located things with identity, projected across views: Entity and its time-varying Aspects (DEC-52/53).

erDiagram
  Entity {
  }
  Aspect {
  }
  Entity ||--o| DataProvenance : "provenance"
  Entity ||--o{ Aspect : "aspects"
  Aspect ||..o| Channel : "channel_ref"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Entity

identified

Anything located with an identity — yourself, an actor, a feature, a phenomenon (DEC-52). Where a Channel is a field, an Entity is a thing, projected across synchronised views. To affect the plan it is *cast* to a Channel or Commitment (actor → moving risk channel; window → timing commitment); in v1 entities are display-only. Skeleton note: aspects are keyed by name in an object (phase/fuel/height/pass); modelled here as a list of named Aspects.

fieldtypecarddescription
ididstring1e.g. "ent-self", "ent-tide", "ent-sat"
labelstring0..1
kindstring0..1conceptual kind (DEC-52) — one of: self, actor, feature, phenomenon. Optional; the skeleton folds this into provenance.kind. A documented string rather than an enum (see the AspectType note).
provenanceDataProvenance0..1
allegianceAllegiance0..1side typing (DEC-60); absent ⇒ unaligned / own-context as today
aspectsAspect0..*

Aspect

identified

One facet of an entity, over time (DEC-52/53) — its position, an altitude, a timing window, an up/down status — rendered onto a shared axis by a view. Its value `f(t)` is behaviour, evaluated across the seam, and is not a data slot; the render-type, unit and bounds *are* data.

fieldtypecarddescription
nameidstring1e.g. "phase", "fuel", "height", "pass"
typeAspectType1
unitstring0..1unit for scalar aspects (e.g. "%")
domainfloat0..*"[min, max] bounds for scalar aspects"
channel_refChannel0..1the source channel, if any

Plan 14 classes

Plan identity and plans: Stamp, Plan and its materialisation, scores and conflicts (DEC-23/29).

erDiagram
  Stamp {
  }
  StartState {
  }
  Appetite {
  }
  Constraint {
  }
  Strategy {
  }
  Plan {
  }
  Materialisation {
  }
  ScheduleLeg {
  }
  TrajectoryPoint {
  }
  StateCurves {
  }
  Scores {
  }
  Satisfaction {
  }
  TideDecision {
  }
  Conflict {
  }
  Stamp ||..o| Requirement : "requirement_version"
  Stamp ||..o| Baseline : "baseline_version"
  Stamp ||..o{ Excursion : "excursions"
  Stamp ||..o| Profile : "profile_version"
  Stamp ||--o| StartState : "start"
  Stamp ||--o{ Appetite : "appetites"
  Stamp ||--o{ Constraint : "steering"
  Constraint ||--o{ HexCell : "cells"
  Plan ||--|| Strategy : "strategy"
  Plan ||--o| Stamp : "stamp"
  Plan ||--o| Materialisation : "materialisation"
  Plan ||--|| Scores : "scores"
  Plan ||--o| TideDecision : "tide_decision"
  Plan ||--o{ Conflict : "conflicts"
  Materialisation ||--o{ ScheduleLeg : "schedule"
  Materialisation ||--o{ TrajectoryPoint : "trajectory"
  Materialisation ||--o| StateCurves : "state_curves"
  Materialisation ||--o| TideDecision : "tide"
  ScheduleLeg ||..o| Commitment : "commitment_id"
  Scores ||--o{ Satisfaction : "satisfaction"
  Satisfaction ||..o| Commitment : "commitment_id"
  Conflict ||..o{ Commitment : "parties"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

Stamp

Every input that determines a plan, bundled into one identity (DEC-23/24/29): which requirement, which world, which config core, what appetites and steering, which kernel and seed. A plan's id IS the hash of its Stamp, so two plans are comparable only when their stamps share a basis (the comparability guard). Skeleton additions (DEC-47): `profile_version` and `start` are part of identity because the plan depends on the platform and the starting state.

fieldtypecarddescription
requirement_versionRequirement0..1id of the requirement version
baseline_versionBaseline0..1id of the baseline version
excursionsExcursion0..*ids of the excursion versions (empty in v1)
config_core_hashstring0..1hash of the world-defining config core — medium/channels/movement-model/providers/vocabulary; the instance shell is excluded (DEC-48)
profile_versionProfile0..1id of the profile version (skeleton addition, DEC-47)
startStartState0..1the starting state (skeleton addition, DEC-47)
appetitesAppetite0..*the implementer's risk dials (DEC-6), as an axis→setting map
steeringConstraint0..*interpreted operator gestures / no-go constraints (DEC-24)
kernel_versionstring0..1e.g. "mock-0.1" — part of identity (DEC-29)
strategy_seedinteger0..1RNG seed for strategy ordering — part of identity (DEC-29)

StartState

The starting position (H3 hex) and clock baked into a Stamp (skeleton, DEC-47; hex per ADR-0016).

fieldtypecarddescription
h3string1the H3 cell index (res 9) of the start cell
latfloat0..1cell-centre latitude (optional, for rendering)
lngfloat0..1cell-centre longitude (optional, for rendering)
clock_mininteger0..1mission clock at start (minutes)

Appetite

identified

One risk-appetite dial setting (DEC-6) — e.g. tempo = rapid, exposure = cautious. Keyed by axis, so a Stamp's appetites serialise as an axis→setting map.

fieldtypecarddescription
axisidstring1"e.g. tempo, exposure"
settingstring0..1"e.g. deliberate/balanced/rapid, bold/balanced/cautious"

Constraint

One interpreted operator steering gesture (DEC-24) — e.g. a no-go region.

fieldtypecarddescription
typestring0..1"e.g. no-go"
cellsHexCell0..*

Strategy

One candidate strategy in the plan handful (skeleton).

fieldtypecarddescription
keyStrategyKey1
labelstring0..1
axisstring0..1the axis it optimises, e.g. "time/speed"
blurbstring0..1a one-line description

Plan

identified

A candidate solution whose id IS the hash of its Stamp (DEC-5/22/29). Its materialisation (schedule, trajectory, state curves) is cached and regenerable; its scores and first-class conflicts make it comparable. The skeleton also carries the chosen `strategy` and the `tide_decision` weighing.

fieldtypecarddescription
ididstring1"= hash(Stamp, strategy)"
strategyStrategy1
stampStamp0..1authoritative — the plan's identity basis
materialisationMaterialisation0..1cached, regenerable; null when infeasible
scoresScores1
tide_decisionTideDecision0..1the exfil wait-vs-detour weighing (ADR-0006); null when no ford
conflictsConflict0..*first-class, named clashes (C1)

Materialisation

The cached, regenerable working-out of a plan; absent when the plan is infeasible.

fieldtypecarddescription
scheduleScheduleLeg1..*
trajectoryTrajectoryPoint1..*
state_curvesStateCurves0..1
tideTideDecision0..1the tide decision at plan time
verifiedboolean0..1
kernel_version_verifiedstring0..1the kernel version that verified the materialisation

ScheduleLeg

One leg of a plan's schedule. Exfil legs may carry a tide hold (ADR-0006).

fieldtypecarddescription
kindScheduleLegKind1
labelstring0..1
start_minfloat0..1
end_minfloat0..1
commitment_idCommitment0..1the commitment this leg serves (visit/exfil legs)

TrajectoryPoint

One sampled point on the platform's path (H3 hex per ADR-0016); time/fuel rounded to 1 dp for IEEE stability.

fieldtypecarddescription
h3string1the H3 cell index (res 9)
latfloat1cell-centre latitude
lngfloat1cell-centre longitude
tfloat1mission minutes
fuel_pctfloat1

StateCurves

The end-state of the platform's curves over the plan (v1 carries fuel only).

fieldtypecarddescription
fuel_end_pctfloat0..1

Scores

A plan's comparable scores, read under the comparability guard (A2/C2/C6, NF10).

fieldtypecarddescription
satisfactionSatisfaction1..*
cost_bandBand0..1
robustness_bandBand0..1

Satisfaction

One commitment's verdict and slack within a plan.

fieldtypecarddescription
commitment_idCommitment0..1
labelstring0..1
margin_minfloat0..1slack in minutes; may be negative
margin_bandMarginBand0..1
verdictVerdict0..1

TideDecision

The result of the tidal-ford wait-vs-detour weighing (ADR-0006): the kernel materialises the exfil both ways — wait at the bank vs a ford-free detour — and commits to the earlier RV arrival, publishing the choice here.

fieldtypecarddescription
modeTideMode1
wait_minfloat0..1minutes held at the bank before crossing
ford_rvfloat0..1mission minutes the ford route reaches the RV
detour_rvfloat0..1mission minutes the detour route reaches the RV; null when no detour exists
rv_minfloat0..1mission minutes the chosen route reaches the RV (the committed arrival)
narrativestring0..1the choice, in words

Conflict

identified

A first-class, named clash when commitments cannot all be kept (C1) — not a silent failure.

fieldtypecarddescription
ididstring1
kindConflictKind1
partiesCommitment0..*the commitments in tension
narrativestring0..1what the clash is, in words

Records 13 classes

The decision and execution record: SelectionRationale and the append-only ExecutionLog (DEC-23/25/26).

erDiagram
  SelectionRationale {
  }
  ChosenBands {
  }
  ExecutionLog {
  }
  LogEntry {
  }
  Alert {
  }
  AlertCause {
  }
  Observation {
  }
  FactDelta {
  }
  Waiver {
  }
  Replan {
  }
  Delta {
  }
  SteeringDelta {
  }
  ExecutionDelta {
  }
  SelectionRationale ||..o| Plan : "chosen"
  SelectionRationale ||..o{ Plan : "beaten"
  SelectionRationale ||--o{ Appetite : "appetites"
  SelectionRationale ||--o| ChosenBands : "chosen_bands"
  ExecutionLog ||--o{ LogEntry : "entries"
  Alert ||--o| AlertCause : "cause"
  Observation ||--o| FactDelta : "fact_delta"
  Waiver ||..o| Commitment : "commitment_id"
  Replan ||..o| Plan : "from"
  Replan ||..o| Plan : "to"
  Replan ||..o| SelectionRationale : "rationale_ref"
  SteeringDelta ||--o{ Constraint : "constraints"
  ExecutionDelta ||--o| HexCell : "cell"

contains (inlined)  ·  references (by id)  ·  o{ many  || one  o| optional. Boxes outside the module are classes defined elsewhere.

SelectionRationale

identified

The record of a choice (DEC-23): which plan won, which it beat, on which axis, with the after-mitigation bands, and who decided. Content-addressed.

fieldtypecarddescription
ididstring1content id of the canonical form (DEC-35)
chosenPlan0..1the winning plan
beatenPlan0..*the field it beat
deciding_axisstring0..1"what tipped it — e.g. time/speed, exposure, robustness, completeness"
notestring0..1the justification narrative
appetitesAppetite0..*the risk-appetite selections at the time
mitigationsstring0..*"e.g. armed-escort"
chosen_bandsChosenBands0..1cost/robustness bands after mitigations
bystring0..1
rolestring0..1"e.g. implementer"
atdatetime0..1

ChosenBands

fieldtypecarddescription
costBand0..1
robBand0..1

ExecutionLog

The append-only live history of a mission (DEC-23/25/26): alerts when a band is crossed, observations that update truth, waivers, and replans — never overwritten. Together with rationales and stamps it gives a complete after-action record with perfect replay (F1).

fieldtypecarddescription
entriesLogEntry0..*

LogEntry

abstract

Base of the append-only execution log; the store stamps each with a `seq`.

fieldtypecarddescription
kindLogEntryKind1
seqinteger0..10-indexed sequence, stamped on append
atinteger0..1mission minutes

Alert

is a LogEntry

A band crossing or hard-infeasibility raised during execution (E3).

fieldtypecarddescription
causeAlertCause0..1
kindinheritedLogEntryKind1
seqinheritedinteger0..10-indexed sequence, stamped on append
atinheritedinteger0..1mission minutes

AlertCause

fieldtypecarddescription
typeAlertCauseType1
commitmentstring0..1the phased commitment being tracked (e.g. "observe", "exfil")
fromstring0..1the prior band state
tostring0..1the new band state

Observation

is a LogEntry

A fact delta appended to the baseline's fact layer (E5).

fieldtypecarddescription
fact_deltaFactDelta0..1
sourcestring0..1"e.g. operator"
confidencestring0..1"e.g. reported"
kindinheritedLogEntryKind1
seqinheritedinteger0..10-indexed sequence, stamped on append
atinheritedinteger0..1mission minutes

FactDelta

fieldtypecarddescription
notestring0..1
tagstring0..1"e.g. track-state, sighting, weather"

Waiver

is a LogEntry

A relaxed commitment, attributed (B3). Not yet logged in the v1 skeleton.

fieldtypecarddescription
commitment_idCommitment0..1
bystring0..1
authoritystring0..1
rationalestring0..1
kindinheritedLogEntryKind1
seqinheritedinteger0..10-indexed sequence, stamped on append
atinheritedinteger0..1mission minutes

Replan

is a LogEntry

A move from one committed plan to another, with rationale (DEC-36). Not yet logged in the v1 skeleton.

fieldtypecarddescription
fromPlan0..1
toPlan0..1
rationale_refSelectionRationale0..1
kindinheritedLogEntryKind1
seqinheritedinteger0..10-indexed sequence, stamped on append
atinheritedinteger0..1mission minutes

Delta

abstract

A stamped cross-role write to the shared store (DEC-61): a role's contribution is an attributed delta — the same write path that serialises over `/sync` later (DEC-25), so going multi-node is transport, not re-architecture. Base of the concrete delta kinds; v1 emits SteeringDelta. Write-scope *enforcement* is designed-for — the delta is attributed (NF2) but not yet scope-checked.

fieldtypecarddescription
scopestring0..1"the write-scope this delta falls under — e.g. steering"
bystring0..1the contributing author
rolestring0..1"the contributing role-hat — e.g. duty-officer-plans"
atdatetime0..1when it was contributed (DEC-15, NF2)

SteeringDelta

is a Delta

The first DEC-61 write built in v1: an operator's *applied intel* — denied (no-go) cells — shared to the store as steering constraints, where every surface (e.g. the Data Analysis monitor, including a popped-out one) sees it land. Risk appetites, by contrast, stay local (a ranking lens). Identity is content (DEC-35): the store keys it by the hash of its canonical form.

fieldtypecarddescription
constraintsConstraint0..*the interpreted steering gestures shared (DEC-24) — e.g. no-go regions
scopeinheritedstring0..1"the write-scope this delta falls under — e.g. steering"
byinheritedstring0..1the contributing author
roleinheritedstring0..1"the contributing role-hat — e.g. duty-officer-plans"
atinheriteddatetime0..1when it was contributed (DEC-15, NF2)

ExecutionDelta

is a Delta

An in-flight operator perturbation during Execute (issue #7): an obstruction (a +N min hold at the vehicle's current cell) or a blocked cell forcing a re-route. Previously these survived only as a prose Observation note; capturing them as a typed, content-addressed store object preserves their structured inputs for inspection (the Data Analysis monitor) and replay (NF3), and re-uses the DEC-61 attributed-delta write path. Identity is content (DEC-35).

fieldtypecarddescription
eventExecutionEventKind1which perturbation — obstruction or block
at_mininteger0..1mission minutes when applied (sim-time ≡ plan-time, ADR-0007)
cellHexCell0..1where the perturbation bites — the vehicle's cell for an obstruction, the blocked cell for a block
delay_minfloat0..1the hold added by an obstruction (absent for a block)
rv_minfloat0..1the re-planned RV / mission-end after the perturbation
absorbed_minfloat0..1minutes the downstream holds absorbed, so the RV slipped less than delay_min (ADR-0007)
scopeinheritedstring0..1"the write-scope this delta falls under — e.g. steering"
byinheritedstring0..1the contributing author
roleinheritedstring0..1"the contributing role-hat — e.g. duty-officer-plans"
atinheriteddatetime0..1when it was contributed (DEC-15, NF2)

Enums 25 value sets

The closed value vocabularies (in common) used by the fields above.

Criticality

enum

Whether a commitment must hold or is best-effort (DEC-22).

  • hard — must hold
  • soft — best-effort; carries a priority, with authority from provenance

ActivityType

enum

The verb of an activity (DEC-16); v1 set, pluggable registry (NF7).

  • visit
  • loiter
  • avoid
  • transit
  • maintain

CommitmentState

enum

The lifecycle state of a commitment (B4). `at-risk` is live-only (E2) and not stored.

  • proposed
  • negotiated
  • committed
  • satisfied
  • violated
  • waived
  • superseded

AnswerStatus

enum

  • confirmed — answered by the operator
  • defaulted — filled from a stamped default

AmbiguityStatus

enum

  • open
  • resolved

Domain

enum

The medium a baseline / profile / movement model operates in (DEC-20).

  • land
  • sea
  • air

Terrain

enum

Per-cell land-cover class used by the skeleton's mobility raster.

  • road
  • track
  • open
  • rough
  • forest
  • marsh
  • ford
  • water

Realisation

enum

How a channel or movement model is realised (DEC-49). `provider` = a computed service behind the seam.

  • raster
  • analytic
  • parametric
  • provider

Predictability

enum

How predictable a channel is over time (DEC-21) — drives sampling.

  • static
  • periodic
  • dynamic

ConfidenceLevel

enum

  • high
  • medium
  • low

Allegiance

enum

Side typing on an entity (DEC-60). Selects the kernel STANCE — plan-for (blue) / avoid-assess (red) / respect (green). v1 is display-only (NF9 honest floor).

  • blue — own force
  • red — hostile / adversary (threat source; passive in v1)
  • green — neutral / host-nation / civilian (ROE & collateral; inert in v1)

PlatformKind

enum

The platform/type class of an ORBAT asset (DEC-60). Orthogonal to allegiance; drives the map symbol. Display-only in v1 (NF9). v1 set, pluggable like ActivityType (NF7).

  • infantry — dismounted personnel
  • vehicle — ground vehicle
  • aircraft — fixed / rotary wing
  • vessel — surface / sub-surface craft
  • sensor — sensor / radar / observation post
  • emplacement — fixed weapon / SAM / fortified position
  • structure — building / installation / facility

GreenCategory

enum

The category of a neutral / green protected place (DEC-60 J3); display-only in v1.

  • hospital — medical facility
  • school — educational facility
  • utility — power / water / comms infrastructure
  • place_of_worship — religious site
  • residential — populated residential area
  • other — uncategorised protected place

AspectType

enum

The render-class of one time-varying facet of an entity (DEC-52/53).

  • cell — a position → map glyph / distance-along-track
  • scalar — a numeric value → a line (altitude, fuel, distance)
  • window — a time interval → a band
  • status — an up/down or phase value → ticks

StrategyKey

enum

The skeleton's three candidate strategies (the "handful" of plans).

  • direct — fastest by time/speed
  • tracked — keeps to tracked/road surfaces
  • covered — favours exposure-reducing cover

Band

enum

A coarse three-level qualitative band for cost / robustness (C2/C6, NF10).

  • robust
  • marginal
  • fragile

MarginBand

enum

The slack band on a single commitment's satisfaction (A2, NF10). `crossed` = violated.

  • robust
  • marginal
  • tight
  • crossed

Verdict

enum

A commitment's verdict in a plan's scores.

  • satisfied
  • violated
  • waived

ScheduleLegKind

enum

The kind of one leg in a plan's schedule.

  • transit
  • hold — a wait — e.g. "await low-tide window" at a tidal ford
  • visit
  • exfil

TideMode

enum

The outcome of the tidal-ford wait-vs-detour weighing (ADR-0006).

  • no-ford — no tidal ford on the route
  • open — ford open at the bank — cross now
  • wait — hold at the bank for the low-tide window, then cross
  • detour — ford-free detour reaches the RV sooner

ConflictKind

enum

Whether a clash is built into the request or emerges from the schedule (C1).

  • structural — e.g. no route exists
  • emergent — e.g. the schedule is infeasible

AlertCauseType

enum

Why the wingman raised an execution alert (E3).

  • hard_infeasible
  • band_crossing
  • tide_reassessment — a re-plan changed the tide decision's mode (ADR-0007)

LogEntryKind

enum

  • Alert
  • Observation
  • Waiver
  • Replan

ExecutionEventKind

enum

The kind of in-flight operator perturbation applied during Execute (issue

  • obstruction — a +N min hold spliced at the vehicle's current cell, re-timed through the tide-aware chooser (ADR-0006/0007)
  • block — a cell ahead declared impassable, forcing an in-flight re-route around it

Protection

enum

The nature of a green asset's protection rule (tagged for the future DEC-60 J3 hard/soft split).

  • keep_out — no-go / no-strike area (future HARD constraint)
  • minimise_effect — collateral to be minimised (future SOFT objective)