Ground locomotives-page descriptor semantics

This commit is contained in:
Jan Petykiewicz 2026-04-16 22:26:23 -07:00
commit 358d4cdec3
26 changed files with 1157 additions and 710 deletions

View file

@ -42,7 +42,7 @@
{
"descriptor_id": 250,
"recovered_locomotive_id": 10,
"semantic_preview": "Set Unknown Loco Available to 42"
"semantic_preview": "Set Big Boy 4-8-8-4 Availability to 42"
}
]
}

View file

@ -67,7 +67,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_label": "Big Boy 4-8-8-4 Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -80,7 +80,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"semantic_preview": "Set Big Boy 4-8-8-4 Availability to 42",
"recovered_locomotive_id": 10,
"locomotive_name": null,
"notes": []

View file

@ -20,16 +20,16 @@
"locomotive_catalog": [
{
"locomotive_id": 10,
"name": "Locomotive 10"
"name": "Big Boy 4-8-8-4"
},
{
"locomotive_id": 112,
"name": "Locomotive 112"
"locomotive_id": 58,
"name": "VL80T"
}
],
"named_locomotive_availability": {
"Locomotive 10": 0,
"Locomotive 112": 1
"Big Boy 4-8-8-4": 0,
"VL80T": 1
},
"event_runtime_records": [],
"candidate_availability": {},

View file

@ -38,8 +38,8 @@
"save_slice.import_projection": "overlay-runtime-restore-v1"
},
"named_locomotive_availability": {
"Locomotive 10": 42,
"Locomotive 112": 7
"Big Boy 4-8-8-4": 42,
"VL80T": 7
},
"packed_event_collection": {
"live_entry_ids": [33],
@ -54,8 +54,8 @@
"recovered_locomotive_id": 10
},
{
"descriptor_id": 457,
"recovered_locomotive_id": 112
"descriptor_id": 298,
"recovered_locomotive_id": 58
}
]
}
@ -68,12 +68,12 @@
"effects": [
{
"kind": "set_named_locomotive_availability_value",
"name": "Locomotive 10",
"name": "Big Boy 4-8-8-4",
"value": 42
},
{
"kind": "set_named_locomotive_availability_value",
"name": "Locomotive 112",
"name": "VL80T",
"value": 7
}
]

View file

@ -7,7 +7,7 @@
"original_save_sha256": "locomotive-availability-overlay-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"uses synthetic catalog names to prove descriptor-to-id lowering plus overlay-backed scalar resolution"
"uses grounded lower-band locomotive ids to prove overlay-backed scalar resolution"
]
},
"save_slice": {
@ -67,7 +67,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_label": "Big Boy 4-8-8-4 Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -80,7 +80,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"semantic_preview": "Set Big Boy 4-8-8-4 Availability to 42",
"recovered_locomotive_id": 10,
"locomotive_name": null,
"notes": []
@ -88,8 +88,8 @@
{
"group_index": 0,
"row_index": 1,
"descriptor_id": 457,
"descriptor_label": "Unknown Loco Available",
"descriptor_id": 298,
"descriptor_label": "VL80T Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -102,8 +102,8 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 7",
"recovered_locomotive_id": 112,
"semantic_preview": "Set VL80T Availability to 7",
"recovered_locomotive_id": 58,
"locomotive_name": null,
"notes": []
}

View file

@ -31,8 +31,8 @@
"save_slice.locomotive_catalog_source_kind": "save-direct-locomotive-row-run-ordinal-catalog"
},
"named_locomotive_availability": {
"Locomotive 10": 42,
"Locomotive 112": 7
"Big Boy 4-8-8-4": 42,
"VL80T": 7
},
"packed_event_collection": {
"live_entry_ids": [33],

View file

@ -7,7 +7,7 @@
"original_save_sha256": "locomotive-availability-save-slice-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"uses embedded save-native locomotive catalog entries to prove standalone save-slice execution for lower-band and upper-band locomotive availability descriptors"
"uses embedded save-native locomotive catalog entries to prove standalone save-slice execution for grounded lower-band locomotive availability descriptors"
]
},
"save_slice": {
@ -26,8 +26,8 @@
"entries_offset": 31864,
"observed_entry_count": 2,
"entries": [
{ "locomotive_id": 10, "name": "Locomotive 10" },
{ "locomotive_id": 112, "name": "Locomotive 112" }
{ "locomotive_id": 10, "name": "Big Boy 4-8-8-4" },
{ "locomotive_id": 58, "name": "VL80T" }
]
},
"special_conditions_table": null,
@ -77,7 +77,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_label": "Big Boy 4-8-8-4 Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -90,7 +90,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"semantic_preview": "Set Big Boy 4-8-8-4 Availability to 42",
"recovered_locomotive_id": 10,
"locomotive_name": null,
"notes": []
@ -98,8 +98,8 @@
{
"group_index": 0,
"row_index": 1,
"descriptor_id": 457,
"descriptor_label": "Unknown Loco Available",
"descriptor_id": 298,
"descriptor_label": "VL80T Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -112,8 +112,8 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 7",
"recovered_locomotive_id": 112,
"semantic_preview": "Set VL80T Availability to 7",
"recovered_locomotive_id": 58,
"locomotive_name": null,
"notes": []
}

