Tighten static cargo and selection context proofs
This commit is contained in:
parent
40c0e94ad5
commit
b06abb24a7
12 changed files with 507 additions and 19 deletions
12
README.md
12
README.md
|
|
@ -32,7 +32,8 @@ save-slice fixtures without overlay snapshots when that context is present; raw
|
||||||
still does not reconstruct those company/chairman collections automatically, but it now does
|
still does not reconstruct those company/chairman collections automatically, but it now does
|
||||||
reconstruct selection-only company/chairman context from the fixed save-side `0x32c8` world block.
|
reconstruct selection-only company/chairman context from the fixed save-side `0x32c8` world block.
|
||||||
Those raw selected ids can flow through save-slice export/import and override overlay-backed base
|
Those raw selected ids can flow through save-slice export/import and override overlay-backed base
|
||||||
selection even while the full raw rosters remain absent. A checked-in
|
selection even while the full raw rosters remain absent, and a tracked overlay fixture now pins
|
||||||
|
that selection-only override path explicitly. A checked-in
|
||||||
`EventEffects` export now exists too in
|
`EventEffects` export now exists too in
|
||||||
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer now
|
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer now
|
||||||
exists beside it in `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`. Recovered
|
exists beside it in `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`. Recovered
|
||||||
|
|
@ -44,7 +45,8 @@ company-governance scalar effect surface:
|
||||||
descriptor `56` `Credit Rating` and descriptor `57` `Prime Rate` execute from ordinary real packed
|
descriptor `56` `Credit Rating` and descriptor `57` `Prime Rate` execute from ordinary real packed
|
||||||
rows, while adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices`
|
rows, while adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices`
|
||||||
and `58` `Merger Premium` now land on explicit shell-owned parity instead of anonymous unmapped
|
and `58` `Merger Premium` now land on explicit shell-owned parity instead of anonymous unmapped
|
||||||
descriptor residue. The recovered whole-game scalar economy/performance strip `59..104` now has a
|
descriptor residue, and tracked shell-owned fixtures now pin both finance rows explicitly. The
|
||||||
|
recovered whole-game scalar economy/performance strip `59..104` now has a
|
||||||
bounded runtime landing surface too: representative descriptors import into
|
bounded runtime landing surface too: representative descriptors import into
|
||||||
`RuntimeState.world_scalar_overrides` through stable normalized keys such as
|
`RuntimeState.world_scalar_overrides` through stable normalized keys such as
|
||||||
`world.build_stations_cost`, `world.track_maintenance_cost`, `world.all_engine_speeds`, and
|
`world.build_stations_cost`, `world.track_maintenance_cost`, `world.all_engine_speeds`, and
|
||||||
|
|
@ -59,8 +61,10 @@ event-owned cargo override state, and the grounded named cargo-production strip
|
||||||
imports into named cargo production overrides too. The named cargo-price strip `106..176`
|
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
|
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`
|
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 add-building strip `503..519` is
|
labels instead of anonymous `Unknown Cargo Price` residue. The checked-in static corpora now make
|
||||||
now explicitly classified as recovered
|
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. The
|
||||||
|
add-building strip `503..519` is now explicitly classified as recovered
|
||||||
shell-owned descriptor parity rather than generic unresolved residue. The first grounded
|
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
|
condition-side unlock now exists for negative-sentinel `raw_condition_id = -1` company scopes, and
|
||||||
the first ordinary nonnegative condition batch now executes too: numeric-threshold company
|
the first ordinary nonnegative condition batch now executes too: numeric-threshold company
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,14 @@
|
||||||
{
|
{
|
||||||
"binding_catalog_version": 1,
|
"binding_catalog_version": 1,
|
||||||
|
"static_corpus_counts": {
|
||||||
|
"named_cargo_price_row_count": 71,
|
||||||
|
"named_cargo_production_row_count": 50,
|
||||||
|
"rt3_cargo_types_count": 51,
|
||||||
|
"rt3_105_cargo_types_count": 41
|
||||||
|
},
|
||||||
"notes": [
|
"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.",
|
"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.",
|
"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."
|
"Rock remains outside the grounded 50-row production strip in this batch."
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -4548,9 +4548,15 @@ mod tests {
|
||||||
.join(
|
.join(
|
||||||
"../../fixtures/runtime/packed-event-company-governance-condition-save-slice-fixture.json",
|
"../../fixtures/runtime/packed-event-company-governance-condition-save-slice-fixture.json",
|
||||||
);
|
);
|
||||||
|
let selection_only_context_overlay_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
|
.join(
|
||||||
|
"../../fixtures/runtime/packed-event-selection-only-context-overlay-fixture.json",
|
||||||
|
);
|
||||||
let credit_rating_descriptor_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(
|
let credit_rating_descriptor_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(
|
||||||
"../../fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json",
|
"../../fixtures/runtime/packed-event-credit-rating-descriptor-save-slice-fixture.json",
|
||||||
);
|
);
|
||||||
|
let stock_prices_shell_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||||
|
.join("../../fixtures/runtime/packed-event-stock-prices-shell-save-slice-fixture.json");
|
||||||
let merger_premium_shell_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(
|
let merger_premium_shell_save_fixture = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(
|
||||||
"../../fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json",
|
"../../fixtures/runtime/packed-event-merger-premium-shell-save-slice-fixture.json",
|
||||||
);
|
);
|
||||||
|
|
@ -4651,8 +4657,12 @@ mod tests {
|
||||||
.expect("overlay-backed company governance condition fixture should summarize");
|
.expect("overlay-backed company governance condition fixture should summarize");
|
||||||
run_runtime_summarize_fixture(&company_governance_condition_save_fixture)
|
run_runtime_summarize_fixture(&company_governance_condition_save_fixture)
|
||||||
.expect("save-slice-backed company governance condition fixture should summarize");
|
.expect("save-slice-backed company governance condition fixture should summarize");
|
||||||
|
run_runtime_summarize_fixture(&selection_only_context_overlay_fixture)
|
||||||
|
.expect("overlay-backed selection-only save context fixture should summarize");
|
||||||
run_runtime_summarize_fixture(&credit_rating_descriptor_save_fixture)
|
run_runtime_summarize_fixture(&credit_rating_descriptor_save_fixture)
|
||||||
.expect("save-slice-backed credit-rating descriptor fixture should summarize");
|
.expect("save-slice-backed credit-rating descriptor fixture should summarize");
|
||||||
|
run_runtime_summarize_fixture(&stock_prices_shell_save_fixture)
|
||||||
|
.expect("save-slice-backed shell-owned stock-prices fixture should summarize");
|
||||||
run_runtime_summarize_fixture(&merger_premium_shell_save_fixture)
|
run_runtime_summarize_fixture(&merger_premium_shell_save_fixture)
|
||||||
.expect("save-slice-backed shell-owned merger-premium fixture should summarize");
|
.expect("save-slice-backed shell-owned merger-premium fixture should summarize");
|
||||||
run_runtime_summarize_fixture(&investor_confidence_condition_save_fixture)
|
run_runtime_summarize_fixture(&investor_confidence_condition_save_fixture)
|
||||||
|
|
|
||||||
|
|
@ -4238,6 +4238,41 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn real_stock_prices_shell_row(
|
||||||
|
value: i32,
|
||||||
|
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
|
||||||
|
crate::SmpLoadedPackedEventGroupedEffectRowSummary {
|
||||||
|
group_index: 0,
|
||||||
|
row_index: 0,
|
||||||
|
descriptor_id: 55,
|
||||||
|
descriptor_label: Some("Stock Prices".to_string()),
|
||||||
|
target_mask_bits: Some(0x0b),
|
||||||
|
parameter_family: Some("company_finance_shell_scalar".to_string()),
|
||||||
|
grouped_target_subject: Some("company".to_string()),
|
||||||
|
grouped_target_scope: Some("selected_company".to_string()),
|
||||||
|
opcode: 3,
|
||||||
|
raw_scalar_value: value,
|
||||||
|
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".to_string(),
|
||||||
|
semantic_family: Some("scalar_assignment".to_string()),
|
||||||
|
semantic_preview: Some(format!("Set Stock Prices to {value}")),
|
||||||
|
recovered_cargo_slot: None,
|
||||||
|
recovered_cargo_class: None,
|
||||||
|
recovered_cargo_label: None,
|
||||||
|
recovered_locomotive_id: None,
|
||||||
|
locomotive_name: None,
|
||||||
|
notes: vec![
|
||||||
|
"descriptor is recovered in the checked-in effect table as shell_owned parity"
|
||||||
|
.to_string(),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn real_deactivate_player_row(
|
fn real_deactivate_player_row(
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
|
) -> crate::SmpLoadedPackedEventGroupedEffectRowSummary {
|
||||||
|
|
@ -7179,8 +7214,11 @@ mod tests {
|
||||||
standalone_condition_row_count: 0,
|
standalone_condition_row_count: 0,
|
||||||
standalone_condition_rows: Vec::new(),
|
standalone_condition_rows: Vec::new(),
|
||||||
negative_sentinel_scope: None,
|
negative_sentinel_scope: None,
|
||||||
grouped_effect_row_counts: vec![1, 0, 0, 0],
|
grouped_effect_row_counts: vec![2, 0, 0, 0],
|
||||||
grouped_effect_rows: vec![real_merger_premium_shell_row(25)],
|
grouped_effect_rows: vec![
|
||||||
|
real_stock_prices_shell_row(120),
|
||||||
|
real_merger_premium_shell_row(25),
|
||||||
|
],
|
||||||
decoded_conditions: Vec::new(),
|
decoded_conditions: Vec::new(),
|
||||||
decoded_actions: Vec::new(),
|
decoded_actions: Vec::new(),
|
||||||
executable_import_ready: false,
|
executable_import_ready: false,
|
||||||
|
|
@ -8494,6 +8532,15 @@ mod tests {
|
||||||
.and_then(|summary| summary.records[0].import_outcome.as_deref()),
|
.and_then(|summary| summary.records[0].import_outcome.as_deref()),
|
||||||
Some("blocked_evidence_blocked_descriptor")
|
Some("blocked_evidence_blocked_descriptor")
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
import
|
||||||
|
.state
|
||||||
|
.packed_event_collection
|
||||||
|
.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")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
|
|
@ -11852,17 +11852,32 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn classifies_shell_owned_finance_descriptor_from_checked_in_effect_table() {
|
fn classifies_shell_owned_finance_descriptors_from_checked_in_effect_table() {
|
||||||
let metadata =
|
let stock_prices =
|
||||||
real_grouped_effect_descriptor_metadata(58).expect("descriptor metadata should exist");
|
real_grouped_effect_descriptor_metadata(55).expect("descriptor metadata should exist");
|
||||||
|
assert_eq!(stock_prices.label, "Stock Prices");
|
||||||
assert_eq!(metadata.label, "Merger Premium");
|
|
||||||
assert_eq!(metadata.parameter_family, "company_finance_shell_scalar");
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
real_grouped_effect_runtime_status_name(metadata.runtime_status),
|
stock_prices.parameter_family,
|
||||||
|
"company_finance_shell_scalar"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
real_grouped_effect_runtime_status_name(stock_prices.runtime_status),
|
||||||
"shell_owned"
|
"shell_owned"
|
||||||
);
|
);
|
||||||
assert!(!metadata.executable_in_runtime);
|
assert!(!stock_prices.executable_in_runtime);
|
||||||
|
|
||||||
|
let merger_premium =
|
||||||
|
real_grouped_effect_descriptor_metadata(58).expect("descriptor metadata should exist");
|
||||||
|
assert_eq!(merger_premium.label, "Merger Premium");
|
||||||
|
assert_eq!(
|
||||||
|
merger_premium.parameter_family,
|
||||||
|
"company_finance_shell_scalar"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
real_grouped_effect_runtime_status_name(merger_premium.runtime_status),
|
||||||
|
"shell_owned"
|
||||||
|
);
|
||||||
|
assert!(!merger_premium.executable_in_runtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -12065,6 +12080,18 @@ mod tests {
|
||||||
assert!(metadata.executable_in_runtime);
|
assert!(metadata.executable_in_runtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn looks_up_named_cargo_price_slot_descriptor_metadata() {
|
||||||
|
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.target_mask_bits, 0x08);
|
||||||
|
assert_eq!(metadata.parameter_family, "cargo_price_scalar");
|
||||||
|
assert_eq!(metadata.runtime_key, None);
|
||||||
|
assert!(!metadata.executable_in_runtime);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn looks_up_runtime_variable_descriptor_metadata() {
|
fn looks_up_runtime_variable_descriptor_metadata() {
|
||||||
let metadata =
|
let metadata =
|
||||||
|
|
@ -12201,6 +12228,33 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parses_named_cargo_price_row_with_stable_slot_label() {
|
||||||
|
let row_bytes = build_real_grouped_effect_row(RealGroupedEffectRowSpec {
|
||||||
|
descriptor_id: 106,
|
||||||
|
raw_scalar_value: 140,
|
||||||
|
opcode: 3,
|
||||||
|
value_byte_0x09: 0,
|
||||||
|
value_dword_0x0d: 0,
|
||||||
|
value_byte_0x11: 0,
|
||||||
|
value_byte_0x12: 0,
|
||||||
|
value_word_0x14: 0,
|
||||||
|
value_word_0x16: 0,
|
||||||
|
locomotive_name: None,
|
||||||
|
});
|
||||||
|
|
||||||
|
let row = parse_real_grouped_effect_row_summary(&row_bytes, 0, 0, None)
|
||||||
|
.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.parameter_family.as_deref(), Some("cargo_price_scalar"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn looks_up_recovered_locomotive_policy_descriptor_metadata() {
|
fn looks_up_recovered_locomotive_policy_descriptor_metadata() {
|
||||||
let metadata =
|
let metadata =
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,8 @@ The highest-value next passes are now:
|
||||||
present; raw `.gms` inspection/export still does not reconstruct full company/chairman rosters,
|
present; raw `.gms` inspection/export still does not reconstruct full company/chairman rosters,
|
||||||
but it now does reconstruct selection-only company/chairman context from the fixed save-side
|
but it now does reconstruct selection-only company/chairman context from the fixed save-side
|
||||||
`0x32c8` world block, so overlay imports can reuse base rosters while honoring raw save-native
|
`0x32c8` world block, so overlay imports can reuse base rosters while honoring raw save-native
|
||||||
selected company/chairman ids
|
selected company/chairman ids, and a tracked overlay fixture now pins that selection-only
|
||||||
|
override path explicitly
|
||||||
- a checked-in `EventEffects` export now exists at
|
- a checked-in `EventEffects` export now exists at
|
||||||
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer
|
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer
|
||||||
now exists at `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`
|
now exists at `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`
|
||||||
|
|
@ -111,7 +112,7 @@ The highest-value next passes are now:
|
||||||
`Prime Rate`
|
`Prime Rate`
|
||||||
- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58`
|
- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58`
|
||||||
`Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped
|
`Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped
|
||||||
descriptor residue
|
descriptor residue, with tracked fixtures now pinning both finance rows explicitly
|
||||||
- the recovered whole-game scalar economy/performance strip `59..104` now has a bounded runtime
|
- the recovered whole-game scalar economy/performance strip `59..104` now has a bounded runtime
|
||||||
landing surface too: representative rows execute into `RuntimeState.world_scalar_overrides`
|
landing surface too: representative rows execute into `RuntimeState.world_scalar_overrides`
|
||||||
through stable normalized keys such as `world.build_stations_cost` and
|
through stable normalized keys such as `world.build_stations_cost` and
|
||||||
|
|
@ -127,7 +128,9 @@ The highest-value next passes are now:
|
||||||
- the named cargo-price strip `106..176` remains explicit
|
- the named cargo-price strip `106..176` remains explicit
|
||||||
`blocked_evidence_blocked_descriptor` parity until descriptor ordering is pinned more strongly,
|
`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`
|
but the checked-in semantic catalog now gives that band stable `Named Cargo Price Slot N`
|
||||||
labels instead of anonymous `Unknown Cargo Price` residue
|
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
|
||||||
- the add-building strip `503..519` is now explicitly classified as recovered shell-owned parity,
|
- 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
|
with tracked fixture coverage, instead of generic unresolved descriptor residue
|
||||||
- widen real packed-event executable coverage descriptor by descriptor after identity, target mask,
|
- widen real packed-event executable coverage descriptor by descriptor after identity, target mask,
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,8 @@ Implemented today:
|
||||||
without overlay snapshots when the checked-in documents include that context, while raw `.gms`
|
without overlay snapshots when the checked-in documents include that context, while raw `.gms`
|
||||||
inspection/export still leaves full company/chairman rosters absent; the grounded raw-save
|
inspection/export still leaves full company/chairman rosters absent; the grounded raw-save
|
||||||
tranche now covers only selection-only company/chairman context from the fixed `0x32c8` world
|
tranche now covers only selection-only company/chairman context from the fixed `0x32c8` world
|
||||||
block, which overlay import can use to replace selected ids while preserving base rosters
|
block, which overlay import can use to replace selected ids while preserving base rosters; a
|
||||||
|
tracked overlay fixture now pins that selection-only override path explicitly
|
||||||
- a checked-in `EventEffects` export now exists too at
|
- a checked-in `EventEffects` export now exists too at
|
||||||
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer
|
`artifacts/exports/rt3-1.06/event-effects-table.json`, and a checked-in semantic closure layer
|
||||||
now exists at `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`
|
now exists at `artifacts/exports/rt3-1.06/event-effects-semantic-catalog.json`
|
||||||
|
|
@ -73,7 +74,7 @@ Implemented today:
|
||||||
`Prime Rate` now import through ordinary company target lowering
|
`Prime Rate` now import through ordinary company target lowering
|
||||||
- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58`
|
- adjacent recovered finance/control-transfer descriptors such as `55` `Stock Prices` and `58`
|
||||||
`Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped
|
`Merger Premium` now land on explicit shell-owned descriptor parity instead of generic unmapped
|
||||||
descriptor buckets
|
descriptor buckets, with tracked fixtures now pinning both finance rows explicitly
|
||||||
- the recovered whole-game scalar economy/performance strip `59..104` now has a bounded runtime
|
- the recovered whole-game scalar economy/performance strip `59..104` now has a bounded runtime
|
||||||
landing surface too: representative descriptors import as `SetWorldScalarOverride` and land in
|
landing surface too: representative descriptors import as `SetWorldScalarOverride` and land in
|
||||||
`RuntimeState.world_scalar_overrides`
|
`RuntimeState.world_scalar_overrides`
|
||||||
|
|
@ -88,7 +89,9 @@ Implemented today:
|
||||||
- the named cargo-price strip `106..176` now sits on explicit
|
- the named cargo-price strip `106..176` now sits on explicit
|
||||||
`blocked_evidence_blocked_descriptor` parity instead of generic unmapped-descriptor frontier;
|
`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`
|
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
|
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
|
||||||
- the add-building strip `503..519` is now explicitly classified as recovered shell-owned parity
|
- the add-building strip `503..519` is now explicitly classified as recovered shell-owned parity
|
||||||
with tracked fixture coverage, not generic unresolved descriptor residue
|
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
|
- a minimal event-owned train surface and an opaque economic-status lane now exist in runtime
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"fixture_id": "packed-event-selection-only-context-overlay-fixture",
|
||||||
|
"source": {
|
||||||
|
"kind": "captured-runtime",
|
||||||
|
"description": "Fixture proving selection-only raw save company/chairman context overrides base selected ids without replacing base rosters."
|
||||||
|
},
|
||||||
|
"state_import_path": "packed-event-selection-only-context-overlay.json",
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"kind": "service_trigger_kind",
|
||||||
|
"trigger_kind": 7
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"expected_summary": {
|
||||||
|
"calendar_projection_source": "base-snapshot-preserved",
|
||||||
|
"calendar_projection_is_placeholder": false,
|
||||||
|
"company_count": 2,
|
||||||
|
"chairman_profile_count": 2,
|
||||||
|
"selected_chairman_profile_id": 2,
|
||||||
|
"packed_event_collection_present": false,
|
||||||
|
"event_runtime_record_count": 0,
|
||||||
|
"total_event_record_service_count": 0,
|
||||||
|
"total_trigger_dispatch_count": 1
|
||||||
|
},
|
||||||
|
"expected_state_fragment": {
|
||||||
|
"selected_company_id": 2,
|
||||||
|
"selected_chairman_profile_id": 2,
|
||||||
|
"companies": [
|
||||||
|
{
|
||||||
|
"company_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"company_id": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"chairman_profiles": [
|
||||||
|
{
|
||||||
|
"profile_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"profile_id": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"event_runtime_records": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"import_id": "packed-event-selection-only-context-overlay",
|
||||||
|
"source": {
|
||||||
|
"description": "Overlay import document proving selection-only save-native company/chairman context can override base selected ids while preserving base rosters.",
|
||||||
|
"notes": []
|
||||||
|
},
|
||||||
|
"base_snapshot_path": "packed-event-chairman-overlay-base-snapshot.json",
|
||||||
|
"save_slice_path": "packed-event-selection-only-context-save-slice.json"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"save_slice_id": "packed-event-selection-only-context-save-slice",
|
||||||
|
"source": {
|
||||||
|
"description": "Tracked save-slice document carrying raw-save-derived selection-only company/chairman context without reconstructed rosters.",
|
||||||
|
"original_save_filename": "captured-selection-only-context.gms",
|
||||||
|
"original_save_sha256": "selection-only-context-sample-sha256",
|
||||||
|
"notes": [
|
||||||
|
"tracked as JSON save-slice document rather than raw .smp",
|
||||||
|
"pins the selection-only company/chairman context boundary from the fixed 0x32c8 world block"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"save_slice": {
|
||||||
|
"file_extension_hint": "gms",
|
||||||
|
"container_profile_family": "rt3-105-save-container-v1",
|
||||||
|
"mechanism_family": "rt3-105-save-post-span-bridge-v1",
|
||||||
|
"mechanism_confidence": "mixed",
|
||||||
|
"trailer_family": "rt3-105-save-trailer-v1",
|
||||||
|
"bridge_family": "rt3-105-save-post-span-bridge-v1",
|
||||||
|
"profile": null,
|
||||||
|
"candidate_availability_table": null,
|
||||||
|
"named_locomotive_availability_table": null,
|
||||||
|
"locomotive_catalog": null,
|
||||||
|
"cargo_catalog": null,
|
||||||
|
"company_roster": {
|
||||||
|
"source_kind": "save-direct-world-block-company-selection-only",
|
||||||
|
"semantic_family": "scenario-selected-company-context",
|
||||||
|
"observed_entry_count": 0,
|
||||||
|
"selected_company_id": 2,
|
||||||
|
"entries": []
|
||||||
|
},
|
||||||
|
"chairman_profile_table": {
|
||||||
|
"source_kind": "save-direct-world-block-chairman-selection-only",
|
||||||
|
"semantic_family": "scenario-selected-chairman-context",
|
||||||
|
"observed_entry_count": 0,
|
||||||
|
"selected_chairman_profile_id": 2,
|
||||||
|
"entries": []
|
||||||
|
},
|
||||||
|
"special_conditions_table": null,
|
||||||
|
"event_runtime_collection": null,
|
||||||
|
"notes": [
|
||||||
|
"selection-only save-native company/chairman context without reconstructed raw rosters"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"fixture_id": "packed-event-stock-prices-shell-save-slice-fixture",
|
||||||
|
"source": {
|
||||||
|
"kind": "captured-runtime",
|
||||||
|
"description": "Fixture pinning the explicit shell-owned descriptor frontier for recovered Stock Prices rows."
|
||||||
|
},
|
||||||
|
"state_save_slice_path": "packed-event-stock-prices-shell-save-slice.json",
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"kind": "service_trigger_kind",
|
||||||
|
"trigger_kind": 7
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"expected_summary": {
|
||||||
|
"calendar_projection_source": "default-1830-placeholder",
|
||||||
|
"calendar_projection_is_placeholder": true,
|
||||||
|
"company_count": 2,
|
||||||
|
"chairman_profile_count": 2,
|
||||||
|
"packed_event_collection_present": true,
|
||||||
|
"packed_event_record_count": 1,
|
||||||
|
"packed_event_decoded_record_count": 1,
|
||||||
|
"packed_event_parity_only_record_count": 1,
|
||||||
|
"packed_event_blocked_shell_owned_descriptor_count": 1,
|
||||||
|
"event_runtime_record_count": 0,
|
||||||
|
"total_event_record_service_count": 0,
|
||||||
|
"total_trigger_dispatch_count": 1
|
||||||
|
},
|
||||||
|
"expected_state_fragment": {
|
||||||
|
"packed_event_collection": {
|
||||||
|
"records": [
|
||||||
|
{
|
||||||
|
"import_outcome": "blocked_shell_owned_descriptor"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"event_runtime_records": []
|
||||||
|
}
|
||||||
|
}
|
||||||
219
fixtures/runtime/packed-event-stock-prices-shell-save-slice.json
Normal file
219
fixtures/runtime/packed-event-stock-prices-shell-save-slice.json
Normal file
|
|
@ -0,0 +1,219 @@
|
||||||
|
{
|
||||||
|
"format_version": 1,
|
||||||
|
"save_slice_id": "packed-event-stock-prices-shell-save-slice",
|
||||||
|
"source": {
|
||||||
|
"description": "Tracked save-slice document pinning a recovered shell-owned Stock Prices descriptor.",
|
||||||
|
"original_save_filename": "captured-stock-prices-shell.gms",
|
||||||
|
"original_save_sha256": "stock-prices-shell-sample-sha256",
|
||||||
|
"notes": [
|
||||||
|
"tracked as JSON save-slice document rather than raw .smp",
|
||||||
|
"pins the explicit shell-owned descriptor frontier for recovered company finance rows"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"save_slice": {
|
||||||
|
"file_extension_hint": "gms",
|
||||||
|
"container_profile_family": "rt3-classic-save-container-v1",
|
||||||
|
"mechanism_family": "classic-save-rehydrate-v1",
|
||||||
|
"mechanism_confidence": "grounded",
|
||||||
|
"trailer_family": null,
|
||||||
|
"bridge_family": null,
|
||||||
|
"profile": null,
|
||||||
|
"candidate_availability_table": null,
|
||||||
|
"named_locomotive_availability_table": null,
|
||||||
|
"cargo_catalog": null,
|
||||||
|
"special_conditions_table": null,
|
||||||
|
"event_runtime_collection": {
|
||||||
|
"source_kind": "packed-event-runtime-collection",
|
||||||
|
"mechanism_family": "classic-save-rehydrate-v1",
|
||||||
|
"mechanism_confidence": "grounded",
|
||||||
|
"container_profile_family": "rt3-classic-save-container-v1",
|
||||||
|
"metadata_tag_offset": 28864,
|
||||||
|
"records_tag_offset": 29120,
|
||||||
|
"close_tag_offset": 29632,
|
||||||
|
"packed_state_version": 1001,
|
||||||
|
"packed_state_version_hex": "0x000003e9",
|
||||||
|
"live_id_bound": 75,
|
||||||
|
"live_record_count": 1,
|
||||||
|
"live_entry_ids": [
|
||||||
|
75
|
||||||
|
],
|
||||||
|
"decoded_record_count": 1,
|
||||||
|
"imported_runtime_record_count": 0,
|
||||||
|
"records": [
|
||||||
|
{
|
||||||
|
"record_index": 0,
|
||||||
|
"live_entry_id": 75,
|
||||||
|
"payload_offset": 29122,
|
||||||
|
"payload_len": 120,
|
||||||
|
"decode_status": "parity_only",
|
||||||
|
"payload_family": "real_packed_v1",
|
||||||
|
"trigger_kind": 7,
|
||||||
|
"active": null,
|
||||||
|
"marks_collection_dirty": null,
|
||||||
|
"one_shot": false,
|
||||||
|
"compact_control": {
|
||||||
|
"mode_byte_0x7ef": 6,
|
||||||
|
"primary_selector_0x7f0": 99,
|
||||||
|
"grouped_mode_0x7f4": 2,
|
||||||
|
"one_shot_header_0x7f5": 1,
|
||||||
|
"modifier_flag_0x7f9": 1,
|
||||||
|
"modifier_flag_0x7fa": 0,
|
||||||
|
"grouped_target_scope_ordinals_0x7fb": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"grouped_scope_checkboxes_0x7ff": [
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"summary_toggle_0x800": 1,
|
||||||
|
"grouped_territory_selectors_0x80f": [
|
||||||
|
-1,
|
||||||
|
10,
|
||||||
|
-1,
|
||||||
|
22
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text_bands": [],
|
||||||
|
"standalone_condition_row_count": 0,
|
||||||
|
"standalone_condition_rows": [],
|
||||||
|
"negative_sentinel_scope": null,
|
||||||
|
"grouped_effect_row_counts": [
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"grouped_effect_rows": [
|
||||||
|
{
|
||||||
|
"group_index": 0,
|
||||||
|
"row_index": 0,
|
||||||
|
"descriptor_id": 55,
|
||||||
|
"descriptor_label": "Stock Prices",
|
||||||
|
"target_mask_bits": 11,
|
||||||
|
"parameter_family": "company_finance_shell_scalar",
|
||||||
|
"opcode": 3,
|
||||||
|
"raw_scalar_value": 120,
|
||||||
|
"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 Stock Prices to 120",
|
||||||
|
"locomotive_name": null,
|
||||||
|
"notes": [
|
||||||
|
"descriptor recovered in the checked-in effect table as shell_owned parity"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"decoded_conditions": [],
|
||||||
|
"decoded_actions": [],
|
||||||
|
"executable_import_ready": false,
|
||||||
|
"notes": [
|
||||||
|
"stock-prices descriptor is recovered but remains shell-owned parity"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
"recovered shell-owned company-finance descriptor sample"
|
||||||
|
],
|
||||||
|
"company_roster": {
|
||||||
|
"source_kind": "tracked-save-slice-company-roster",
|
||||||
|
"semantic_family": "save-slice-runtime-company-context",
|
||||||
|
"observed_entry_count": 2,
|
||||||
|
"selected_company_id": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"company_id": 1,
|
||||||
|
"active": true,
|
||||||
|
"controller_kind": "human",
|
||||||
|
"current_cash": 150,
|
||||||
|
"debt": 80,
|
||||||
|
"credit_rating_score": 650,
|
||||||
|
"prime_rate": 5,
|
||||||
|
"available_track_laying_capacity": 6,
|
||||||
|
"track_piece_counts": {
|
||||||
|
"total": 20,
|
||||||
|
"single": 5,
|
||||||
|
"double": 8,
|
||||||
|
"transition": 1,
|
||||||
|
"electric": 3,
|
||||||
|
"non_electric": 17
|
||||||
|
},
|
||||||
|
"linked_chairman_profile_id": 1,
|
||||||
|
"book_value_per_share": 2620,
|
||||||
|
"investor_confidence": 37,
|
||||||
|
"management_attitude": 58,
|
||||||
|
"takeover_cooldown_year": 1839,
|
||||||
|
"merger_cooldown_year": 1838
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"company_id": 2,
|
||||||
|
"active": true,
|
||||||
|
"controller_kind": "ai",
|
||||||
|
"current_cash": 90,
|
||||||
|
"debt": 40,
|
||||||
|
"credit_rating_score": 480,
|
||||||
|
"prime_rate": 6,
|
||||||
|
"available_track_laying_capacity": 2,
|
||||||
|
"track_piece_counts": {
|
||||||
|
"total": 8,
|
||||||
|
"single": 2,
|
||||||
|
"double": 2,
|
||||||
|
"transition": 0,
|
||||||
|
"electric": 1,
|
||||||
|
"non_electric": 7
|
||||||
|
},
|
||||||
|
"linked_chairman_profile_id": 2,
|
||||||
|
"book_value_per_share": 1400,
|
||||||
|
"investor_confidence": 22,
|
||||||
|
"management_attitude": 31,
|
||||||
|
"takeover_cooldown_year": null,
|
||||||
|
"merger_cooldown_year": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"chairman_profile_table": {
|
||||||
|
"source_kind": "tracked-save-slice-chairman-profile-table",
|
||||||
|
"semantic_family": "save-slice-runtime-chairman-context",
|
||||||
|
"observed_entry_count": 2,
|
||||||
|
"selected_chairman_profile_id": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"profile_id": 1,
|
||||||
|
"name": "Chairman One",
|
||||||
|
"active": true,
|
||||||
|
"current_cash": 500,
|
||||||
|
"linked_company_id": 1,
|
||||||
|
"company_holdings": {
|
||||||
|
"1": 1000
|
||||||
|
},
|
||||||
|
"holdings_value_total": 700,
|
||||||
|
"net_worth_total": 1200,
|
||||||
|
"purchasing_power_total": 1500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"profile_id": 2,
|
||||||
|
"name": "Chairman Two",
|
||||||
|
"active": true,
|
||||||
|
"current_cash": 250,
|
||||||
|
"linked_company_id": 2,
|
||||||
|
"company_holdings": {
|
||||||
|
"2": 900
|
||||||
|
},
|
||||||
|
"holdings_value_total": 600,
|
||||||
|
"net_worth_total": 900,
|
||||||
|
"purchasing_power_total": 1100
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue