Data dictionary
Generated from schema/tma.yaml at build time by gen-markdown-datadict. Do not edit; change the schema.
Units
| Class | Slot | Unit (UCUM) |
|---|---|---|
| CurvePoint | t_since_zig_s | s |
| MetricsRecord | position_window_m_median | m |
| MetricsRecord | position_window_m_p90 | m |
| NaiveMeans | speed_mps | m/s |
| NormalisationConstants | bearing_rate_scale_rad_s | rad/s |
| Observation | bearing_rad | rad |
| Observation | timestamp_s | s |
| ParameterRanges | zig2_delay_s | s |
| PlatformState | course_rad | rad |
| PlatformState | speed_mps | m/s |
| PlatformState | timestamp_s | s |
| PlatformState | x_m | m |
| PlatformState | y_m | m |
| PredictionRow | course_rad | rad |
| PredictionRow | range_m | m |
| PredictionRow | speed_mps | m/s |
| PredictionRow | timestamp_s | s |
| PredictionRow | x_m | m |
| PredictionRow | y_m | m |
| ScenarioMetadata | mean_range_m | m |
| ScenarioMetadata | min_range_m | m |
| ScenarioMetadata | zig_time_s | s |
| ScenarioParameters | dt_s | s |
| ScenarioParameters | noise_sigma_rad | rad |
| ScenarioParameters | ownship_course0_rad | rad |
| ScenarioParameters | ownship_speed_mps | m/s |
| ScenarioParameters | ownship_turn_rate_rad_s | rad/s |
| ScenarioParameters | target_bearing0_rad | rad |
| ScenarioParameters | target_course_rad | rad |
| ScenarioParameters | target_range0_m | m |
| ScenarioParameters | target_speed_mps | m/s |
| ScenarioParameters | window_s | s |
| ScenarioParameters | zig2_angle_rad | rad |
| ScenarioParameters | zig2_delay_s | s |
| ScenarioParameters | zig_angle_rad | rad |
metamodel version: 1.12.0
version: 0.9.1
Single source of truth for every data type in the TMA via ML proof of concept (constitution principle I). Frame: local flat-earth Cartesian, x east, y north, metres, origin at ownship's window-start position. Bearings and courses are true, clockwise from north, radians in [0, 2π). Speeds in m/s. Times in seconds since window start. All stored floats are float32-rounded.
ERD Diagrams
Component 1 (Continuation, DatasetHeader, DatasetRef...)
Component 2 (GateCheck, GateVerdict)
Component 3 (NaiveMeans, NaiveModel)
Component 4 (Observation, PlatformState, Scenario...)
Component 5 (Prediction, PredictionRow)
Standalone Classes
These classes are completely isolated with no relationships and are not used as base classes:
| Class | Description |
|---|---|
| ChangeDecision | The single change of the iteration's change round, fixed from validation evidence and committed before phase B trains (spec 003 R5). |
| CurvePoint | One point of an error-vs-time-since-zig curve (curves.csv row). |
| FeatureLayout | Documents the model tensors (not stored as records). inputs [N, 240, 10]: bearing_sin, bearing_cos, own_x_km, own_y_km, own_course_sin, own_course_cos, own_speed_scaled, time_scaled, valid, window_mask; the derived feature set appends bearing_rate_scaled, rate_valid, intercept_scaled [N, 240, 13]. targets [N, 240, 6]: log_range_km, course_sin, course_cos, speed_scaled, x_km, y_km. loss_mask [N, 240]: window_mask and t ≥ zig_time. Features file format 2 also embeds the source DatasetHeader and the source dataset SHA-256. |
| MetricsRecord | Metric values for one estimator on one slice at one evaluation point. |
| PairedComparison | A model and a reference estimator compared on rows both answered (converged and finite), with each estimator's coverage reported separately (spec 003 R9). |
| PredictionHeader | First record of every prediction file. |
Classes
ChangeDecision
The single change of the iteration's change round, fixed from validation evidence and committed before phase B trains (spec 003 R5).
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| carried_set_rule | 1..1 | string | |
| change | 1..1 | string | e.g. feature_set: derived |
| decided_at | 1..1 | string | |
| git_commit | 1..1 | string | |
| phase_a_experiment | 1..1 | string | |
| plan | 0..1 | string | The plan this decision pre-registers (configs/<…>/plan.json). Required from iteration 3 (spec 007): tma-g2 scores a test split only with the decision that names its plan. |
| rationale | 1..1 | string | Validation evidence cited. |
| stalled | 1..1 | boolean | Any gated criterion failed or was inconclusive on validation. |
| test_seed | 0..1 | string | Dataset seed of the test split the decision commits to (the plan's fresh_test seed, or its dataset seed); tma-g2 checks it against the plan. |
Continuation
The committed model a seeded continuation started from (scripts/train-continue.mjs; spec 003 decision 14, spec 004 decision 15). Its epoch records up to best_epoch are kept in the continued run's manifest, with their val_loss as recorded under the earlier config.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| best_epoch | 1..1 | integer | |
| git_commit | 0..1 | string | The source model's training-code commit, when it recorded one. |
| rescored_val_loss | 0..1 | float | The source's best weights re-scored under the continued run's loss, written by tma-train when it resumed (spec 004 FR-002). With best_epoch and best_val_loss it makes the kept weights auditable: a run whose best_epoch is the source's must have best_val_loss equal to this value and weights_digest equal to the source's. |
| val_loss | 1..1 | float | The source's best-epoch validation loss under the source's config. |
| weights_digest | 1..1 | string | SHA-256 of the weights the continuation resumed from (the source's best epoch). |
Referenced by:
- ModelManifest : modelManifest__continued_from 0..1
CurvePoint
One point of an error-vs-time-since-zig curve (curves.csv row).
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| course_deg_median | 0..1 | float | |
| estimator | 1..1 | string | |
| gross_error_rate | 1..1 | float | |
| n | 1..1 | integer | |
| non_converged_rate | 0..1 | float | |
| range_rel_median | 0..1 | float | Absent when not finite (more than half the rows non-converged), as in MetricsRecord. |
| range_rel_p90 | 0..1 | float | |
| speed_kt_median | 0..1 | float | |
| t_since_zig_s | 1..1 | float |
DatasetHeader
First record of every dataset file.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| created_by | 1..1 | string | Command line that produced the file. |
| dataset_seed | 1..1 | string | Decimal uint64 string. |
| generator_git_commit | 0..1 | string | Commit of the checkout that ran tma-generate (absent before schema 0.8.0). |
| generator_git_dirty | 0..1 | boolean | True when that checkout had uncommitted changes (only allowed with --allow-dirty; absent before schema 0.8.0). |
| generator_version | 1..1 | string | |
| index_end | 1..1 | integer | Last scenario index (exclusive). |
| index_start | 1..1 | integer | First scenario index (inclusive). |
| parameter_ranges | 1..1 | ParameterRanges | |
| record | 1..1 | RecordKind | |
| redraw_count | 1..1 | integer | Geometries rejected for violating min_range_m. |
| scenario_count | 1..1 | integer | |
| schema_version | 1..1 | string | |
| split | 1..1 | Split |
Referenced by:
- DatasetRef : datasetRef__header 1..1
- ModelManifest : modelManifest__source_dataset_header 0..1
DatasetRef
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| digest | 0..1 | string | SHA-256 of the dataset file (absent in manifests written before schema 0.4.0). |
| header | 1..1 | DatasetHeader | |
| path | 1..1 | string |
Referenced by:
- ExperimentManifest : experimentManifest__datasets 1..*
EpochRecord
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| epoch | 1..1 | integer | |
| seconds | 1..1 | float | Cumulative wall time. |
| train_loss | 1..1 | float | |
| val_loss | 1..1 | float |
Referenced by:
- ModelManifest : modelManifest__epochs 1..*
EstimatorRef
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| name | 1..1 | string | |
| settings_json | 1..1 | string | Estimator settings as JSON. |
Referenced by:
- ExperimentManifest : experimentManifest__estimators 1..*
ExperimentManifest
Everything needed to reproduce an experiment run.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| id | 1..1 | string | |
| command_lines | 1..* | string | |
| created | 1..1 | string | ISO 8601 timestamp. |
| datasets | 1..* | DatasetRef | |
| estimators | 1..* | EstimatorRef | |
| generator_version | 1..1 | string | |
| git_commit | 1..1 | string | |
| git_dirty | 0..1 | boolean | True when the working tree had uncommitted changes (absent before schema 0.4.0). |
| node_version | 0..1 | string | Node.js version that ran the experiment (byte identity is promised per pinned Node). |
| normalisation | 0..1 | NormalisationConstants | |
| schema_version | 1..1 | string |
FeatureLayout
Documents the model tensors (not stored as records). inputs [N, 240, 10]: bearing_sin, bearing_cos, own_x_km, own_y_km, own_course_sin, own_course_cos, own_speed_scaled, time_scaled, valid, window_mask; the derived feature set appends bearing_rate_scaled, rate_valid, intercept_scaled [N, 240, 13]. targets [N, 240, 6]: log_range_km, course_sin, course_cos, speed_scaled, x_km, y_km. loss_mask [N, 240]: window_mask and t ≥ zig_time. Features file format 2 also embeds the source DatasetHeader and the source dataset SHA-256.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| feature_set | 0..1 | FeatureSet | Absent means raw. |
| input_channels | 1..* | string | |
| rows | 1..1 | integer | |
| target_channels | 1..* | string |
FloatRange
Closed interval [min, max].
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| max | 1..1 | float | |
| min | 1..1 | float |
Referenced by:
- ParameterRanges : parameterRanges__dropout_fraction 1..1
- ParameterRanges : parameterRanges__los_offset_rad 0..1
- ParameterRanges : parameterRanges__ownship_speed_mps 1..1
- ParameterRanges : parameterRanges__ownship_turn_rate_rad_s 0..1
- ParameterRanges : parameterRanges__target_range0_m 1..1
- ParameterRanges : parameterRanges__target_speed_mps 1..1
- ParameterRanges : parameterRanges__window_s 1..1
- ParameterRanges : parameterRanges__zig2_delay_s 0..1
- ParameterRanges : parameterRanges__zig_angle_abs_rad 1..1
- ParameterRanges : parameterRanges__zig_fraction 1..1
GateCheck
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| name | 1..1 | string | |
| ci_high | 0..1 | float | Upper bound of the bootstrap interval. |
| ci_level | 0..1 | float | Interval coverage, e.g. 0.95. |
| ci_low | 0..1 | float | Lower bound of the bootstrap interval. |
| detail | 1..1 | string | |
| result | 1..1 | GateResult | |
| threshold | 0..1 | float | Limit the statistic is tested against. |
| value | 0..1 | float | Statistic tested (e.g. median range error). |
Referenced by:
- GateVerdict : gateVerdict__checks 1..*
GateVerdict
Machine verdict for a gate; the team review records the final decision.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| checks | 1..* | GateCheck | |
| decided_by | 1..1 | string | |
| gate | 1..1 | GateId | |
| result | 1..1 | GateResult |
MetricsRecord
Metric values for one estimator on one slice at one evaluation point.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| course_deg_median | 0..1 | float | |
| course_deg_p90 | 0..1 | float | |
| estimator | 1..1 | string | |
| excluded | 1..1 | integer | |
| gross_error_rate | 0..1 | float | |
| n | 1..1 | integer | |
| non_converged_rate | 0..1 | float | Fraction of rows with no estimate (scored +∞; explains absent medians/P90). |
| point | 1..1 | string | "final" or "zig+ |
| position_m_mean | 0..1 | float | Mean position error over converged rows (non-converged rows count in gross_error_rate). |
| position_window_m_median | 0..1 | float | Median over scenarios of each scenario's mean position error over its predicted rows (time-late window-mean position, SRD §5; reported, not gated). |
| position_window_m_p90 | 0..1 | float | 90th percentile over scenarios of the same per-scenario mean. |
| range_rel_median | 0..1 | float | |
| range_rel_p90 | 0..1 | float | |
| slice | 1..1 | string | "overall" or e.g. "range_band=5-10km". |
| speed_kt_median | 0..1 | float | |
| speed_kt_p90 | 0..1 | float |
ModelManifest
Everything needed to reproduce and identify a trained model.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| id | 1..1 | string | |
| best_epoch | 1..1 | integer | |
| best_val_loss | 0..1 | float | The validation loss a later epoch must beat, under this manifest's config: the best epoch's val_loss, or, after a continuation changed the loss, the best weights re-scored under the new loss (spec 004 FR-002). Persisted so a chained job resumes against the same value. Absent before schema 0.8.2 (then the best epoch's recorded val_loss). |
| complete | 1..1 | boolean | False while training is in progress (checkpoint). |
| config | 1..1 | TrainingConfig | |
| continued_from | 0..1 | Continuation | Present when the run was seeded from a committed model (absent before schema 0.8.2). |
| cpu_model | 1..1 | string | |
| epochs | 1..* | EpochRecord | |
| g0_experiment | 0..1 | string | Id of the G0 experiment whose verdict the training guard accepted. |
| generator_version | 1..1 | string | |
| git_commit | 0..1 | string | Commit of the training code, read when training started (absent before schema 0.6.0). |
| git_dirty | 0..1 | boolean | True when the working tree had uncommitted changes when training started (absent before schema 0.6.0). |
| node_version | 1..1 | string | |
| normalisation | 1..1 | NormalisationConstants | |
| parameter_count | 1..1 | integer | |
| schema_version | 1..1 | string | |
| source_dataset_header | 0..1 | DatasetHeader | Header of the dataset the train features came from (lineage; absent before schema 0.8.0). |
| stop_reason | 0..1 | StopReason | |
| tf_interop_threads | 0..1 | integer | TF_NUM_INTEROP_THREADS in force when training ran (absent: unset). |
| tf_intraop_threads | 0..1 | integer | TF_NUM_INTRAOP_THREADS in force when training ran (absent: unset, so the TensorFlow default of one per core). |
| tfjs_node_version | 1..1 | string | |
| train_features_digest | 1..1 | string | |
| val_features_digest | 1..1 | string | |
| wall_s | 1..1 | float | |
| weights_digest | 1..1 | string | SHA-256 of best-epoch weights. |
NaiveMeans
Training-set means used by the naive baseline for one prediction mode.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| course_cos | 1..1 | float | |
| course_sin | 1..1 | float | |
| log_range_km | 1..1 | float | Mean of ln(range in km). |
| n | 1..1 | integer | Number of labels averaged. |
| speed_mps | 1..1 | float |
Referenced by:
- NaiveModel : naiveModel__final 1..1
- NaiveModel : naiveModel__per_timestep 1..1
NaiveModel
Naive baseline (SRD §5): predicts training-set means. final uses each scenario's last-sample label; per_timestep uses every post-zig label.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| final | 1..1 | NaiveMeans | |
| per_timestep | 1..1 | NaiveMeans | |
| schema_version | 1..1 | string | |
| train_digest | 1..1 | string | SHA-256 of the train file. |
NormalisationConstants
Fixed scaling constants computed from the train split's input channels only.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| bearing_rate_scale_rad_s | 0..1 | float | 90th percentile of |trailing least-squares bearing rate| over train inputs; required for the derived feature set. |
| computed_from | 1..1 | string | Always "inputs_only". |
| position_scale_km | 1..1 | float | |
| speed_scale_mps | 1..1 | float | |
| time_scale_s | 1..1 | float | |
| train_header_digest | 1..1 | string | SHA-256 of the train header. |
Referenced by:
- ExperimentManifest : experimentManifest__normalisation 0..1
- ModelManifest : modelManifest__normalisation 1..1
Observation
One bearing from ownship to target. Stone Soup analogue Detection. When valid is false (dropout) bearing_rad is 0 and must be ignored.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| bearing_rad | 1..1 | float | |
| timestamp_s | 1..1 | float | |
| valid | 1..1 | boolean |
Referenced by:
- Scenario : scenario__observations 1..*
PairedComparison
A model and a reference estimator compared on rows both answered (converged and finite), with each estimator's coverage reported separately (spec 003 R9).
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| course_deg_median | 0..1 | float | |
| course_deg_median_ref | 0..1 | float | |
| coverage_estimator | 1..1 | float | Answered / scored. |
| coverage_reference | 1..1 | float | Answered / scored. |
| estimator | 1..1 | string | |
| gross_error_rate | 0..1 | float | |
| gross_error_rate_ref | 0..1 | float | |
| n_common | 1..1 | integer | |
| point | 1..1 | string | |
| range_rel_median | 0..1 | float | |
| range_rel_median_ref | 0..1 | float | |
| range_rel_p90 | 0..1 | float | |
| range_rel_p90_ref | 0..1 | float | |
| reference | 1..1 | string | |
| slice | 1..1 | string | |
| speed_kt_median | 0..1 | float | |
| speed_kt_median_ref | 0..1 | float |
ParameterRanges
Ranges from which ScenarioParameters are drawn. Initial ownship course, target bearing and target course are always uniform on [0, 2π); zig sign is uniform ±.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| dropout_fraction | 1..1 | FloatRange | |
| dt_s | 1..1 | float | |
| los_offset_rad | 0..1 | FloatRange | Angle off the line of sight, on the other bow, after an across_los turn; required when zig_rule is across_los. |
| min_range_m | 1..1 | float | Geometries closer than this at any sample are redrawn. |
| noise_sigma_rad_values | 1..* | float | σ drawn uniformly from this set. |
| ownship_speed_mps | 1..1 | FloatRange | |
| ownship_turn_rate_rad_s | 0..1 | FloatRange | Turn rate drawn uniformly per scenario; absent means an instantaneous zig. |
| range_distribution | 1..1 | RangeDistribution | |
| target_range0_m | 1..1 | FloatRange | |
| target_speed_mps | 1..1 | FloatRange | |
| window_s | 1..1 | FloatRange | |
| zig2_delay_s | 0..1 | FloatRange | Delay from the start of leg 2 to the second turn; absent means one zig. The second zig follows zig_rule (and uses the same turn rate as the first). |
| zig_angle_abs_rad | 1..1 | FloatRange | |
| zig_fraction | 1..1 | FloatRange | |
| zig_rule | 0..1 | ZigRule | How each zig is chosen; absent means random (generators 0.1.0–0.2.0). Under across_los zig_angle_abs_rad is still drawn but not used. |
Referenced by:
- DatasetHeader : datasetHeader__parameter_ranges 1..1
PlatformState
One platform state. Stone Soup analogue GroundTruthState.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| course_rad | 1..1 | float | |
| speed_mps | 1..1 | float | |
| timestamp_s | 1..1 | float | |
| x_m | 1..1 | float | |
| y_m | 1..1 | float |
Referenced by:
- Track : track__states 1..*
Prediction
One estimator's output for one scenario.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| estimator | 1..1 | string | |
| mode | 1..1 | PredictionMode | |
| record | 1..1 | RecordKind | |
| rows | 1..* | PredictionRow | |
| scenario_index | 1..1 | integer |
PredictionHeader
First record of every prediction file.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| dataset_digest | 1..1 | string | SHA-256 of the truth file. |
| estimator | 1..1 | string | |
| mode | 1..1 | PredictionMode | |
| record | 1..1 | RecordKind | |
| schema_version | 1..1 | string |
PredictionRow
An estimator's target estimate at one timestep.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| converged | 1..1 | boolean | |
| course_rad | 1..1 | float | |
| iterations | 0..1 | integer | |
| range_m | 1..1 | float | |
| speed_mps | 1..1 | float | |
| timestamp_s | 1..1 | float | |
| x_m | 1..1 | float | |
| y_m | 1..1 | float |
Referenced by:
- Prediction : prediction__rows 1..*
Scenario
One ownship-vs-target run over a window.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| metadata | 1..1 | ScenarioMetadata | |
| observations | 1..* | Observation | |
| ownship | 1..1 | Track | |
| record | 1..1 | RecordKind | |
| target | 1..1 | Track |
ScenarioMetadata
Seed, parameter draws and derived slicing keys for one scenario.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| index | 1..1 | integer | Scenario index within the dataset. |
| mean_range_m | 1..1 | float | |
| min_range_m | 1..1 | float | |
| parameters | 1..1 | ScenarioParameters | |
| samples | 1..1 | integer | Number of timesteps (60–240). |
| seed | 1..1 | string | Scenario seed as a decimal uint64 string. |
| turn2_start_index | 0..1 | integer | First timestep after the second turn starts (absent with one zig or no turn rate). |
| turn_start_index | 0..1 | integer | First timestep after the turn starts (absent for an instantaneous zig). |
| zig2_index | 0..1 | integer | First timestep on leg 3, after the second turn completes (absent with one zig). Gate times still count from zig_index. |
| zig_index | 1..1 | integer | First timestep on leg 2 (with a rate-limited turn, the first after it completes). |
| zig_time_s | 1..1 | float |
Referenced by:
- Scenario : scenario__metadata 1..1
ScenarioParameters
The random draws that define one scenario.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| dropout_fraction | 1..1 | float | Probability each bearing is missing. |
| dt_s | 1..1 | float | Bearing interval. |
| noise_sigma_rad | 1..1 | float | Bearing noise σ; 0 = noise-free. |
| ownship_course0_rad | 1..1 | float | Ownship course on leg 1. |
| ownship_speed_mps | 1..1 | float | |
| ownship_turn_rate_rad_s | 0..1 | float | Ownship turn rate at the zig (rate-limited turn, spec 003 US6). Absent or 0: the course changes instantaneously, as in generator 0.1.0. |
| target_bearing0_rad | 1..1 | float | True bearing at window start. |
| target_course_rad | 1..1 | float | |
| target_range0_m | 1..1 | float | Range at window start. |
| target_speed_mps | 1..1 | float | |
| window_s | 1..1 | float | Window length; multiple of dt_s. |
| zig2_angle_rad | 0..1 | float | Signed course change at the second zig; positive is clockwise. |
| zig2_delay_s | 0..1 | float | Second zig (generator 0.3.0, spec 007): time from the first sample on leg 2 to the start of the second turn. Absent: one zig, two legs. |
| zig_angle_rad | 1..1 | float | Signed course change at the zig; positive is clockwise. |
| zig_fraction | 1..1 | float | Zig time as a fraction of the window. |
Referenced by:
- ScenarioMetadata : scenarioMetadata__parameters 1..1
Track
Time-ordered states of one platform. Stone Soup analogue GroundTruthPath.
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| id | 1..1 | TrackId | |
| states | 1..* | PlatformState |
Referenced by:
TrainingConfig
Hyperparameters and seeds for one training run (SRD §4; constitution III).
Attributes
| Name | Cardinality: | Type | Description |
|---|---|---|---|
| id | 1..1 | string | Estimator name used in predictions. |
| batch_size | 1..1 | integer | |
| bucket_batches | 0..1 | integer | Batches per length-bucketing group (default 16). |
| feature_set | 0..1 | FeatureSet | Input channel set; absent means raw. Must match the features files. |
| kernel_size | 0..1 | integer | Causal CNN kernel size. |
| layers | 0..1 | integer | Stacked layers: causal CNN conv layers (no dilation; default 3), or recurrent layers for instantaneous and time_late (default 1; each returns sequences; spec 003 R20). |
| learning_rate | 1..1 | float | |
| length_bucketing | 0..1 | boolean | Length bucketing (research R15; default false). Each group of bucket_batches batches of the epoch's seeded permutation is sorted by valid length, cut into batches whose rows are trimmed to the longest window, and the batch order is shuffled with a seed derived from train_seed and the epoch. The model takes a variable time dimension. Not for mlp. |
| loss_weight_course | 1..1 | float | |
| loss_weight_range | 1..1 | float | |
| loss_weight_speed | 1..1 | float | |
| max_epochs | 1..1 | integer | |
| max_wall_s | 1..1 | float | Wall-clock cap in seconds. |
| model_kind | 1..1 | ModelKind | |
| patience | 1..1 | integer | Epochs without validation improvement before stopping. |
| shuffle_labels | 1..1 | boolean | Permute targets across scenarios (leakage check). |
| tfjs_threads | 0..1 | integer | TensorFlow intra-op and inter-op thread count, set by tma-train through TF_NUM_INTRAOP_THREADS and TF_NUM_INTEROP_THREADS before tfjs-node loads. Absent: the TensorFlow default (one per core) or whatever the environment sets. |
| train_limit | 0..1 | integer | Use only the first N training scenarios (tests and smoke runs). |
| train_seed | 1..1 | string | Decimal uint64; derives initializer seeds and batch order. |
| units | 1..1 | integer | LSTM units (per direction), conv filters or dense width. |
Referenced by:
- ModelManifest : modelManifest__config 1..1
Slots
| Name | Cardinality/Range | Used By |
|---|---|---|
| changeDecision__carried_set_rule | 1..1 string | |
| changeDecision__change e.g. feature_set: derived | 1..1 string | |
| changeDecision__decided_at | 1..1 string | |
| changeDecision__git_commit | 1..1 string | |
| changeDecision__phase_a_experiment | 1..1 string | |
| changeDecision__plan The plan this decision pre-registers (configs/<…>/plan.json). Required from iteration 3 (spec 007): tma-g2 scores a test split only with the decision that names its plan. | 0..1 string | |
| changeDecision__rationale Validation evidence cited. | 1..1 string | |
| changeDecision__stalled Any gated criterion failed or was inconclusive on validation. | 1..1 boolean | |
| changeDecision__test_seed Dataset seed of the test split the decision commits to (the plan's fresh_test seed, or its dataset seed); tma-g2 checks it against the plan. | 0..1 string | |
| continuation__best_epoch | 1..1 integer | |
| continuation__git_commit The source model's training-code commit, when it recorded one. | 0..1 string | |
| continuation__rescored_val_loss The source's best weights re-scored under the continued run's loss, written by tma-train when it resumed (spec 004 FR-002). With best_epoch and best_val_loss it makes the kept weights auditable: a run whose best_epoch is the source's must have best_val_loss equal to this value and weights_digest equal to the source's. | 0..1 float | |
| continuation__val_loss The source's best-epoch validation loss under the source's config. | 1..1 float | |
| continuation__weights_digest SHA-256 of the weights the continuation resumed from (the source's best epoch). | 1..1 string | |
| curvePoint__course_deg_median | 0..1 float | |
| curvePoint__estimator | 1..1 string | |
| curvePoint__gross_error_rate | 1..1 float | |
| curvePoint__n | 1..1 integer | |
| curvePoint__non_converged_rate | 0..1 float | |
| curvePoint__range_rel_median Absent when not finite (more than half the rows non-converged), as in MetricsRecord. | 0..1 float | |
| curvePoint__range_rel_p90 | 0..1 float | |
| curvePoint__speed_kt_median | 0..1 float | |
| curvePoint__t_since_zig_s | 1..1 float | |
| datasetHeader__created_by Command line that produced the file. | 1..1 string | |
| datasetHeader__dataset_seed Decimal uint64 string. | 1..1 string | |
| datasetHeader__generator_git_commit Commit of the checkout that ran tma-generate (absent before schema 0.8.0). | 0..1 string | |
| datasetHeader__generator_git_dirty True when that checkout had uncommitted changes (only allowed with --allow-dirty; absent before schema 0.8.0). | 0..1 boolean | |
| datasetHeader__generator_version | 1..1 string | |
| datasetHeader__index_end Last scenario index (exclusive). | 1..1 integer | |
| datasetHeader__index_start First scenario index (inclusive). | 1..1 integer | |
| datasetHeader__parameter_ranges | 1..1 ParameterRanges | |
| datasetHeader__record | 1..1 RecordKind | |
| datasetHeader__redraw_count Geometries rejected for violating min_range_m. | 1..1 integer | |
| datasetHeader__scenario_count | 1..1 integer | |
| datasetHeader__schema_version | 1..1 string | |
| datasetHeader__split | 1..1 Split | |
| datasetRef__digest SHA-256 of the dataset file (absent in manifests written before schema 0.4.0). | 0..1 string | |
| datasetRef__header | 1..1 DatasetHeader | |
| datasetRef__path | 1..1 string | |
| epochRecord__epoch | 1..1 integer | |
| epochRecord__seconds Cumulative wall time. | 1..1 float | |
| epochRecord__train_loss | 1..1 float | |
| epochRecord__val_loss | 1..1 float | |
| estimatorRef__name | 1..1 string | |
| estimatorRef__settings_json Estimator settings as JSON. | 1..1 string | |
| experimentManifest__command_lines | 1..* string | |
| experimentManifest__created ISO 8601 timestamp. | 1..1 string | |
| experimentManifest__datasets | 1..* DatasetRef | |
| experimentManifest__estimators | 1..* EstimatorRef | |
| experimentManifest__generator_version | 1..1 string | |
| experimentManifest__git_commit | 1..1 string | |
| experimentManifest__git_dirty True when the working tree had uncommitted changes (absent before schema 0.4.0). | 0..1 boolean | |
| experimentManifest__id | 1..1 string | |
| experimentManifest__node_version Node.js version that ran the experiment (byte identity is promised per pinned Node). | 0..1 string | |
| experimentManifest__normalisation | 0..1 NormalisationConstants | |
| experimentManifest__schema_version | 1..1 string | |
| featureLayout__feature_set Absent means raw. | 0..1 FeatureSet | |
| featureLayout__input_channels | 1..* string | |
| featureLayout__rows | 1..1 integer | |
| featureLayout__target_channels | 1..* string | |
| floatRange__max | 1..1 float | |
| floatRange__min | 1..1 float | |
| gateCheck__ci_high Upper bound of the bootstrap interval. | 0..1 float | |
| gateCheck__ci_level Interval coverage, e.g. 0.95. | 0..1 float | |
| gateCheck__ci_low Lower bound of the bootstrap interval. | 0..1 float | |
| gateCheck__detail | 1..1 string | |
| gateCheck__name | 1..1 string | |
| gateCheck__result | 1..1 GateResult | |
| gateCheck__threshold Limit the statistic is tested against. | 0..1 float | |
| gateCheck__value Statistic tested (e.g. median range error). | 0..1 float | |
| gateVerdict__checks | 1..* GateCheck | |
| gateVerdict__decided_by | 1..1 string | |
| gateVerdict__gate | 1..1 GateId | |
| gateVerdict__result | 1..1 GateResult | |
| metricsRecord__course_deg_median | 0..1 float | |
| metricsRecord__course_deg_p90 | 0..1 float | |
| metricsRecord__estimator | 1..1 string | |
| metricsRecord__excluded | 1..1 integer | |
| metricsRecord__gross_error_rate | 0..1 float | |
| metricsRecord__n | 1..1 integer | |
| metricsRecord__non_converged_rate Fraction of rows with no estimate (scored +∞; explains absent medians/P90). | 0..1 float | |
| metricsRecord__point "final" or "zig+ | 1..1 string | |
| metricsRecord__position_m_mean Mean position error over converged rows (non-converged rows count in gross_error_rate). | 0..1 float | |
| metricsRecord__position_window_m_median Median over scenarios of each scenario's mean position error over its predicted rows (time-late window-mean position, SRD §5; reported, not gated). | 0..1 float | |
| metricsRecord__position_window_m_p90 90th percentile over scenarios of the same per-scenario mean. | 0..1 float | |
| metricsRecord__range_rel_median | 0..1 float | |
| metricsRecord__range_rel_p90 | 0..1 float | |
| metricsRecord__slice "overall" or e.g. "range_band=5-10km". | 1..1 string | |
| metricsRecord__speed_kt_median | 0..1 float | |
| metricsRecord__speed_kt_p90 | 0..1 float | |
| modelManifest__best_epoch | 1..1 integer | |
| modelManifest__best_val_loss The validation loss a later epoch must beat, under this manifest's config: the best epoch's val_loss, or, after a continuation changed the loss, the best weights re-scored under the new loss (spec 004 FR-002). Persisted so a chained job resumes against the same value. Absent before schema 0.8.2 (then the best epoch's recorded val_loss). | 0..1 float | |
| modelManifest__complete False while training is in progress (checkpoint). | 1..1 boolean | |
| modelManifest__config | 1..1 TrainingConfig | |
| modelManifest__continued_from Present when the run was seeded from a committed model (absent before schema 0.8.2). | 0..1 Continuation | |
| modelManifest__cpu_model | 1..1 string | |
| modelManifest__epochs | 1..* EpochRecord | |
| modelManifest__g0_experiment Id of the G0 experiment whose verdict the training guard accepted. | 0..1 string | |
| modelManifest__generator_version | 1..1 string | |
| modelManifest__git_commit Commit of the training code, read when training started (absent before schema 0.6.0). | 0..1 string | |
| modelManifest__git_dirty True when the working tree had uncommitted changes when training started (absent before schema 0.6.0). | 0..1 boolean | |
| modelManifest__id | 1..1 string | |
| modelManifest__node_version | 1..1 string | |
| modelManifest__normalisation | 1..1 NormalisationConstants | |
| modelManifest__parameter_count | 1..1 integer | |
| modelManifest__schema_version | 1..1 string | |
| modelManifest__source_dataset_header Header of the dataset the train features came from (lineage; absent before schema 0.8.0). | 0..1 DatasetHeader | |
| modelManifest__stop_reason | 0..1 StopReason | |
| modelManifest__tf_interop_threads TF_NUM_INTEROP_THREADS in force when training ran (absent: unset). | 0..1 integer | |
| modelManifest__tf_intraop_threads TF_NUM_INTRAOP_THREADS in force when training ran (absent: unset, so the TensorFlow default of one per core). | 0..1 integer | |
| modelManifest__tfjs_node_version | 1..1 string | |
| modelManifest__train_features_digest | 1..1 string | |
| modelManifest__val_features_digest | 1..1 string | |
| modelManifest__wall_s | 1..1 float | |
| modelManifest__weights_digest SHA-256 of best-epoch weights. | 1..1 string | |
| naiveMeans__course_cos | 1..1 float | |
| naiveMeans__course_sin | 1..1 float | |
| naiveMeans__log_range_km Mean of ln(range in km). | 1..1 float | |
| naiveMeans__n Number of labels averaged. | 1..1 integer | |
| naiveMeans__speed_mps | 1..1 float | |
| naiveModel__final | 1..1 NaiveMeans | |
| naiveModel__per_timestep | 1..1 NaiveMeans | |
| naiveModel__schema_version | 1..1 string | |
| naiveModel__train_digest SHA-256 of the train file. | 1..1 string | |
| normalisationConstants__bearing_rate_scale_rad_s 90th percentile of |trailing least-squares bearing rate| over train inputs; required for the derived feature set. | 0..1 float | |
| normalisationConstants__computed_from Always "inputs_only". | 1..1 string | |
| normalisationConstants__position_scale_km | 1..1 float | |
| normalisationConstants__speed_scale_mps | 1..1 float | |
| normalisationConstants__time_scale_s | 1..1 float | |
| normalisationConstants__train_header_digest SHA-256 of the train header. | 1..1 string | |
| observation__bearing_rad | 1..1 float | |
| observation__timestamp_s | 1..1 float | |
| observation__valid | 1..1 boolean | |
| pairedComparison__course_deg_median | 0..1 float | |
| pairedComparison__course_deg_median_ref | 0..1 float | |
| pairedComparison__coverage_estimator Answered / scored. | 1..1 float | |
| pairedComparison__coverage_reference Answered / scored. | 1..1 float | |
| pairedComparison__estimator | 1..1 string | |
| pairedComparison__gross_error_rate | 0..1 float | |
| pairedComparison__gross_error_rate_ref | 0..1 float | |
| pairedComparison__n_common | 1..1 integer | |
| pairedComparison__point | 1..1 string | |
| pairedComparison__range_rel_median | 0..1 float | |
| pairedComparison__range_rel_median_ref | 0..1 float | |
| pairedComparison__range_rel_p90 | 0..1 float | |
| pairedComparison__range_rel_p90_ref | 0..1 float | |
| pairedComparison__reference | 1..1 string | |
| pairedComparison__slice | 1..1 string | |
| pairedComparison__speed_kt_median | 0..1 float | |
| pairedComparison__speed_kt_median_ref | 0..1 float | |
| parameterRanges__dropout_fraction | 1..1 FloatRange | |
| parameterRanges__dt_s | 1..1 float | |
| parameterRanges__los_offset_rad Angle off the line of sight, on the other bow, after an across_los turn; required when zig_rule is across_los. | 0..1 FloatRange | |
| parameterRanges__min_range_m Geometries closer than this at any sample are redrawn. | 1..1 float | |
| parameterRanges__noise_sigma_rad_values σ drawn uniformly from this set. | 1..* float | |
| parameterRanges__ownship_speed_mps | 1..1 FloatRange | |
| parameterRanges__ownship_turn_rate_rad_s Turn rate drawn uniformly per scenario; absent means an instantaneous zig. | 0..1 FloatRange | |
| parameterRanges__range_distribution | 1..1 RangeDistribution | |
| parameterRanges__target_range0_m | 1..1 FloatRange | |
| parameterRanges__target_speed_mps | 1..1 FloatRange | |
| parameterRanges__window_s | 1..1 FloatRange | |
| parameterRanges__zig2_delay_s Delay from the start of leg 2 to the second turn; absent means one zig. The second zig follows zig_rule (and uses the same turn rate as the first). | 0..1 FloatRange | |
| parameterRanges__zig_angle_abs_rad | 1..1 FloatRange | |
| parameterRanges__zig_fraction | 1..1 FloatRange | |
| parameterRanges__zig_rule How each zig is chosen; absent means random (generators 0.1.0–0.2.0). Under across_los zig_angle_abs_rad is still drawn but not used. | 0..1 ZigRule | |
| platformState__course_rad | 1..1 float | |
| platformState__speed_mps | 1..1 float | |
| platformState__timestamp_s | 1..1 float | |
| platformState__x_m | 1..1 float | |
| platformState__y_m | 1..1 float | |
| predictionHeader__dataset_digest SHA-256 of the truth file. | 1..1 string | |
| predictionHeader__estimator | 1..1 string | |
| predictionHeader__mode | 1..1 PredictionMode | |
| predictionHeader__record | 1..1 RecordKind | |
| predictionHeader__schema_version | 1..1 string | |
| predictionRow__converged | 1..1 boolean | |
| predictionRow__course_rad | 1..1 float | |
| predictionRow__iterations | 0..1 integer | |
| predictionRow__range_m | 1..1 float | |
| predictionRow__speed_mps | 1..1 float | |
| predictionRow__timestamp_s | 1..1 float | |
| predictionRow__x_m | 1..1 float | |
| predictionRow__y_m | 1..1 float | |
| prediction__estimator | 1..1 string | |
| prediction__mode | 1..1 PredictionMode | |
| prediction__record | 1..1 RecordKind | |
| prediction__rows | 1..* PredictionRow | |
| prediction__scenario_index | 1..1 integer | |
| scenarioMetadata__index Scenario index within the dataset. | 1..1 integer | |
| scenarioMetadata__mean_range_m | 1..1 float | |
| scenarioMetadata__min_range_m | 1..1 float | |
| scenarioMetadata__parameters | 1..1 ScenarioParameters | |
| scenarioMetadata__samples Number of timesteps (60–240). | 1..1 integer | |
| scenarioMetadata__seed Scenario seed as a decimal uint64 string. | 1..1 string | |
| scenarioMetadata__turn2_start_index First timestep after the second turn starts (absent with one zig or no turn rate). | 0..1 integer | |
| scenarioMetadata__turn_start_index First timestep after the turn starts (absent for an instantaneous zig). | 0..1 integer | |
| scenarioMetadata__zig2_index First timestep on leg 3, after the second turn completes (absent with one zig). Gate times still count from zig_index. | 0..1 integer | |
| scenarioMetadata__zig_index First timestep on leg 2 (with a rate-limited turn, the first after it completes). | 1..1 integer | |
| scenarioMetadata__zig_time_s | 1..1 float | |
| scenarioParameters__dropout_fraction Probability each bearing is missing. | 1..1 float | |
| scenarioParameters__dt_s Bearing interval. | 1..1 float | |
| scenarioParameters__noise_sigma_rad Bearing noise σ; 0 = noise-free. | 1..1 float | |
| scenarioParameters__ownship_course0_rad Ownship course on leg 1. | 1..1 float | |
| scenarioParameters__ownship_speed_mps | 1..1 float | |
| scenarioParameters__ownship_turn_rate_rad_s Ownship turn rate at the zig (rate-limited turn, spec 003 US6). Absent or 0: the course changes instantaneously, as in generator 0.1.0. | 0..1 float | |
| scenarioParameters__target_bearing0_rad True bearing at window start. | 1..1 float | |
| scenarioParameters__target_course_rad | 1..1 float | |
| scenarioParameters__target_range0_m Range at window start. | 1..1 float | |
| scenarioParameters__target_speed_mps | 1..1 float | |
| scenarioParameters__window_s Window length; multiple of dt_s. | 1..1 float | |
| scenarioParameters__zig2_angle_rad Signed course change at the second zig; positive is clockwise. | 0..1 float | |
| scenarioParameters__zig2_delay_s Second zig (generator 0.3.0, spec 007): time from the first sample on leg 2 to the start of the second turn. Absent: one zig, two legs. | 0..1 float | |
| scenarioParameters__zig_angle_rad Signed course change at the zig; positive is clockwise. | 1..1 float | |
| scenarioParameters__zig_fraction Zig time as a fraction of the window. | 1..1 float | |
| scenario__metadata | 1..1 ScenarioMetadata | |
| scenario__observations | 1..* Observation | |
| scenario__ownship | 1..1 Track | |
| scenario__record | 1..1 RecordKind | |
| scenario__target | 1..1 Track | |
| track__id | 1..1 TrackId | |
| track__states | 1..* PlatformState | |
| trainingConfig__batch_size | 1..1 integer | |
| trainingConfig__bucket_batches Batches per length-bucketing group (default 16). | 0..1 integer | |
| trainingConfig__feature_set Input channel set; absent means raw. Must match the features files. | 0..1 FeatureSet | |
| trainingConfig__id Estimator name used in predictions. | 1..1 string | |
| trainingConfig__kernel_size Causal CNN kernel size. | 0..1 integer | |
| trainingConfig__layers Stacked layers: causal CNN conv layers (no dilation; default 3), or recurrent layers for instantaneous and time_late (default 1; each returns sequences; spec 003 R20). | 0..1 integer | |
| trainingConfig__learning_rate | 1..1 float | |
| trainingConfig__length_bucketing Length bucketing (research R15; default false). Each group of bucket_batches batches of the epoch's seeded permutation is sorted by valid length, cut into batches whose rows are trimmed to the longest window, and the batch order is shuffled with a seed derived from train_seed and the epoch. The model takes a variable time dimension. Not for mlp. | 0..1 boolean | |
| trainingConfig__loss_weight_course | 1..1 float | |
| trainingConfig__loss_weight_range | 1..1 float | |
| trainingConfig__loss_weight_speed | 1..1 float | |
| trainingConfig__max_epochs | 1..1 integer | |
| trainingConfig__max_wall_s Wall-clock cap in seconds. | 1..1 float | |
| trainingConfig__model_kind | 1..1 ModelKind | |
| trainingConfig__patience Epochs without validation improvement before stopping. | 1..1 integer | |
| trainingConfig__shuffle_labels Permute targets across scenarios (leakage check). | 1..1 boolean | |
| trainingConfig__tfjs_threads TensorFlow intra-op and inter-op thread count, set by tma-train through TF_NUM_INTRAOP_THREADS and TF_NUM_INTEROP_THREADS before tfjs-node loads. Absent: the TensorFlow default (one per core) or whatever the environment sets. | 0..1 integer | |
| trainingConfig__train_limit Use only the first N training scenarios (tests and smoke runs). | 0..1 integer | |
| trainingConfig__train_seed Decimal uint64; derives initializer seeds and batch order. | 1..1 string | |
| trainingConfig__units LSTM units (per direction), conv filters or dense width. | 1..1 integer |
Enums
FeatureSet
Model input channel sets (spec 003 R6).
| Text | Meaning: | Description |
|---|---|---|
| derived | None | raw plus bearing_rate_scaled, rate_valid and intercept_scaled (13 channels), computed causally from bearings and ownship states up to each row. |
| raw | None | Iteration-1 layout, 10 input channels. |
Used by
GateId
| Text | Meaning: | Description |
|---|---|---|
| G0 | None | Pipeline verified. |
| G1 | None | |
| G2 | None | |
| G3 | None |
Used by
GateResult
| Text | Meaning: | Description |
|---|---|---|
| fail | None | |
| inconclusive | None | The 95% bootstrap interval straddles the threshold (G1 report, T033). |
| pass | None |
Used by
ModelKind
Model families of SRD §4.
| Text | Meaning: | Description |
|---|---|---|
| causal_cnn | None | Causal 1-D CNN control for the instantaneous variant. |
| instantaneous | None | Causal single-layer LSTM (operator's running solution). |
| mlp | None | MLP over the flattened window, control for the time-late variant. |
| time_late | None | Bidirectional LSTM over the whole window. |
Used by
PredictionMode
| Text | Meaning: | Description |
|---|---|---|
| final | None | One row at the last timestep of the window. |
| per_timestep | None | One row per post-zig timestep using bearings up to that time. |
Used by
RangeDistribution
| Text | Meaning: | Description |
|---|---|---|
| log_uniform | None | |
| uniform | None |
Used by
RecordKind
Discriminator for records in NDJSON files.
| Text | Meaning: | Description |
|---|---|---|
| header | None | Dataset or prediction file header (first line). |
| prediction | None | One Prediction. |
| scenario | None | One Scenario. |
Used by
- DatasetHeader datasetHeader__record 1..1
- PredictionHeader predictionHeader__record 1..1
- Prediction prediction__record 1..1
- Scenario scenario__record 1..1
Split
Dataset split. Train/validation/test are 80/10/10 by scenario index.
| Text | Meaning: | Description |
|---|---|---|
| heldout | None | Held-out geometry with parameter ranges outside training. |
| test | None | |
| train | None | |
| validation | None |
Used by
StopReason
| Text | Meaning: | Description |
|---|---|---|
| diverged | None | |
| early_stopping | None | |
| max_epochs | None | |
| wall_clock | None |
Used by
TrackId
| Text | Meaning: | Description |
|---|---|---|
| ownship | None | |
| target | None |
Used by
ZigRule
How each zig's direction and size are chosen (generator 0.3.0, spec 007).
| Text | Meaning: | Description |
|---|---|---|
| across_los | None | Turn across the line of sight: the new course puts the target on the other bow at an angle off drawn from los_offset_rad, by the shorter turn. Uses the true bearing at the last sample before the turn. |
| random | None | Size from zig_angle_abs_rad, side uniformly ±, regardless of the target. |