diff --git a/README.md b/README.md index 61ba1a9..a583adf 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,13 @@ strong: `Use Bio-Accelerator Cars`, `Disable Cargo Economy`, `Disable Train Cras Train Crashes AND Breakdowns`, and `AI Ignore Territories At Startup`. Whole-game condition decode is broader now too: checked-in world-flag condition ids can lower into `world_flag_equals` gates for boolean equality/inequality forms, so real packed records can gate whole-game effects on -existing `world_flags` without fixture-authored placeholder ids. Explicit unmapped world-condition -and world-descriptor frontier buckets still remain where current checked-in metadata stops. Shell -purchase-flow and selected-profile parity remain out of scope. Mixed supported/unsupported real -rows still stay parity-only. The PE32 hook remains useful as capture and integration tooling, but -it is no longer the main execution milestone. +existing `world_flags` without fixture-authored placeholder ids. The tracked parity save-slice no +longer depends on a raw `unsupported_framing` placeholder either: its remaining residue is now one +structured `real_packed_v1` record that lands in the explicit `blocked_unmapped_real_descriptor` +bucket. Explicit unmapped world-condition and world-descriptor frontier buckets still remain where +current checked-in metadata stops. Shell purchase-flow and selected-profile parity remain out of +scope. Mixed supported/unsupported real rows still stay parity-only. The PE32 hook remains useful +as capture and integration tooling, but it is no longer the main execution milestone. ## Project Docs diff --git a/docs/README.md b/docs/README.md index e1882ec..e982a0a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -119,6 +119,9 @@ The highest-value next passes are now: - whole-game ordinary-condition coverage is broader now too: checked-in world-flag condition ids can lower into `world_flag_equals` gates for boolean equality/inequality forms, so real packed rows can gate whole-game effects on existing `world_flags` +- the tracked parity save-slice now keeps its remaining non-imported residue as structured + `real_packed_v1` parity records, with the first captured leftover moved out of + `unsupported_framing` and into the explicit `blocked_unmapped_real_descriptor` frontier - keep in mind that the current local `.gms` corpus still exports with no packed event collection, so real descriptor mapping needs to stay plumbing-first until better captures exist - use `rrt-hook` primarily as optional capture or integration tooling, not as the first execution diff --git a/docs/runtime-rehost-plan.md b/docs/runtime-rehost-plan.md index 3c20d74..a52b231 100644 --- a/docs/runtime-rehost-plan.md +++ b/docs/runtime-rehost-plan.md @@ -74,6 +74,9 @@ Implemented today: - whole-game ordinary-condition decode now covers checked-in world-flag condition ids too for boolean equality/inequality forms, so real packed rows can gate whole-game effects on existing `world_flags` through `world_flag_equals` without fixture-authored placeholder ids +- the tracked parity save-slice no longer preserves an opaque `unsupported_framing` record; its + remaining captured residue is now structurally decoded `real_packed_v1` parity state that lands + in existing explicit blocker buckets That means the next implementation work is breadth, not bootstrap. The recommended next slice is broader real grouped-descriptor and ordinary condition-id coverage beyond the current access, diff --git a/fixtures/runtime/packed-event-parity-save-slice-fixture.json b/fixtures/runtime/packed-event-parity-save-slice-fixture.json index 8af1edd..e9d9e61 100644 --- a/fixtures/runtime/packed-event-parity-save-slice-fixture.json +++ b/fixtures/runtime/packed-event-parity-save-slice-fixture.json @@ -22,14 +22,14 @@ "calendar_projection_is_placeholder": true, "packed_event_collection_present": true, "packed_event_record_count": 2, - "packed_event_decoded_record_count": 1, + "packed_event_decoded_record_count": 2, "packed_event_imported_runtime_record_count": 1, - "packed_event_parity_only_record_count": 1, - "packed_event_unsupported_record_count": 1, + "packed_event_parity_only_record_count": 2, + "packed_event_unsupported_record_count": 0, "packed_event_blocked_missing_condition_context_count": 0, "packed_event_blocked_territory_condition_scope_count": 0, "packed_event_blocked_missing_compact_control_count": 0, - "packed_event_blocked_unmapped_real_descriptor_count": 0, + "packed_event_blocked_unmapped_real_descriptor_count": 1, "packed_event_blocked_structural_only_count": 0, "event_runtime_record_count": 1, "total_company_cash": 0 @@ -45,8 +45,15 @@ "live_entry_ids": [3, 5], "records": [ { - "decode_status": "unsupported_framing", - "payload_family": "unsupported_framing" + "decode_status": "parity_only", + "payload_family": "real_packed_v1", + "import_outcome": "blocked_unmapped_real_descriptor", + "grouped_effect_rows": [ + { + "descriptor_id": 250, + "row_shape": "scalar_assignment" + } + ] }, { "decode_status": "parity_only", diff --git a/fixtures/runtime/packed-event-parity-save-slice.json b/fixtures/runtime/packed-event-parity-save-slice.json index 04ed6a5..c22fd1b 100644 --- a/fixtures/runtime/packed-event-parity-save-slice.json +++ b/fixtures/runtime/packed-event-parity-save-slice.json @@ -7,7 +7,7 @@ "original_save_sha256": "parity-sample-sha256", "notes": [ "tracked as JSON save-slice document rather than raw .smp", - "preserves one unsupported row and one semantically decoded-but-parity-only row" + "preserves one structured-but-unmapped row and one semantically decoded-but-parity-only row" ] }, "save_slice": { @@ -33,7 +33,7 @@ "live_id_bound": 5, "live_record_count": 2, "live_entry_ids": [3, 5], - "decoded_record_count": 1, + "decoded_record_count": 2, "imported_runtime_record_count": 1, "records": [ { @@ -41,13 +41,56 @@ "live_entry_id": 3, "payload_offset": 29186, "payload_len": 96, - "decode_status": "unsupported_framing", - "payload_family": "unsupported_framing", - "grouped_effect_row_counts": [0, 0, 0, 0], + "decode_status": "parity_only", + "payload_family": "real_packed_v1", + "trigger_kind": 6, + "one_shot": false, + "compact_control": { + "mode_byte_0x7ef": 6, + "primary_selector_0x7f0": 0, + "grouped_mode_0x7f4": 2, + "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], + "summary_toggle_0x800": 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_rows": [ + { + "group_index": 0, + "row_index": 0, + "descriptor_id": 250, + "descriptor_label": null, + "target_mask_bits": null, + "parameter_family": null, + "opcode": 3, + "raw_scalar_value": 42, + "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": null, + "semantic_preview": null, + "locomotive_name": null, + "notes": [ + "real grouped-effect row preserved structurally; descriptor identity not yet recovered" + ] + } + ], "decoded_actions": [], "executable_import_ready": false, "notes": [ - "real payload framing not yet decoded" + "decoded from grounded real 0x4e9a row framing", + "grouped row preserved structurally but still unmapped in the checked-in descriptor table" ] }, {