View file

@ -20,16 +20,16 @@
"locomotive_catalog": [
{
"locomotive_id": 1,
"name": "Locomotive 1"
"name": "2-D-2"
},
{
"locomotive_id": 101,
"name": "Locomotive 101"
"locomotive_id": 58,
"name": "VL80T"
}
],
"named_locomotive_cost": {
"Locomotive 1": 100000,
"Locomotive 101": 200000
"2-D-2": 100000,
"VL80T": 200000
},
"event_runtime_records": [],
"candidate_availability": {},

View file

@ -37,8 +37,8 @@
"save_slice.import_projection": "overlay-runtime-restore-v1"
},
"named_locomotive_cost": {
"Locomotive 1": 250000,
"Locomotive 101": 325000
"2-D-2": 250000,
"VL80T": 325000
},
"packed_event_collection": {
"live_entry_ids": [41],
@ -53,8 +53,8 @@
"recovered_locomotive_id": 1
},
{
"descriptor_id": 475,
"recovered_locomotive_id": 101
"descriptor_id": 409,
"recovered_locomotive_id": 58
}
]
}
@ -67,12 +67,12 @@
"effects": [
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 1",
"name": "2-D-2",
"value": 250000
},
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 101",
"name": "VL80T",
"value": 325000
}
]

View file

@ -7,7 +7,7 @@
"original_save_sha256": "locomotive-cost-overlay-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"recovered locomotive cost descriptors 352 and 475 import through the ordinary runtime path when overlay catalog context resolves their ids"
"recovered locomotive cost descriptors 352 and 409 import through the ordinary runtime path when overlay catalog context resolves their ids"
]
},
"save_slice": {
@ -68,7 +68,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 352,
"descriptor_label": "Locomotive 1 Cost",
"descriptor_label": "2-D-2 Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -81,7 +81,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 1 Cost to 250000",
"semantic_preview": "Set 2-D-2 Cost to 250000",
"recovered_locomotive_id": 1,
"locomotive_name": null,
"notes": [
@ -91,8 +91,8 @@
{
"group_index": 0,
"row_index": 1,
"descriptor_id": 475,
"descriptor_label": "Locomotive 101 Cost",
"descriptor_id": 409,
"descriptor_label": "VL80T Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -105,11 +105,11 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 101 Cost to 325000",
"recovered_locomotive_id": 101,
"semantic_preview": "Set VL80T Cost to 325000",
"recovered_locomotive_id": 58,
"locomotive_name": null,
"notes": [
"locomotive cost descriptor maps to live locomotive id 101"
"locomotive cost descriptor maps to live locomotive id 58"
]
}
],
@ -117,12 +117,12 @@
"decoded_actions": [
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 1",
"name": "2-D-2",
"value": 250000
},
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 101",
"name": "VL80T",
"value": 325000
}
],

View file

@ -30,8 +30,8 @@
"save_slice.locomotive_catalog_source_kind": "save-direct-locomotive-row-run-ordinal-catalog"
},
"named_locomotive_cost": {
"Locomotive 1": 250000,
"Locomotive 101": 325000
"2-D-2": 250000,
"VL80T": 325000
},
"packed_event_collection": {
"live_entry_ids": [41],

View file

@ -7,7 +7,7 @@
"original_save_sha256": "locomotive-cost-save-slice-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"uses embedded save-native locomotive catalog entries to prove standalone save-slice execution for lower-band and upper-band locomotive cost descriptors"
"uses embedded save-native locomotive catalog entries to prove standalone save-slice execution for grounded lower-band locomotive cost descriptors"
]
},
"save_slice": {
@ -26,8 +26,8 @@
"entries_offset": 31864,
"observed_entry_count": 2,
"entries": [
{ "locomotive_id": 1, "name": "Locomotive 1" },
{ "locomotive_id": 101, "name": "Locomotive 101" }
{ "locomotive_id": 1, "name": "2-D-2" },
{ "locomotive_id": 58, "name": "VL80T" }
]
},
"special_conditions_table": null,
@ -78,7 +78,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 352,
"descriptor_label": "Locomotive 1 Cost",
"descriptor_label": "2-D-2 Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -91,7 +91,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 1 Cost to 250000",
"semantic_preview": "Set 2-D-2 Cost to 250000",
"recovered_locomotive_id": 1,
"locomotive_name": null,
"notes": [
@ -101,8 +101,8 @@
{
"group_index": 0,
"row_index": 1,
"descriptor_id": 475,
"descriptor_label": "Locomotive 101 Cost",
"descriptor_id": 409,
"descriptor_label": "VL80T Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -115,11 +115,11 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 101 Cost to 325000",
"recovered_locomotive_id": 101,
"semantic_preview": "Set VL80T Cost to 325000",
"recovered_locomotive_id": 58,
"locomotive_name": null,
"notes": [
"locomotive cost descriptor maps to live locomotive id 101"
"locomotive cost descriptor maps to live locomotive id 58"
]
}
],
@ -127,12 +127,12 @@
"decoded_actions": [
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 1",
"name": "2-D-2",
"value": 250000
},
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 101",
"name": "VL80T",
"value": 325000
}
],

