{
  "ok": true,
  "mode": "JS8",
  "tool": "webftr-js8-soft-ldpc-minsum-probe",
  "tool_version": "step38-fine-timing-ridge-sweep",
  "input_wav": null,
  "candidate_json": "/decoders/js8_decoder/runtime/timing_boundary_sweep/step38_best_timing_fec_candidate.json",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "implementation_stage": "step38_bounded_gray_interleaver_llr_minsum_probe_no_message_unpack",
  "matrix": {
    "code": "(174,91)",
    "message_bits": 91,
    "parity_bits": 83,
    "codeword_bits": 174,
    "check_count": 83
  },
  "decoder": {
    "algorithm": "normalized_min_sum_multi_trial",
    "max_iterations": 24,
    "default_alpha": 0.8,
    "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely",
    "mapping_expansion": "ft8_gray_demap_plus_bitrev_interleaver_candidates",
    "max_decode_rows": 12,
    "fast_trials": true,
    "trial_count": 2
  },
  "candidate_context": {
    "nsps_used": 6400,
    "nsps_is_js8_realistic": true,
    "selected_profile": null,
    "selected_variant": {
      "name": "raw_msb_symbol_order",
      "rank_score": 127.063032,
      "complete_174bit_candidate": true,
      "hard_bits_sha256_16": "7bf9bc1895cb1e01",
      "hard_weight_174": 36,
      "llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      }
    }
  },
  "candidate_mapping_rows": 828,
  "probe_count": 24,
  "best_soft_decode": {
    "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse",
    "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
    "mapping_meta": {
      "tone_mapping": "ft8_gray_primary",
      "gray_direction": "inverse_observed_to_plain",
      "reverse_bits_within_tone_before_gray": false,
      "interleaver": "ft8_bitrev",
      "direction": "deinterleave_rx_to_codeword",
      "order_len": 174,
      "polarity": "inverted"
    },
    "decoder_trial": {
      "llr_scale": 1.0,
      "alpha": 0.8
    },
    "source_rank_score": 109.063032,
    "source_llr_stats": {
      "count": 174,
      "avg_abs": 2.265758,
      "min_abs": 0.020953,
      "max_abs": 4.126624,
      "positive": 139,
      "negative": 35,
      "zero": 0
    },
    "success": false,
    "iterations_used": 24,
    "final_syndrome_weight": 22,
    "message91": null,
    "message91_sha256_16": "eb0331f827dab374",
    "codeword174_sha256_16": "89003bf74303e48c",
    "trace": [
      {
        "iteration": 0,
        "syndrome_weight": 37
      },
      {
        "iteration": 1,
        "syndrome_weight": 32
      },
      {
        "iteration": 2,
        "syndrome_weight": 30
      },
      {
        "iteration": 3,
        "syndrome_weight": 22
      },
      {
        "iteration": 4,
        "syndrome_weight": 37
      },
      {
        "iteration": 5,
        "syndrome_weight": 51
      },
      {
        "iteration": 6,
        "syndrome_weight": 54
      },
      {
        "iteration": 7,
        "syndrome_weight": 33
      },
      {
        "iteration": 8,
        "syndrome_weight": 49
      },
      {
        "iteration": 9,
        "syndrome_weight": 41
      },
      {
        "iteration": 10,
        "syndrome_weight": 43
      },
      {
        "iteration": 15,
        "syndrome_weight": 41
      },
      {
        "iteration": 20,
        "syndrome_weight": 50
      }
    ]
  },
  "soft_decode_results": [
    {
      "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 22,
      "message91": null,
      "message91_sha256_16": "eb0331f827dab374",
      "codeword174_sha256_16": "89003bf74303e48c",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 37
        },
        {
          "iteration": 1,
          "syndrome_weight": 32
        },
        {
          "iteration": 2,
          "syndrome_weight": 30
        },
        {
          "iteration": 3,
          "syndrome_weight": 22
        },
        {
          "iteration": 4,
          "syndrome_weight": 37
        },
        {
          "iteration": 5,
          "syndrome_weight": 51
        },
        {
          "iteration": 6,
          "syndrome_weight": 54
        },
        {
          "iteration": 7,
          "syndrome_weight": 33
        },
        {
          "iteration": 8,
          "syndrome_weight": 49
        },
        {
          "iteration": 9,
          "syndrome_weight": 41
        },
        {
          "iteration": 10,
          "syndrome_weight": 43
        },
        {
          "iteration": 15,
          "syndrome_weight": 41
        },
        {
          "iteration": 20,
          "syndrome_weight": 50
        }
      ]
    },
    {
      "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 107.311136,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 1.827784,
        "min_abs": 0.008053,
        "max_abs": 4.126624,
        "positive": 138,
        "negative": 36,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 27,
      "message91": null,
      "message91_sha256_16": "3909d0efb8b5d4f7",
      "codeword174_sha256_16": "6ab6ae69c2669651",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 33
        },
        {
          "iteration": 1,
          "syndrome_weight": 32
        },
        {
          "iteration": 2,
          "syndrome_weight": 39
        },
        {
          "iteration": 3,
          "syndrome_weight": 43
        },
        {
          "iteration": 4,
          "syndrome_weight": 39
        },
        {
          "iteration": 5,
          "syndrome_weight": 49
        },
        {
          "iteration": 6,
          "syndrome_weight": 41
        },
        {
          "iteration": 7,
          "syndrome_weight": 44
        },
        {
          "iteration": 8,
          "syndrome_weight": 42
        },
        {
          "iteration": 9,
          "syndrome_weight": 40
        },
        {
          "iteration": 10,
          "syndrome_weight": 41
        },
        {
          "iteration": 15,
          "syndrome_weight": 29
        },
        {
          "iteration": 20,
          "syndrome_weight": 33
        }
      ]
    },
    {
      "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
      "transform": "lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "lsb_within_each_tone",
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 28,
      "message91": null,
      "message91_sha256_16": "d573664e1265e80c",
      "codeword174_sha256_16": "2597dbff96349713",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 41
        },
        {
          "iteration": 1,
          "syndrome_weight": 37
        },
        {
          "iteration": 2,
          "syndrome_weight": 30
        },
        {
          "iteration": 3,
          "syndrome_weight": 44
        },
        {
          "iteration": 4,
          "syndrome_weight": 40
        },
        {
          "iteration": 5,
          "syndrome_weight": 36
        },
        {
          "iteration": 6,
          "syndrome_weight": 46
        },
        {
          "iteration": 7,
          "syndrome_weight": 39
        },
        {
          "iteration": 8,
          "syndrome_weight": 35
        },
        {
          "iteration": 9,
          "syndrome_weight": 49
        },
        {
          "iteration": 10,
          "syndrome_weight": 28
        },
        {
          "iteration": 15,
          "syndrome_weight": 43
        },
        {
          "iteration": 20,
          "syndrome_weight": 34
        }
      ]
    },
    {
      "variant": "lab_mask_xor_preview",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 101.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 29,
      "message91": null,
      "message91_sha256_16": "86c9ebbe97a4cee4",
      "codeword174_sha256_16": "666fc2db0f867336",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 40
        },
        {
          "iteration": 1,
          "syndrome_weight": 34
        },
        {
          "iteration": 2,
          "syndrome_weight": 45
        },
        {
          "iteration": 3,
          "syndrome_weight": 42
        },
        {
          "iteration": 4,
          "syndrome_weight": 34
        },
        {
          "iteration": 5,
          "syndrome_weight": 38
        },
        {
          "iteration": 6,
          "syndrome_weight": 40
        },
        {
          "iteration": 7,
          "syndrome_weight": 36
        },
        {
          "iteration": 8,
          "syndrome_weight": 44
        },
        {
          "iteration": 9,
          "syndrome_weight": 41
        },
        {
          "iteration": 10,
          "syndrome_weight": 31
        },
        {
          "iteration": 15,
          "syndrome_weight": 43
        },
        {
          "iteration": 20,
          "syndrome_weight": 53
        }
      ]
    },
    {
      "variant": "reverse_symbol_order",
      "transform": "ft8_gray_primary_demap_lsb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": true,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 113.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 30,
      "message91": null,
      "message91_sha256_16": "c5beab46f597fb50",
      "codeword174_sha256_16": "e28a20814ba9c142",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 42
        },
        {
          "iteration": 1,
          "syndrome_weight": 42
        },
        {
          "iteration": 2,
          "syndrome_weight": 40
        },
        {
          "iteration": 3,
          "syndrome_weight": 51
        },
        {
          "iteration": 4,
          "syndrome_weight": 44
        },
        {
          "iteration": 5,
          "syndrome_weight": 41
        },
        {
          "iteration": 6,
          "syndrome_weight": 46
        },
        {
          "iteration": 7,
          "syndrome_weight": 42
        },
        {
          "iteration": 8,
          "syndrome_weight": 50
        },
        {
          "iteration": 9,
          "syndrome_weight": 45
        },
        {
          "iteration": 10,
          "syndrome_weight": 42
        },
        {
          "iteration": 15,
          "syndrome_weight": 51
        },
        {
          "iteration": 20,
          "syndrome_weight": 30
        }
      ]
    },
    {
      "variant": "reverse_full_bitstream",
      "transform": "ft8_gray_alt_high_demap_msb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 112.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 30,
      "message91": null,
      "message91_sha256_16": "95da80269df20c0b",
      "codeword174_sha256_16": "d8add1acd64ea0cd",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 43
        },
        {
          "iteration": 1,
          "syndrome_weight": 47
        },
        {
          "iteration": 2,
          "syndrome_weight": 45
        },
        {
          "iteration": 3,
          "syndrome_weight": 33
        },
        {
          "iteration": 4,
          "syndrome_weight": 33
        },
        {
          "iteration": 5,
          "syndrome_weight": 30
        },
        {
          "iteration": 6,
          "syndrome_weight": 35
        },
        {
          "iteration": 7,
          "syndrome_weight": 41
        },
        {
          "iteration": 8,
          "syndrome_weight": 40
        },
        {
          "iteration": 9,
          "syndrome_weight": 43
        },
        {
          "iteration": 10,
          "syndrome_weight": 38
        },
        {
          "iteration": 15,
          "syndrome_weight": 40
        },
        {
          "iteration": 20,
          "syndrome_weight": 35
        }
      ]
    },
    {
      "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 30,
      "message91": null,
      "message91_sha256_16": "eb0331f827dab374",
      "codeword174_sha256_16": "362c1c2091c2628f",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 37
        },
        {
          "iteration": 1,
          "syndrome_weight": 32
        },
        {
          "iteration": 2,
          "syndrome_weight": 30
        },
        {
          "iteration": 3,
          "syndrome_weight": 34
        },
        {
          "iteration": 4,
          "syndrome_weight": 41
        },
        {
          "iteration": 5,
          "syndrome_weight": 33
        },
        {
          "iteration": 6,
          "syndrome_weight": 43
        },
        {
          "iteration": 7,
          "syndrome_weight": 47
        },
        {
          "iteration": 8,
          "syndrome_weight": 41
        },
        {
          "iteration": 9,
          "syndrome_weight": 47
        },
        {
          "iteration": 10,
          "syndrome_weight": 47
        },
        {
          "iteration": 15,
          "syndrome_weight": 40
        },
        {
          "iteration": 20,
          "syndrome_weight": 41
        }
      ]
    },
    {
      "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
      "transform": "lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "lsb_within_each_tone",
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 30,
      "message91": null,
      "message91_sha256_16": "d5fd881ddc0d6fa3",
      "codeword174_sha256_16": "fb9a728c30e39a50",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 41
        },
        {
          "iteration": 1,
          "syndrome_weight": 37
        },
        {
          "iteration": 2,
          "syndrome_weight": 30
        },
        {
          "iteration": 3,
          "syndrome_weight": 44
        },
        {
          "iteration": 4,
          "syndrome_weight": 50
        },
        {
          "iteration": 5,
          "syndrome_weight": 48
        },
        {
          "iteration": 6,
          "syndrome_weight": 44
        },
        {
          "iteration": 7,
          "syndrome_weight": 39
        },
        {
          "iteration": 8,
          "syndrome_weight": 41
        },
        {
          "iteration": 9,
          "syndrome_weight": 37
        },
        {
          "iteration": 10,
          "syndrome_weight": 35
        },
        {
          "iteration": 15,
          "syndrome_weight": 45
        },
        {
          "iteration": 20,
          "syndrome_weight": 37
        }
      ]
    },
    {
      "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
      "transform": "lsb_within_each_tone+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "lsb_within_each_tone",
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 107.311136,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 1.827784,
        "min_abs": 0.008053,
        "max_abs": 4.126624,
        "positive": 138,
        "negative": 36,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 30,
      "message91": null,
      "message91_sha256_16": "95cb11678c7a80df",
      "codeword174_sha256_16": "57946ed9075f03b0",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 42
        },
        {
          "iteration": 1,
          "syndrome_weight": 39
        },
        {
          "iteration": 2,
          "syndrome_weight": 43
        },
        {
          "iteration": 3,
          "syndrome_weight": 41
        },
        {
          "iteration": 4,
          "syndrome_weight": 38
        },
        {
          "iteration": 5,
          "syndrome_weight": 45
        },
        {
          "iteration": 6,
          "syndrome_weight": 39
        },
        {
          "iteration": 7,
          "syndrome_weight": 46
        },
        {
          "iteration": 8,
          "syndrome_weight": 45
        },
        {
          "iteration": 9,
          "syndrome_weight": 40
        },
        {
          "iteration": 10,
          "syndrome_weight": 42
        },
        {
          "iteration": 15,
          "syndrome_weight": 44
        },
        {
          "iteration": 20,
          "syndrome_weight": 50
        }
      ]
    },
    {
      "variant": "reverse_symbol_order",
      "transform": "ft8_gray_alt_high_demap_lsb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": true,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 113.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 31,
      "message91": null,
      "message91_sha256_16": "1bacbd0793b9041a",
      "codeword174_sha256_16": "05a4517e00218153",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 50
        },
        {
          "iteration": 1,
          "syndrome_weight": 50
        },
        {
          "iteration": 2,
          "syndrome_weight": 32
        },
        {
          "iteration": 3,
          "syndrome_weight": 41
        },
        {
          "iteration": 4,
          "syndrome_weight": 36
        },
        {
          "iteration": 5,
          "syndrome_weight": 40
        },
        {
          "iteration": 6,
          "syndrome_weight": 48
        },
        {
          "iteration": 7,
          "syndrome_weight": 44
        },
        {
          "iteration": 8,
          "syndrome_weight": 42
        },
        {
          "iteration": 9,
          "syndrome_weight": 44
        },
        {
          "iteration": 10,
          "syndrome_weight": 42
        },
        {
          "iteration": 15,
          "syndrome_weight": 40
        },
        {
          "iteration": 20,
          "syndrome_weight": 31
        }
      ]
    },
    {
      "variant": "reverse_full_bitstream",
      "transform": "ft8_gray_primary_demap_msb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 112.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 31,
      "message91": null,
      "message91_sha256_16": "17a702c7403bd1b2",
      "codeword174_sha256_16": "76bf63b1ec27f58a",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 43
        },
        {
          "iteration": 1,
          "syndrome_weight": 37
        },
        {
          "iteration": 2,
          "syndrome_weight": 36
        },
        {
          "iteration": 3,
          "syndrome_weight": 38
        },
        {
          "iteration": 4,
          "syndrome_weight": 39
        },
        {
          "iteration": 5,
          "syndrome_weight": 38
        },
        {
          "iteration": 6,
          "syndrome_weight": 31
        },
        {
          "iteration": 7,
          "syndrome_weight": 47
        },
        {
          "iteration": 8,
          "syndrome_weight": 47
        },
        {
          "iteration": 9,
          "syndrome_weight": 42
        },
        {
          "iteration": 10,
          "syndrome_weight": 40
        },
        {
          "iteration": 15,
          "syndrome_weight": 42
        },
        {
          "iteration": 20,
          "syndrome_weight": 40
        }
      ]
    },
    {
      "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
      "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 31,
      "message91": null,
      "message91_sha256_16": "2b0d7a31ba899628",
      "codeword174_sha256_16": "ea9c003e9c197128",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 45
        },
        {
          "iteration": 1,
          "syndrome_weight": 37
        },
        {
          "iteration": 2,
          "syndrome_weight": 39
        },
        {
          "iteration": 3,
          "syndrome_weight": 46
        },
        {
          "iteration": 4,
          "syndrome_weight": 49
        },
        {
          "iteration": 5,
          "syndrome_weight": 44
        },
        {
          "iteration": 6,
          "syndrome_weight": 36
        },
        {
          "iteration": 7,
          "syndrome_weight": 36
        },
        {
          "iteration": 8,
          "syndrome_weight": 46
        },
        {
          "iteration": 9,
          "syndrome_weight": 40
        },
        {
          "iteration": 10,
          "syndrome_weight": 48
        },
        {
          "iteration": 15,
          "syndrome_weight": 37
        },
        {
          "iteration": 20,
          "syndrome_weight": 45
        }
      ]
    },
    {
      "variant": "lab_mask_xor_preview",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174,
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 101.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 31,
      "message91": null,
      "message91_sha256_16": "3edce333bba194c6",
      "codeword174_sha256_16": "569ccbfacc1349c4",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 40
        },
        {
          "iteration": 1,
          "syndrome_weight": 34
        },
        {
          "iteration": 2,
          "syndrome_weight": 45
        },
        {
          "iteration": 3,
          "syndrome_weight": 31
        },
        {
          "iteration": 4,
          "syndrome_weight": 38
        },
        {
          "iteration": 5,
          "syndrome_weight": 44
        },
        {
          "iteration": 6,
          "syndrome_weight": 37
        },
        {
          "iteration": 7,
          "syndrome_weight": 37
        },
        {
          "iteration": 8,
          "syndrome_weight": 45
        },
        {
          "iteration": 9,
          "syndrome_weight": 39
        },
        {
          "iteration": 10,
          "syndrome_weight": 32
        },
        {
          "iteration": 15,
          "syndrome_weight": 41
        },
        {
          "iteration": 20,
          "syndrome_weight": 47
        }
      ]
    },
    {
      "variant": "reverse_full_bitstream",
      "transform": "ft8_gray_primary_demap_msb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 112.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 32,
      "message91": null,
      "message91_sha256_16": "e8e90fd8b41ed29c",
      "codeword174_sha256_16": "9b2d7269d656d4af",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 43
        },
        {
          "iteration": 1,
          "syndrome_weight": 37
        },
        {
          "iteration": 2,
          "syndrome_weight": 40
        },
        {
          "iteration": 3,
          "syndrome_weight": 49
        },
        {
          "iteration": 4,
          "syndrome_weight": 43
        },
        {
          "iteration": 5,
          "syndrome_weight": 38
        },
        {
          "iteration": 6,
          "syndrome_weight": 37
        },
        {
          "iteration": 7,
          "syndrome_weight": 46
        },
        {
          "iteration": 8,
          "syndrome_weight": 37
        },
        {
          "iteration": 9,
          "syndrome_weight": 47
        },
        {
          "iteration": 10,
          "syndrome_weight": 32
        },
        {
          "iteration": 15,
          "syndrome_weight": 45
        },
        {
          "iteration": 20,
          "syndrome_weight": 43
        }
      ]
    },
    {
      "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 107.311136,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 1.827784,
        "min_abs": 0.008053,
        "max_abs": 4.126624,
        "positive": 138,
        "negative": 36,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 32,
      "message91": null,
      "message91_sha256_16": "f4b199ca6ce68c20",
      "codeword174_sha256_16": "eabdaf7834f3b582",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 33
        },
        {
          "iteration": 1,
          "syndrome_weight": 32
        },
        {
          "iteration": 2,
          "syndrome_weight": 39
        },
        {
          "iteration": 3,
          "syndrome_weight": 36
        },
        {
          "iteration": 4,
          "syndrome_weight": 50
        },
        {
          "iteration": 5,
          "syndrome_weight": 48
        },
        {
          "iteration": 6,
          "syndrome_weight": 39
        },
        {
          "iteration": 7,
          "syndrome_weight": 38
        },
        {
          "iteration": 8,
          "syndrome_weight": 48
        },
        {
          "iteration": 9,
          "syndrome_weight": 43
        },
        {
          "iteration": 10,
          "syndrome_weight": 52
        },
        {
          "iteration": 15,
          "syndrome_weight": 42
        },
        {
          "iteration": 20,
          "syndrome_weight": 42
        }
      ]
    },
    {
      "variant": "reverse_symbol_order",
      "transform": "ft8_gray_alt_high_demap_lsb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": true,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 113.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 33,
      "message91": null,
      "message91_sha256_16": "b6c4dd4168505fc5",
      "codeword174_sha256_16": "3a2d94c7a15abf2f",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 50
        },
        {
          "iteration": 1,
          "syndrome_weight": 50
        },
        {
          "iteration": 2,
          "syndrome_weight": 41
        },
        {
          "iteration": 3,
          "syndrome_weight": 33
        },
        {
          "iteration": 4,
          "syndrome_weight": 44
        },
        {
          "iteration": 5,
          "syndrome_weight": 40
        },
        {
          "iteration": 6,
          "syndrome_weight": 44
        },
        {
          "iteration": 7,
          "syndrome_weight": 42
        },
        {
          "iteration": 8,
          "syndrome_weight": 39
        },
        {
          "iteration": 9,
          "syndrome_weight": 42
        },
        {
          "iteration": 10,
          "syndrome_weight": 39
        },
        {
          "iteration": 15,
          "syndrome_weight": 42
        },
        {
          "iteration": 20,
          "syndrome_weight": 48
        }
      ]
    },
    {
      "variant": "reverse_full_bitstream",
      "transform": "ft8_gray_alt_high_demap_msb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 112.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 33,
      "message91": null,
      "message91_sha256_16": "f87044aee1fbf433",
      "codeword174_sha256_16": "5d5c54391eb1cbfd",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 43
        },
        {
          "iteration": 1,
          "syndrome_weight": 47
        },
        {
          "iteration": 2,
          "syndrome_weight": 42
        },
        {
          "iteration": 3,
          "syndrome_weight": 39
        },
        {
          "iteration": 4,
          "syndrome_weight": 37
        },
        {
          "iteration": 5,
          "syndrome_weight": 40
        },
        {
          "iteration": 6,
          "syndrome_weight": 33
        },
        {
          "iteration": 7,
          "syndrome_weight": 46
        },
        {
          "iteration": 8,
          "syndrome_weight": 44
        },
        {
          "iteration": 9,
          "syndrome_weight": 43
        },
        {
          "iteration": 10,
          "syndrome_weight": 44
        },
        {
          "iteration": 15,
          "syndrome_weight": 49
        },
        {
          "iteration": 20,
          "syndrome_weight": 44
        }
      ]
    },
    {
      "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver",
      "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": false,
        "interleaver": "ft8_bitrev",
        "direction": "deinterleave_rx_to_codeword",
        "order_len": 174
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 107.529872,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 1.882468,
        "min_abs": 0.003299,
        "max_abs": 4.126624,
        "positive": 148,
        "negative": 26,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 33,
      "message91": null,
      "message91_sha256_16": "1512a470c93c7bb5",
      "codeword174_sha256_16": "6d04c779ce0fc894",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 48
        },
        {
          "iteration": 1,
          "syndrome_weight": 38
        },
        {
          "iteration": 2,
          "syndrome_weight": 47
        },
        {
          "iteration": 3,
          "syndrome_weight": 43
        },
        {
          "iteration": 4,
          "syndrome_weight": 49
        },
        {
          "iteration": 5,
          "syndrome_weight": 46
        },
        {
          "iteration": 6,
          "syndrome_weight": 36
        },
        {
          "iteration": 7,
          "syndrome_weight": 35
        },
        {
          "iteration": 8,
          "syndrome_weight": 39
        },
        {
          "iteration": 9,
          "syndrome_weight": 47
        },
        {
          "iteration": 10,
          "syndrome_weight": 45
        },
        {
          "iteration": 15,
          "syndrome_weight": 41
        },
        {
          "iteration": 20,
          "syndrome_weight": 40
        }
      ]
    },
    {
      "variant": "reverse_symbol_order",
      "transform": "ft8_gray_primary_demap_lsb_input+no_interleaver+inverted_bits",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_primary",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": true,
        "interleaver": "none",
        "polarity": "inverted"
      },
      "decoder_trial": {
        "llr_scale": 0.75,
        "alpha": 0.7
      },
      "source_rank_score": 113.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 34,
      "message91": null,
      "message91_sha256_16": "9840b53bd4cff7c6",
      "codeword174_sha256_16": "0f3fddb5ca7ce9c3",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 42
        },
        {
          "iteration": 1,
          "syndrome_weight": 42
        },
        {
          "iteration": 2,
          "syndrome_weight": 42
        },
        {
          "iteration": 3,
          "syndrome_weight": 45
        },
        {
          "iteration": 4,
          "syndrome_weight": 37
        },
        {
          "iteration": 5,
          "syndrome_weight": 45
        },
        {
          "iteration": 6,
          "syndrome_weight": 43
        },
        {
          "iteration": 7,
          "syndrome_weight": 43
        },
        {
          "iteration": 8,
          "syndrome_weight": 35
        },
        {
          "iteration": 9,
          "syndrome_weight": 40
        },
        {
          "iteration": 10,
          "syndrome_weight": 39
        },
        {
          "iteration": 15,
          "syndrome_weight": 42
        },
        {
          "iteration": 20,
          "syndrome_weight": 39
        }
      ]
    },
    {
      "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
      "transform": "ft8_gray_alt_high_demap_lsb_input+no_interleaver",
      "mapping_meta": {
        "tone_mapping": "ft8_gray_alt_high",
        "gray_direction": "inverse_observed_to_plain",
        "reverse_bits_within_tone_before_gray": true,
        "interleaver": "none"
      },
      "decoder_trial": {
        "llr_scale": 1.0,
        "alpha": 0.8
      },
      "source_rank_score": 109.063032,
      "source_llr_stats": {
        "count": 174,
        "avg_abs": 2.265758,
        "min_abs": 0.020953,
        "max_abs": 4.126624,
        "positive": 139,
        "negative": 35,
        "zero": 0
      },
      "success": false,
      "iterations_used": 24,
      "final_syndrome_weight": 34,
      "message91": null,
      "message91_sha256_16": "07985c5b49461190",
      "codeword174_sha256_16": "c148a530d15360d5",
      "trace": [
        {
          "iteration": 0,
          "syndrome_weight": 42
        },
        {
          "iteration": 1,
          "syndrome_weight": 39
        },
        {
          "iteration": 2,
          "syndrome_weight": 35
        },
        {
          "iteration": 3,
          "syndrome_weight": 43
        },
        {
          "iteration": 4,
          "syndrome_weight": 38
        },
        {
          "iteration": 5,
          "syndrome_weight": 37
        },
        {
          "iteration": 6,
          "syndrome_weight": 41
        },
        {
          "iteration": 7,
          "syndrome_weight": 43
        },
        {
          "iteration": 8,
          "syndrome_weight": 46
        },
        {
          "iteration": 9,
          "syndrome_weight": 38
        },
        {
          "iteration": 10,
          "syndrome_weight": 34
        },
        {
          "iteration": 15,
          "syndrome_weight": 36
        },
        {
          "iteration": 20,
          "syndrome_weight": 40
        }
      ]
    }
  ],
  "decodes": [],
  "outputs": {
    "ldpc_soft_decode_json": "/decoders/js8_decoder/runtime/ldpc_soft_decode/step38_ldpc_soft_decode.json"
  },
  "warnings": [
    "Step 38 runs bounded normalized-min-sum soft LDPC over the best-ranked FT8-style Gray/interleaver mapping candidates against the public (174,91) matrix contract.",
    "This still does not unpack JS8 text or validate CRC/message payloads.",
    "If success is true and syndrome_weight is 0, the next step can unpack the 91-bit message. Otherwise more timing, Costas/data-symbol boundary, deinterleaver/order or LLR tuning is required."
  ],
  "next_action": "Upload Step35 logs. If no valid codeword, inspect best mapping_meta/final_syndrome_weight and continue timing/interleaver/LLR tuning; if valid, add JS8 message unpack/CRC."
}
