[webftr-js8-lab] command=ldpc-soft-decode [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T060652Z_ldpc-soft-decode.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T060652Z_ldpc-soft-decode_manifest.json [webftr-js8-lab] utc=20260527T060652Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T060652Z_ldpc_soft_decode_output.json [webftr-js8-lab] JSON timeout guard: 75s { "ok": true, "mode": "JS8", "tool": "webftr-js8-soft-ldpc-minsum-probe", "tool_version": "step42-direct-primary-bounded-repair", "input_wav": null, "candidate_json": "/decoders/js8_decoder/runtime/timing_boundary_sweep/step42_best_timing_fec_candidate.json", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "implementation_stage": "step42_bounded_gray_interleaver_llr_minsum_probe_no_message_unpack", "matrix": { "code": "(174,91)", "message_bits": 91, "parity_bits": 83, "codeword_bits": 174, "check_count": 83 }, "decoder": { "algorithm": "normalized_min_sum_multi_trial", "max_iterations": 32, "default_alpha": 0.8, "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely", "mapping_expansion": "ft8_gray_demap_plus_bitrev_interleaver_candidates", "max_decode_rows": 1, "fast_trials": true, "trial_count": 2, "timeout_avoidance": "direct_primary_first_default_1_row", "direct_timing_primary_preserved": true, "hard_repair_probe": { "repair_rows": 1, "repair_pool_size": 18, "repair_max_depth": 2 } }, "candidate_context": { "nsps_used": 6400, "nsps_is_js8_realistic": true, "selected_profile": null, "selected_variant": { "name": "step42_timing_sweep_best_syndrome_row", "rank_score": 1107.311136, "complete_174bit_candidate": true, "hard_bits_sha256_16": "0228efbd612c9092", "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 } } }, "candidate_mapping_rows": 865, "probe_count": 2, "best_soft_decode": { "variant": "step42_timing_sweep_best_syndrome_row", "transform": "direct_timing_sweep_primary", "mapping_meta": { "direct_timing_sweep_primary": true, "source_mapping_meta": { "tone_mapping": "lsb_within_each_tone", "interleaver": "none", "polarity": "inverted" }, "source_transform": "lsb_within_each_tone+no_interleaver+inverted_bits", "source_variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, "decoder_trial": { "llr_scale": 0.75, "alpha": 0.7 }, "source_rank_score": 3107.3111360000003, "source_llr_stats": { "count": 174, "avg_abs": 1.827784, "min_abs": 0.008053, "max_abs": 4.126624, "positive": 36, "negative": 138, "zero": 0 }, "success": false, "iterations_used": 32, "final_syndrome_weight": 30, "message91": null, "message91_sha256_16": "95cb11678c7a80df", "codeword174_sha256_16": "57946ed9075f03b0", "trace": [ { "iteration": 0, "syndrome_weight": 42 }, { "iteration": 1, "syndrome_weight": 39 }, { "iteration": 2, "syndrome_weight": 43 }, { "iteration": 3, "syndrome_weight": 41 }, { "iteration": 4, "syndrome_weight": 38 }, { "iteration": 5, "syndrome_weight": 45 }, { "iteration": 6, "syndrome_weight": 39 }, { "iteration": 7, "syndrome_weight": 46 }, { "iteration": 8, "syndrome_weight": 45 }, { "iteration": 9, "syndrome_weight": 40 }, { "iteration": 10, "syndrome_weight": 42 }, { "iteration": 15, "syndrome_weight": 44 }, { "iteration": 20, "syndrome_weight": 50 }, { "iteration": 25, "syndrome_weight": 40 }, { "iteration": 30, "syndrome_weight": 40 } ], "hard_repair_probe": { "ok": true, "initial_syndrome_weight": 22, "best_syndrome_weight": 20, "best_flip_indices": [ 128, 156 ], "best_flip_count": 2, "pool_size": 18, "max_depth": 2, "probes": 171, "valid_codeword_hard_decision": false, "message91_sha256_16": "67b59638aa8882d6", "codeword174_sha256_16": "3e21661e33a987a7" } }, "best_hard_repair_probe": { "ok": true, "initial_syndrome_weight": 22, "best_syndrome_weight": 20, "best_flip_indices": [ 128, 156 ], "best_flip_count": 2, "pool_size": 18, "max_depth": 2, "probes": 171, "valid_codeword_hard_decision": false, "message91_sha256_16": "67b59638aa8882d6", "codeword174_sha256_16": "3e21661e33a987a7" }, "soft_decode_results": [ { "variant": "step42_timing_sweep_best_syndrome_row", "transform": "direct_timing_sweep_primary", "mapping_meta": { "direct_timing_sweep_primary": true, "source_mapping_meta": { "tone_mapping": "lsb_within_each_tone", "interleaver": "none", "polarity": "inverted" }, "source_transform": "lsb_within_each_tone+no_interleaver+inverted_bits", "source_variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, "decoder_trial": { "llr_scale": 0.75, "alpha": 0.7 }, "source_rank_score": 3107.3111360000003, "source_llr_stats": { "count": 174, "avg_abs": 1.827784, "min_abs": 0.008053, "max_abs": 4.126624, "positive": 36, "negative": 138, "zero": 0 }, "success": false, "iterations_used": 32, "final_syndrome_weight": 30, "message91": null, "message91_sha256_16": "95cb11678c7a80df", "codeword174_sha256_16": "57946ed9075f03b0", "trace": [ { "iteration": 0, "syndrome_weight": 42 }, { "iteration": 1, "syndrome_weight": 39 }, { "iteration": 2, "syndrome_weight": 43 }, { "iteration": 3, "syndrome_weight": 41 }, { "iteration": 4, "syndrome_weight": 38 }, { "iteration": 5, "syndrome_weight": 45 }, { "iteration": 6, "syndrome_weight": 39 }, { "iteration": 7, "syndrome_weight": 46 }, { "iteration": 8, "syndrome_weight": 45 }, { "iteration": 9, "syndrome_weight": 40 }, { "iteration": 10, "syndrome_weight": 42 }, { "iteration": 15, "syndrome_weight": 44 }, { "iteration": 20, "syndrome_weight": 50 }, { "iteration": 25, "syndrome_weight": 40 }, { "iteration": 30, "syndrome_weight": 40 } ], "hard_repair_probe": { "ok": true, "initial_syndrome_weight": 22, "best_syndrome_weight": 20, "best_flip_indices": [ 128, 156 ], "best_flip_count": 2, "pool_size": 18, "max_depth": 2, "probes": 171, "valid_codeword_hard_decision": false, "message91_sha256_16": "67b59638aa8882d6", "codeword174_sha256_16": "3e21661e33a987a7" } }, { "variant": "step42_timing_sweep_best_syndrome_row", "transform": "direct_timing_sweep_primary", "mapping_meta": { "direct_timing_sweep_primary": true, "source_mapping_meta": { "tone_mapping": "lsb_within_each_tone", "interleaver": "none", "polarity": "inverted" }, "source_transform": "lsb_within_each_tone+no_interleaver+inverted_bits", "source_variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, "decoder_trial": { "llr_scale": 1.0, "alpha": 0.8 }, "source_rank_score": 3107.3111360000003, "source_llr_stats": { "count": 174, "avg_abs": 1.827784, "min_abs": 0.008053, "max_abs": 4.126624, "positive": 36, "negative": 138, "zero": 0 }, "success": false, "iterations_used": 32, "final_syndrome_weight": 36, "message91": null, "message91_sha256_16": "0e9ed1e0ca0159a7", "codeword174_sha256_16": "750e03954c49c465", "trace": [ { "iteration": 0, "syndrome_weight": 42 }, { "iteration": 1, "syndrome_weight": 39 }, { "iteration": 2, "syndrome_weight": 41 }, { "iteration": 3, "syndrome_weight": 41 }, { "iteration": 4, "syndrome_weight": 45 }, { "iteration": 5, "syndrome_weight": 37 }, { "iteration": 6, "syndrome_weight": 48 }, { "iteration": 7, "syndrome_weight": 48 }, { "iteration": 8, "syndrome_weight": 42 }, { "iteration": 9, "syndrome_weight": 47 }, { "iteration": 10, "syndrome_weight": 44 }, { "iteration": 15, "syndrome_weight": 38 }, { "iteration": 20, "syndrome_weight": 42 }, { "iteration": 25, "syndrome_weight": 42 }, { "iteration": 30, "syndrome_weight": 48 } ], "hard_repair_probe": { "ok": true, "initial_syndrome_weight": 22, "best_syndrome_weight": 20, "best_flip_indices": [ 128, 156 ], "best_flip_count": 2, "pool_size": 18, "max_depth": 2, "probes": 171, "valid_codeword_hard_decision": false, "message91_sha256_16": "67b59638aa8882d6", "codeword174_sha256_16": "3e21661e33a987a7" } } ], "decodes": [], "outputs": { "ldpc_soft_decode_json": "/decoders/js8_decoder/runtime/ldpc_soft_decode/step42_ldpc_soft_decode.json" }, "warnings": [ "Step 42 keeps the direct timing-sweep primary row first and runs a deliberately small bounded soft/repair probe to avoid Raspberry Pi timeouts.", "Step 42 runs bounded normalized-min-sum soft LDPC plus a small low-reliability hard-repair probe over the best-ranked rows against the public (174,91) matrix contract.", "This still does not unpack JS8 text or validate CRC/message payloads.", "If success is true and syndrome_weight is 0, the next step can unpack the 91-bit message. Otherwise more timing, Costas/data-symbol boundary, deinterleaver/order or LLR tuning is required." ], "next_action": "Upload Step35 logs. If no valid codeword, inspect best mapping_meta/final_syndrome_weight and continue timing/interleaver/LLR tuning; if valid, add JS8 message unpack/CRC." } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T060652Z_ldpc-soft-decode.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T060652Z_ldpc-soft-decode_manifest.json