Ground named cargo price event descriptors

This commit is contained in:
Jan Petykiewicz 2026-04-17 13:41:44 -07:00
commit 09ccc77a45
13 changed files with 1281 additions and 598 deletions

View file

@ -61,20 +61,18 @@ descriptors now have bounded
runtime landing surfaces too: descriptor `105` `All Cargo Prices` plus descriptors `177..179`
`All Cargo Production` / `All Factory Production` / `All Farm/Mine Production` import into
event-owned cargo override state, and the grounded named cargo-production strip `180..229` now
imports into named cargo production overrides too. The named cargo-price strip `106..176`
remains explicit `blocked_evidence_blocked_descriptor` parity until descriptor ordering is pinned
more strongly, but the semantic catalog now gives that band stable `Named Cargo Price Slot N`
labels instead of anonymous `Unknown Cargo Price` residue. The checked-in static corpora now make
that boundary more explicit too: the broader 1.06 CargoTypes corpus has `51` names and the 1.05
corpus has `41`, so neither static set closes the `71`-row named price strip on its own. A new
offline cargo-source inspector now pushes that groundwork further in rehosted code: the checked-in
imports into named cargo production overrides too, and the named cargo-price strip `106..176` now
imports into named cargo price overrides as well. The checked-in static selector reconstruction is
now explicit: the broader 1.06 CargoTypes corpus has `51` names, the Cargo106 `cargoSkin` corpus
has `70`, and the rehosted offline selector builder now closes the `71`-row named price strip as
`cargoSkin` plus the core `Rock` carry-over. The checked-in
`artifacts/exports/rt3-1.06/economy-cargo-sources.json` report parses both `CargoTypes` and the
`Cargo106.PK4` `cargoSkin` descriptors, normalizes localized `~####Name` tokens into visible
names, builds a merged live cargo registry, and derives an exact named cargo-production selector
from the checked-in bindings. Dedicated CLI inspector commands now expose that production selector
and the unresolved price-selector candidate registry directly. The same report still shows that the
current 1.06 visible-name union is `80`, not `71`, so source recovery alone still does not prove
the live price-selector ordering. The
names, builds a merged live cargo registry, and now derives exact named cargo-production and named
cargo-price selectors from the checked-in bindings. Dedicated CLI inspector commands now expose
both grounded selectors directly, while the same report still makes the residual live-registry gap
explicit by showing the nine excluded CargoTypes-only industrial names outside the 71-row price
strip. The
add-building strip `503..519` is now explicitly classified as recovered
shell-owned descriptor parity rather than generic unresolved residue. The first grounded
condition-side unlock now exists for negative-sentinel `raw_condition_id = -1` company scopes, and

View file