View file

@ -24,17 +24,18 @@
"packed_event_collection_present": true,
"packed_event_record_count": 2,
"packed_event_decoded_record_count": 2,
"packed_event_imported_runtime_record_count": 2,
"packed_event_imported_runtime_record_count": 1,
"packed_event_parity_only_record_count": 2,
"packed_event_unsupported_record_count": 0,
"packed_event_blocked_missing_locomotive_catalog_context_count": 0,
"packed_event_blocked_evidence_blocked_descriptor_count": 1,
"packed_event_blocked_missing_condition_context_count": 0,
"packed_event_blocked_territory_condition_scope_count": 0,
"packed_event_blocked_missing_compact_control_count": 0,
"packed_event_blocked_unmapped_real_descriptor_count": 0,
"packed_event_blocked_unmapped_world_descriptor_count": 0,
"packed_event_blocked_structural_only_count": 0,
"event_runtime_record_count": 2,
"event_runtime_record_count": 1,
"total_company_cash": 0
},
"expected_state_fragment": {
@ -50,16 +51,15 @@
{
"decode_status": "parity_only",
"payload_family": "real_packed_v1",
"import_outcome": "imported",
"import_outcome": "blocked_evidence_blocked_descriptor",
"grouped_effect_rows": [
{
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_id": 457,
"descriptor_label": "Upper-Band Locomotive Availability Slot 1",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"recovered_locomotive_id": 10,
"semantic_preview": "Set Upper-Band Locomotive Availability Slot 1 to 42",
"row_shape": "scalar_assignment"
}
]

View file

@ -7,7 +7,7 @@
"original_save_sha256": "parity-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"preserves one recovered scalar locomotive-availability row that now imports through save-native locomotive catalog context and one semantically decoded imported row"
"preserves one upper-band locomotive availability tail row as explicit parity and one semantically decoded imported row"
]
},
"save_slice": {
@ -25,16 +25,16 @@
"entries_offset": 31864,
"observed_entry_count": 10,
"entries": [
{ "locomotive_id": 1, "name": "Locomotive 1" },
{ "locomotive_id": 2, "name": "Locomotive 2" },
{ "locomotive_id": 3, "name": "Locomotive 3" },
{ "locomotive_id": 4, "name": "Locomotive 4" },
{ "locomotive_id": 5, "name": "Locomotive 5" },
{ "locomotive_id": 6, "name": "Locomotive 6" },
{ "locomotive_id": 7, "name": "Locomotive 7" },
{ "locomotive_id": 8, "name": "Locomotive 8" },
{ "locomotive_id": 9, "name": "Locomotive 9" },
{ "locomotive_id": 10, "name": "Locomotive 10" }
{ "locomotive_id": 1, "name": "2-D-2" },
{ "locomotive_id": 2, "name": "E-88" },
{ "locomotive_id": 3, "name": "Adler 2-2-2" },
{ "locomotive_id": 4, "name": "USA 103" },
{ "locomotive_id": 5, "name": "American 4-4-0" },
{ "locomotive_id": 6, "name": "Atlantic 4-4-2" },
{ "locomotive_id": 7, "name": "Baldwin 0-6-0" },
{ "locomotive_id": 8, "name": "Be 5/7" },
{ "locomotive_id": 9, "name": "Beuth 2-2-2" },
{ "locomotive_id": 10, "name": "Big Boy 4-8-8-4" }
]
},
"special_conditions_table": null,
@ -83,8 +83,8 @@
{
"group_index": 0,
"row_index": 0,
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_id": 457,
"descriptor_label": "Upper-Band Locomotive Availability Slot 1",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -97,11 +97,11 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"recovered_locomotive_id": 10,
"semantic_preview": "Set Upper-Band Locomotive Availability Slot 1 to 42",
"recovered_locomotive_id": null,
"locomotive_name": null,
"notes": [
"recovered locomotive availability descriptor family now imports through save-native locomotive catalog context"
"upper-band locomotive availability descriptor tail remains explicit evidence-blocked parity"
]
}
],
@ -109,7 +109,7 @@
"executable_import_ready": false,
"notes": [
"decoded from grounded real 0x4e9a row framing",
"recovered locomotives-page descriptor band is now checked in, and this scalar family now imports through named locomotive availability overrides when the save slice carries locomotive catalog context"
"recovered locomotives-page upper-band tail remains explicit evidence-blocked parity while lower grounded ids import through named locomotive availability overrides"
]
},
{

View file

@ -31,7 +31,8 @@
"packed_event_blocked_missing_condition_context_count": 0,
"packed_event_blocked_territory_condition_scope_count": 0,
"packed_event_blocked_missing_compact_control_count": 0,
"packed_event_blocked_evidence_blocked_descriptor_count": 1,
"packed_event_blocked_evidence_blocked_descriptor_count": 0,
"packed_event_blocked_variant_or_scope_blocked_descriptor_count": 1,
"packed_event_blocked_unmapped_real_descriptor_count": 0,
"packed_event_blocked_unmapped_world_descriptor_count": 0,
"packed_event_blocked_structural_only_count": 0,
@ -68,15 +69,15 @@
{
"decode_status": "parity_only",
"payload_family": "real_packed_v1",
"import_outcome": "blocked_evidence_blocked_descriptor",
"import_outcome": "blocked_variant_or_scope_blocked_descriptor",
"grouped_effect_rows": [
{
"descriptor_id": 352,
"descriptor_label": "Locomotive 1 Cost",
"descriptor_label": "2-D-2 Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 1 Cost to -250000",
"semantic_preview": "Set 2-D-2 Cost to -250000",
"recovered_locomotive_id": 1,
"row_shape": "scalar_assignment"
}

View file

@ -143,7 +143,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 352,
"descriptor_label": "Locomotive 1 Cost",
"descriptor_label": "2-D-2 Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -156,7 +156,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 1 Cost to -250000",
"semantic_preview": "Set 2-D-2 Cost to -250000",
"recovered_locomotive_id": 1,
"locomotive_name": null,
"notes": [

View file

@ -45,7 +45,7 @@
"Big Boy": 42
},
"named_locomotive_cost": {
"Locomotive 1": 250000
"2-D-2": 250000
},
"cargo_production_overrides": {
"1": 125,
@ -103,7 +103,7 @@
},
{
"kind": "named_locomotive_cost_threshold",
"name": "Locomotive 1",
"name": "2-D-2",
"comparator": "eq",
"value": 250000
},

View file

@ -87,7 +87,7 @@
"group_index": 0,
"row_index": 0,
"descriptor_id": 250,
"descriptor_label": "Unknown Loco Available",
"descriptor_label": "Big Boy 4-8-8-4 Availability",
"target_mask_bits": 8,
"parameter_family": "locomotive_availability_scalar",
"opcode": 3,
@ -100,7 +100,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Unknown Loco Available to 42",
"semantic_preview": "Set Big Boy 4-8-8-4 Availability to 42",
"recovered_locomotive_id": 10,
"locomotive_name": null,
"notes": [
@ -111,7 +111,7 @@
"group_index": 0,
"row_index": 1,
"descriptor_id": 352,
"descriptor_label": "Locomotive 1 Cost",
"descriptor_label": "2-D-2 Cost",
"target_mask_bits": 8,
"parameter_family": "locomotive_cost_scalar",
"opcode": 3,
@ -124,7 +124,7 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Locomotive 1 Cost to 250000",
"semantic_preview": "Set 2-D-2 Cost to 250000",
"recovered_locomotive_id": 1,
"locomotive_name": null,
"notes": [
@ -257,7 +257,7 @@
},
{
"kind": "set_named_locomotive_cost",
"name": "Locomotive 1",
"name": "2-D-2",
"value": 250000
},
{
@ -333,11 +333,11 @@
"raw_condition_id": 2423,
"subtype": 4,
"flag_bytes": [144, 208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"candidate_name": "Locomotive 1",
"candidate_name": "2-D-2",
"comparator": "eq",
"metric": "Named Locomotive Cost: Locomotive 1",
"metric": "Named Locomotive Cost: 2-D-2",
"semantic_family": "world_scalar_threshold",
"semantic_preview": "Test Named Locomotive Cost: Locomotive 1 == 250000",
"semantic_preview": "Test Named Locomotive Cost: 2-D-2 == 250000",
"requires_candidate_name_binding": false,
"notes": [
"checked-in world-scalar condition metadata sample"
@ -489,7 +489,7 @@
},
{
"kind": "named_locomotive_cost_threshold",
"name": "Locomotive 1",
"name": "2-D-2",
"comparator": "eq",
"value": 250000
},