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.
| field | type | card | description |
|---|
| requirement_version | Requirement | 0..1 | id of the requirement version |
| baseline_version | Baseline | 0..1 | id of the baseline version |
| excursions | Excursion | 0..* | ids of the excursion versions (empty in v1) |
| config_core_hash | string | 0..1 | hash of the world-defining config core — medium/channels/movement-model/providers/vocabulary; the instance shell is excluded (DEC-48) |
| profile_version | Profile | 0..1 | id of the profile version (skeleton addition, DEC-47) |
| start | StartState | 0..1 | the starting state (skeleton addition, DEC-47) |
| appetites | Appetite | 0..* | the implementer's risk dials (DEC-6) |
| steering | Constraint | 0..* | interpreted operator gestures / no-go constraints (DEC-24) |
| kernel_version | string | 0..1 | e.g. "mock-0.1" — part of identity (DEC-29) |
| strategy_seed | integer | 0..1 | RNG seed for strategy ordering — part of identity (DEC-29) |
StartState
The starting position and clock baked into a Stamp (skeleton, DEC-47).
| field | type | card | description |
|---|
| x | integer | 0..1 | |
| y | integer | 0..1 | |
| clock_min | integer | 0..1 | |
Appetite
One risk-appetite dial setting (DEC-6) — e.g. tempo = rapid, exposure = cautious.
| field | type | card | description |
|---|
| axis | string | 0..1 | "e.g. tempo, exposure" |
| setting | string | 0..1 | "e.g. deliberate/balanced/rapid, bold/balanced/cautious" |
Constraint
One interpreted operator steering gesture (DEC-24) — e.g. a no-go region.
| field | type | card | description |
|---|
| type | string | 0..1 | "e.g. no-go" |
| cells | Waypoint | 0..* | |
Strategy
One candidate strategy in the plan handful (skeleton).
| field | type | card | description |
|---|
| key | StrategyKey | 1 | |
| label | string | 0..1 | |
| axis | string | 0..1 | the axis it optimises, e.g. "time/speed" |
| blurb | string | 0..1 | a one-line description |
Plan
identifiedA 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.
| field | type | card | description |
|---|
| idid | string | 1 | "= hash(Stamp, strategy)" |
| strategy | Strategy | 0..1 | |
| stamp | Stamp | 0..1 | authoritative — the plan's identity basis |
| materialisation | Materialisation | 0..1 | cached, regenerable; null when infeasible |
| scores | Scores | 0..1 | |
| tide_decision | TideDecision | 0..1 | the exfil wait-vs-detour weighing (ADR-0006); null when no ford |
| conflicts | Conflict | 0..* | first-class, named clashes (C1) |
Materialisation
The cached, regenerable working-out of a plan; absent when the plan is infeasible.
| field | type | card | description |
|---|
| schedule | ScheduleLeg | 0..* | |
| trajectory | TrajectoryPoint | 0..* | |
| state_curves | StateCurves | 0..1 | |
| tide | TideDecision | 0..1 | the tide decision at plan time |
| verified | boolean | 0..1 | |
| kernel_version_verified | string | 0..1 | the kernel version that verified the materialisation |
ScheduleLeg
One leg of a plan's schedule. Exfil legs may carry a tide hold (ADR-0006).
| field | type | card | description |
|---|
| kind | ScheduleLegKind | 1 | |
| label | string | 0..1 | |
| start_min | float | 0..1 | |
| end_min | float | 0..1 | |
| commitment_id | Commitment | 0..1 | the commitment this leg serves (visit/exfil legs) |
TrajectoryPoint
One sampled point on the platform's path; coordinates may be fractional, time/fuel rounded to 1 dp for IEEE stability.
| field | type | card | description |
|---|
| x | float | 0..1 | |
| y | float | 0..1 | |
| t | float | 0..1 | mission minutes |
| fuel_pct | float | 0..1 | |
StateCurves
The end-state of the platform's curves over the plan (v1 carries fuel only).
| field | type | card | description |
|---|
| fuel_end_pct | float | 0..1 | |
Scores
A plan's comparable scores, read under the comparability guard (A2/C2/C6, NF10).
Satisfaction
One commitment's verdict and slack within a plan.
| field | type | card | description |
|---|
| commitment_id | Commitment | 0..1 | |
| label | string | 0..1 | |
| margin_min | float | 0..1 | slack in minutes; may be negative |
| margin_band | MarginBand | 0..1 | |
| verdict | Verdict | 0..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.
| field | type | card | description |
|---|
| mode | TideMode | 1 | |
| wait_min | float | 0..1 | minutes held at the bank before crossing |
| ford_rv | float | 0..1 | mission minutes the ford route reaches the RV |
| detour_rv | float | 0..1 | mission minutes the detour route reaches the RV; null when no detour exists |
| narrative | string | 0..1 | the choice, in words |
Conflict
identifiedA first-class, named clash when commitments cannot all be kept (C1) — not a silent failure.
| field | type | card | description |
|---|
| idid | string | 1 | |
| kind | ConflictKind | 1 | |
| parties | Commitment | 0..* | the commitments in tension |
| narrative | string | 0..1 | what the clash is, in words |