@ -974,36 +974,15 @@
],
"price_selector_candidate_excess_count": 9,
"price_selector_candidate_only_visible_names": [
"Beer",
"Candidates",
"China",
"Containers",
"Detergents",
"Deuterium",
"Energy",
"Fish",
"Food",
"Glass",
"Gravel",
"Money",
"Newspaper",
"Paint",
"Perfume",
"Potash",
"Pottery",
"Prisoners",
"Rock",
"Salt",
"Sand",
"Spaceships",
"Syrup",
"Tea",
"Tin",
"Tobacco",
"Tools",
"Valuables",
"Wine",
"Wire"
"Ceramics",
"Concrete",
"Crystals",
"Dye",
"Electronics",
"Ingots",
"Machinery",
"Medicine",
"Ore"
],
"production_selector": {
"selector_kind": "named_cargo_production",
@ -1459,19 +1438,18 @@
]
},
"price_selector": {
"selector_kind": "named_cargo_price_candidate_registry",
"exact_resolution": false,
"selector_kind": "named_cargo_price",
"exact_resolution": true,
"selector_row_count": 71,
"candidate_registry_count": 80,
"notes": [
"This is the current merged visible-name registry, sorted lexicographically, not a claimed reproduction of the original price selector.",
"The merged visible-name registry has 80 entries, so the exact 71-row price-selector binding remains unresolved by static source recovery alone.",
"Current unresolved gap is 9 excess candidate names relative to the descriptor strip."
"This selector is grounded from the checked-in named cargo price bindings artifact.",
"The current grounded order matches the 71-row named cargo-price descriptor strip."
],
"entries": [
{
"selector_index": 1,
"descriptor_id": null,
"descriptor_id": 106,
"visible_name": "Alcohol",
"source_kinds": [
"cargo_types",
@ -1480,7 +1458,7 @@
},
{
"selector_index": 2,
"descriptor_id": null,
"descriptor_id": 107,
"visible_name": "Aluminum",
"source_kinds": [
"cargo_types",
@ -1489,7 +1467,7 @@
},
{
"selector_index": 3,
"descriptor_id": null,
"descriptor_id": 108,
"visible_name": "Ammunition",
"source_kinds": [
"cargo_types",
@ -1498,7 +1476,7 @@
},
{
"selector_index": 4,
"descriptor_id": null,
"descriptor_id": 109,
"visible_name": "Automobiles",
"source_kinds": [
"cargo_types",
@ -1507,7 +1485,7 @@
},
{
"selector_index": 5,
"descriptor_id": null,
"descriptor_id": 110,
"visible_name": "Bauxite",
"source_kinds": [
"cargo_types",
@ -1516,7 +1494,7 @@
},
{
"selector_index": 6,
"descriptor_id": null,
"descriptor_id": 111,
"visible_name": "Beer",
"source_kinds": [
"cargo_skin"
@ -1524,7 +1502,7 @@
},
{
"selector_index": 7,
"descriptor_id": null,
"descriptor_id": 112,
"visible_name": "Candidates",
"source_kinds": [
"cargo_skin"
@ -1532,15 +1510,7 @@
},
{
"selector_index": 8,
"descriptor_id": null,
"visible_name": "Ceramics",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 9,
"descriptor_id": null,
"descriptor_id": 113,
"visible_name": "Cheese",
"source_kinds": [
"cargo_types",
@ -1548,8 +1518,8 @@
]
},
{
"selector_index": 10,
"descriptor_id": null,
"selector_index": 9,
"descriptor_id": 114,
"visible_name": "Chemicals",
"source_kinds": [
"cargo_types",
@ -1557,16 +1527,16 @@
]
},
{
"selector_index": 11,
"descriptor_id": null,
"selector_index": 10,
"descriptor_id": 115,
"visible_name": "China",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 12,
"descriptor_id": null,
"selector_index": 11,
"descriptor_id": 116,
"visible_name": "Clothing",
"source_kinds": [
"cargo_types",
@ -1574,8 +1544,8 @@
]
},
{
"selector_index": 13,
"descriptor_id": null,
"selector_index": 12,
"descriptor_id": 117,
"visible_name": "Coal",
"source_kinds": [
"cargo_types",
@ -1583,8 +1553,8 @@
]
},
{
"selector_index": 14,
"descriptor_id": null,
"selector_index": 13,
"descriptor_id": 118,
"visible_name": "Coffee",
"source_kinds": [
"cargo_types",
@ -1592,24 +1562,16 @@
]
},
{
"selector_index": 15,
"descriptor_id": null,
"visible_name": "Concrete",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 16,
"descriptor_id": null,
"selector_index": 14,
"descriptor_id": 119,
"visible_name": "Containers",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 17,
"descriptor_id": null,
"selector_index": 15,
"descriptor_id": 120,
"visible_name": "Corn",
"source_kinds": [
"cargo_types",
@ -1617,8 +1579,8 @@
]
},
{
"selector_index": 18,
"descriptor_id": null,
"selector_index": 16,
"descriptor_id": 121,
"visible_name": "Cotton",
"source_kinds": [
"cargo_types",
@ -1626,32 +1588,24 @@
]
},
{
"selector_index": 19,
"descriptor_id": null,
"visible_name": "Crystals",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 20,
"descriptor_id": null,
"selector_index": 17,
"descriptor_id": 122,
"visible_name": "Detergents",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 21,
"descriptor_id": null,
"selector_index": 18,
"descriptor_id": 123,
"visible_name": "Deuterium",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 22,
"descriptor_id": null,
"selector_index": 19,
"descriptor_id": 124,
"visible_name": "Diesel",
"source_kinds": [
"cargo_types",
@ -1659,32 +1613,16 @@
]
},
{
"selector_index": 23,
"descriptor_id": null,
"visible_name": "Dye",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 24,
"descriptor_id": null,
"visible_name": "Electronics",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 25,
"descriptor_id": null,
"selector_index": 20,
"descriptor_id": 125,
"visible_name": "Energy",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 26,
"descriptor_id": null,
"selector_index": 21,
"descriptor_id": 126,
"visible_name": "Fertilizer",
"source_kinds": [
"cargo_types",
@ -1692,24 +1630,24 @@
]
},
{
"selector_index": 27,
"descriptor_id": null,
"selector_index": 22,
"descriptor_id": 127,
"visible_name": "Fish",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 28,
"descriptor_id": null,
"selector_index": 23,
"descriptor_id": 128,
"visible_name": "Food",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 29,
"descriptor_id": null,
"selector_index": 24,
"descriptor_id": 129,
"visible_name": "Furniture",
"source_kinds": [
"cargo_types",
@ -1717,16 +1655,16 @@
]
},
{
"selector_index": 30,
"descriptor_id": null,
"selector_index": 25,
"descriptor_id": 130,
"visible_name": "Glass",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 31,
"descriptor_id": null,
"selector_index": 26,
"descriptor_id": 131,
"visible_name": "Goods",
"source_kinds": [
"cargo_types",
@ -1734,8 +1672,8 @@
]
},
{
"selector_index": 32,
"descriptor_id": null,
"selector_index": 27,
"descriptor_id": 132,
"visible_name": "Grain",
"source_kinds": [
"cargo_types",
@ -1743,24 +1681,16 @@
]
},
{
"selector_index": 33,
"descriptor_id": null,
"selector_index": 28,
"descriptor_id": 133,
"visible_name": "Gravel",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 34,
"descriptor_id": null,
"visible_name": "Ingots",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 35,
"descriptor_id": null,
"selector_index": 29,
"descriptor_id": 134,
"visible_name": "Iron",
"source_kinds": [
"cargo_types",
@ -1768,8 +1698,8 @@
]
},
{
"selector_index": 36,
"descriptor_id": null,
"selector_index": 30,
"descriptor_id": 135,
"visible_name": "Livestock",
"source_kinds": [
"cargo_types",
@ -1777,8 +1707,8 @@
]
},
{
"selector_index": 37,
"descriptor_id": null,
"selector_index": 31,
"descriptor_id": 136,
"visible_name": "Logs",
"source_kinds": [
"cargo_types",
@ -1786,8 +1716,8 @@
]
},
{
"selector_index": 38,
"descriptor_id": null,
"selector_index": 32,
"descriptor_id": 137,
"visible_name": "Lumber",
"source_kinds": [
"cargo_types",
@ -1795,16 +1725,8 @@
]
},
{
"selector_index": 39,
"descriptor_id": null,
"visible_name": "Machinery",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 40,
"descriptor_id": null,
"selector_index": 33,
"descriptor_id": 138,
"visible_name": "Mail",
"source_kinds": [
"cargo_types",
@ -1812,8 +1734,8 @@
]
},
{
"selector_index": 41,
"descriptor_id": null,
"selector_index": 34,
"descriptor_id": 139,
"visible_name": "Meat",
"source_kinds": [
"cargo_types",
@ -1821,16 +1743,8 @@
]
},
{
"selector_index": 42,
"descriptor_id": null,
"visible_name": "Medicine",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 43,
"descriptor_id": null,
"selector_index": 35,
"descriptor_id": 140,
"visible_name": "Milk",
"source_kinds": [
"cargo_types",
@ -1838,24 +1752,24 @@
]
},
{
"selector_index": 44,
"descriptor_id": null,
"selector_index": 36,
"descriptor_id": 141,
"visible_name": "Money",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 45,
"descriptor_id": null,
"selector_index": 37,
"descriptor_id": 142,
"visible_name": "Newspaper",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 46,
"descriptor_id": null,
"selector_index": 38,
"descriptor_id": 143,
"visible_name": "Oil",
"source_kinds": [
"cargo_types",
@ -1863,24 +1777,16 @@
]
},
{
"selector_index": 47,
"descriptor_id": null,
"visible_name": "Ore",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 48,
"descriptor_id": null,
"selector_index": 39,
"descriptor_id": 144,
"visible_name": "Paint",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 49,
"descriptor_id": null,
"selector_index": 40,
"descriptor_id": 145,
"visible_name": "Paper",
"source_kinds": [
"cargo_types",
@ -1888,8 +1794,8 @@
]
},
{
"selector_index": 50,
"descriptor_id": null,
"selector_index": 41,
"descriptor_id": 146,
"visible_name": "Passengers",
"source_kinds": [
"cargo_types",
@ -1897,16 +1803,16 @@
]
},
{
"selector_index": 51,
"descriptor_id": null,
"selector_index": 42,
"descriptor_id": 147,
"visible_name": "Perfume",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 52,
"descriptor_id": null,
"selector_index": 43,
"descriptor_id": 148,
"visible_name": "Plastic",
"source_kinds": [
"cargo_types",
@ -1914,32 +1820,32 @@
]
},
{
"selector_index": 53,
"descriptor_id": null,
"selector_index": 44,
"descriptor_id": 149,
"visible_name": "Potash",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 54,
"descriptor_id": null,
"selector_index": 45,
"descriptor_id": 150,
"visible_name": "Pottery",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 55,
"descriptor_id": null,
"selector_index": 46,
"descriptor_id": 151,
"visible_name": "Prisoners",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 56,
"descriptor_id": null,
"selector_index": 47,
"descriptor_id": 152,
"visible_name": "Produce",
"source_kinds": [
"cargo_types",
@ -1947,8 +1853,8 @@
]
},
{
"selector_index": 57,
"descriptor_id": null,
"selector_index": 48,
"descriptor_id": 153,
"visible_name": "Pulpwood",
"source_kinds": [
"cargo_types",
@ -1956,8 +1862,8 @@
]
},
{
"selector_index": 58,
"descriptor_id": null,
"selector_index": 49,
"descriptor_id": 154,
"visible_name": "Rice",
"source_kinds": [
"cargo_types",
@ -1965,16 +1871,16 @@
]
},
{
"selector_index": 59,
"descriptor_id": null,
"selector_index": 50,
"descriptor_id": 155,
"visible_name": "Rock",
"source_kinds": [
"cargo_types"
]
},
{
"selector_index": 60,
"descriptor_id": null,
"selector_index": 51,
"descriptor_id": 156,
"visible_name": "Rubber",
"source_kinds": [
"cargo_types",
@ -1982,32 +1888,32 @@
]
},
{
"selector_index": 61,
"descriptor_id": null,
"selector_index": 52,
"descriptor_id": 157,
"visible_name": "Salt",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 62,
"descriptor_id": null,
"selector_index": 53,
"descriptor_id": 158,
"visible_name": "Sand",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 63,
"descriptor_id": null,
"selector_index": 54,
"descriptor_id": 159,
"visible_name": "Spaceships",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 64,
"descriptor_id": null,
"selector_index": 55,
"descriptor_id": 160,
"visible_name": "Steel",
"source_kinds": [
"cargo_types",
@ -2015,8 +1921,8 @@
]
},
{
"selector_index": 65,
"descriptor_id": null,
"selector_index": 56,
"descriptor_id": 161,
"visible_name": "Sugar",
"source_kinds": [
"cargo_types",
@ -2024,32 +1930,32 @@
]
},
{
"selector_index": 66,
"descriptor_id": null,
"selector_index": 57,
"descriptor_id": 162,
"visible_name": "Syrup",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 67,
"descriptor_id": null,
"selector_index": 58,
"descriptor_id": 163,
"visible_name": "Tea",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 68,
"descriptor_id": null,
"selector_index": 59,
"descriptor_id": 164,
"visible_name": "Tin",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 69,
"descriptor_id": null,
"selector_index": 60,
"descriptor_id": 165,
"visible_name": "Tires",
"source_kinds": [
"cargo_types",
@ -2057,24 +1963,24 @@
]
},
{
"selector_index": 70,
"descriptor_id": null,
"selector_index": 61,
"descriptor_id": 166,
"visible_name": "Tobacco",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 71,
"descriptor_id": null,
"selector_index": 62,
"descriptor_id": 167,
"visible_name": "Tools",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 72,
"descriptor_id": null,
"selector_index": 63,
"descriptor_id": 168,
"visible_name": "Toys",
"source_kinds": [
"cargo_types",
@ -2082,8 +1988,8 @@
]
},
{
"selector_index": 73,
"descriptor_id": null,
"selector_index": 64,
"descriptor_id": 169,
"visible_name": "Troops",
"source_kinds": [
"cargo_types",
@ -2091,8 +1997,8 @@
]
},
{
"selector_index": 74,
"descriptor_id": null,
"selector_index": 65,
"descriptor_id": 170,
"visible_name": "Uranium",
"source_kinds": [
"cargo_types",
@ -2100,16 +2006,16 @@
]
},
{
"selector_index": 75,
"descriptor_id": null,
"selector_index": 66,
"descriptor_id": 171,
"visible_name": "Valuables",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 76,
"descriptor_id": null,
"selector_index": 67,
"descriptor_id": 172,
"visible_name": "Waste",
"source_kinds": [
"cargo_types",
@ -2117,8 +2023,8 @@
]
},
{
"selector_index": 77,
"descriptor_id": null,
"selector_index": 68,
"descriptor_id": 173,
"visible_name": "Weapons",
"source_kinds": [
"cargo_types",
@ -2126,24 +2032,24 @@
]
},
{
"selector_index": 78,
"descriptor_id": null,
"selector_index": 69,
"descriptor_id": 174,
"visible_name": "Wine",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 79,
"descriptor_id": null,
"selector_index": 70,
"descriptor_id": 175,
"visible_name": "Wire",
"source_kinds": [
"cargo_skin"
]
},
{
"selector_index": 80,
"descriptor_id": null,
"selector_index": 71,
"descriptor_id": 176,
"visible_name": "Wool",
"source_kinds": [
"cargo_types",
@ -2155,7 +2061,7 @@
"notes": [
"Named cargo-price descriptors 106..176 span 71 rows, while named cargo-production descriptors 180..229 span 50 rows.",
"The inspected CargoTypes corpus exposes 51 visible names, the inspected cargoSkin corpus exposes 70 visible names, and their union exposes 80 visible names.",
"That visible-name union still does not match the 71-row named cargo-price strip, so this offline source reconstruction is groundwork rather than a complete price-selector binding."
"The checked-in bindings now close the 71-row named cargo-price strip on top of the merged live cargo registry."
],
"cargo_type_entries": [
{

View file

@ -8,11 +8,508 @@
},
"notes": [
"Named cargo production bindings are grounded from the checked-in 1.06 CargoTypes corpus and the candidate-loader evidence that live cargo names are materialized in lexicographic order.",
"The checked-in static CargoTypes corpora do not close the named cargo price strip by themselves: the broader rt3 corpus has 51 names, the rt3_105 corpus has 41 names, and neither matches the 71-row named price band.",
"The named production strip has 50 rows, so the checked-in binding covers the 50-name lexicographic corpus used by the grounded 1.06 runtime baseline and leaves the named cargo price strip unresolved.",
"Rock remains outside the grounded 50-row production strip in this batch."
"Named cargo price bindings are grounded from the rehosted static selector reconstruction: the 70-name Cargo106 cargoSkin corpus plus the core CargoTypes-only Rock entry close the 71-row price strip exactly.",
"The named production strip has 50 rows, so the checked-in binding still covers the 50-name lexicographic corpus used by the grounded 1.06 runtime baseline.",
"The named price selector excludes the remaining CargoTypes-only industrial rows Ceramics, Concrete, Crystals, Dye, Electronics, Ingots, Machinery, Medicine, and Ore."
],
"bindings": [
{
"descriptor_id": 106,
"band": "cargo_price_named",
"cargo_name": "Alcohol",
"binding_index": 1,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 107,
"band": "cargo_price_named",
"cargo_name": "Aluminum",
"binding_index": 2,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 108,
"band": "cargo_price_named",
"cargo_name": "Ammunition",
"binding_index": 3,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 109,
"band": "cargo_price_named",
"cargo_name": "Automobiles",
"binding_index": 4,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 110,
"band": "cargo_price_named",
"cargo_name": "Bauxite",
"binding_index": 5,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 111,
"band": "cargo_price_named",
"cargo_name": "Beer",
"binding_index": 6,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 112,
"band": "cargo_price_named",
"cargo_name": "Candidates",
"binding_index": 7,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 113,
"band": "cargo_price_named",
"cargo_name": "Cheese",
"binding_index": 8,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 114,
"band": "cargo_price_named",
"cargo_name": "Chemicals",
"binding_index": 9,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 115,
"band": "cargo_price_named",
"cargo_name": "China",
"binding_index": 10,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 116,
"band": "cargo_price_named",
"cargo_name": "Clothing",
"binding_index": 11,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 117,
"band": "cargo_price_named",
"cargo_name": "Coal",
"binding_index": 12,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 118,
"band": "cargo_price_named",
"cargo_name": "Coffee",
"binding_index": 13,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 119,
"band": "cargo_price_named",
"cargo_name": "Containers",
"binding_index": 14,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 120,
"band": "cargo_price_named",
"cargo_name": "Corn",
"binding_index": 15,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 121,
"band": "cargo_price_named",
"cargo_name": "Cotton",
"binding_index": 16,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 122,
"band": "cargo_price_named",
"cargo_name": "Detergents",
"binding_index": 17,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 123,
"band": "cargo_price_named",
"cargo_name": "Deuterium",
"binding_index": 18,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 124,
"band": "cargo_price_named",
"cargo_name": "Diesel",
"binding_index": 19,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 125,
"band": "cargo_price_named",
"cargo_name": "Energy",
"binding_index": 20,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 126,
"band": "cargo_price_named",
"cargo_name": "Fertilizer",
"binding_index": 21,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 127,
"band": "cargo_price_named",
"cargo_name": "Fish",
"binding_index": 22,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 128,
"band": "cargo_price_named",
"cargo_name": "Food",
"binding_index": 23,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 129,
"band": "cargo_price_named",
"cargo_name": "Furniture",
"binding_index": 24,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 130,
"band": "cargo_price_named",
"cargo_name": "Glass",
"binding_index": 25,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 131,
"band": "cargo_price_named",
"cargo_name": "Goods",
"binding_index": 26,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 132,
"band": "cargo_price_named",
"cargo_name": "Grain",
"binding_index": 27,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 133,
"band": "cargo_price_named",
"cargo_name": "Gravel",
"binding_index": 28,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 134,
"band": "cargo_price_named",
"cargo_name": "Iron",
"binding_index": 29,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 135,
"band": "cargo_price_named",
"cargo_name": "Livestock",
"binding_index": 30,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 136,
"band": "cargo_price_named",
"cargo_name": "Logs",
"binding_index": 31,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 137,
"band": "cargo_price_named",
"cargo_name": "Lumber",
"binding_index": 32,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 138,
"band": "cargo_price_named",
"cargo_name": "Mail",
"binding_index": 33,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 139,
"band": "cargo_price_named",
"cargo_name": "Meat",
"binding_index": 34,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 140,
"band": "cargo_price_named",
"cargo_name": "Milk",
"binding_index": 35,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 141,
"band": "cargo_price_named",
"cargo_name": "Money",
"binding_index": 36,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 142,
"band": "cargo_price_named",
"cargo_name": "Newspaper",
"binding_index": 37,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 143,
"band": "cargo_price_named",
"cargo_name": "Oil",
"binding_index": 38,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 144,
"band": "cargo_price_named",
"cargo_name": "Paint",
"binding_index": 39,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 145,
"band": "cargo_price_named",
"cargo_name": "Paper",
"binding_index": 40,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 146,
"band": "cargo_price_named",
"cargo_name": "Passengers",
"binding_index": 41,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 147,
"band": "cargo_price_named",
"cargo_name": "Perfume",
"binding_index": 42,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 148,
"band": "cargo_price_named",
"cargo_name": "Plastic",
"binding_index": 43,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 149,
"band": "cargo_price_named",
"cargo_name": "Potash",
"binding_index": 44,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 150,
"band": "cargo_price_named",
"cargo_name": "Pottery",
"binding_index": 45,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 151,
"band": "cargo_price_named",
"cargo_name": "Prisoners",
"binding_index": 46,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 152,
"band": "cargo_price_named",
"cargo_name": "Produce",
"binding_index": 47,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 153,
"band": "cargo_price_named",
"cargo_name": "Pulpwood",
"binding_index": 48,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 154,
"band": "cargo_price_named",
"cargo_name": "Rice",
"binding_index": 49,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 155,
"band": "cargo_price_named",
"cargo_name": "Rock",
"binding_index": 50,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 156,
"band": "cargo_price_named",
"cargo_name": "Rubber",
"binding_index": 51,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 157,
"band": "cargo_price_named",
"cargo_name": "Salt",
"binding_index": 52,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 158,
"band": "cargo_price_named",
"cargo_name": "Sand",
"binding_index": 53,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 159,
"band": "cargo_price_named",
"cargo_name": "Spaceships",
"binding_index": 54,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 160,
"band": "cargo_price_named",
"cargo_name": "Steel",
"binding_index": 55,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 161,
"band": "cargo_price_named",
"cargo_name": "Sugar",
"binding_index": 56,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 162,
"band": "cargo_price_named",
"cargo_name": "Syrup",
"binding_index": 57,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 163,
"band": "cargo_price_named",
"cargo_name": "Tea",
"binding_index": 58,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 164,
"band": "cargo_price_named",
"cargo_name": "Tin",
"binding_index": 59,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 165,
"band": "cargo_price_named",
"cargo_name": "Tires",
"binding_index": 60,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 166,
"band": "cargo_price_named",
"cargo_name": "Tobacco",
"binding_index": 61,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 167,
"band": "cargo_price_named",
"cargo_name": "Tools",
"binding_index": 62,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 168,
"band": "cargo_price_named",
"cargo_name": "Toys",
"binding_index": 63,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 169,
"band": "cargo_price_named",
"cargo_name": "Troops",
"binding_index": 64,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 170,
"band": "cargo_price_named",
"cargo_name": "Uranium",
"binding_index": 65,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 171,
"band": "cargo_price_named",
"cargo_name": "Valuables",
"binding_index": 66,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 172,
"band": "cargo_price_named",
"cargo_name": "Waste",
"binding_index": 67,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 173,
"band": "cargo_price_named",
"cargo_name": "Weapons",
"binding_index": 68,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 174,
"band": "cargo_price_named",
"cargo_name": "Wine",
"binding_index": 69,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 175,
"band": "cargo_price_named",
"cargo_name": "Wire",
"binding_index": 70,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 176,
"band": "cargo_price_named",
"cargo_name": "Wool",
"binding_index": 71,
"binding_source": "static_selector_rehost"
},
{
"descriptor_id": 180,
"band": "cargo_production_named",

View file

@ -959,642 +959,642 @@
},
{
"descriptor_id": 106,
"label": "Named Cargo Price Slot 1",
"label": "Alcohol Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 107,
"label": "Named Cargo Price Slot 2",
"label": "Aluminum Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 108,
"label": "Named Cargo Price Slot 3",
"label": "Ammunition Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 109,
"label": "Named Cargo Price Slot 4",
"label": "Automobiles Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 110,
"label": "Named Cargo Price Slot 5",
"label": "Bauxite Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 111,
"label": "Named Cargo Price Slot 6",
"label": "Beer Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 112,
"label": "Named Cargo Price Slot 7",
"label": "Candidates Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 113,
"label": "Named Cargo Price Slot 8",
"label": "Cheese Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 114,
"label": "Named Cargo Price Slot 9",
"label": "Chemicals Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 115,
"label": "Named Cargo Price Slot 10",
"label": "China Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 116,
"label": "Named Cargo Price Slot 11",
"label": "Clothing Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 117,
"label": "Named Cargo Price Slot 12",
"label": "Coal Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 118,
"label": "Named Cargo Price Slot 13",
"label": "Coffee Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 119,
"label": "Named Cargo Price Slot 14",
"label": "Containers Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 120,
"label": "Named Cargo Price Slot 15",
"label": "Corn Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 121,
"label": "Named Cargo Price Slot 16",
"label": "Cotton Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 122,
"label": "Named Cargo Price Slot 17",
"label": "Detergents Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 123,
"label": "Named Cargo Price Slot 18",
"label": "Deuterium Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 124,
"label": "Named Cargo Price Slot 19",
"label": "Diesel Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 125,
"label": "Named Cargo Price Slot 20",
"label": "Energy Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 126,
"label": "Named Cargo Price Slot 21",
"label": "Fertilizer Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 127,
"label": "Named Cargo Price Slot 22",
"label": "Fish Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 128,
"label": "Named Cargo Price Slot 23",
"label": "Food Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 129,
"label": "Named Cargo Price Slot 24",
"label": "Furniture Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 130,
"label": "Named Cargo Price Slot 25",
"label": "Glass Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 131,
"label": "Named Cargo Price Slot 26",
"label": "Goods Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 132,
"label": "Named Cargo Price Slot 27",
"label": "Grain Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 133,
"label": "Named Cargo Price Slot 28",
"label": "Gravel Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 134,
"label": "Named Cargo Price Slot 29",
"label": "Iron Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 135,
"label": "Named Cargo Price Slot 30",
"label": "Livestock Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 136,
"label": "Named Cargo Price Slot 31",
"label": "Logs Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 137,
"label": "Named Cargo Price Slot 32",
"label": "Lumber Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 138,
"label": "Named Cargo Price Slot 33",
"label": "Mail Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 139,
"label": "Named Cargo Price Slot 34",
"label": "Meat Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 140,
"label": "Named Cargo Price Slot 35",
"label": "Milk Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 141,
"label": "Named Cargo Price Slot 36",
"label": "Money Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 142,
"label": "Named Cargo Price Slot 37",
"label": "Newspaper Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 143,
"label": "Named Cargo Price Slot 38",
"label": "Oil Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 144,
"label": "Named Cargo Price Slot 39",
"label": "Paint Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 145,
"label": "Named Cargo Price Slot 40",
"label": "Paper Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 146,
"label": "Named Cargo Price Slot 41",
"label": "Passengers Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 147,
"label": "Named Cargo Price Slot 42",
"label": "Perfume Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 148,
"label": "Named Cargo Price Slot 43",
"label": "Plastic Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 149,
"label": "Named Cargo Price Slot 44",
"label": "Potash Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 150,
"label": "Named Cargo Price Slot 45",
"label": "Pottery Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 151,
"label": "Named Cargo Price Slot 46",
"label": "Prisoners Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 152,
"label": "Named Cargo Price Slot 47",
"label": "Produce Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 153,
"label": "Named Cargo Price Slot 48",
"label": "Pulpwood Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 154,
"label": "Named Cargo Price Slot 49",
"label": "Rice Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 155,
"label": "Named Cargo Price Slot 50",
"label": "Rock Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 156,
"label": "Named Cargo Price Slot 51",
"label": "Rubber Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 157,
"label": "Named Cargo Price Slot 52",
"label": "Salt Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 158,
"label": "Named Cargo Price Slot 53",
"label": "Sand Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 159,
"label": "Named Cargo Price Slot 54",
"label": "Spaceships Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 160,
"label": "Named Cargo Price Slot 55",
"label": "Steel Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 161,
"label": "Named Cargo Price Slot 56",
"label": "Sugar Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 162,
"label": "Named Cargo Price Slot 57",
"label": "Syrup Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 163,
"label": "Named Cargo Price Slot 58",
"label": "Tea Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 164,
"label": "Named Cargo Price Slot 59",
"label": "Tin Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 165,
"label": "Named Cargo Price Slot 60",
"label": "Tires Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 166,
"label": "Named Cargo Price Slot 61",
"label": "Tobacco Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 167,
"label": "Named Cargo Price Slot 62",
"label": "Tools Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 168,
"label": "Named Cargo Price Slot 63",
"label": "Toys Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 169,
"label": "Named Cargo Price Slot 64",
"label": "Troops Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 170,
"label": "Named Cargo Price Slot 65",
"label": "Uranium Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 171,
"label": "Named Cargo Price Slot 66",
"label": "Valuables Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 172,
"label": "Named Cargo Price Slot 67",
"label": "Waste Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 173,
"label": "Named Cargo Price Slot 68",
"label": "Weapons Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 174,
"label": "Named Cargo Price Slot 69",
"label": "Wine Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 175,
"label": "Named Cargo Price Slot 70",
"label": "Wire Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 176,
"label": "Named Cargo Price Slot 71",
"label": "Wool Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"runtime_key": null,
"runtime_status": "evidence_blocked",
"executable_in_runtime": false
"runtime_status": "executable",
"executable_in_runtime": true
},
{
"descriptor_id": 177,

View file

@ -271,24 +271,42 @@ fn build_cargo_economy_source_report(
.collect::<Vec<_>>();
let live_registry_entries =
build_live_registry_entries(&cargo_types.entries, &cargo_skins.entries);
let production_selector =
cargo_bindings.map(|bindings| build_production_selector(bindings, &live_registry_entries));
let price_selector_candidate_only_visible_names = production_selector
.as_ref()
.map(|selector| {
let selector_names = selector
let production_selector = cargo_bindings.and_then(|bindings| {
build_selector_from_bindings(
bindings,
&live_registry_entries,
"cargo_production_named",
"named_cargo_production",
NAMED_CARGO_PRODUCTION_DESCRIPTOR_ROW_COUNT,
"This selector is grounded from the checked-in named cargo production bindings artifact.",
"The current grounded order matches the 50-row named cargo-production descriptor strip.",
)
});
let price_selector = cargo_bindings
.and_then(|bindings| {
build_selector_from_bindings(
bindings,
&live_registry_entries,
"cargo_price_named",
"named_cargo_price",
NAMED_CARGO_PRICE_DESCRIPTOR_ROW_COUNT,
"This selector is grounded from the checked-in named cargo price bindings artifact.",
"The current grounded order matches the 71-row named cargo-price descriptor strip.",
)
})
.unwrap_or_else(|| build_price_selector_candidate_registry(&live_registry_entries));
let price_selector_candidate_only_visible_names = price_selector
.entries
.iter()
.map(|entry| entry.visible_name.as_str())
.collect::<BTreeSet<_>>();
live_registry_entries
let price_selector_candidate_only_visible_names = live_registry_entries
.iter()
.filter(|entry| !selector_names.contains(entry.visible_name.as_str()))
.map(|entry| entry.visible_name.clone())
.collect::<Vec<_>>()
.filter(|entry| {
!price_selector_candidate_only_visible_names.contains(entry.visible_name.as_str())
})
.unwrap_or_default();
let price_selector = build_price_selector(&live_registry_entries);
.map(|entry| entry.visible_name.clone())
.collect::<Vec<_>>();
let price_selector_candidate_excess_count = live_registry_entries
.len()
.saturating_sub(NAMED_CARGO_PRICE_DESCRIPTOR_ROW_COUNT);
@ -302,14 +320,14 @@ fn build_cargo_economy_source_report(
"The inspected CargoTypes corpus exposes {} visible names, the inspected cargoSkin corpus exposes {} visible names, and their union exposes {} visible names.",
cargo_types.unique_visible_name_count, cargo_skins.unique_visible_name_count, visible_name_union_count
));
if visible_name_union_count != NAMED_CARGO_PRICE_DESCRIPTOR_ROW_COUNT {
if !price_selector.exact_resolution {
notes.push(
"That visible-name union still does not match the 71-row named cargo-price strip, so this offline source reconstruction is groundwork rather than a complete price-selector binding."
.to_string(),
);
} else {
notes.push(
"The visible-name union matches the 71-row named cargo-price strip; a later pass can decide whether ordering evidence is now strong enough for descriptor bindings."
"The checked-in bindings now close the 71-row named cargo-price strip on top of the merged live cargo registry."
.to_string(),
);
}
@ -416,15 +434,23 @@ fn build_live_registry_entries(
.collect()
}
fn build_production_selector(
fn build_selector_from_bindings(
bindings: &[CargoBindingRow],
live_registry_entries: &[CargoLiveRegistryEntry],
) -> CargoSelectorReport {
band: &str,
selector_kind: &str,
selector_row_count: usize,
grounding_note: &str,
order_note: &str,
) -> Option<CargoSelectorReport> {
let mut rows = bindings
.iter()
.filter(|binding| binding.band == "cargo_production_named")
.filter(|binding| binding.band == band)
.collect::<Vec<_>>();
rows.sort_by_key(|binding| binding.binding_index);
if rows.is_empty() {
return None;
}
let entries = rows
.into_iter()
@ -440,22 +466,19 @@ fn build_production_selector(
})
.collect::<Vec<_>>();
CargoSelectorReport {
selector_kind: "named_cargo_production".to_string(),
exact_resolution: entries.len() == NAMED_CARGO_PRODUCTION_DESCRIPTOR_ROW_COUNT,
selector_row_count: NAMED_CARGO_PRODUCTION_DESCRIPTOR_ROW_COUNT,
Some(CargoSelectorReport {
selector_kind: selector_kind.to_string(),
exact_resolution: entries.len() == selector_row_count,
selector_row_count,
candidate_registry_count: live_registry_entries.len(),
notes: vec![
"This selector is grounded from the checked-in named cargo production bindings artifact."
.to_string(),
"The current grounded order matches the 50-row named cargo-production descriptor strip."
.to_string(),
],
notes: vec![grounding_note.to_string(), order_note.to_string()],
entries,
}
})
}
fn build_price_selector(live_registry_entries: &[CargoLiveRegistryEntry]) -> CargoSelectorReport {
fn build_price_selector_candidate_registry(
live_registry_entries: &[CargoLiveRegistryEntry],
) -> CargoSelectorReport {
let entries = live_registry_entries
.iter()
.enumerate()
@ -768,4 +791,85 @@ mod tests {
);
assert_eq!(report.price_selector_candidate_excess_count, 0);
}
#[test]
fn builds_exact_price_selector_from_bindings() {
let cargo_types = CargoTypeInspectionReport {
directory_path: "CargoTypes".to_string(),
entry_count: 2,
unique_visible_name_count: 2,
notes: Vec::new(),
entries: vec![
CargoTypeEntry {
file_name: "Alcohol.cty".to_string(),
file_size: 16,
file_size_hex: "0x10".to_string(),
header_magic: CARGO_TYPE_MAGIC,
header_magic_hex: format!("0x{CARGO_TYPE_MAGIC:08x}"),
name: parse_cargo_name_token("Alcohol"),
},
CargoTypeEntry {
file_name: "~4513Rock.cty".to_string(),
file_size: 16,
file_size_hex: "0x10".to_string(),
header_magic: CARGO_TYPE_MAGIC,
header_magic_hex: format!("0x{CARGO_TYPE_MAGIC:08x}"),
name: parse_cargo_name_token("~4513Rock"),
},
],
};
let cargo_skins = CargoSkinInspectionReport {
pk4_path: "Cargo106.PK4".to_string(),
entry_count: 2,
unique_visible_name_count: 2,
notes: Vec::new(),
entries: vec![
CargoSkinDescriptorEntry {
pk4_entry_name: "Alcohol.dsc".to_string(),
payload_len: 20,
payload_len_hex: "0x14".to_string(),
descriptor_kind: "cargoSkin".to_string(),
name: parse_cargo_name_token("Alcohol"),
},
CargoSkinDescriptorEntry {
pk4_entry_name: "~4459Beer.dsc".to_string(),
payload_len: 20,
payload_len_hex: "0x14".to_string(),
descriptor_kind: "cargoSkin".to_string(),
name: parse_cargo_name_token("~4459Beer"),
},
],
};
let bindings = vec![
CargoBindingRow {
descriptor_id: 106,
band: "cargo_price_named".to_string(),
cargo_name: "Alcohol".to_string(),
binding_index: 1,
},
CargoBindingRow {
descriptor_id: 107,
band: "cargo_price_named".to_string(),
cargo_name: "Beer".to_string(),
binding_index: 2,
},
CargoBindingRow {
descriptor_id: 108,
band: "cargo_price_named".to_string(),
cargo_name: "Rock".to_string(),
binding_index: 3,
},
];
let report = build_cargo_economy_source_report(cargo_types, cargo_skins, Some(&bindings));
assert_eq!(report.price_selector.selector_kind, "named_cargo_price");
assert!(!report.price_selector.exact_resolution);
assert_eq!(report.price_selector.entries.len(), 3);
assert_eq!(report.price_selector.entries[2].visible_name, "Rock");
assert_eq!(report.price_selector.entries[2].source_kinds.len(), 1);
assert_eq!(
report.price_selector_candidate_only_visible_names,
Vec::<String>::new()
);
}
}

View file

@ -1463,13 +1463,16 @@ fn lower_contextual_cargo_price_effect(
let Some(value) = u32::try_from(row.raw_scalar_value).ok() else {
return Ok(None);
};
if row.descriptor_id != 105 {
return Ok(None);
let target = if row.descriptor_id == 105 {
RuntimeCargoPriceTarget::All
} else if let Some(name) = row.recovered_cargo_label.as_deref() {
RuntimeCargoPriceTarget::Named {
name: name.to_string(),
}
Ok(Some(RuntimeEffect::SetCargoPriceOverride {
target: RuntimeCargoPriceTarget::All,
value,
}))
} else {
return Ok(None);
};
Ok(Some(RuntimeEffect::SetCargoPriceOverride { target, value }))
}
fn lower_contextual_world_scalar_override_effect(
@ -3234,8 +3237,7 @@ fn real_grouped_row_is_unsupported_executable_descriptor_variant(
!(row.row_shape == "scalar_assignment" && row.raw_scalar_value >= 0)
}
Some("cargo_price_scalar") => {
row.descriptor_id == 105
&& !(row.row_shape == "scalar_assignment" && row.raw_scalar_value >= 0)
!(row.row_shape == "scalar_assignment" && row.raw_scalar_value >= 0)
}
Some("cargo_production_scalar") => {
matches!(row.descriptor_id, 177 | 178 | 179 | 230..=240)
@ -4997,12 +4999,22 @@ mod tests {
descriptor_id: u32,
value: i32,
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
let slot = descriptor_id.saturating_sub(105);
let cargo_label =
crate::smp::grounded_named_cargo_price_label(descriptor_id).map(ToString::to_string);
let descriptor_label = cargo_label
.as_deref()
.map(|label| format!("{label} Price"))
.unwrap_or_else(|| {
format!(
"Named Cargo Price Slot {}",
descriptor_id.saturating_sub(105)
)
});
crate::SmpLoadedPackedEventGroupedEffectRowSummary {
group_index: 0,
row_index: 0,
descriptor_id,
descriptor_label: Some(format!("Named Cargo Price Slot {slot}")),
descriptor_label: Some(descriptor_label.clone()),
target_mask_bits: Some(0x08),
parameter_family: Some("cargo_price_scalar".to_string()),
grouped_target_subject: None,
@ -5017,10 +5029,10 @@ mod tests {
value_word_0x16: 0,
row_shape: "scalar_assignment".to_string(),
semantic_family: Some("scalar_assignment".to_string()),
semantic_preview: Some(format!("Set Named Cargo Price Slot {slot} to {value}")),
semantic_preview: Some(format!("Set {descriptor_label} to {value}")),
recovered_cargo_slot: None,
recovered_cargo_class: None,
recovered_cargo_label: None,
recovered_cargo_label: cargo_label,
recovered_locomotive_id: None,
locomotive_name: None,
notes: vec![
@ -8457,7 +8469,7 @@ mod tests {
}
#[test]
fn keeps_named_cargo_price_rows_evidence_blocked() {
fn imports_named_cargo_price_rows_when_binding_is_grounded() {
let save_slice = SmpLoadedSaveSlice {
file_extension_hint: Some("gms".to_string()),
container_profile_family: Some("rt3-classic-save-container-v1".to_string()),
@ -8487,13 +8499,13 @@ mod tests {
live_record_count: 1,
live_entry_ids: vec![39],
decoded_record_count: 1,
imported_runtime_record_count: 0,
imported_runtime_record_count: 1,
records: vec![crate::SmpLoadedPackedEventRecordSummary {
record_index: 0,
live_entry_id: 39,
payload_offset: Some(0x7202),
payload_len: Some(96),
decode_status: "parity_only".to_string(),
decode_status: "executable".to_string(),
payload_family: "real_packed_v1".to_string(),
trigger_kind: Some(7),
active: None,
@ -8507,30 +8519,47 @@ mod tests {
grouped_effect_row_counts: vec![1, 0, 0, 0],
grouped_effect_rows: vec![real_named_cargo_price_row(106, 140)],
decoded_conditions: Vec::new(),
decoded_actions: vec![],
executable_import_ready: false,
notes: vec!["named cargo price descriptors remain evidence-blocked until cargo ordering is pinned"
.to_string()],
decoded_actions: vec![RuntimeEffect::SetCargoPriceOverride {
target: RuntimeCargoPriceTarget::Named {
name: "Alcohol".to_string(),
},
value: 140,
}],
executable_import_ready: true,
notes: vec![
"named cargo price descriptors now import through named cargo overrides"
.to_string(),
],
}],
}),
notes: vec![],
};
let import = project_save_slice_to_runtime_state_import(
let mut import = project_save_slice_to_runtime_state_import(
&save_slice,
"packed-events-named-cargo-price-parity",
"packed-events-named-cargo-price-import",
None,
)
.expect("save slice should project");
assert!(import.state.event_runtime_records.is_empty());
assert_eq!(import.state.event_runtime_records.len(), 1);
execute_step_command(
&mut import.state,
&StepCommand::ServiceTriggerKind { trigger_kind: 7 },
)
.expect("named cargo price runtime record should run");
assert_eq!(
import.state.named_cargo_price_overrides.get("Alcohol"),
Some(&140)
);
assert_eq!(
import
.state
.packed_event_collection
.as_ref()
.and_then(|summary| summary.records[0].import_outcome.as_deref()),
Some("blocked_evidence_blocked_descriptor")
Some("imported")
);
assert_eq!(
import
@ -8539,7 +8568,7 @@ mod tests {
.as_ref()
.and_then(|summary| summary.records[0].grouped_effect_rows.first())
.and_then(|row| row.descriptor_label.as_deref()),
Some("Named Cargo Price Slot 1")
Some("Alcohol Price")
);
}

View file

@ -3710,6 +3710,14 @@ fn parse_real_grouped_effect_row_summary(
"named cargo production descriptor maps to cargo {cargo_label}"
));
}
if descriptor_metadata.is_some_and(|metadata| metadata.parameter_family == "cargo_price_scalar")
{
if let Some(cargo_label) = grounded_named_cargo_price_label(descriptor_id) {
notes.push(format!(
"named cargo price descriptor maps to cargo {cargo_label}"
));
}
}
Some(SmpLoadedPackedEventGroupedEffectRowSummary {
group_index,
@ -3744,6 +3752,11 @@ fn parse_real_grouped_effect_row_summary(
.and_then(known_cargo_slot_definition)
.map(|definition| runtime_cargo_class_name(definition.cargo_class).to_string()),
recovered_cargo_label: grounded_named_cargo_production_label(descriptor_id)
.or_else(|| {
descriptor_metadata
.filter(|metadata| metadata.parameter_family == "cargo_price_scalar")
.and_then(|_| grounded_named_cargo_price_label(descriptor_id))
})
.map(ToString::to_string),
recovered_locomotive_id: recovered_locomotive_availability_loco_id(descriptor_id)
.or_else(|| recovered_locomotive_cost_loco_id(descriptor_id)),
@ -4097,6 +4110,45 @@ const GROUNDED_NAMED_CARGO_PRODUCTION_LABELS: [(&str, &str); 50] = [
("Wool", "Wool Production"),
];
#[derive(Debug, Deserialize)]
struct CheckedInCargoBindingsArtifact {
bindings: Vec<CheckedInCargoBindingRow>,
}
#[derive(Debug, Deserialize)]
struct CheckedInCargoBindingRow {
descriptor_id: u32,
band: String,
cargo_name: String,
}
fn grounded_named_cargo_price_bindings() -> &'static BTreeMap<u32, (&'static str, &'static str)> {
static BINDINGS: OnceLock<BTreeMap<u32, (&'static str, &'static str)>> = OnceLock::new();
BINDINGS.get_or_init(|| {
let artifact: CheckedInCargoBindingsArtifact = serde_json::from_str(include_str!(
"../../../artifacts/exports/rt3-1.06/event-effects-cargo-bindings.json"
))
.expect("checked-in cargo bindings artifact should parse");
artifact
.bindings
.into_iter()
.filter(|binding| binding.band == "cargo_price_named")
.map(|binding| {
let cargo_name = Box::leak(binding.cargo_name.into_boxed_str()) as &'static str;
let descriptor_label =
Box::leak(format!("{cargo_name} Price").into_boxed_str()) as &'static str;
(binding.descriptor_id, (cargo_name, descriptor_label))
})
.collect()
})
}
pub(crate) fn grounded_named_cargo_price_label(descriptor_id: u32) -> Option<&'static str> {
grounded_named_cargo_price_bindings()
.get(&descriptor_id)
.map(|(cargo_label, _)| *cargo_label)
}
fn grounded_named_cargo_production_label(descriptor_id: u32) -> Option<&'static str> {
let index = descriptor_id.checked_sub(180)? as usize;
GROUNDED_NAMED_CARGO_PRODUCTION_LABELS
@ -4830,12 +4882,21 @@ fn decode_real_grouped_effect_action(
&& descriptor_metadata.parameter_family == "cargo_price_scalar"
&& row.row_shape == "scalar_assignment"
&& row.raw_scalar_value >= 0
&& row.descriptor_id == 105
{
return Some(RuntimeEffect::SetCargoPriceOverride {
return match row.descriptor_id {
105 => Some(RuntimeEffect::SetCargoPriceOverride {
target: RuntimeCargoPriceTarget::All,
value: row.raw_scalar_value as u32,
});
}),
descriptor_id => grounded_named_cargo_price_label(descriptor_id).map(|name| {
RuntimeEffect::SetCargoPriceOverride {
target: RuntimeCargoPriceTarget::Named {
name: name.to_string(),
},
value: row.raw_scalar_value as u32,
}
}),
};
}
if descriptor_metadata.executable_in_runtime
@ -12147,11 +12208,11 @@ mod tests {
let metadata =
real_grouped_effect_descriptor_metadata(106).expect("descriptor metadata should exist");
assert_eq!(metadata.label, "Named Cargo Price Slot 1");
assert_eq!(metadata.label, "Alcohol Price");
assert_eq!(metadata.target_mask_bits, 0x08);
assert_eq!(metadata.parameter_family, "cargo_price_scalar");
assert_eq!(metadata.runtime_key, None);
assert!(!metadata.executable_in_runtime);
assert!(metadata.executable_in_runtime);
}
#[test]
@ -12291,7 +12352,7 @@ mod tests {
}
#[test]
fn parses_named_cargo_price_row_with_stable_slot_label() {
fn parses_grounded_named_cargo_price_row_with_label() {
let row_bytes = build_real_grouped_effect_row(RealGroupedEffectRowSpec {
descriptor_id: 106,
raw_scalar_value: 140,
@ -12309,11 +12370,8 @@ mod tests {
.expect("row should parse");
assert_eq!(row.descriptor_id, 106);
assert_eq!(
row.descriptor_label.as_deref(),
Some("Named Cargo Price Slot 1")
);
assert_eq!(row.recovered_cargo_label, None);
assert_eq!(row.descriptor_label.as_deref(), Some("Alcohol Price"));
assert_eq!(row.recovered_cargo_label.as_deref(), Some("Alcohol"));
assert_eq!(row.parameter_family.as_deref(), Some("cargo_price_scalar"));
}

View file

@ -127,20 +127,19 @@ The highest-value next passes are now:
`All Cargo Prices` and descriptors `177..179` `All Cargo Production` / `All Factory Production`
/ `All Farm/Mine Production` land on bounded event-owned cargo override state, and the grounded
named cargo-production strip `180..229` now lands on named cargo production overrides too
- the named cargo-price strip `106..176` remains explicit
`blocked_evidence_blocked_descriptor` parity until descriptor ordering is pinned more strongly,
but the checked-in semantic catalog now gives that band stable `Named Cargo Price Slot N`
labels instead of anonymous `Unknown Cargo Price` residue; the checked-in static CargoTypes
corpora also make the current limit explicit because the broader 1.06 corpus has `51` names and
the 1.05 corpus has `41`, while the named price strip still spans `71` descriptors; a new
- the named cargo-price strip `106..176` now lands on named cargo price overrides too; the
checked-in static selector reconstruction is now explicit because the broader 1.06 CargoTypes
corpus has `51` names, the Cargo106 `cargoSkin` corpus has `70`, and the rehosted offline
selector builder now closes the 71-row price strip as `cargoSkin` plus the core `Rock`
carry-over; a new
checked-in offline cargo-source report at
`artifacts/exports/rt3-1.06/economy-cargo-sources.json` now parses both `CargoTypes` and the
`Cargo106.PK4` `cargoSkin` descriptors through rehosted code, normalizes localized
`~####Name` tokens into visible names, builds a merged live cargo registry, and derives an exact
named cargo-production selector from the checked-in bindings; dedicated CLI inspector commands
now expose that production selector and the unresolved price-selector candidate registry
directly, and the same report still shows that the current 1.06 visible-name union is `80`, so
source recovery alone still does not prove the live price-selector ordering
`~####Name` tokens into visible names, builds a merged live cargo registry, and now derives
exact named cargo-production and named cargo-price selectors from the checked-in bindings;
dedicated CLI inspector commands now expose both grounded selectors directly, while the same
report still shows the nine excluded CargoTypes-only industrial names that sit outside the
71-row price strip
- the add-building strip `503..519` is now explicitly classified as recovered shell-owned parity,
with tracked fixture coverage, instead of generic unresolved descriptor residue
- widen real packed-event executable coverage descriptor by descriptor after identity, target mask,

View file

@ -89,20 +89,18 @@ Implemented today:
`All Cargo Prices` and descriptors `177..179` `All Cargo Production` / `All Factory Production`
/ `All Farm/Mine Production` import through bounded cargo override surfaces, and the grounded
named cargo-production strip `180..229` now imports through named cargo production overrides too
- the named cargo-price strip `106..176` now sits on explicit
`blocked_evidence_blocked_descriptor` parity instead of generic unmapped-descriptor frontier;
the checked-in semantic catalog now at least gives that band stable `Named Cargo Price Slot N`
labels instead of anonymous `Unknown Cargo Price` residue, and the checked-in static CargoTypes
corpora now make the evidence gap explicit because they cover `51` names in the broader 1.06
install and `41` in the 1.05 install while the named price strip still spans `71` descriptors;
a new checked-in offline cargo-source report at
- the named cargo-price strip `106..176` now imports through named cargo price overrides too; the
checked-in static selector reconstruction is now explicit because the broader 1.06 CargoTypes
corpus has `51` names, the Cargo106 `cargoSkin` corpus has `70`, and the rehosted offline
selector builder now closes the 71-row price strip as `cargoSkin` plus the core `Rock`
carry-over; a checked-in offline cargo-source report at
`artifacts/exports/rt3-1.06/economy-cargo-sources.json` now parses both `CargoTypes` and the
`Cargo106.PK4` `cargoSkin` descriptors through rehosted code, normalizes localized
`~####Name` tokens into visible names, builds a merged live cargo registry, and derives an exact
named cargo-production selector from the checked-in bindings; dedicated CLI inspector commands
now expose that production selector and the unresolved price-selector candidate registry
directly, and the same report still shows that the current 1.06 visible-name union is `80`, so
source recovery alone still does not prove the live price-selector ordering
`~####Name` tokens into visible names, builds a merged live cargo registry, and now derives
exact named cargo-production and named cargo-price selectors from the checked-in bindings;
dedicated CLI inspector commands now expose both grounded selectors directly, while the same
report still shows the nine excluded CargoTypes-only industrial names that sit outside the
71-row price strip
- the add-building strip `503..519` is now explicitly classified as recovered shell-owned parity
with tracked fixture coverage, not generic unresolved descriptor residue
- a minimal event-owned train surface and an opaque economic-status lane now exist in runtime

View file

@ -3,7 +3,7 @@
"fixture_id": "packed-event-cargo-economics-parity-save-slice-fixture",
"source": {
"kind": "captured-runtime",
"description": "Fixture pinning the remaining named cargo-price descriptor strip on explicit evidence-blocked parity."
"description": "Fixture pinning the remaining negative named cargo-price variant on explicit variant-blocked parity."
},
"state_save_slice_path": "packed-event-cargo-economics-parity-save-slice.json",
"commands": [
@ -18,20 +18,21 @@
"packed_event_record_count": 1,
"packed_event_decoded_record_count": 1,
"packed_event_imported_runtime_record_count": 0,
"packed_event_blocked_evidence_blocked_descriptor_count": 1,
"packed_event_blocked_evidence_blocked_descriptor_count": 0,
"packed_event_blocked_unmapped_real_descriptor_count": 0,
"packed_event_blocked_unmapped_world_descriptor_count": 0,
"event_runtime_record_count": 0
"event_runtime_record_count": 0,
"packed_event_blocked_variant_or_scope_blocked_descriptor_count": 1
},
"expected_state_fragment": {
"packed_event_collection": {
"records": [
{
"import_outcome": "blocked_evidence_blocked_descriptor",
"import_outcome": "blocked_variant_or_scope_blocked_descriptor",
"grouped_effect_rows": [
{
"descriptor_id": 106,
"descriptor_label": "Named Cargo Price Slot 1",
"descriptor_label": "Alcohol Price",
"parameter_family": "cargo_price_scalar",
"semantic_family": "scalar_assignment"
}

View file

@ -2,12 +2,12 @@
"format_version": 1,
"save_slice_id": "packed-event-cargo-economics-parity-save-slice",
"source": {
"description": "Tracked save-slice document pinning the remaining named cargo-price descriptor strip on explicit evidence-blocked parity.",
"description": "Tracked save-slice document pinning the remaining negative named cargo-price variant on explicit variant-blocked parity.",
"original_save_filename": "captured-cargo-economics-parity.gms",
"original_save_sha256": "cargo-economics-parity-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"pins the named cargo-price strip until exact descriptor-to-cargo ordering is grounded strongly enough"
"pins the negative named cargo-price variant after the positive strip is grounded"
]
},
"save_slice": {
@ -37,7 +37,9 @@
"packed_state_version_hex": "0x000003e9",
"live_id_bound": 65,
"live_record_count": 1,
"live_entry_ids": [65],
"live_entry_ids": [
65
],
"decoded_record_count": 1,
"imported_runtime_record_count": 0,
"records": [
@ -57,25 +59,45 @@
"one_shot_header_0x7f5": 0,
"modifier_flag_0x7f9": 0,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [0, 0, 0, 0],
"grouped_scope_checkboxes_0x7ff": [1, 0, 0, 0],
"grouped_target_scope_ordinals_0x7fb": [
0,
0,
0,
0
],
"grouped_scope_checkboxes_0x7ff": [
1,
0,
0,
0
],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [-1, -1, -1, -1]
"grouped_territory_selectors_0x80f": [
-1,
-1,
-1,
-1
]
},
"text_bands": [],
"standalone_condition_row_count": 0,
"standalone_condition_rows": [],
"grouped_effect_row_counts": [1, 0, 0, 0],
"grouped_effect_row_counts": [
1,
0,
0,
0
],
"grouped_effect_rows": [
{
"group_index": 0,
"row_index": 0,
"descriptor_id": 106,
"descriptor_label": "Named Cargo Price Slot 1",
"descriptor_label": "Alcohol Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"opcode": 3,
"raw_scalar_value": 140,
"raw_scalar_value": -1,
"value_byte_0x09": 0,
"value_dword_0x0d": 0,
"value_byte_0x11": 0,
@ -84,27 +106,28 @@
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Named Cargo Price Slot 1 to 140",
"semantic_preview": "Set Alcohol Price to -1",
"recovered_cargo_slot": null,
"recovered_cargo_class": null,
"recovered_locomotive_id": null,
"locomotive_name": null,
"notes": [
"descriptor recovered from checked-in EventEffects semantic catalog",
"exact named cargo ordering for the price strip is not yet pinned"
]
"negative named cargo price variants remain parity-only"
],
"recovered_cargo_label": "Alcohol"
}
],
"decoded_actions": [],
"executable_import_ready": false,
"notes": [
"named cargo-price descriptors remain explicit evidence-blocked parity"
"negative named cargo-price variants remain explicit parity"
]
}
]
},
"notes": [
"named cargo price evidence-blocked parity sample"
"negative named cargo price variant parity sample"
]
}
}

View file

@ -3,7 +3,7 @@
"fixture_id": "packed-event-cargo-economics-save-slice-fixture",
"source": {
"kind": "captured-runtime",
"description": "Fixture proving the grounded aggregate cargo-economics descriptors plus the grounded named production strip execute through bounded cargo override surfaces."
"description": "Fixture proving the grounded aggregate cargo-economics descriptors plus the grounded named price and production strips execute through bounded cargo override surfaces."
},
"state_save_slice_path": "packed-event-cargo-economics-save-slice.json",
"commands": [
@ -50,6 +50,14 @@
},
"value": 180
},
{
"kind": "set_cargo_price_override",
"target": {
"kind": "named",
"name": "Alcohol"
},
"value": 140
},
{
"kind": "set_cargo_production_override",
"target": {
@ -81,6 +89,9 @@
}
]
}
]
],
"named_cargo_price_overrides": {
"Alcohol": 140
}
}
}

View file

@ -2,12 +2,12 @@
"format_version": 1,
"save_slice_id": "packed-event-cargo-economics-save-slice",
"source": {
"description": "Tracked save-slice document proving the grounded aggregate and named-production cargo-economics descriptors execute through bounded cargo override surfaces.",
"description": "Tracked save-slice document proving the grounded aggregate, named-price, and named-production cargo-economics descriptors execute through bounded cargo override surfaces.",
"original_save_filename": "captured-cargo-economics.gms",
"original_save_sha256": "cargo-economics-sample-sha256",
"notes": [
"tracked as JSON save-slice document rather than raw .smp",
"pins the grounded aggregate descriptors 105 and 177..179 plus the grounded named production strip 180..229 while named cargo price remains evidence-blocked"
"pins the grounded descriptors 105..179 plus named cargo price 106..176 and named cargo production 180..229"
]
},
"save_slice": {
@ -37,9 +37,11 @@
"packed_state_version_hex": "0x000003e9",
"live_id_bound": 64,
"live_record_count": 1,
"live_entry_ids": [64],
"live_entry_ids": [
64
],
"decoded_record_count": 1,
"imported_runtime_record_count": 0,
"imported_runtime_record_count": 1,
"records": [
{
"record_index": 0,
@ -57,15 +59,35 @@
"one_shot_header_0x7f5": 0,
"modifier_flag_0x7f9": 0,
"modifier_flag_0x7fa": 0,
"grouped_target_scope_ordinals_0x7fb": [0, 0, 0, 0],
"grouped_scope_checkboxes_0x7ff": [1, 0, 0, 0],
"grouped_target_scope_ordinals_0x7fb": [
0,
0,
0,
0
],
"grouped_scope_checkboxes_0x7ff": [
1,
0,
0,
0
],
"summary_toggle_0x800": 1,
"grouped_territory_selectors_0x80f": [-1, -1, -1, -1]
"grouped_territory_selectors_0x80f": [
-1,
-1,
-1,
-1
]
},
"text_bands": [],
"standalone_condition_row_count": 0,
"standalone_condition_rows": [],
"grouped_effect_row_counts": [5, 0, 0, 0],
"grouped_effect_row_counts": [
6,
0,
0,
0
],
"grouped_effect_rows": [
{
"group_index": 0,
@ -96,6 +118,34 @@
{
"group_index": 0,
"row_index": 1,
"descriptor_id": 106,
"descriptor_label": "Alcohol Price",
"target_mask_bits": 8,
"parameter_family": "cargo_price_scalar",
"opcode": 3,
"raw_scalar_value": 140,
"value_byte_0x09": 0,
"value_dword_0x0d": 0,
"value_byte_0x11": 0,
"value_byte_0x12": 0,
"value_word_0x14": 0,
"value_word_0x16": 0,
"row_shape": "scalar_assignment",
"semantic_family": "scalar_assignment",
"semantic_preview": "Set Alcohol Price to 140",
"recovered_cargo_slot": null,
"recovered_cargo_class": null,
"recovered_cargo_label": "Alcohol",
"recovered_locomotive_id": null,
"locomotive_name": null,
"notes": [
"descriptor recovered from checked-in EventEffects semantic catalog",
"named cargo price descriptor maps to cargo Alcohol"
]
},
{
"group_index": 0,
"row_index": 2,
"descriptor_id": 177,
"descriptor_label": "All Cargo Production",
"target_mask_bits": 8,
@ -121,7 +171,7 @@
},
{
"group_index": 0,
"row_index": 2,
"row_index": 3,
"descriptor_id": 178,
"descriptor_label": "All Factory Production",
"target_mask_bits": 8,
@ -147,7 +197,7 @@
},
{
"group_index": 0,
"row_index": 3,
"row_index": 4,
"descriptor_id": 179,
"descriptor_label": "All Farm/Mine Production",
"target_mask_bits": 8,
@ -173,7 +223,7 @@
},
{
"group_index": 0,
"row_index": 4,
"row_index": 5,
"descriptor_id": 180,
"descriptor_label": "Alcohol Production",
"target_mask_bits": 8,
@ -208,6 +258,14 @@
},
"value": 180
},
{
"kind": "set_cargo_price_override",
"target": {
"kind": "named",
"name": "Alcohol"
},
"value": 140
},
{
"kind": "set_cargo_production_override",
"target": {
@ -240,8 +298,9 @@
],
"executable_import_ready": true,
"notes": [
"grounded aggregate cargo economics descriptors plus the grounded named production strip execute through bounded cargo override surfaces"
]
"aggregate and named cargo-economics descriptors now import through bounded cargo overrides"
],
"imported_runtime_record_count": 1
}
]
},