{
  "core_change_complete": "false",
  "release_info": {
    "abandoned_r20p_payload_reused": false,
    "added_files": [
      "/usr/local/lib/router-wgpay-fallback-map.sh",
      "/usr/local/sbin/router-wgpay-fallback-state.sh"
    ],
    "always_on_fallback_fixture_proven": true,
    "atomic_nft_transaction_fixture_proven": true,
    "authorized_keys_mutated": false,
    "bundle_revision": "R03_NFT_MARK_NORMALIZATION_AND_STOP_RC_HARDENING",
    "classification": "implementation",
    "correction": "Accept nft mark output in padded hexadecimal or decimal form; expose mapper result; prevent inherited ERR trap from publishing twice or converting STOP to bootstrap rc 0.",
    "direct_failopen_allowed": false,
    "expected_installer_sha256": "be6ca4bda5c8f9049bdf1dfa32b15fe4ebe4791aa7a693edf740738fcceefcb0",
    "first_healthy_canonical_order_fixture_proven": true,
    "full_rootfs_snapshot": false,
    "functional_stage": "vm101_always_on_fallback_mapper",
    "initial_mapper_table_absence_allowed": true,
    "legacy_table200_required": false,
    "live_slot_failure_injected": false,
    "modified_files": [
      "/usr/local/sbin/router-wgpay-canary-apply.sh"
    ],
    "mutated_machines": [
      "vm101"
    ],
    "next_step": "R20Q-E_VM101_TOPOLOGY_GENERATION_AND_RELIABLE_DELIVERY",
    "nft_apply_during_step": true,
    "nft_mark_output_normalization_supported": true,
    "preflight_correction": "Allow absent first-install fallback mapper table and treat legacy table 200 as informational; canonical tables 201-205 remain mandatory.",
    "previous_attempt_core_change_complete": false,
    "previous_attempt_detail": "mapper_apply_failed_rc_80_due_to_nft_mark_text_normalization",
    "previous_attempt_phase": "apply",
    "previous_attempt_result": "STOP_R20QD_VM101_ALWAYS_ON_FALLBACK_MAPPER",
    "private_key_material_exported": false,
    "production_topology_message_delivered": false,
    "runtime_impact": "canonical_mapper_reapply_and_durable_normal_state",
    "snapshot_name": "r20qd101-pre-fallback",
    "snapshot_name_preferred_max_length": 32,
    "source_change_expected": true,
    "source_of_truth": "machine_git",
    "step_id": "STEP_050M07R20QD_VM101_ALWAYS_ON_FALLBACK_MAPPER",
    "stop_rc_preserved_after_stop_publication": true,
    "supersedes_zip_sha256": "c4b69b16239034ee75ebf43b1d32cff7e62bb62ec83b2e35098cd0bd59a82d24",
    "target_files": [
      "/usr/local/lib/router-wgpay-fallback-map.sh",
      "/usr/local/sbin/router-wgpay-canary-apply.sh",
      "/usr/local/sbin/router-wgpay-fallback-state.sh"
    ],
    "target_package_sha256": "86456235b5f4d4e0dce49e6d4bfb5a9859eb8ac938167e90f39ba32edff14151",
    "title": "VM101 always-on health-aware DSCP fallback mapper",
    "topology_sender_installed": false,
    "vm101_baseline_commit": "d0c0a77486665b0abfef8133f0cccd20c6232b46",
    "vm101_baseline_file_count": 37,
    "vm101_baseline_tree": "76a427a94defee9bffe571fda3f8bb504b8eb540",
    "vm101_expected_file_count": 39,
    "vm101_inventory_repeated": false,
    "watcher_integration_performed": false
  },
  "result": "STOP_R20QD_VM101_ALWAYS_ON_FALLBACK_MAPPER",
  "schema": "router-step-facts-v1",
  "step": "STEP_050M07R20QD_VM101_ALWAYS_ON_FALLBACK_MAPPER",
  "stop_line": "109",
  "stop_phase": "postcheck",
  "stop_rc": "1"
}
