{
  "ok": true,
  "mode": "JS8",
  "tool": "webftr-js8-timing-boundary-candidate-sweep",
  "tool_version": "step38-fine-timing-ridge-sweep",
  "input_wav": "/decoders/js8_decoder/runtime/quick_prefilter_windows/js8_quick_selected_window.wav",
  "profile_scan_json": "/decoders/js8_decoder/logs/20260527T041823Z_real_run_profile_scan_output.json",
  "anchor_json": "/decoders/js8_decoder/logs/20260527T041823Z_real_run_auto_ldpc_probe_output.json",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "implementation_stage": "step38_timing_boundary_syndrome_sweep_no_message_unpack",
  "anchor_selection": {
    "source": "profile_scan_json",
    "path": "/decoders/js8_decoder/logs/20260527T041823Z_real_run_profile_scan_output.json",
    "selection": "profile_scan_selected_profile",
    "nsps": 6400,
    "start_seconds": 4.8,
    "base_freq_hz": 1025.0,
    "tone_spacing_hz": 1.875
  },
  "sweep_grid": {
    "start_offsets_s": [
      0.0,
      0.06,
      0.12,
      0.18,
      0.24,
      0.3,
      0.36
    ],
    "base_freq_offsets_hz": [
      3.0,
      3.5,
      4.0,
      4.5,
      5.0
    ],
    "tone_spacing_offsets_hz": [
      0.0,
      -0.03,
      0.03
    ],
    "max_combinations": 30,
    "actual_combinations": 30
  },
  "decode_found": false,
  "best_final_syndrome_weight": 22,
  "best_candidate": {
    "combination_index": 18,
    "offsets": {
      "start_offset_s": 0.06,
      "base_freq_offset_hz": 3.0,
      "tone_spacing_offset_hz": 0.03
    },
    "anchor_applied": {
      "start_seconds": 4.859999999999999,
      "base_freq_hz": 1028.0,
      "tone_spacing_hz": 1.905,
      "nsps": 6400
    },
    "pipeline_ok": true,
    "fec_input_summary": {
      "soft_bit_count": 174,
      "missing_soft_bits": 0,
      "complete_ldpc_input_candidate": true,
      "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
    },
    "sync_candidate": {
      "start_sample": 58320,
      "start_seconds": 4.86,
      "base_freq_hz": 1028.0,
      "tone_spacing_hz": 1.905,
      "nsps": 6400,
      "candidate_score": null,
      "costas_hits": null,
      "avg_margin_db": null,
      "anchor_source": "step38_timing_boundary_sweep:18"
    },
    "best_row": {
      "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"
      },
      "bit_count": 174,
      "hard_weight_174": 140,
      "llr_stats": {
        "count": 174,
        "avg_abs": 1.827784,
        "min_abs": 0.008053,
        "max_abs": 4.126624,
        "positive": 36,
        "negative": 138,
        "zero": 0
      },
      "source_rank_score": 107.311136,
      "syndrome_weight": 22,
      "valid_codeword_hard_decision": false,
      "message91_sha256_16": "67b59638aa8882d6",
      "codeword174_sha256_16": "0228efbd612c9092"
    },
    "top_rows": [
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 140,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.827784,
          "min_abs": 0.008053,
          "max_abs": 4.126624,
          "positive": 36,
          "negative": 138,
          "zero": 0
        },
        "source_rank_score": 107.311136,
        "syndrome_weight": 22,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "67b59638aa8882d6",
        "codeword174_sha256_16": "0228efbd612c9092"
      },
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 127,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.67241,
          "min_abs": 0.015278,
          "max_abs": 4.092886,
          "positive": 43,
          "negative": 131,
          "zero": 0
        },
        "source_rank_score": 106.68964,
        "syndrome_weight": 25,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "6a76c3f6f4855f72",
        "codeword174_sha256_16": "e94fe0f75c74d230"
      },
      {
        "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
        },
        "bit_count": 174,
        "hard_weight_174": 35,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.591212,
          "min_abs": 0.003661,
          "max_abs": 4.126624,
          "positive": 139,
          "negative": 35,
          "zero": 0
        },
        "source_rank_score": 106.364848,
        "syndrome_weight": 25,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "4f673c96b1f1de5c",
        "codeword174_sha256_16": "90bdd003a67ea079"
      },
      {
        "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
        },
        "bit_count": 174,
        "hard_weight_174": 36,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.64278,
          "min_abs": 0.002394,
          "max_abs": 4.126624,
          "positive": 148,
          "negative": 26,
          "zero": 0
        },
        "source_rank_score": 106.57112,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "4f673c96b1f1de5c",
        "codeword174_sha256_16": "eb17c3d482c6c1fa"
      },
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 83,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.882468,
          "min_abs": 0.003299,
          "max_abs": 4.126624,
          "positive": 26,
          "negative": 148,
          "zero": 0
        },
        "source_rank_score": 99.529872,
        "syndrome_weight": 29,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "e3f175dd3a2c81b2",
        "codeword174_sha256_16": "d5da07ca10be5a38"
      },
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 138,
        "llr_stats": {
          "count": 174,
          "avg_abs": 2.265758,
          "min_abs": 0.020953,
          "max_abs": 4.126624,
          "positive": 35,
          "negative": 139,
          "zero": 0
        },
        "source_rank_score": 109.063032,
        "syndrome_weight": 30,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "d5fd881ddc0d6fa3",
        "codeword174_sha256_16": "524f6b31360d4b54"
      },
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 121,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.882468,
          "min_abs": 0.003299,
          "max_abs": 4.126624,
          "positive": 26,
          "negative": 148,
          "zero": 0
        },
        "source_rank_score": 111.529872,
        "syndrome_weight": 31,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "b5db807c301847ac",
        "codeword174_sha256_16": "eaf8f2e0f46bfa41"
      },
      {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 123,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.827784,
          "min_abs": 0.008053,
          "max_abs": 4.126624,
          "positive": 36,
          "negative": 138,
          "zero": 0
        },
        "source_rank_score": 111.311136,
        "syndrome_weight": 31,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "b5db807c301847ac",
        "codeword174_sha256_16": "3bc0238a33865be3"
      }
    ],
    "warnings": [
      "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
      "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
      "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
      "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
      "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
    ]
  },
  "top_candidates": [
    {
      "combination_index": 18,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 3.0,
        "tone_spacing_offset_hz": 0.03
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:18"
      },
      "best_row": {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 140,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.827784,
          "min_abs": 0.008053,
          "max_abs": 4.126624,
          "positive": 36,
          "negative": 138,
          "zero": 0
        },
        "source_rank_score": 107.311136,
        "syndrome_weight": 22,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "67b59638aa8882d6",
        "codeword174_sha256_16": "0228efbd612c9092"
      },
      "top_rows": [
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 140,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.827784,
            "min_abs": 0.008053,
            "max_abs": 4.126624,
            "positive": 36,
            "negative": 138,
            "zero": 0
          },
          "source_rank_score": 107.311136,
          "syndrome_weight": 22,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "67b59638aa8882d6",
          "codeword174_sha256_16": "0228efbd612c9092"
        },
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 127,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.67241,
            "min_abs": 0.015278,
            "max_abs": 4.092886,
            "positive": 43,
            "negative": 131,
            "zero": 0
          },
          "source_rank_score": 106.68964,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "6a76c3f6f4855f72",
          "codeword174_sha256_16": "e94fe0f75c74d230"
        },
        {
          "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
          },
          "bit_count": 174,
          "hard_weight_174": 35,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.591212,
            "min_abs": 0.003661,
            "max_abs": 4.126624,
            "positive": 139,
            "negative": 35,
            "zero": 0
          },
          "source_rank_score": 106.364848,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "4f673c96b1f1de5c",
          "codeword174_sha256_16": "90bdd003a67ea079"
        },
        {
          "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
          },
          "bit_count": 174,
          "hard_weight_174": 36,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.64278,
            "min_abs": 0.002394,
            "max_abs": 4.126624,
            "positive": 148,
            "negative": 26,
            "zero": 0
          },
          "source_rank_score": 106.57112,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "4f673c96b1f1de5c",
          "codeword174_sha256_16": "eb17c3d482c6c1fa"
        },
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 83,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.882468,
            "min_abs": 0.003299,
            "max_abs": 4.126624,
            "positive": 26,
            "negative": 148,
            "zero": 0
          },
          "source_rank_score": 99.529872,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "e3f175dd3a2c81b2",
          "codeword174_sha256_16": "d5da07ca10be5a38"
        },
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 138,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.265758,
            "min_abs": 0.020953,
            "max_abs": 4.126624,
            "positive": 35,
            "negative": 139,
            "zero": 0
          },
          "source_rank_score": 109.063032,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "d5fd881ddc0d6fa3",
          "codeword174_sha256_16": "524f6b31360d4b54"
        },
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 121,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.882468,
            "min_abs": 0.003299,
            "max_abs": 4.126624,
            "positive": 26,
            "negative": 148,
            "zero": 0
          },
          "source_rank_score": 111.529872,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "b5db807c301847ac",
          "codeword174_sha256_16": "eaf8f2e0f46bfa41"
        },
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 123,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.827784,
            "min_abs": 0.008053,
            "max_abs": 4.126624,
            "positive": 36,
            "negative": 138,
            "zero": 0
          },
          "source_rank_score": 111.311136,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "b5db807c301847ac",
          "codeword174_sha256_16": "3bc0238a33865be3"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 15,
      "offsets": {
        "start_offset_s": 0.0,
        "base_freq_offset_hz": 5.0,
        "tone_spacing_offset_hz": 0.03
      },
      "anchor_applied": {
        "start_seconds": 4.8,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 57600,
        "start_seconds": 4.8,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:15"
      },
      "best_row": {
        "variant": "lab_mask_xor_preview",
        "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
        "mapping_meta": {
          "tone_mapping": "ft8_gray_primary",
          "gray_direction": "inverse_observed_to_plain",
          "reverse_bits_within_tone_before_gray": true,
          "interleaver": "ft8_bitrev",
          "direction": "interleave_codeword_to_rx_inverse",
          "order_len": 174,
          "polarity": "inverted"
        },
        "bit_count": 174,
        "hard_weight_174": 84,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.566292,
          "min_abs": 0.008625,
          "max_abs": 3.871059,
          "positive": 46,
          "negative": 128,
          "zero": 0
        },
        "source_rank_score": 98.265168,
        "syndrome_weight": 24,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "15da00dc0c187968",
        "codeword174_sha256_16": "a34efb83ad21097f"
      },
      "top_rows": [
        {
          "variant": "lab_mask_xor_preview",
          "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 84,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.566292,
            "min_abs": 0.008625,
            "max_abs": 3.871059,
            "positive": 46,
            "negative": 128,
            "zero": 0
          },
          "source_rank_score": 98.265168,
          "syndrome_weight": 24,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "15da00dc0c187968",
          "codeword174_sha256_16": "a34efb83ad21097f"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 46,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.251631,
            "min_abs": 0.005541,
            "max_abs": 4.032212,
            "positive": 128,
            "negative": 46,
            "zero": 0
          },
          "source_rank_score": 105.006524,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ff55f5e7dbb755af",
          "codeword174_sha256_16": "46f8b82ab21340e3"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 125,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.553047,
            "min_abs": 0.04156,
            "max_abs": 3.744241,
            "positive": 49,
            "negative": 125,
            "zero": 0
          },
          "source_rank_score": 106.212188,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "0a664839a51e9f34",
          "codeword174_sha256_16": "299293d8b8d7026b"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 123,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.285799,
            "min_abs": 0.003321,
            "max_abs": 3.744241,
            "positive": 50,
            "negative": 124,
            "zero": 0
          },
          "source_rank_score": 105.143196,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "afefdb2bc335171d",
          "codeword174_sha256_16": "67c8c6e096cb6235"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 52,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.562515,
            "min_abs": 0.033601,
            "max_abs": 4.042898,
            "positive": 122,
            "negative": 52,
            "zero": 0
          },
          "source_rank_score": 106.25006,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "555090f944023a0c",
          "codeword174_sha256_16": "3d0eb40db86bb238"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+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
          },
          "bit_count": 174,
          "hard_weight_174": 64,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.045094,
            "min_abs": 0.005438,
            "max_abs": 3.871059,
            "positive": 110,
            "negative": 64,
            "zero": 0
          },
          "source_rank_score": 104.180376,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "83306fbbd73e8853",
          "codeword174_sha256_16": "366e3c1a45351d5b"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 137,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.540017,
            "min_abs": 0.006373,
            "max_abs": 4.032212,
            "positive": 43,
            "negative": 131,
            "zero": 0
          },
          "source_rank_score": 106.160068,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "48e4ec60a6d27f12",
          "codeword174_sha256_16": "74765003214fc113"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+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
          },
          "bit_count": 174,
          "hard_weight_174": 61,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.074864,
            "min_abs": 0.002138,
            "max_abs": 3.871059,
            "positive": 117,
            "negative": 57,
            "zero": 0
          },
          "source_rank_score": 104.299456,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "83306fbbd73e8853",
          "codeword174_sha256_16": "28c0611403d18822"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 25,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 4.5,
        "tone_spacing_offset_hz": 0.0
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.875,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.875,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:25"
      },
      "best_row": {
        "variant": "raw_msb_symbol_order",
        "transform": "raw_msb+no_interleaver+inverted_bits",
        "mapping_meta": {
          "tone_mapping": "raw_msb",
          "interleaver": "none",
          "polarity": "inverted"
        },
        "bit_count": 174,
        "hard_weight_174": 141,
        "llr_stats": {
          "count": 174,
          "avg_abs": 2.061371,
          "min_abs": 0.00324,
          "max_abs": 4.274643,
          "positive": 32,
          "negative": 142,
          "zero": 0
        },
        "source_rank_score": 126.245484,
        "syndrome_weight": 25,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "7fd92be77aa95d3a",
        "codeword174_sha256_16": "0201ec5a9b5b2e3b"
      },
      "top_rows": [
        {
          "variant": "raw_msb_symbol_order",
          "transform": "raw_msb+no_interleaver+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "none",
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 126.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "lsb_within_each_tone",
          "transform": "lsb_within_each_tone+no_interleaver+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "none",
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 118.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "mapped_lsb_within_each_tone+no_interleaver",
          "transform": "lsb_within_each_tone+no_interleaver+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "none",
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 108.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 108.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "raw_msb+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 108.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "mapped_raw_msb+no_interleaver",
          "transform": "raw_msb+no_interleaver+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "none",
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 141,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.061371,
            "min_abs": 0.00324,
            "max_abs": 4.274643,
            "positive": 32,
            "negative": 142,
            "zero": 0
          },
          "source_rank_score": 108.245484,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7fd92be77aa95d3a",
          "codeword174_sha256_16": "0201ec5a9b5b2e3b"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 128,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.219845,
            "min_abs": 0.001305,
            "max_abs": 3.783049,
            "positive": 42,
            "negative": 132,
            "zero": 0
          },
          "source_rank_score": 104.87938,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "522313e00a992a7b",
          "codeword174_sha256_16": "b7191964a661a02d"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 128,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.17103,
            "min_abs": 0.002471,
            "max_abs": 3.783049,
            "positive": 38,
            "negative": 136,
            "zero": 0
          },
          "source_rank_score": 104.68412,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "522313e00a992a7b",
          "codeword174_sha256_16": "b7191964a661a02d"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 20,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 3.5,
        "tone_spacing_offset_hz": -0.03
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1028.5,
        "tone_spacing_hz": 1.845,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1028.5,
        "tone_spacing_hz": 1.845,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:20"
      },
      "best_row": {
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 125,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.66919,
          "min_abs": 0.002626,
          "max_abs": 3.91817,
          "positive": 41,
          "negative": 133,
          "zero": 0
        },
        "source_rank_score": 106.67676,
        "syndrome_weight": 25,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "19b08813892a465d",
        "codeword174_sha256_16": "98ad9f5d93eab225"
      },
      "top_rows": [
        {
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 125,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.66919,
            "min_abs": 0.002626,
            "max_abs": 3.91817,
            "positive": 41,
            "negative": 133,
            "zero": 0
          },
          "source_rank_score": 106.67676,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "19b08813892a465d",
          "codeword174_sha256_16": "98ad9f5d93eab225"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 105,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.131115,
            "min_abs": 0.003669,
            "max_abs": 3.549497,
            "positive": 67,
            "negative": 107,
            "zero": 0
          },
          "source_rank_score": 104.52446,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "dd000bb12884ff34",
          "codeword174_sha256_16": "c59341021e0676e7"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+no_interleaver",
          "transform": "lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 59,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.701322,
            "min_abs": 0.004742,
            "max_abs": 3.873713,
            "positive": 120,
            "negative": 54,
            "zero": 0
          },
          "source_rank_score": 106.805288,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "9c01737f4aeb9695",
          "codeword174_sha256_16": "bc131bc857b8fd31"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 116,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.691194,
            "min_abs": 0.004742,
            "max_abs": 3.801836,
            "positive": 48,
            "negative": 126,
            "zero": 0
          },
          "source_rank_score": 106.764776,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "aac0c46f3706d4b7",
          "codeword174_sha256_16": "98e503566e802118"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 116,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.634484,
            "min_abs": 0.003516,
            "max_abs": 3.801836,
            "positive": 51,
            "negative": 123,
            "zero": 0
          },
          "source_rank_score": 106.537936,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "aac0c46f3706d4b7",
          "codeword174_sha256_16": "98e503566e802118"
        },
        {
          "variant": "reverse_symbol_order",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 61,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.780164,
            "min_abs": 0.003515,
            "max_abs": 4.088622,
            "positive": 134,
            "negative": 40,
            "zero": 0
          },
          "source_rank_score": 111.120656,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "17e5d06559c52a35",
          "codeword174_sha256_16": "001b4860f509a5d7"
        },
        {
          "variant": "reverse_full_bitstream",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "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": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 61,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.63496,
            "min_abs": 0.003515,
            "max_abs": 3.873713,
            "positive": 114,
            "negative": 60,
            "zero": 0
          },
          "source_rank_score": 109.53984,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "17e5d06559c52a35",
          "codeword174_sha256_16": "001b4860f509a5d7"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "lsb_within_each_tone+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 39,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.202357,
            "min_abs": 0.004742,
            "max_abs": 4.088622,
            "positive": 139,
            "negative": 35,
            "zero": 0
          },
          "source_rank_score": 108.809428,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2e790574e40151c8",
          "codeword174_sha256_16": "5df9f8ed4f8c7306"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 23,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 4.0,
        "tone_spacing_offset_hz": -0.03
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1029.0,
        "tone_spacing_hz": 1.845,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1029.0,
        "tone_spacing_hz": 1.845,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:23"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 107,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.110512,
          "min_abs": 0.000235,
          "max_abs": 3.70669,
          "positive": 62,
          "negative": 112,
          "zero": 0
        },
        "source_rank_score": 104.442048,
        "syndrome_weight": 25,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "e2a04bc8873cd51b",
        "codeword174_sha256_16": "5f92cab401d389b8"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 107,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.110512,
            "min_abs": 0.000235,
            "max_abs": 3.70669,
            "positive": 62,
            "negative": 112,
            "zero": 0
          },
          "source_rank_score": 104.442048,
          "syndrome_weight": 25,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "e2a04bc8873cd51b",
          "codeword174_sha256_16": "5f92cab401d389b8"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 116,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.209004,
            "min_abs": 4.8e-05,
            "max_abs": 3.868363,
            "positive": 49,
            "negative": 125,
            "zero": 0
          },
          "source_rank_score": 104.836016,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2a60dab5f22bdeb9",
          "codeword174_sha256_16": "324857f8511d7ab8"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": false,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 44,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.483932,
            "min_abs": 0.002548,
            "max_abs": 4.301509,
            "positive": 130,
            "negative": 44,
            "zero": 0
          },
          "source_rank_score": 105.935728,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "41f38ee3a2884ea3",
          "codeword174_sha256_16": "da6cffabf95007e0"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": false,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 45,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.528267,
            "min_abs": 0.000574,
            "max_abs": 4.301509,
            "positive": 134,
            "negative": 40,
            "zero": 0
          },
          "source_rank_score": 106.113068,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "41f38ee3a2884ea3",
          "codeword174_sha256_16": "e6d7ca287cd841f5"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": false,
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 47,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.483001,
            "min_abs": 0.000463,
            "max_abs": 4.301509,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 105.932004,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "76e6ebcaab758d57",
          "codeword174_sha256_16": "43fd69baa6275efa"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+no_interleaver",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 133,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.051506,
            "min_abs": 0.000742,
            "max_abs": 3.029638,
            "positive": 42,
            "negative": 132,
            "zero": 0
          },
          "source_rank_score": 104.206024,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "80152402848c8fd2",
          "codeword174_sha256_16": "b1aa695db14b9528"
        },
        {
          "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 54,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.570633,
            "min_abs": 0.013213,
            "max_abs": 3.868363,
            "positive": 123,
            "negative": 51,
            "zero": 0
          },
          "source_rank_score": 106.282532,
          "syndrome_weight": 32,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "e68de5e9e889b44d",
          "codeword174_sha256_16": "4472fdb1ccb84734"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 56,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.549143,
            "min_abs": 0.04597,
            "max_abs": 3.742293,
            "positive": 120,
            "negative": 54,
            "zero": 0
          },
          "source_rank_score": 106.196572,
          "syndrome_weight": 32,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2f35f2655a2e1d94",
          "codeword174_sha256_16": "258ccfc85b73ee00"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 3,
      "offsets": {
        "start_offset_s": 0.0,
        "base_freq_offset_hz": 3.0,
        "tone_spacing_offset_hz": 0.03
      },
      "anchor_applied": {
        "start_seconds": 4.8,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 57600,
        "start_seconds": 4.8,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:3"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver",
        "transform": "lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
        "mapping_meta": {
          "tone_mapping": "lsb_within_each_tone",
          "interleaver": "ft8_bitrev",
          "direction": "deinterleave_rx_to_codeword",
          "order_len": 174
        },
        "bit_count": 174,
        "hard_weight_174": 38,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.883273,
          "min_abs": 0.004668,
          "max_abs": 4.206963,
          "positive": 144,
          "negative": 30,
          "zero": 0
        },
        "source_rank_score": 107.533092,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "9dc92bc8076d3453",
        "codeword174_sha256_16": "69589423fe420ec9"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver",
          "transform": "lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 38,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.883273,
            "min_abs": 0.004668,
            "max_abs": 4.206963,
            "positive": 144,
            "negative": 30,
            "zero": 0
          },
          "source_rank_score": 107.533092,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "9dc92bc8076d3453",
          "codeword174_sha256_16": "69589423fe420ec9"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 63,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.495211,
            "min_abs": 0.006001,
            "max_abs": 4.206963,
            "positive": 115,
            "negative": 59,
            "zero": 0
          },
          "source_rank_score": 105.980844,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "980fa2c313a59ed7",
          "codeword174_sha256_16": "94f3aa758feed897"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 113,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.171359,
            "min_abs": 0.000261,
            "max_abs": 3.142279,
            "positive": 62,
            "negative": 112,
            "zero": 0
          },
          "source_rank_score": 104.685436,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "d347312390ff5cf2",
          "codeword174_sha256_16": "6dd8473311877d6b"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 55,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.140102,
            "min_abs": 1e-06,
            "max_abs": 2.987177,
            "positive": 121,
            "negative": 53,
            "zero": 0
          },
          "source_rank_score": 104.560408,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "a17885ef99d8871e",
          "codeword174_sha256_16": "9d7026f93f1641b5"
        },
        {
          "variant": "raw_msb_symbol_order",
          "transform": "ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": false,
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 40,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.826466,
            "min_abs": 0.000261,
            "max_abs": 4.206963,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 125.305864,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2713ced8ec42e2ee",
          "codeword174_sha256_16": "df1c85af54cc4761"
        },
        {
          "variant": "lsb_within_each_tone",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 40,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.520682,
            "min_abs": 0.000261,
            "max_abs": 3.761123,
            "positive": 113,
            "negative": 61,
            "zero": 0
          },
          "source_rank_score": 116.082728,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2713ced8ec42e2ee",
          "codeword174_sha256_16": "df1c85af54cc4761"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 40,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.826466,
            "min_abs": 0.000261,
            "max_abs": 4.206963,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 107.305864,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2713ced8ec42e2ee",
          "codeword174_sha256_16": "df1c85af54cc4761"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 40,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.826466,
            "min_abs": 0.000261,
            "max_abs": 4.206963,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 107.305864,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2713ced8ec42e2ee",
          "codeword174_sha256_16": "df1c85af54cc4761"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 16,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 3.0,
        "tone_spacing_offset_hz": 0.0
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.875,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1028.0,
        "tone_spacing_hz": 1.875,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:16"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
        "transform": "ft8_gray_primary_demap_lsb_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": true,
          "interleaver": "ft8_bitrev",
          "direction": "deinterleave_rx_to_codeword",
          "order_len": 174
        },
        "bit_count": 174,
        "hard_weight_174": 52,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.386406,
          "min_abs": 0.005031,
          "max_abs": 4.071798,
          "positive": 133,
          "negative": 41,
          "zero": 0
        },
        "source_rank_score": 105.545624,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "20cb8982e61b4da6",
        "codeword174_sha256_16": "930f19c9f48a77d8"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 52,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.386406,
            "min_abs": 0.005031,
            "max_abs": 4.071798,
            "positive": 133,
            "negative": 41,
            "zero": 0
          },
          "source_rank_score": 105.545624,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "20cb8982e61b4da6",
          "codeword174_sha256_16": "930f19c9f48a77d8"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 52,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.315017,
            "min_abs": 0.004658,
            "max_abs": 4.071798,
            "positive": 131,
            "negative": 43,
            "zero": 0
          },
          "source_rank_score": 105.260068,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "20cb8982e61b4da6",
          "codeword174_sha256_16": "930f19c9f48a77d8"
        },
        {
          "variant": "reverse_symbol_order",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 117,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.878257,
            "min_abs": 0.005474,
            "max_abs": 4.082287,
            "positive": 34,
            "negative": 140,
            "zero": 0
          },
          "source_rank_score": 111.513028,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5a5f45650d34d120",
          "codeword174_sha256_16": "c3ddcaf03c3ccd70"
        },
        {
          "variant": "reverse_symbol_order",
          "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
          },
          "bit_count": 174,
          "hard_weight_174": 33,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.74431,
            "min_abs": 0.007324,
            "max_abs": 3.889221,
            "positive": 127,
            "negative": 47,
            "zero": 0
          },
          "source_rank_score": 110.97724,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "e1e8116e828e9db5",
          "codeword174_sha256_16": "83548fad996036b7"
        },
        {
          "variant": "reverse_full_bitstream",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 33,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.935993,
            "min_abs": 0.007324,
            "max_abs": 4.082287,
            "positive": 147,
            "negative": 27,
            "zero": 0
          },
          "source_rank_score": 110.743972,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "e1e8116e828e9db5",
          "codeword174_sha256_16": "83548fad996036b7"
        },
        {
          "variant": "reverse_full_bitstream",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 117,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.686575,
            "min_abs": 0.005474,
            "max_abs": 3.889221,
            "positive": 54,
            "negative": 120,
            "zero": 0
          },
          "source_rank_score": 109.7463,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5a5f45650d34d120",
          "codeword174_sha256_16": "c3ddcaf03c3ccd70"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 99,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.116924,
            "min_abs": 0.004138,
            "max_abs": 3.889221,
            "positive": 72,
            "negative": 102,
            "zero": 0
          },
          "source_rank_score": 104.467696,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "145bc09c008ba5d6",
          "codeword174_sha256_16": "409c00e9c14169e8"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_lsb_input+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 48,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.737959,
            "min_abs": 0.057881,
            "max_abs": 4.071798,
            "positive": 127,
            "negative": 47,
            "zero": 0
          },
          "source_rank_score": 106.951836,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "93cb5265335a79ef",
          "codeword174_sha256_16": "4766150d6d4fa78d"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 12,
      "offsets": {
        "start_offset_s": 0.0,
        "base_freq_offset_hz": 4.5,
        "tone_spacing_offset_hz": 0.03
      },
      "anchor_applied": {
        "start_seconds": 4.8,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.905,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 57600,
        "start_seconds": 4.8,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.905,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:12"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
        "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
          "order_len": 174,
          "polarity": "inverted"
        },
        "bit_count": 174,
        "hard_weight_174": 138,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.353497,
          "min_abs": 0.000502,
          "max_abs": 3.874215,
          "positive": 36,
          "negative": 138,
          "zero": 0
        },
        "source_rank_score": 105.413988,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "2a682adb0723359d",
        "codeword174_sha256_16": "a247ca5c9f29b5ce"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 138,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.353497,
            "min_abs": 0.000502,
            "max_abs": 3.874215,
            "positive": 36,
            "negative": 138,
            "zero": 0
          },
          "source_rank_score": 105.413988,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2a682adb0723359d",
          "codeword174_sha256_16": "a247ca5c9f29b5ce"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 138,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.329849,
            "min_abs": 0.000185,
            "max_abs": 3.874215,
            "positive": 36,
            "negative": 138,
            "zero": 0
          },
          "source_rank_score": 105.319396,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "2a682adb0723359d",
          "codeword174_sha256_16": "a247ca5c9f29b5ce"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": false,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 45,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.620206,
            "min_abs": 0.007163,
            "max_abs": 3.874215,
            "positive": 136,
            "negative": 38,
            "zero": 0
          },
          "source_rank_score": 106.480824,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "744b05836ecbcbe7",
          "codeword174_sha256_16": "568610ba9457b09f"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+no_interleaver",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 135,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.223374,
            "min_abs": 0.000233,
            "max_abs": 3.781995,
            "positive": 33,
            "negative": 141,
            "zero": 0
          },
          "source_rank_score": 104.893496,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "346b39e657fd9af2",
          "codeword174_sha256_16": "46cb1d75970a3803"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+no_interleaver",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 135,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.221819,
            "min_abs": 8.2e-05,
            "max_abs": 3.781995,
            "positive": 35,
            "negative": 139,
            "zero": 0
          },
          "source_rank_score": 104.887276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "346b39e657fd9af2",
          "codeword174_sha256_16": "46cb1d75970a3803"
        },
        {
          "variant": "raw_msb_symbol_order",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 135,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.592845,
            "min_abs": 0.010963,
            "max_abs": 3.781995,
            "positive": 34,
            "negative": 140,
            "zero": 0
          },
          "source_rank_score": 124.37138,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5dd3399566d3b627",
          "codeword174_sha256_16": "a46e41c47e03bed8"
        },
        {
          "variant": "raw_msb_symbol_order",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 135,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.555609,
            "min_abs": 0.004557,
            "max_abs": 3.781995,
            "positive": 34,
            "negative": 140,
            "zero": 0
          },
          "source_rank_score": 124.222436,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5dd3399566d3b627",
          "codeword174_sha256_16": "a46e41c47e03bed8"
        },
        {
          "variant": "lsb_within_each_tone",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 135,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.855681,
            "min_abs": 0.010963,
            "max_abs": 4.002562,
            "positive": 28,
            "negative": 146,
            "zero": 0
          },
          "source_rank_score": 117.422724,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5dd3399566d3b627",
          "codeword174_sha256_16": "a46e41c47e03bed8"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 11,
      "offsets": {
        "start_offset_s": 0.0,
        "base_freq_offset_hz": 4.5,
        "tone_spacing_offset_hz": -0.03
      },
      "anchor_applied": {
        "start_seconds": 4.8,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.845,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 57600,
        "start_seconds": 4.8,
        "base_freq_hz": 1029.5,
        "tone_spacing_hz": 1.845,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:11"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 134,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.272009,
          "min_abs": 0.000567,
          "max_abs": 4.079288,
          "positive": 42,
          "negative": 132,
          "zero": 0
        },
        "source_rank_score": 105.088036,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "dc0344c66ac2c99b",
        "codeword174_sha256_16": "6974c4c526e2c94d"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 134,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.272009,
            "min_abs": 0.000567,
            "max_abs": 4.079288,
            "positive": 42,
            "negative": 132,
            "zero": 0
          },
          "source_rank_score": 105.088036,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "dc0344c66ac2c99b",
          "codeword174_sha256_16": "6974c4c526e2c94d"
        },
        {
          "variant": "raw_msb_symbol_order",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.587569,
            "min_abs": 0.00039,
            "max_abs": 3.918957,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 124.350276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "lsb_within_each_tone",
          "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
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.847373,
            "min_abs": 0.00039,
            "max_abs": 4.079288,
            "positive": 144,
            "negative": 30,
            "zero": 0
          },
          "source_rank_score": 117.389492,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "raw_msb+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.587569,
            "min_abs": 0.00039,
            "max_abs": 3.918957,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 106.350276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+no_interleaver",
          "transform": "raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.587569,
            "min_abs": 0.00039,
            "max_abs": 3.918957,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 106.350276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "mapped_lsb_within_each_tone+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
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.587569,
            "min_abs": 0.00039,
            "max_abs": 3.918957,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 106.350276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "mapped_raw_msb+no_interleaver",
          "transform": "ft8_gray_primary_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 41,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.587569,
            "min_abs": 0.00039,
            "max_abs": 3.918957,
            "positive": 132,
            "negative": 42,
            "zero": 0
          },
          "source_rank_score": 106.350276,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "ea1ac80658c5352d",
          "codeword174_sha256_16": "c5c2175ccde6e5b3"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 136,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.357028,
            "min_abs": 0.002021,
            "max_abs": 4.079288,
            "positive": 38,
            "negative": 136,
            "zero": 0
          },
          "source_rank_score": 105.428112,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "dc0344c66ac2c99b",
          "codeword174_sha256_16": "9f8723dc4b58b6cf"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 24,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 4.0,
        "tone_spacing_offset_hz": 0.03
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1029.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1029.0,
        "tone_spacing_hz": 1.905,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:24"
      },
      "best_row": {
        "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
        "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"
        },
        "bit_count": 174,
        "hard_weight_174": 124,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.12694,
          "min_abs": 0.003683,
          "max_abs": 3.638909,
          "positive": 49,
          "negative": 125,
          "zero": 0
        },
        "source_rank_score": 104.50776,
        "syndrome_weight": 26,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "df177b1b43ebcb88",
        "codeword174_sha256_16": "60205fdd011c7e05"
      },
      "top_rows": [
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 124,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.12694,
            "min_abs": 0.003683,
            "max_abs": 3.638909,
            "positive": 49,
            "negative": 125,
            "zero": 0
          },
          "source_rank_score": 104.50776,
          "syndrome_weight": 26,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "df177b1b43ebcb88",
          "codeword174_sha256_16": "60205fdd011c7e05"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 122,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.564733,
            "min_abs": 0.002655,
            "max_abs": 3.707365,
            "positive": 51,
            "negative": 123,
            "zero": 0
          },
          "source_rank_score": 106.258932,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "4f001edffee5017f",
          "codeword174_sha256_16": "a5e99a9fff619150"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "lsb_within_each_tone+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 51,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.419682,
            "min_abs": 0.024839,
            "max_abs": 3.54107,
            "positive": 123,
            "negative": 51,
            "zero": 0
          },
          "source_rank_score": 105.678728,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "7a4f98eb8214a8ce",
          "codeword174_sha256_16": "395bf0abe3aec3be"
        },
        {
          "variant": "lab_mask_xor_preview",
          "transform": "lsb_within_each_tone+no_interleaver+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "none",
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 89,
          "llr_stats": {
            "count": 174,
            "avg_abs": 2.03621,
            "min_abs": 0.05766,
            "max_abs": 4.191314,
            "positive": 40,
            "negative": 134,
            "zero": 0
          },
          "source_rank_score": 100.14484,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "c01f71a2edd9b97d",
          "codeword174_sha256_16": "6cbef933635a5885"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "lsb_within_each_tone",
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 134,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.700993,
            "min_abs": 0.004606,
            "max_abs": 4.191314,
            "positive": 35,
            "negative": 139,
            "zero": 0
          },
          "source_rank_score": 106.803972,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "88b1b2753c5bdae5",
          "codeword174_sha256_16": "0e969acbf79d9c0c"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 126,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.20202,
            "min_abs": 0.000831,
            "max_abs": 3.64312,
            "positive": 43,
            "negative": 131,
            "zero": 0
          },
          "source_rank_score": 104.80808,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "df177b1b43ebcb88",
          "codeword174_sha256_16": "136b5757a40ae6cc"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 126,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.128603,
            "min_abs": 0.008687,
            "max_abs": 4.191314,
            "positive": 46,
            "negative": 128,
            "zero": 0
          },
          "source_rank_score": 104.514412,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "1deaddb66b489890",
          "codeword174_sha256_16": "d67680bf6760f7e3"
        },
        {
          "variant": "raw_msb_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"
          },
          "bit_count": 174,
          "hard_weight_174": 121,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.461699,
            "min_abs": 0.004606,
            "max_abs": 3.54107,
            "positive": 49,
            "negative": 125,
            "zero": 0
          },
          "source_rank_score": 123.846796,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "c9536416c7505249",
          "codeword174_sha256_16": "b716e17f5524d175"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 14,
      "offsets": {
        "start_offset_s": 0.0,
        "base_freq_offset_hz": 5.0,
        "tone_spacing_offset_hz": -0.03
      },
      "anchor_applied": {
        "start_seconds": 4.8,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.845,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 57600,
        "start_seconds": 4.8,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.845,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:14"
      },
      "best_row": {
        "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
        "transform": "ft8_gray_alt_high_demap_lsb_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": true,
          "interleaver": "ft8_bitrev",
          "direction": "deinterleave_rx_to_codeword",
          "order_len": 174
        },
        "bit_count": 174,
        "hard_weight_174": 47,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.347502,
          "min_abs": 0.002411,
          "max_abs": 3.955787,
          "positive": 129,
          "negative": 45,
          "zero": 0
        },
        "source_rank_score": 105.390008,
        "syndrome_weight": 27,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "1c2e6d4c1a1e2ab1",
        "codeword174_sha256_16": "b348ee70b6a3483c"
      },
      "top_rows": [
        {
          "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_lsb_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": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 47,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.347502,
            "min_abs": 0.002411,
            "max_abs": 3.955787,
            "positive": 129,
            "negative": 45,
            "zero": 0
          },
          "source_rank_score": 105.390008,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "1c2e6d4c1a1e2ab1",
          "codeword174_sha256_16": "b348ee70b6a3483c"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 44,
          "llr_stats": {
            "count": 174,
            "avg_abs": 0.915549,
            "min_abs": 0.000541,
            "max_abs": 3.70776,
            "positive": 135,
            "negative": 39,
            "zero": 0
          },
          "source_rank_score": 103.662196,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "4519b9b754d1204f",
          "codeword174_sha256_16": "d94e9095d6c6e93a"
        },
        {
          "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 140,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.96276,
            "min_abs": 0.028868,
            "max_abs": 4.041541,
            "positive": 35,
            "negative": 139,
            "zero": 0
          },
          "source_rank_score": 107.85104,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "f1cd8126e5c533e3",
          "codeword174_sha256_16": "16a4556bf802b492"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "deinterleave_rx_to_codeword",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 119,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.065423,
            "min_abs": 0.005117,
            "max_abs": 3.498813,
            "positive": 52,
            "negative": 122,
            "zero": 0
          },
          "source_rank_score": 104.261692,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "af85b2aafd15d647",
          "codeword174_sha256_16": "6b02d8170f5771ba"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_primary_demap_lsb_input+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 51,
          "llr_stats": {
            "count": 174,
            "avg_abs": 0.938196,
            "min_abs": 8.5e-05,
            "max_abs": 3.107059,
            "positive": 127,
            "negative": 47,
            "zero": 0
          },
          "source_rank_score": 103.752784,
          "syndrome_weight": 31,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "1ef1df661b088fb2",
          "codeword174_sha256_16": "7dcdc2345950aa49"
        },
        {
          "variant": "raw_msb_symbol_order",
          "transform": "ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_primary",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 132,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.402685,
            "min_abs": 0.016119,
            "max_abs": 4.041541,
            "positive": 39,
            "negative": 135,
            "zero": 0
          },
          "source_rank_score": 123.61074,
          "syndrome_weight": 32,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "9efa82de730c504e",
          "codeword174_sha256_16": "9fc74ff7a5307a79"
        },
        {
          "variant": "lsb_within_each_tone",
          "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 132,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.602357,
            "min_abs": 0.016119,
            "max_abs": 3.889323,
            "positive": 38,
            "negative": 136,
            "zero": 0
          },
          "source_rank_score": 116.409428,
          "syndrome_weight": 32,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "9efa82de730c504e",
          "codeword174_sha256_16": "9fc74ff7a5307a79"
        },
        {
          "variant": "mapped_lsb_within_each_tone+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"
          },
          "bit_count": 174,
          "hard_weight_174": 140,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.96276,
            "min_abs": 0.028868,
            "max_abs": 4.041541,
            "positive": 35,
            "negative": 139,
            "zero": 0
          },
          "source_rank_score": 107.85104,
          "syndrome_weight": 32,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "128686bc8fd1c14d",
          "codeword174_sha256_16": "e1946ca31cb74111"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    },
    {
      "combination_index": 28,
      "offsets": {
        "start_offset_s": 0.06,
        "base_freq_offset_hz": 5.0,
        "tone_spacing_offset_hz": 0.0
      },
      "anchor_applied": {
        "start_seconds": 4.859999999999999,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.875,
        "nsps": 6400
      },
      "pipeline_ok": true,
      "fec_input_summary": {
        "soft_bit_count": 174,
        "missing_soft_bits": 0,
        "complete_ldpc_input_candidate": true,
        "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate"
      },
      "sync_candidate": {
        "start_sample": 58320,
        "start_seconds": 4.86,
        "base_freq_hz": 1030.0,
        "tone_spacing_hz": 1.875,
        "nsps": 6400,
        "candidate_score": null,
        "costas_hits": null,
        "avg_margin_db": null,
        "anchor_source": "step38_timing_boundary_sweep:28"
      },
      "best_row": {
        "variant": "lab_mask_xor_preview",
        "transform": "raw_msb+no_interleaver",
        "mapping_meta": {
          "tone_mapping": "raw_msb",
          "interleaver": "none"
        },
        "bit_count": 174,
        "hard_weight_174": 95,
        "llr_stats": {
          "count": 174,
          "avg_abs": 1.983812,
          "min_abs": 0.041058,
          "max_abs": 4.24207,
          "positive": 136,
          "negative": 38,
          "zero": 0
        },
        "source_rank_score": 99.935248,
        "syndrome_weight": 27,
        "valid_codeword_hard_decision": false,
        "message91_sha256_16": "f2ef1762c906ef31",
        "codeword174_sha256_16": "c6cb32457e4c0ce8"
      },
      "top_rows": [
        {
          "variant": "lab_mask_xor_preview",
          "transform": "raw_msb+no_interleaver",
          "mapping_meta": {
            "tone_mapping": "raw_msb",
            "interleaver": "none"
          },
          "bit_count": 174,
          "hard_weight_174": 95,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.983812,
            "min_abs": 0.041058,
            "max_abs": 4.24207,
            "positive": 136,
            "negative": 38,
            "zero": 0
          },
          "source_rank_score": 99.935248,
          "syndrome_weight": 27,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "f2ef1762c906ef31",
          "codeword174_sha256_16": "c6cb32457e4c0ce8"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 62,
          "llr_stats": {
            "count": 174,
            "avg_abs": 0.803329,
            "min_abs": 0.000439,
            "max_abs": 4.003245,
            "positive": 117,
            "negative": 57,
            "zero": 0
          },
          "source_rank_score": 103.213316,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "1ddf65b53765c405",
          "codeword174_sha256_16": "d21ebfe4fe19a48e"
        },
        {
          "variant": "lab_mask_xor_preview",
          "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"
          },
          "bit_count": 174,
          "hard_weight_174": 80,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.391376,
            "min_abs": 0.011395,
            "max_abs": 4.003245,
            "positive": 47,
            "negative": 127,
            "zero": 0
          },
          "source_rank_score": 97.565504,
          "syndrome_weight": 28,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "18e650f62fd5e09a",
          "codeword174_sha256_16": "7ffc3739b59e3fa2"
        },
        {
          "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 59,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.384894,
            "min_abs": 0.012691,
            "max_abs": 3.864479,
            "positive": 122,
            "negative": 52,
            "zero": 0
          },
          "source_rank_score": 105.539576,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "cc70148368f3b858",
          "codeword174_sha256_16": "1efb9deb93117651"
        },
        {
          "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "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": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 131,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.347851,
            "min_abs": 2e-05,
            "max_abs": 3.94795,
            "positive": 42,
            "negative": 132,
            "zero": 0
          },
          "source_rank_score": 105.391404,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "5e6c6e2b61b907a6",
          "codeword174_sha256_16": "c23c8e48b4495a2e"
        },
        {
          "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits",
          "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,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 105,
          "llr_stats": {
            "count": 174,
            "avg_abs": 0.918547,
            "min_abs": 0.004101,
            "max_abs": 4.003245,
            "positive": 61,
            "negative": 113,
            "zero": 0
          },
          "source_rank_score": 103.674188,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "3223363eef47db07",
          "codeword174_sha256_16": "d7d8c2ca45f49a02"
        },
        {
          "variant": "lab_mask_xor_preview",
          "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse",
          "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": "interleave_codeword_to_rx_inverse",
            "order_len": 174
          },
          "bit_count": 174,
          "hard_weight_174": 91,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.564828,
            "min_abs": 0.002818,
            "max_abs": 3.94795,
            "positive": 136,
            "negative": 38,
            "zero": 0
          },
          "source_rank_score": 98.259312,
          "syndrome_weight": 29,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "d976abd0f4c5e758",
          "codeword174_sha256_16": "9c0ea41469c0b0ac"
        },
        {
          "variant": "lab_mask_xor_preview",
          "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits",
          "mapping_meta": {
            "tone_mapping": "ft8_gray_alt_high",
            "gray_direction": "inverse_observed_to_plain",
            "reverse_bits_within_tone_before_gray": true,
            "interleaver": "ft8_bitrev",
            "direction": "interleave_codeword_to_rx_inverse",
            "order_len": 174,
            "polarity": "inverted"
          },
          "bit_count": 174,
          "hard_weight_174": 82,
          "llr_stats": {
            "count": 174,
            "avg_abs": 1.355256,
            "min_abs": 0.002818,
            "max_abs": 4.003245,
            "positive": 50,
            "negative": 124,
            "zero": 0
          },
          "source_rank_score": 97.421024,
          "syndrome_weight": 30,
          "valid_codeword_hard_decision": false,
          "message91_sha256_16": "d3b942034a3e8ac6",
          "codeword174_sha256_16": "58bfad37282e8343"
        }
      ],
      "warnings": [
        "Step 38 JS8 Costas guard uses leading-only Costas exclusion by default to preserve 58 data symbols / 174 soft bits on JS8Lab windows; full FT8 middle/trailing exclusion remains diagnostic-only.",
        "Step 38 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.",
        "Step 38 prepares LDPC/FEC input candidates and an LDPC probe harness only; it does not yet run final real JS8 LDPC decode or unpack text.",
        "Step 38 does not decode JS8 text yet. It probes FT8-style Gray de-mapping, bit order and 174-bit interleaver candidates for real LDPC/FEC integration.",
        "lab_mask_xor_preview is only a repeatable diagnostic mask, not a confirmed JS8 whitening implementation."
      ]
    }
  ],
  "outputs": {
    "timing_boundary_sweep_json": "/decoders/js8_decoder/runtime/timing_boundary_sweep/step38_timing_boundary_sweep.json",
    "timing_best_candidate_json": "/decoders/js8_decoder/runtime/timing_boundary_sweep/step38_best_timing_fec_candidate.json"
  },
  "decodes": [],
  "warnings": [
    "Step 38 expands the Step36 edge hit and exports the best timing candidate for downstream LDPC soft-decode.",
    "No JS8 text unpack or CRC validation is performed yet.",
    "No valid LDPC codeword found is a diagnostic warning, not a hard command failure."
  ],
  "next_action": "Use outputs.timing_best_candidate_json for LDPC matrix/soft decode. If syndrome is still far from 0, continue interleaver/LLR and symbol-boundary tuning around the best_candidate."
}
