[webftr-js8-lab] command=real-wav-unique-frame-census [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T091124Z_real-wav-unique-frame-census.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T091124Z_real-wav-unique-frame-census_manifest.json [webftr-js8-lab] utc=20260528T091124Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step86 real WAV unique frame census [webftr-js8-lab] requested path: /decoders/js8_decoder/runtime/input_wavs/A_1_4.wav [webftr-js8-lab] This default run first executes the Step85 real-WAV wide search, then deduplicates repeated control-frame evidence and surfaces true Data/Compressed counts. [webftr-js8-lab] RX-only guard: no TX / no PTT / no Tune / no Send / no JS8Call runtime control. [webftr-js8-lab] resolved WAV: /decoders/js8_decoder/runtime/input_wavs/A_1_4.wav ========== STEP86 1/2: RUN STEP85 REAL-WAV WIDE SEARCH ========== [webftr-js8-lab] command=real-wav-wide-data-frame-search [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T091124Z_real-wav-wide-data-frame-search.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T091124Z_real-wav-wide-data-frame-search_manifest.json [webftr-js8-lab] utc=20260528T091124Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step85 real WAV wide Data/FrameDataCompressed search [webftr-js8-lab] requested path: /decoders/js8_decoder/runtime/input_wavs/A_1_4.wav [webftr-js8-lab] This default run reads the JS8 WAV, plans multiple non-overlapping windows, runs the message174/Varicode chain per window, and aggregates Data/Compressed-frame evidence. [webftr-js8-lab] RX-only guard: no TX / no PTT / no Tune / no Send / no JS8Call runtime control. [webftr-js8-lab] resolved WAV: /decoders/js8_decoder/runtime/input_wavs/A_1_4.wav ========== STEP85 1/4: REAL WAV WIDE WINDOW PLAN ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_window_plan_output.json [webftr-js8-lab] JSON timeout guard: 90s [webftr-js8-lab] stderr log: /decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_window_plan_output.stderr.log /decoders/js8_decoder/src/webftr_js8_lab/js8_real_wav_wide_data_frame_search.py:4: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop { "ok": true, "tool": "webftr-js8-real-wav-wide-window-plan", "tool_version": "step85-real-wav-wide-data-frame-search", "schema": "webftr-js8-real-wav-wide-window-plan-v1", "created_utc": "2026-05-28T09:11:37Z", "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "wav": { "sample_rate": 12000, "duration_seconds": 15.0, "frames": 180000, "rms_dbfs": -41.61762061851039, "peak_dbfs": -26.302935039562662, "clipped": false }, "scan_params": { "window_seconds": 54.0, "hop_seconds": 12.0, "max_seconds": 240.0, "max_windows": 3, "min_gap_seconds": 30.0, "output_dir": "/decoders/js8_decoder/runtime/step85_wide_windows" }, "planned_window_count": 1, "windows": [ { "start_seconds": 0.0, "end_seconds": 15.0, "duration_seconds": 15.0, "avg_activity_score": -40.0763, "active_chunks": 2, "chunk_count": 2, "selection_score": -39.0763, "window_index": 0, "window_id": "step85-window-00", "window_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "tone_candidates": [ { "freq_hz": 850.0, "relative_db": 0.0, "power": 0.00743142 }, { "freq_hz": 825.0, "relative_db": -0.32, "power": 0.00689592 }, { "freq_hz": 525.0, "relative_db": -9.85, "power": 0.00076968 }, { "freq_hz": 2000.0, "relative_db": -10.38, "power": 0.00068126 }, { "freq_hz": 550.0, "relative_db": -11.24, "power": 0.00055881 }, { "freq_hz": 1600.0, "relative_db": -13.02, "power": 0.00037112 }, { "freq_hz": 1025.0, "relative_db": -13.74, "power": 0.00031399 }, { "freq_hz": 975.0, "relative_db": -13.88, "power": 0.00030448 }, { "freq_hz": 875.0, "relative_db": -14.14, "power": 0.00028657 }, { "freq_hz": 725.0, "relative_db": -14.81, "power": 0.00024532 } ] } ], "top_window_candidates_preview": [ { "start_seconds": 0.0, "end_seconds": 15.0, "duration_seconds": 15.0, "avg_activity_score": -40.0763, "active_chunks": 2, "chunk_count": 2, "selection_score": -39.0763 } ], "chunk_preview": [ { "chunk_index": 0, "start_seconds": 0.0, "end_seconds": 12.0, "rms_dbfs": -41.59, "peak_dbfs": -26.3, "activity_score": -39.9009 }, { "chunk_index": 1, "start_seconds": 12.0, "end_seconds": 15.0, "rms_dbfs": -41.84, "peak_dbfs": -28.15, "activity_score": -40.2516 } ], "chunk_tail_preview": [ { "chunk_index": 0, "start_seconds": 0.0, "end_seconds": 12.0, "rms_dbfs": -41.59, "peak_dbfs": -26.3, "activity_score": -39.9009 }, { "chunk_index": 1, "start_seconds": 12.0, "end_seconds": 15.0, "rms_dbfs": -41.84, "peak_dbfs": -28.15, "activity_score": -40.2516 } ], "warnings": [ "Step85 window planning is a real-WAV search helper; JS8 text/free-text release remains guarded separately." ], "next_action": "Run candidate/message174/Varicode chain for each planned window and aggregate Data/Compressed frame candidates." } [webftr-js8-lab] step85 window-plan exit_code=0 ========== STEP85 2/4: PER-WINDOW MESSAGE174/VARICODE CHAIN ========== ---------- STEP85 WINDOW 0: 0.0s..15.0s score=-39.0763 ---------- [webftr-js8-lab] window WAV: /decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json [webftr-js8-lab] JSON timeout guard: 120s { "ok": true, "mode": "JS8", "tool": "webftr-js8-fec-candidate-export", "tool_version": "step63-source-exact-interleaver-whitening-index-extract", "input_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "implementation_stage": "step43_profile_anchor_candidate_export_no_message_unpack", "selected_profile": { "profile": "js8_near_6000", "nsps": 6000, "symbol_duration_seconds": 0.5, "tone_spacing_hz": 2.0, "note": "0.500 s timing guard candidate", "ok": true, "sync": { "start_seconds": 6.0, "base_freq_hz": 845.0, "candidate_score": 31.71, "costas_hits": 2, "avg_margin_db": 4.11, "candidate_count": 12 }, "frame": { "symbols_available_after_start": 18, "data_symbol_count_estimate": 11, "expected_data_symbols_candidate": 58 }, "fec": { "soft_bit_count_estimate": 33, "missing_soft_bits_estimate": 141, "complete_ldpc_input_candidate_estimate": false }, "rank_score": 62.864121 }, "profile_selection_source": "profile_scan_prefer_js8", "profile_scan_json": null, "anchor_json": null, "anchor_selection": { "source": "candidate_export_local_profile_scan", "path": null, "selection": "local_profile_scan_selected_profile", "nsps": 6000, "start_seconds": 6.0, "base_freq_hz": 845.0, "tone_spacing_hz": 2.0 }, "anchor_attempts": [ { "source": "candidate_export_local_profile_scan", "path": null, "selection": "local_profile_scan_selected_profile", "nsps": 6000, "start_seconds": 6.0, "base_freq_hz": 845.0, "tone_spacing_hz": 2.0 } ], "anchor_expected_enabled": true, "prefer_js8_realistic_profile": true, "nsps_used": 6000, "nsps_is_js8_realistic": true, "wav": { "path": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 180000, "duration_seconds": 15.0, "rms_dbfs": -41.62, "peak_dbfs": -26.3, "clipped": false }, "sync_candidate": { "start_sample": 72000, "start_seconds": 6.0, "base_freq_hz": 845.0, "tone_spacing_hz": 2.0, "nsps": 6000, "candidate_score": null, "costas_hits": null, "avg_margin_db": null, "anchor_source": "candidate_export_local_profile_scan" }, "frame_candidate": { "input_symbol_count": 18, "excluded_costas_symbol_count": 0, "detected_costas_blocks": [], "data_symbol_count_available": 18, "data_symbol_count_used": 18, "expected_data_symbols_candidate": 58, "costas_policy": "js8_leading_only" }, "fec_input_summary": { "soft_bit_count": 54, "missing_soft_bits": 120, "complete_ldpc_input_candidate": false, "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate" }, "anchor_context": { "enabled": true, "source": "candidate_export_local_profile_scan", "start_seconds": 6.0, "base_freq_hz": 845.0, "tone_spacing_hz": 2.0, "nsps": 6000, "symbol_count_extracted": 18 }, "variant_count": 23, "selected_variant": { "name": "mapped_raw_msb+no_interleaver", "rank_score": 102.956332, "complete_174bit_candidate": true, "hard_bits_sha256_16": "2aeb0423c58d8499", "hard_weight_174": 21, "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 } }, "variants": [ { "name": "mapped_raw_msb+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'raw_msb', 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "101000000000011011010010010000010101101011001101011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "2aeb0423c58d8499", "hard_weight_174": 21, "llr_full_174": [ -3.903775, 4.070281, -3.84703, 0.736832, 3.1786, 0.544065, 3.304358, 3.522097, 0.072644, 4.198216, 4.040302, 2.144982, 2.16115, -1.917489, -1.217068, 2.103109, -1.113849, -2.072304, 4.397118, -1.016056, 1.032513, 3.475137, -3.550132, 3.481024, 3.055165, -3.492025, 3.314887, 4.024359, 3.370789, 1.735293, 4.116626, -2.747906, 2.805792, -3.683064, 3.081186, -0.866097, -3.728239, 2.896537, -2.179638, 2.049638, -2.039762, -2.005133, 4.61604, 0.971433, 0.371962, -1.641699, 4.067559, -1.650458, 1.520683, -1.244573, -0.223834, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'raw_msb', 'interleaver': 'ft8_bitrev', 'direction': 'deinterleave_rx_to_codeword', 'order_len': 174}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "101010000000100000100000100000000010100010001000000010000000000010000000100010000000000010001000001000001000100000000000000000000010000000000000000000000000100000000000000000", "hard_bits_sha256_16": "381a21c249766a5e", "hard_weight_174": 21, "llr_full_174": [ -3.903775, 0.0, 0.371962, 0.0, -3.550132, 0.0, 0.0, 0.0, 2.144982, 0.0, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.0, 3.304358, 0.0, -0.223834, 0.0, 3.370789, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, 0.0, 2.049638, 0.0, 0.0, 0.0, 0.736832, 0.0, -1.650458, 0.0, -3.492025, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.0, -3.728239, 0.0, 0.0, 0.0, 4.198216, 0.0, 0.0, 0.0, -2.747906, 0.0, 0.0, 0.0, 1.032513, 0.0, 0.0, 0.0, 4.61604, 0.0, 0.0, 0.0, -3.84703, 0.0, 4.067559, 0.0, 3.055165, 0.0, 0.0, 0.0, -1.917489, 0.0, 0.0, 0.0, -0.866097, 0.0, 0.0, 0.0, 0.072644, 0.0, 0.0, 0.0, 4.116626, 0.0, 0.0, 0.0, -1.016056, 0.0, 0.0, 0.0, -2.005133, 0.0, 0.0, 0.0, 0.544065, 0.0, -1.244573, 0.0, 4.024359, 0.0, 0.0, 0.0, -1.113849, 0.0, 0.0, 0.0, -2.179638, 0.0, 0.0, 0.0, 4.040302, 0.0, 0.0, 0.0, 2.805792, 0.0, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.971433, 0.0, 0.0, 0.0, 4.070281, 0.0, -1.641699, 0.0, 3.481024, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.0, 3.081186, 0.0, 0.0, 0.0, 3.522097, 0.0, 0.0, 0.0, 1.735293, 0.0, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.0, -2.039762, 0.0, 0.0, 0.0, 3.1786, 0.0, 1.520683, 0.0, 3.314887, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, 0.0, 2.896537, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_raw_msb+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'raw_msb', 'interleaver': 'ft8_bitrev', 'direction': 'interleave_codeword_to_rx_inverse', 'order_len': 174}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000100000001000000000010000000000100000001000000001000000000000000100100001000000000000100100100001001000000000000000100100000000001001000000000000000000000000000001010000", "hard_bits_sha256_16": "fca44866905bd8fa", "hard_weight_174": 21, "llr_full_174": [ -3.903775, 0.0, 0.0, 2.805792, 0.0, 0.0, -1.113849, 0.0, 0.0, 1.520683, 0.0, 0.072644, 0.0, 0.0, -2.039762, 0.0, 0.0, 3.055165, 0.0, 0.0, 0.0, 0.0, 3.1786, 0.0, 0.0, -3.728239, 0.0, 0.0, 1.032513, 0.0, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.371962, 0.0, 0.0, 3.370789, 0.0, 0.0, 0.0, 0.0, -3.84703, 0.0, 0.0, 3.081186, 0.0, 0.0, 4.397118, 0.0, 0.0, -0.223834, 0.0, 4.040302, 0.0, 0.0, 4.61604, 0.0, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.0, 3.304358, 0.0, 0.0, -2.179638, 0.0, 0.0, -3.550132, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 4.067559, 0.0, 4.116626, 0.0, 0.0, 0.0, 0.0, 4.070281, 0.0, 0.0, -3.683064, 0.0, 0.0, -2.072304, 0.0, 0.0, -1.244573, 0.0, 4.198216, 0.0, 0.0, -2.005133, 0.0, 0.0, -3.492025, 0.0, 0.0, 0.0, 0.0, 0.544065, 0.0, 0.0, 2.896537, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.0, -1.917489, 0.0, 0.0, -1.641699, 0.0, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.0, 0.736832, 0.0, 0.0, -0.866097, 0.0, 0.0, -1.016056, 0.0, 0.0, 0.0, 0.0, 2.144982, 0.0, 0.0, 0.971433, 0.0, 0.0, 4.024359, 0.0, 0.0, 0.0, 0.0, 3.522097, 0.0, 0.0, 2.049638, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, -1.650458, 0.0, -2.747906, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_lsb_within_each_tone+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'lsb_within_each_tone', 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "101000000000110110010010010000010101101110100101110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "2faf6aeacf68a286", "hard_weight_174": 21, "llr_full_174": [ -3.84703, 4.070281, -3.903775, 0.544065, 3.1786, 0.736832, 0.072644, 3.522097, 3.304358, 2.144982, 4.040302, 4.198216, -1.217068, -1.917489, 2.16115, -2.072304, -1.113849, 2.103109, 1.032513, -1.016056, 4.397118, 3.481024, -3.550132, 3.475137, 3.314887, -3.492025, 3.055165, 1.735293, 3.370789, 4.024359, 2.805792, -2.747906, 4.116626, -0.866097, 3.081186, -3.683064, -2.179638, 2.896537, -3.728239, -2.005133, -2.039762, 2.049638, 0.371962, 0.971433, 4.61604, -1.650458, 4.067559, -1.641699, -0.223834, -1.244573, 1.520683, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'lsb_within_each_tone', 'interleaver': 'ft8_bitrev', 'direction': 'deinterleave_rx_to_codeword', 'order_len': 174}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100010000000100000000000000010000010100000001000000010000000100010000000100010000000000010000000001000001000100000000000000000000010000010000000000000000000100000100000100000", "hard_bits_sha256_16": "866d867978229ea0", "hard_weight_174": 21, "llr_full_174": [ -3.84703, 0.0, 4.61604, 0.0, -3.550132, 0.0, 0.0, 0.0, 4.198216, 0.0, 0.0, 0.0, -0.866097, 0.0, 0.0, 0.0, 0.072644, 0.0, 1.520683, 0.0, 3.370789, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, 0.0, -2.005133, 0.0, 0.0, 0.0, 0.544065, 0.0, -1.641699, 0.0, -3.492025, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.0, -2.179638, 0.0, 0.0, 0.0, 2.144982, 0.0, 0.0, 0.0, -2.747906, 0.0, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.0, 0.371962, 0.0, 0.0, 0.0, -3.903775, 0.0, 4.067559, 0.0, 3.314887, 0.0, 0.0, 0.0, -1.917489, 0.0, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.0, 3.304358, 0.0, 0.0, 0.0, 2.805792, 0.0, 0.0, 0.0, -1.016056, 0.0, 0.0, 0.0, 2.049638, 0.0, 0.0, 0.0, 0.736832, 0.0, -1.244573, 0.0, 1.735293, 0.0, 0.0, 0.0, -1.113849, 0.0, 0.0, 0.0, -3.728239, 0.0, 0.0, 0.0, 4.040302, 0.0, 0.0, 0.0, 4.116626, 0.0, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.971433, 0.0, 0.0, 0.0, 4.070281, 0.0, -1.650458, 0.0, 3.475137, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.0, 3.081186, 0.0, 0.0, 0.0, 3.522097, 0.0, 0.0, 0.0, 4.024359, 0.0, 0.0, 0.0, 1.032513, 0.0, 0.0, 0.0, -2.039762, 0.0, 0.0, 0.0, 3.1786, 0.0, -0.223834, 0.0, 3.055165, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, 0.0, 2.896537, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'lsb_within_each_tone', 'interleaver': 'ft8_bitrev', 'direction': 'interleave_codeword_to_rx_inverse', 'order_len': 174}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000100100001000000000010000000100000000001000000000000010000000000100100000000000000000100000100000001000000000000000100100000000001001000000000000000000100000001001010000", "hard_bits_sha256_16": "680530ddebd56ff7", "hard_weight_174": 21, "llr_full_174": [ -3.84703, 0.0, 0.0, 4.116626, 0.0, 0.0, -1.113849, 0.0, 0.0, -0.223834, 0.0, 3.304358, 0.0, 0.0, -2.039762, 0.0, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.0, 3.1786, 0.0, 0.0, -2.179638, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 4.61604, 0.0, 0.0, 3.370789, 0.0, 0.0, 0.0, 0.0, -3.903775, 0.0, 0.0, 3.081186, 0.0, 0.0, 1.032513, 0.0, 0.0, 1.520683, 0.0, 4.040302, 0.0, 0.0, 0.371962, 0.0, 0.0, 3.055165, 0.0, 0.0, 0.0, 0.0, 0.072644, 0.0, 0.0, -3.728239, 0.0, 0.0, -3.550132, 0.0, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 4.067559, 0.0, 2.805792, 0.0, 0.0, 0.0, 0.0, 4.070281, 0.0, 0.0, -0.866097, 0.0, 0.0, 2.103109, 0.0, 0.0, -1.244573, 0.0, 2.144982, 0.0, 0.0, 2.049638, 0.0, 0.0, -3.492025, 0.0, 0.0, 0.0, 0.0, 0.736832, 0.0, 0.0, 2.896537, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.0, -1.917489, 0.0, 0.0, -1.650458, 0.0, 0.0, 4.024359, 0.0, 0.0, 0.0, 0.0, 0.544065, 0.0, 0.0, -3.683064, 0.0, 0.0, -1.016056, 0.0, 0.0, 0.0, 0.0, 4.198216, 0.0, 0.0, 0.971433, 0.0, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.0, 3.522097, 0.0, 0.0, -2.005133, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, -1.641699, 0.0, -2.747906, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.739083, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 123 }, "rank_score": 102.956332 }, { "name": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'ft8_gray_primary', 'gray_direction': 'inverse_observed_to_plain', 'reverse_bits_within_tone_before_gray': False, 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000000000010010011011011000011100100010001100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "c61cf3382094e589", "hard_weight_174": 17, "llr_full_174": [ -3.903775, 3.270923, 3.302363, 0.736832, 1.217233, 1.002312, 3.304358, 3.032231, 0.132996, 4.198216, 3.473391, 2.02146, 2.16115, -1.768798, 0.587027, 2.103109, -1.081058, 0.607786, 4.397118, -0.994635, -0.458664, 3.475137, -2.835727, -2.838815, 3.055165, -2.58068, -2.733105, 4.024359, 3.005957, 1.580571, 4.116626, -2.534017, -2.095367, -3.683064, 0.812568, 2.757916, -3.728239, 1.805753, 2.568328, 2.049638, -1.941228, 0.925458, 4.61604, 0.95835, 0.173418, -1.641699, 1.756661, 1.747553, 1.520683, -1.006402, -0.097243, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.646099, "min_abs": 0.0, "max_abs": 4.61604, "positive": 34, "negative": 17, "zero": 123 }, "rank_score": 102.584396 }, { "name": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "101010000000100000000000000000000000100000001000000010001000000000000000100000000000000010000000001000001000000000001000000000000010100000000000000000000000100000001000000000", "hard_bits_sha256_16": "0b81699c96bbfef8", "hard_weight_174": 17, "llr_full_174": [ -3.903775, 0.0, 0.173418, 0.0, -2.835727, 0.0, 0.0, 0.0, 2.02146, 0.0, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.0, 3.304358, 0.0, -0.097243, 0.0, 3.005957, 0.0, 0.0, 0.0, 0.607786, 0.0, 0.0, 0.0, 2.049638, 0.0, 0.0, 0.0, 0.736832, 0.0, 1.747553, 0.0, -2.58068, 0.0, 0.0, 0.0, 0.587027, 0.0, 0.0, 0.0, -3.728239, 0.0, 0.0, 0.0, 4.198216, 0.0, 0.0, 0.0, -2.534017, 0.0, 0.0, 0.0, -0.458664, 0.0, 0.0, 0.0, 4.61604, 0.0, 0.0, 0.0, 3.302363, 0.0, 1.756661, 0.0, 3.055165, 0.0, 0.0, 0.0, -1.768798, 0.0, 0.0, 0.0, 2.757916, 0.0, 0.0, 0.0, 0.132996, 0.0, 0.0, 0.0, 4.116626, 0.0, 0.0, 0.0, -0.994635, 0.0, 0.0, 0.0, 0.925458, 0.0, 0.0, 0.0, 1.002312, 0.0, -1.006402, 0.0, 4.024359, 0.0, 0.0, 0.0, -1.081058, 0.0, 0.0, 0.0, 2.568328, 0.0, 0.0, 0.0, 3.473391, 0.0, 0.0, 0.0, -2.095367, 0.0, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.95835, 0.0, 0.0, 0.0, 3.270923, 0.0, -1.641699, 0.0, -2.838815, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.0, 0.812568, 0.0, 0.0, 0.0, 3.032231, 0.0, 0.0, 0.0, 1.580571, 0.0, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.0, -1.941228, 0.0, 0.0, 0.0, 1.217233, 0.0, 1.520683, 0.0, -2.733105, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, 0.0, 1.805753, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.646099, "min_abs": 0.0, "max_abs": 4.61604, "positive": 34, "negative": 17, "zero": 123 }, "rank_score": 102.584396 }, { "name": "mapped_ft8_gray_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100100100000001000000000010010000000100000000000000000000000010000000000100000000000000000100000100000001000000000000000100100000000000001000000000000000000000100000000010000", "hard_bits_sha256_16": "9c3c6afa38e8ba65", "hard_weight_174": 17, "llr_full_174": [ -3.903775, 0.0, 0.0, -2.095367, 0.0, 0.0, -1.081058, 0.0, 0.0, 1.520683, 0.0, 0.132996, 0.0, 0.0, -1.941228, 0.0, 0.0, 3.055165, 0.0, 0.0, 0.0, 0.0, 1.217233, 0.0, 0.0, -3.728239, 0.0, 0.0, -0.458664, 0.0, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.173418, 0.0, 0.0, 3.005957, 0.0, 0.0, 0.0, 0.0, 3.302363, 0.0, 0.0, 0.812568, 0.0, 0.0, 4.397118, 0.0, 0.0, -0.097243, 0.0, 3.473391, 0.0, 0.0, 4.61604, 0.0, 0.0, -2.733105, 0.0, 0.0, 0.0, 0.0, 3.304358, 0.0, 0.0, 2.568328, 0.0, 0.0, -2.835727, 0.0, 0.0, 0.0, 0.0, 0.587027, 0.0, 0.0, 1.756661, 0.0, 4.116626, 0.0, 0.0, 0.0, 0.0, 3.270923, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.607786, 0.0, 0.0, -1.006402, 0.0, 4.198216, 0.0, 0.0, 0.925458, 0.0, 0.0, -2.58068, 0.0, 0.0, 0.0, 0.0, 1.002312, 0.0, 0.0, 1.805753, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.0, -1.768798, 0.0, 0.0, -1.641699, 0.0, 0.0, 1.580571, 0.0, 0.0, 0.0, 0.0, 0.736832, 0.0, 0.0, 2.757916, 0.0, 0.0, -0.994635, 0.0, 0.0, 0.0, 0.0, 2.02146, 0.0, 0.0, 0.95835, 0.0, 0.0, 4.024359, 0.0, 0.0, 0.0, 0.0, 3.032231, 0.0, 0.0, 2.049638, 0.0, 0.0, -2.838815, 0.0, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, 1.747553, 0.0, -2.534017, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.646099, "min_abs": 0.0, "max_abs": 4.61604, "positive": 34, "negative": 17, "zero": 123 }, "rank_score": 102.584396 }, { "name": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'ft8_gray_alt_high', 'gray_direction': 'inverse_observed_to_plain', 'reverse_bits_within_tone_before_gray': False, 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "111000000000010010011011011000011111111010001111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "4aee5bca20fc6b67", "hard_weight_174": 25, "llr_full_174": [ -3.903775, -3.290764, -3.259655, 0.736832, 0.67314, 0.498652, 3.304358, 2.71525, 0.068472, 4.198216, 3.423262, 2.007042, 2.16115, -1.355558, 0.85662, 2.103109, -0.836982, 0.829743, 4.397118, -0.987058, -0.452364, 3.475137, -2.819673, -2.822717, 3.055165, -2.558212, -2.707497, 4.024359, 2.952571, 1.563309, 4.116626, -2.522266, -2.087149, -3.683064, -2.645517, -0.781632, -3.728239, -2.536484, -1.788252, 2.049638, -1.368151, 1.34651, 4.61604, 0.949374, 0.166158, -1.641699, -1.560298, -1.568314, 1.520683, -0.741039, 0.123359, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.62976, "min_abs": 0.0, "max_abs": 4.61604, "positive": 27, "negative": 24, "zero": 123 }, "rank_score": 102.51904 }, { "name": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "101010000000100000000000000000000010100000001000000010001000000010100000100010000000000010000000001000001000100000001000000000001010100000001000000000000000100000001000000010", "hard_bits_sha256_16": "f22e4dcce81eec58", "hard_weight_174": 25, "llr_full_174": [ -3.903775, 0.0, 0.166158, 0.0, -2.819673, 0.0, 0.0, 0.0, 2.007042, 0.0, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.0, 3.304358, 0.0, 0.123359, 0.0, 2.952571, 0.0, 0.0, 0.0, 0.829743, 0.0, 0.0, 0.0, 2.049638, 0.0, 0.0, 0.0, 0.736832, 0.0, -1.568314, 0.0, -2.558212, 0.0, 0.0, 0.0, 0.85662, 0.0, 0.0, 0.0, -3.728239, 0.0, 0.0, 0.0, 4.198216, 0.0, 0.0, 0.0, -2.522266, 0.0, 0.0, 0.0, -0.452364, 0.0, 0.0, 0.0, 4.61604, 0.0, 0.0, 0.0, -3.259655, 0.0, -1.560298, 0.0, 3.055165, 0.0, 0.0, 0.0, -1.355558, 0.0, 0.0, 0.0, -0.781632, 0.0, 0.0, 0.0, 0.068472, 0.0, 0.0, 0.0, 4.116626, 0.0, 0.0, 0.0, -0.987058, 0.0, 0.0, 0.0, 1.34651, 0.0, 0.0, 0.0, 0.498652, 0.0, -0.741039, 0.0, 4.024359, 0.0, 0.0, 0.0, -0.836982, 0.0, 0.0, 0.0, -1.788252, 0.0, 0.0, 0.0, 3.423262, 0.0, 0.0, 0.0, -2.087149, 0.0, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.949374, 0.0, 0.0, 0.0, -3.290764, 0.0, -1.641699, 0.0, -2.822717, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.0, -2.645517, 0.0, 0.0, 0.0, 2.71525, 0.0, 0.0, 0.0, 1.563309, 0.0, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.0, -1.368151, 0.0, 0.0, 0.0, 0.67314, 0.0, 1.520683, 0.0, -2.707497, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, 0.0, -2.536484, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.62976, "min_abs": 0.0, "max_abs": 4.61604, "positive": 27, "negative": 24, "zero": 123 }, "rank_score": 102.51904 }, { "name": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100100100000001000000000010010000000100000001001000000000000010000000100100000001000000100100000100000001000000010000000100100000000001001000000000000000000000100000001010000", "hard_bits_sha256_16": "b89f73cac087d787", "hard_weight_174": 25, "llr_full_174": [ -3.903775, 0.0, 0.0, -2.087149, 0.0, 0.0, -0.836982, 0.0, 0.0, 1.520683, 0.0, 0.068472, 0.0, 0.0, -1.368151, 0.0, 0.0, 3.055165, 0.0, 0.0, 0.0, 0.0, 0.67314, 0.0, 0.0, -3.728239, 0.0, 0.0, -0.452364, 0.0, 0.0, 0.0, 0.0, 2.16115, 0.0, 0.0, 0.166158, 0.0, 0.0, 2.952571, 0.0, 0.0, 0.0, 0.0, -3.259655, 0.0, 0.0, -2.645517, 0.0, 0.0, 4.397118, 0.0, 0.0, 0.123359, 0.0, 3.423262, 0.0, 0.0, 4.61604, 0.0, 0.0, -2.707497, 0.0, 0.0, 0.0, 0.0, 3.304358, 0.0, 0.0, -1.788252, 0.0, 0.0, -2.819673, 0.0, 0.0, 0.0, 0.0, 0.85662, 0.0, 0.0, -1.560298, 0.0, 4.116626, 0.0, 0.0, 0.0, 0.0, -3.290764, 0.0, 0.0, -3.683064, 0.0, 0.0, 0.829743, 0.0, 0.0, -0.741039, 0.0, 4.198216, 0.0, 0.0, 1.34651, 0.0, 0.0, -2.558212, 0.0, 0.0, 0.0, 0.0, 0.498652, 0.0, 0.0, -2.536484, 0.0, 0.0, 3.475137, 0.0, 0.0, 0.0, 0.0, -1.355558, 0.0, 0.0, -1.641699, 0.0, 0.0, 1.563309, 0.0, 0.0, 0.0, 0.0, 0.736832, 0.0, 0.0, -0.781632, 0.0, 0.0, -0.987058, 0.0, 0.0, 0.0, 0.0, 2.007042, 0.0, 0.0, 0.949374, 0.0, 0.0, 4.024359, 0.0, 0.0, 0.0, 0.0, 2.71525, 0.0, 0.0, 2.049638, 0.0, 0.0, -2.822717, 0.0, 0.0, 0.0, 0.0, 2.103109, 0.0, 0.0, -1.568314, 0.0, -2.522266, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.62976, "min_abs": 0.0, "max_abs": 4.61604, "positive": 27, "negative": 24, "zero": 123 }, "rank_score": 102.51904 }, { "name": "mapped_ft8_gray_primary_demap_lsb_input+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'ft8_gray_primary', 'gray_direction': 'inverse_observed_to_plain', 'reverse_bits_within_tone_before_gray': True, 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000000000101101011011011000011100100101110100101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "06806b0b89bc27b8", "hard_weight_174": 22, "llr_full_174": [ -3.84703, 3.302363, 3.270923, 0.544065, 1.002312, 1.217233, 0.072644, 0.132996, 3.032231, 2.144982, 2.02146, 3.473391, -1.217068, 0.587027, -1.768798, -2.072304, 0.607786, -1.081058, 1.032513, -0.458664, -0.994635, 3.481024, -2.838815, -2.835727, 3.314887, -2.733105, -2.58068, 1.735293, 1.580571, 3.005957, 2.805792, -2.095367, -2.534017, -0.866097, 2.757916, 0.812568, -2.179638, 2.568328, 1.805753, -2.005133, 0.925458, -1.941228, 0.371962, 0.173418, 0.95835, -1.650458, 1.747553, 1.756661, -0.223834, -0.097243, -1.006402, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.51305, "min_abs": 0.0, "max_abs": 3.84703, "positive": 30, "negative": 21, "zero": 123 }, "rank_score": 102.0522 }, { "name": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100010000000100000100000100010000000100010001000000010001000100000000000000000000000000010001000000000000000000000001000000010000010100010000000000000000000000000101000100000", "hard_bits_sha256_16": "b9fd564c5533951d", "hard_weight_174": 22, "llr_full_174": [ -3.84703, 0.0, 0.95835, 0.0, -2.838815, 0.0, 0.0, 0.0, 3.473391, 0.0, 0.0, 0.0, -0.866097, 0.0, 0.0, 0.0, 0.072644, 0.0, -1.006402, 0.0, 1.580571, 0.0, 0.0, 0.0, -1.081058, 0.0, 0.0, 0.0, -2.005133, 0.0, 0.0, 0.0, 0.544065, 0.0, 1.756661, 0.0, -2.733105, 0.0, 0.0, 0.0, -1.768798, 0.0, 0.0, 0.0, -2.179638, 0.0, 0.0, 0.0, 2.144982, 0.0, 0.0, 0.0, -2.095367, 0.0, 0.0, 0.0, -0.994635, 0.0, 0.0, 0.0, 0.371962, 0.0, 0.0, 0.0, 3.270923, 0.0, 1.747553, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.587027, 0.0, 0.0, 0.0, 0.812568, 0.0, 0.0, 0.0, 3.032231, 0.0, 0.0, 0.0, 2.805792, 0.0, 0.0, 0.0, -0.458664, 0.0, 0.0, 0.0, -1.941228, 0.0, 0.0, 0.0, 1.217233, 0.0, -0.097243, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.607786, 0.0, 0.0, 0.0, 1.805753, 0.0, 0.0, 0.0, 2.02146, 0.0, 0.0, 0.0, -2.534017, 0.0, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.173418, 0.0, 0.0, 0.0, 3.302363, 0.0, -1.650458, 0.0, -2.835727, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.0, 2.757916, 0.0, 0.0, 0.0, 0.132996, 0.0, 0.0, 0.0, 3.005957, 0.0, 0.0, 0.0, 1.032513, 0.0, 0.0, 0.0, 0.925458, 0.0, 0.0, 0.0, 1.002312, 0.0, -0.223834, 0.0, -2.58068, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, 0.0, 2.568328, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.51305, "min_abs": 0.0, "max_abs": 3.84703, "positive": 30, "negative": 21, "zero": 123 }, "rank_score": 102.0522 }, { "name": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100100000100000000000000010010000100000000000000000001000010010000000000100001000000000000100100000001001000000000000000000100000000000001000000010000000000100100001000010000", "hard_bits_sha256_16": "3f6c6dcbe50de48d", "hard_weight_174": 22, "llr_full_174": [ -3.84703, 0.0, 0.0, -2.534017, 0.0, 0.0, 0.607786, 0.0, 0.0, -0.223834, 0.0, 3.032231, 0.0, 0.0, 0.925458, 0.0, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.0, 1.002312, 0.0, 0.0, -2.179638, 0.0, 0.0, -0.994635, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.95835, 0.0, 0.0, 1.580571, 0.0, 0.0, 0.0, 0.0, 3.270923, 0.0, 0.0, 2.757916, 0.0, 0.0, 1.032513, 0.0, 0.0, -1.006402, 0.0, 2.02146, 0.0, 0.0, 0.371962, 0.0, 0.0, -2.58068, 0.0, 0.0, 0.0, 0.0, 0.072644, 0.0, 0.0, 1.805753, 0.0, 0.0, -2.838815, 0.0, 0.0, 0.0, 0.0, -1.768798, 0.0, 0.0, 1.747553, 0.0, 2.805792, 0.0, 0.0, 0.0, 0.0, 3.302363, 0.0, 0.0, -0.866097, 0.0, 0.0, -1.081058, 0.0, 0.0, -0.097243, 0.0, 2.144982, 0.0, 0.0, -1.941228, 0.0, 0.0, -2.733105, 0.0, 0.0, 0.0, 0.0, 1.217233, 0.0, 0.0, 2.568328, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.0, 0.587027, 0.0, 0.0, -1.650458, 0.0, 0.0, 3.005957, 0.0, 0.0, 0.0, 0.0, 0.544065, 0.0, 0.0, 0.812568, 0.0, 0.0, -0.458664, 0.0, 0.0, 0.0, 0.0, 3.473391, 0.0, 0.0, 0.173418, 0.0, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.0, 0.132996, 0.0, 0.0, -2.005133, 0.0, 0.0, -2.835727, 0.0, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, 1.756661, 0.0, -2.095367, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.51305, "min_abs": 0.0, "max_abs": 3.84703, "positive": 30, "negative": 21, "zero": 123 }, "rank_score": 102.0522 }, { "name": "mapped_ft8_gray_alt_high_demap_lsb_input+no_interleaver", "description": "Step 54 mapped LDPC candidate: {'tone_mapping': 'ft8_gray_alt_high', 'gray_direction': 'inverse_observed_to_plain', 'reverse_bits_within_tone_before_gray': True, 'interleaver': 'none'}", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "111000000000101101011011011000011111111101110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "hard_bits_sha256_16": "3032993a5c8723fe", "hard_weight_174": 30, "llr_full_174": [ -3.84703, -3.259655, -3.290764, 0.544065, 0.498652, 0.67314, 0.072644, 0.068472, 2.71525, 2.144982, 2.007042, 3.423262, -1.217068, 0.85662, -1.355558, -2.072304, 0.829743, -0.836982, 1.032513, -0.452364, -0.987058, 3.481024, -2.822717, -2.819673, 3.314887, -2.707497, -2.558212, 1.735293, 1.563309, 2.952571, 2.805792, -2.087149, -2.522266, -0.866097, -0.781632, -2.645517, -2.179638, -1.788252, -2.536484, -2.005133, 1.34651, -1.368151, 0.371962, 0.166158, 0.949374, -1.650458, -1.568314, -1.560298, -0.223834, 0.123359, -0.741039, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.496711, "min_abs": 0.0, "max_abs": 3.84703, "positive": 23, "negative": 28, "zero": 123 }, "rank_score": 101.986844 }, { "name": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100010000000100000100000100010000010100010001000000010001000100010100000000010000000000010001000000000000000100000001000000010001010100010001000000000000000000000101000100010", "hard_bits_sha256_16": "490eb09e880ce3c5", "hard_weight_174": 30, "llr_full_174": [ -3.84703, 0.0, 0.949374, 0.0, -2.822717, 0.0, 0.0, 0.0, 3.423262, 0.0, 0.0, 0.0, -0.866097, 0.0, 0.0, 0.0, 0.072644, 0.0, -0.741039, 0.0, 1.563309, 0.0, 0.0, 0.0, -0.836982, 0.0, 0.0, 0.0, -2.005133, 0.0, 0.0, 0.0, 0.544065, 0.0, -1.560298, 0.0, -2.707497, 0.0, 0.0, 0.0, -1.355558, 0.0, 0.0, 0.0, -2.179638, 0.0, 0.0, 0.0, 2.144982, 0.0, 0.0, 0.0, -2.087149, 0.0, 0.0, 0.0, -0.987058, 0.0, 0.0, 0.0, 0.371962, 0.0, 0.0, 0.0, -3.290764, 0.0, -1.568314, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.85662, 0.0, 0.0, 0.0, -2.645517, 0.0, 0.0, 0.0, 2.71525, 0.0, 0.0, 0.0, 2.805792, 0.0, 0.0, 0.0, -0.452364, 0.0, 0.0, 0.0, -1.368151, 0.0, 0.0, 0.0, 0.67314, 0.0, 0.123359, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.829743, 0.0, 0.0, 0.0, -2.536484, 0.0, 0.0, 0.0, 2.007042, 0.0, 0.0, 0.0, -2.522266, 0.0, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.166158, 0.0, 0.0, 0.0, -3.259655, 0.0, -1.650458, 0.0, -2.819673, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.0, -0.781632, 0.0, 0.0, 0.0, 0.068472, 0.0, 0.0, 0.0, 2.952571, 0.0, 0.0, 0.0, 1.032513, 0.0, 0.0, 0.0, 1.34651, 0.0, 0.0, 0.0, 0.498652, 0.0, -0.223834, 0.0, -2.558212, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, 0.0, -1.788252, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.496711, "min_abs": 0.0, "max_abs": 3.84703, "positive": 23, "negative": 28, "zero": 123 }, "rank_score": 101.986844 }, { "name": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse", "description": "Step 54 mapped LDPC candidate: {'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, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100100000100000000000000010010000100000000001001000001000010010000000100100001001000000100100100000001001000000010000000000100000000001001000000010000000000100100001001010000", "hard_bits_sha256_16": "39071c522458775a", "hard_weight_174": 30, "llr_full_174": [ -3.84703, 0.0, 0.0, -2.522266, 0.0, 0.0, 0.829743, 0.0, 0.0, -0.223834, 0.0, 2.71525, 0.0, 0.0, 1.34651, 0.0, 0.0, 3.314887, 0.0, 0.0, 0.0, 0.0, 0.498652, 0.0, 0.0, -2.179638, 0.0, 0.0, -0.987058, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.0, 0.0, 0.949374, 0.0, 0.0, 1.563309, 0.0, 0.0, 0.0, 0.0, -3.290764, 0.0, 0.0, -0.781632, 0.0, 0.0, 1.032513, 0.0, 0.0, -0.741039, 0.0, 2.007042, 0.0, 0.0, 0.371962, 0.0, 0.0, -2.558212, 0.0, 0.0, 0.0, 0.0, 0.072644, 0.0, 0.0, -2.536484, 0.0, 0.0, -2.822717, 0.0, 0.0, 0.0, 0.0, -1.355558, 0.0, 0.0, -1.568314, 0.0, 2.805792, 0.0, 0.0, 0.0, 0.0, -3.259655, 0.0, 0.0, -0.866097, 0.0, 0.0, -0.836982, 0.0, 0.0, 0.123359, 0.0, 2.144982, 0.0, 0.0, -1.368151, 0.0, 0.0, -2.707497, 0.0, 0.0, 0.0, 0.0, 0.67314, 0.0, 0.0, -1.788252, 0.0, 0.0, 3.481024, 0.0, 0.0, 0.0, 0.0, 0.85662, 0.0, 0.0, -1.650458, 0.0, 0.0, 2.952571, 0.0, 0.0, 0.0, 0.0, 0.544065, 0.0, 0.0, -2.645517, 0.0, 0.0, -0.452364, 0.0, 0.0, 0.0, 0.0, 3.423262, 0.0, 0.0, 0.166158, 0.0, 0.0, 1.735293, 0.0, 0.0, 0.0, 0.0, 0.068472, 0.0, 0.0, -2.005133, 0.0, 0.0, -2.819673, 0.0, 0.0, 0.0, 0.0, -2.072304, 0.0, 0.0, -1.560298, 0.0, -2.087149, 0.0, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 174, "avg_abs": 0.496711, "min_abs": 0.0, "max_abs": 3.84703, "positive": 23, "negative": 28, "zero": 123 }, "rank_score": 101.986844 }, { "name": "raw_msb_symbol_order", "description": "Current FEC bridge: Costas-stripped symbols, MSB-first tone bits.", "bit_count": 54, "llr_count": 54, "complete_174bit_candidate": false, "hard_bits_174": "101000000000011011010010010000010101101011001101011000", "hard_bits_sha256_16": "204f1e6796735fa8", "hard_weight_174": 21, "llr_full_174": [ -3.903775, 4.070281, -3.84703, 0.736832, 3.1786, 0.544065, 3.304358, 3.522097, 0.072644, 4.198216, 4.040302, 2.144982, 2.16115, -1.917489, -1.217068, 2.103109, -1.113849, -2.072304, 4.397118, -1.016056, 1.032513, 3.475137, -3.550132, 3.481024, 3.055165, -3.492025, 3.314887, 4.024359, 3.370789, 1.735293, 4.116626, -2.747906, 2.805792, -3.683064, 3.081186, -0.866097, -3.728239, 2.896537, -2.179638, 2.049638, -2.039762, -2.005133, 4.61604, 0.971433, 0.371962, -1.641699, 4.067559, -1.650458, 1.520683, -1.244573, -0.223834, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 54, "avg_abs": 2.381491, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 3 }, "rank_score": 58.560447 }, { "name": "lsb_within_each_tone", "description": "Same symbols, but each 3-bit tone value reversed for bit-order comparison.", "bit_count": 54, "llr_count": 54, "complete_174bit_candidate": false, "hard_bits_174": "101000000000110110010010010000010101101110100101110000", "hard_bits_sha256_16": "cc479d993115acf8", "hard_weight_174": 21, "llr_full_174": [ -3.903775, 4.070281, -3.84703, 0.736832, 3.1786, 0.544065, 3.304358, 3.522097, 0.072644, 4.198216, 4.040302, 2.144982, 2.16115, -1.917489, -1.217068, 2.103109, -1.113849, -2.072304, 4.397118, -1.016056, 1.032513, 3.475137, -3.550132, 3.481024, 3.055165, -3.492025, 3.314887, 4.024359, 3.370789, 1.735293, 4.116626, -2.747906, 2.805792, -3.683064, 3.081186, -0.866097, -3.728239, 2.896537, -2.179638, 2.049638, -2.039762, -2.005133, 4.61604, 0.971433, 0.371962, -1.641699, 4.067559, -1.650458, 1.520683, -1.244573, -0.223834, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 54, "avg_abs": 2.381491, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 3 }, "rank_score": 50.560447 }, { "name": "reverse_symbol_order", "description": "Same 3-bit symbols in reverse order; diagnostic only.", "bit_count": 54, "llr_count": 54, "complete_174bit_candidate": false, "hard_bits_174": "000011101001011101101010000010010010011011000000000101", "hard_bits_sha256_16": "d22fe029f4381664", "hard_weight_174": 21, "llr_full_174": [ 0.0, 0.0, 0.0, -0.223834, -1.244573, 1.520683, -1.650458, 4.067559, -1.641699, 0.371962, 0.971433, 4.61604, -2.005133, -2.039762, 2.049638, -2.179638, 2.896537, -3.728239, -0.866097, 3.081186, -3.683064, 2.805792, -2.747906, 4.116626, 1.735293, 3.370789, 4.024359, 3.314887, -3.492025, 3.055165, 3.481024, -3.550132, 3.475137, 1.032513, -1.016056, 4.397118, -2.072304, -1.113849, 2.103109, -1.217068, -1.917489, 2.16115, 2.144982, 4.040302, 4.198216, 0.072644, 3.522097, 3.304358, 0.544065, 3.1786, 0.736832, -3.84703, 4.070281, -3.903775 ], "llr_stats": { "count": 54, "avg_abs": 2.381491, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 3 }, "rank_score": 44.560447 }, { "name": "reverse_full_bitstream", "description": "Full hard-bit stream reversed; diagnostic only.", "bit_count": 54, "llr_count": 54, "complete_174bit_candidate": false, "hard_bits_174": "000110101100110101101010000010010010110110000000000101", "hard_bits_sha256_16": "173d93d602e1d69e", "hard_weight_174": 21, "llr_full_174": [ 0.0, 0.0, 0.0, -0.223834, -1.244573, 1.520683, -1.650458, 4.067559, -1.641699, 0.371962, 0.971433, 4.61604, -2.005133, -2.039762, 2.049638, -2.179638, 2.896537, -3.728239, -0.866097, 3.081186, -3.683064, 2.805792, -2.747906, 4.116626, 1.735293, 3.370789, 4.024359, 3.314887, -3.492025, 3.055165, 3.481024, -3.550132, 3.475137, 1.032513, -1.016056, 4.397118, -2.072304, -1.113849, 2.103109, -1.217068, -1.917489, 2.16115, 2.144982, 4.040302, 4.198216, 0.072644, 3.522097, 3.304358, 0.544065, 3.1786, 0.736832, -3.84703, 4.070281, -3.903775 ], "llr_stats": { "count": 54, "avg_abs": 2.381491, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 3 }, "rank_score": 43.560447 }, { "name": "lab_mask_xor_preview", "description": "Deterministic lab-only XOR mask preview; not the real JS8 whitening polynomial.", "bit_count": 54, "llr_count": 54, "complete_174bit_candidate": false, "hard_bits_174": "001000110011001111101011101011000101000001110011111101", "hard_bits_sha256_16": "3ecbea4aad63263f", "hard_weight_174": 29, "llr_full_174": [ -3.903775, 4.070281, -3.84703, 0.736832, 3.1786, 0.544065, 3.304358, 3.522097, 0.072644, 4.198216, 4.040302, 2.144982, 2.16115, -1.917489, -1.217068, 2.103109, -1.113849, -2.072304, 4.397118, -1.016056, 1.032513, 3.475137, -3.550132, 3.481024, 3.055165, -3.492025, 3.314887, 4.024359, 3.370789, 1.735293, 4.116626, -2.747906, 2.805792, -3.683064, 3.081186, -0.866097, -3.728239, 2.896537, -2.179638, 2.049638, -2.039762, -2.005133, 4.61604, 0.971433, 0.371962, -1.641699, 4.067559, -1.650458, 1.520683, -1.244573, -0.223834, 0.0, 0.0, 0.0 ], "llr_stats": { "count": 54, "avg_abs": 2.381491, "min_abs": 0.0, "max_abs": 4.61604, "positive": 31, "negative": 20, "zero": 3 }, "rank_score": 32.560447 } ], "outputs": { "candidate_json": "/decoders/js8_decoder/runtime/step85_fec_candidates_window0/js8_step85_window_00_0000_0015_fec_candidate_step17.json", "selected_bits_file": "/decoders/js8_decoder/runtime/step85_fec_candidates_window0/js8_step85_window_00_0000_0015_fec_candidate_step17.bits" }, "decodes": [], "warnings": [ "FEC candidate is incomplete: 54/174 soft bits available; missing 120. Use a longer/complete JS8 frame WAV for LDPC experiments.", "Step 54 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 54 profile-anchor guard: FEC symbols were extracted from the selected profile sync anchor instead of re-running an independent sync search.", "Step 54 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 54 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.", "Step 54 locks candidate export to JS8-realistic timing and reuses the selected profile sync anchor for FEC symbol extraction where available.", "It still does not perform real LDPC/FEC decode or message unpack.", "Next step can tune real JS8/FT8 LDPC matrix/deinterleaver/message unpack against this anchored candidate contract." ], "next_action": "Run collect-logs and upload the JS8Lab bundle. If selected_variant.complete_174bit_candidate is true, proceed to LDPC/deinterleaver/message-unpack tuning." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-post-ldpc-info87-runtime-export-probe", "tool_version": "step63-source-exact-interleaver-whitening-index-extract", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "input_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "log_dir": "/decoders/js8_decoder/logs", "output_dir": "/decoders/js8_decoder/runtime/step85_post_ldpc_info87_window0", "candidate_json": "/decoders/js8_decoder/runtime/step85_post_ldpc_info87_window0/js8_step85_window_00_0000_0015_fec_candidate_step17.json", "matrix_error": null, "soft_error": null, "matrix_ok": true, "soft_ok": true, "runtime_info87_rows_count": 48, "zero_distance_candidate_count": 0, "best_distance": 4, "best_runtime_info87_row": { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_16", "info87_bits": [ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ], "info87_bitstring": "010111111011111111111101101111111111111011110111111111111101111101110111111111111101111", "info87_llr": [ 3.903775, -0.0, 3.728239, -0.0, -0.0, -0.0, -4.067559, -0.0, -0.0, 1.244573, -0.0, -0.0, -0.0, -3.475137, -0.0, -3.314887, -0.0, -0.0, -0.0, -0.0, -2.049638, -0.0, 1.917489, -0.0, -0.0, 1.113849, -0.0, -1.735293, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -4.040302, -0.0, 2.039762, -0.0, -0.0, -0.0, -0.0, 3.492025, -0.0, -0.072644, -0.0, -0.0, -0.544065, -0.0, -3.081186, -0.0, -0.0, -0.0, -1.520683, -3.370789, -0.0, 3.84703, -0.0, -0.0, -0.0, -0.0, -2.896537, -0.371962, -0.0, -0.0, -0.0, 2.072304, -0.0, -3.055165, -0.0, -0.0, -4.024359, -0.0, -3.522097, -0.0, -0.0, -0.0, -0.0, -2.144982, -0.0, 2.747906, -0.0, -0.0, -0.0, -0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 23, 24, 26 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 4079, "computed_crc12": 2766, "message_preview_12chars": "Nx+zl+xt+zzt", "message_words_6bit": [ 23, 59, 63, 61, 47, 63, 59, 55, 63, 61, 61, 55 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "raw_msb+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits", "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword" }, "runtime_info87_rows_preview": [ { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_16", "info87_bits": [ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ], "info87_bitstring": "010111111011111111111101101111111111111011110111111111111101111101110111111111111101111", "info87_llr": [ 3.903775, -0.0, 3.728239, -0.0, -0.0, -0.0, -4.067559, -0.0, -0.0, 1.244573, -0.0, -0.0, -0.0, -3.475137, -0.0, -3.314887, -0.0, -0.0, -0.0, -0.0, -2.049638, -0.0, 1.917489, -0.0, -0.0, 1.113849, -0.0, -1.735293, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -4.040302, -0.0, 2.039762, -0.0, -0.0, -0.0, -0.0, 3.492025, -0.0, -0.072644, -0.0, -0.0, -0.544065, -0.0, -3.081186, -0.0, -0.0, -0.0, -1.520683, -3.370789, -0.0, 3.84703, -0.0, -0.0, -0.0, -0.0, -2.896537, -0.371962, -0.0, -0.0, -0.0, 2.072304, -0.0, -3.055165, -0.0, -0.0, -4.024359, -0.0, -3.522097, -0.0, -0.0, -0.0, -0.0, -2.144982, -0.0, 2.747906, -0.0, -0.0, -0.0, -0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 23, 24, 26 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 4079, "computed_crc12": 2766, "message_preview_12chars": "Nx+zl+xt+zzt", "message_words_6bit": [ 23, 59, 63, 61, 47, 63, 59, 55, 63, 61, 61, 55 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "raw_msb+ft8_bitrev_deinterleave_rx_to_codeword+inverted_bits", "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_2", "info87_bits": [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "101000000000110110010010010000010101101110100101110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.994676, 0.356328, 0.072644, 3.522097, 0.0, 0.0, 1.053028, 1.059526, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 1.066436, 1.020508, -3.550132, 3.475137, 0.0, 0.0, 0.981988, 0.731089, 3.370789, 4.024359, 0.951884, -0.943953, 4.116626, -0.866097, 0.0, -0.0, -0.843506, 0.963577, -3.728239, -2.005133, 0.0, 0.0, 0.184387, 0.458686, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 8, 9, 14, 15, 18, 19, 24, 25, 34, 35, 40, 41, 46, 47, 50, 51 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2194, "message_preview_12chars": "e0sIGLkbm000", "message_words_6bit": [ 40, 0, 54, 18, 16, 21, 46, 37, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_4", "info87_bits": [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "101000000000110110010010010000010101101110100101110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2194, "message_preview_12chars": "e0sIGLkbm000", "message_words_6bit": [ 40, 0, 54, 18, 16, 21, 46, 37, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_16", "info87_bits": [ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 ], "info87_bitstring": "010111111011111111111101101111111111111011110111111111111101111101110111111111111101111", "info87_llr": [ 3.903775, -0.0, 3.728239, -0.0, -0.0, -0.0, -4.067559, -0.0, -0.0, 1.244573, -0.0, -0.0, -0.0, -3.475137, -0.0, -3.314887, -0.0, -0.0, -0.0, -0.0, -2.049638, -0.0, 1.917489, -0.0, -0.0, 1.113849, -0.0, -1.735293, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -4.040302, -0.0, 2.039762, -0.0, -0.0, -0.0, -0.0, 3.492025, -0.0, -0.072644, -0.0, -0.0, -0.544065, -0.0, -3.081186, -0.0, -0.0, -0.0, -1.520683, -3.370789, -0.0, 3.84703, -0.0, -0.0, -0.0, -0.0, -2.896537, -0.371962, -0.0, -0.0, -0.0, 2.072304, -0.0, -3.055165, -0.0, -0.0, -4.024359, -0.0, -3.522097, -0.0, -0.0, -0.0, -0.0, -2.144982, -0.0, 2.747906, -0.0, -0.0, -0.0, -0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 23, 24, 26 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 4079, "computed_crc12": 2766, "message_preview_12chars": "Nx+zl+xt+zzt", "message_words_6bit": [ 23, 59, 63, 61, 47, 63, 59, 55, 63, 61, 61, 55 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_2", "info87_bits": [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "101000000000110110010010010000010101101110100101110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.994676, 0.356328, 0.072644, 3.522097, 0.0, 0.0, 1.053028, 1.059526, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 1.066436, 1.020508, -3.550132, 3.475137, 0.0, 0.0, 0.981988, 0.731089, 3.370789, 4.024359, 0.951884, -0.943953, 4.116626, -0.866097, 0.0, -0.0, -0.843506, 0.963577, -3.728239, -2.005133, 0.0, 0.0, 0.184387, 0.458686, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 8, 9, 14, 15, 18, 19, 24, 25, 34, 35, 40, 41, 46, 47, 50, 51 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2194, "message_preview_12chars": "e0sIGLkbm000", "message_words_6bit": [ 40, 0, 54, 18, 16, 21, 46, 37, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_4", "info87_bits": [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "101000000000110110010010010000010101101110100101110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2194, "message_preview_12chars": "e0sIGLkbm000", "message_words_6bit": [ 40, 0, 54, 18, 16, 21, 46, 37, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "soft_decode.post_ldpc_info87_llr_rows", "row_name": "soft_export_0", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000110010000010000000000100001100000100110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2098, "message_preview_12chars": "W0o204C4m000", "message_words_6bit": [ 32, 0, 50, 2, 0, 4, 12, 4, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "soft_meta": {} }, { "source": "soft_decode.post_ldpc_info87_llr_rows", "row_name": "soft_export_1", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000110010000010000000000100001100000100110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2098, "message_preview_12chars": "W0o204C4m000", "message_words_6bit": [ 32, 0, 50, 2, 0, 4, 12, 4, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "soft_meta": {} }, { "source": "soft_decode.soft_decode_results", "row_name": "soft_result_0", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000110010000010000000000100001100000100110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2098, "message_preview_12chars": "W0o204C4m000", "message_words_6bit": [ 32, 0, 50, 2, 0, 4, 12, 4, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "soft_decode.soft_decode_results", "row_name": "soft_result_1", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000110010000010000000000100001100000100110000000000000000000000000000000000000", "info87_llr": [ -3.84703, 4.070281, 0.0, 0.0, 0.0, 0.0, 0.072644, 3.522097, 0.0, 0.0, 0.0, 0.0, -1.217068, -1.917489, 0.0, -0.0, -1.113849, 2.103109, 0.0, 0.0, 0.0, 0.0, -3.550132, 3.475137, 0.0, 0.0, 0.0, 0.0, 3.370789, 4.024359, 0.0, 0.0, 4.116626, -0.866097, 0.0, -0.0, 0.0, 0.0, -3.728239, -2.005133, 0.0, 0.0, 0.0, 0.0, 4.61604, -1.650458, 0.0, 0.0, -0.223834, -1.244573, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 0, "computed_crc12": 2098, "message_preview_12chars": "W0o204C4m000", "message_words_6bit": [ 32, 0, 50, 2, 0, 4, 12, 4, 48, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_13", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000101101011011011000011100100101110100101000000000000000000000000000000000000", "info87_llr": [ -3.84703, 3.302363, 0.0, 0.0, 0.471575, 0.55713, 0.072644, 0.132996, 0.0, 0.0, 0.807216, 1.019938, -1.217068, 0.587027, 0.0, -0.0, 0.607786, -1.081058, 0.0, 0.0, -0.468384, 1.020508, -2.838815, -2.835727, 0.0, 0.0, -0.918831, 0.731089, 1.580571, 3.005957, 0.951884, -0.824667, -2.534017, -0.866097, 0.0, 0.0, -0.843506, 0.916839, 1.805753, -2.005133, 0.0, -0.0, 0.184387, 0.086546, 0.95835, -1.650458, 0.0, 0.0, -0.223834, -0.097243, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 8, 9, 14, 15, 18, 19, 24, 25, 34, 35, 40, 41, 46, 47, 50, 51 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 0, "computed_crc12": 3334, "message_preview_12chars": "W0jROSbqe000", "message_words_6bit": [ 32, 0, 45, 27, 24, 28, 37, 52, 40, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_primary_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_14", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000101101011011011000011100100101110100101000000000000000000000000000000000000", "info87_llr": [ -3.84703, 3.302363, 0.0, 0.0, 0.0, 0.0, 0.072644, 0.132996, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.587027, 0.0, -0.0, 0.607786, -1.081058, 0.0, 0.0, 0.0, 0.0, -2.838815, -2.835727, 0.0, 0.0, 0.0, 0.0, 1.580571, 3.005957, 0.0, 0.0, -2.534017, -0.866097, 0.0, 0.0, 0.0, 0.0, 1.805753, -2.005133, 0.0, -0.0, 0.0, 0.0, 0.95835, -1.650458, 0.0, 0.0, -0.223834, -0.097243, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 0, "computed_crc12": 3334, "message_preview_12chars": "W0jROSbqe000", "message_words_6bit": [ 32, 0, 45, 27, 24, 28, 37, 52, 40, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_msb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_3", "info87_bits": [ 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], "info87_bitstring": "001100111111001111001111001100111111001100110111111100110111001111111111111111111111111", "info87_llr": [ 3.84703, -0.0, -0.0, -0.0, 0.956242, 0.956242, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, 0.866097, -0.0, -0.0, -0.0, -0.03631, -0.03631, 1.006402, -0.0, -0.0, -0.0, -0.0, -0.0, 1.081058, -0.0, -0.0, -0.0, 0.803242, 0.803242, -0.0, -0.0, -0.0, -0.0, -0.737256, -0.737256, 2.733105, -0.0, -0.0, -0.0, 0.740724, 0.740724, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -2.144982, -0.0, -0.0, -0.0, 0.824667, 0.824667, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.371962, -0.0, -0.0, -0.0, -1.00331, -1.00331, -1.747553, -0.0, -0.0, -0.0, -0.0, -0.0, -0.587027, -0.0, -0.0, -0.0, -0.390189, -0.390189, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -2.805792, -0.0, -0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 15, 19, 20, 21, 22, 23, 25 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 4095, "computed_crc12": 988, "message_preview_12chars": "C+FFC+CtytF+", "message_words_6bit": [ 12, 63, 15, 15, 12, 63, 12, 55, 60, 55, 15, 63 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_primary_demap_msb_input+no_interleaver+inverted_bits", "variant": "mapped_ft8_gray_primary_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_13", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000101101011011011000011100100101110100101000000000000000000000000000000000000", "info87_llr": [ -3.84703, 3.302363, 0.0, 0.0, 0.471575, 0.55713, 0.072644, 0.132996, 0.0, 0.0, 0.807216, 1.019938, -1.217068, 0.587027, 0.0, -0.0, 0.607786, -1.081058, 0.0, 0.0, -0.468384, 1.020508, -2.838815, -2.835727, 0.0, 0.0, -0.918831, 0.731089, 1.580571, 3.005957, 0.951884, -0.824667, -2.534017, -0.866097, 0.0, 0.0, -0.843506, 0.916839, 1.805753, -2.005133, 0.0, -0.0, 0.184387, 0.086546, 0.95835, -1.650458, 0.0, 0.0, -0.223834, -0.097243, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 8, 9, 14, 15, 18, 19, 24, 25, 34, 35, 40, 41, 46, 47, 50, 51 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 0, "computed_crc12": 3334, "message_preview_12chars": "W0jROSbqe000", "message_words_6bit": [ 32, 0, 45, 27, 24, 28, 37, 52, 40, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_14", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "100000000000101101011011011000011100100101110100101000000000000000000000000000000000000", "info87_llr": [ -3.84703, 3.302363, 0.0, 0.0, 0.0, 0.0, 0.072644, 0.132996, 0.0, 0.0, 0.0, 0.0, -1.217068, 0.587027, 0.0, -0.0, 0.607786, -1.081058, 0.0, 0.0, 0.0, 0.0, -2.838815, -2.835727, 0.0, 0.0, 0.0, 0.0, 1.580571, 3.005957, 0.0, 0.0, -2.534017, -0.866097, 0.0, 0.0, 0.0, 0.0, 1.805753, -2.005133, 0.0, -0.0, 0.0, 0.0, 0.95835, -1.650458, 0.0, 0.0, -0.223834, -0.097243, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 18, 19, 20, 21, 24, 25, 26, 27 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 0, "computed_crc12": 3334, "message_preview_12chars": "W0jROSbqe000", "message_words_6bit": [ 32, 0, 45, 27, 24, 28, 37, 52, 40, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_3", "info87_bits": [ 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], "info87_bitstring": "001100111111001111001111001100111111001100110111111100110111001111111111111111111111111", "info87_llr": [ 3.84703, -0.0, -0.0, -0.0, 0.956242, 0.956242, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, 0.866097, -0.0, -0.0, -0.0, -0.03631, -0.03631, 1.006402, -0.0, -0.0, -0.0, -0.0, -0.0, 1.081058, -0.0, -0.0, -0.0, 0.803242, 0.803242, -0.0, -0.0, -0.0, -0.0, -0.737256, -0.737256, 2.733105, -0.0, -0.0, -0.0, 0.740724, 0.740724, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -2.144982, -0.0, -0.0, -0.0, 0.824667, 0.824667, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.371962, -0.0, -0.0, -0.0, -1.00331, -1.00331, -1.747553, -0.0, -0.0, -0.0, -0.0, -0.0, -0.587027, -0.0, -0.0, -0.0, -0.390189, -0.390189, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -2.805792, -0.0, -0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 15, 19, 20, 21, 22, 23, 25 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 4095, "computed_crc12": 988, "message_preview_12chars": "C+FFC+CtytF+", "message_words_6bit": [ 12, 63, 15, 15, 12, 63, 12, 55, 60, 55, 15, 63 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_10", "info87_bits": [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "001000000000011011101101101000101001001011110001011000000000000000000000000000000000000", "info87_llr": [ 3.302363, 2.594768, -2.845718, 1.002312, 0.514013, 0.387826, 0.132996, 0.120732, 2.467688, 2.02146, 1.815203, 3.07884, 0.587027, -0.410081, -1.272161, 0.607786, -0.293051, -0.814257, -0.458664, 0.208113, -0.96643, -2.838815, 2.147549, -2.413842, -2.733105, 1.965755, -2.100455, 1.580571, 1.375261, 2.698495, -2.095367, 1.607397, -2.348466, 2.757916, 0.70672, -0.768541, 2.568328, 1.43542, -1.673206, 0.925458, -0.671741, -1.319132, 0.173418, 0.077117, 0.936672, 1.747553, 1.088577, -1.037263, -0.097243, 0.045154, -0.614553, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 0, "computed_crc12": 1148, "message_preview_12chars": "80RjefBnO000", "message_words_6bit": [ 8, 0, 27, 45, 40, 41, 11, 49, 24, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_lsb_input+no_interleaver", "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_12", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], "info87_bitstring": "100000000000100000100000100000000000000010001000000000001000100000001000100000000000100", "info87_llr": [ -3.259655, 0.0, 0.927954, 0.0, 2.131585, 0.0, 0.0, 0.0, 3.044819, 0.0, 0.0, 0.0, -0.781632, 0.0, 0.0, 0.0, 0.068472, 0.0, -0.462678, 0.0, 1.351633, 0.0, 0.0, 0.0, -0.640133, 0.0, 0.0, 0.0, 1.34651, 0.0, 0.0, 0.0, 0.498652, 0.0, 0.946898, 0.0, 1.942077, 0.0, 0.0, 0.0, -1.015452, 0.0, 0.0, 0.0, -1.788252, 0.0, 0.0, 0.0, 2.007042, 0.0, 0.0, 0.0, 1.597987, 0.0, 0.0, 0.0, -0.959131, 0.0, 0.0, 0.0, 0.166158, 0.0, 0.0, 0.0, 2.858617, 0.0, 0.913998, 0.0, -2.707497, 0.0, 0.0, 0.0, -0.486017, 0.0, 0.0, 0.0, 2.343998, 0.0, 0.0, 0.0, 2.276317, 0.0, 0.0, 0.0, -2.087149, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 25, 26 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 4, "computed_crc12": 3720, "message_preview_12chars": "W0WWW02808W8", "message_words_6bit": [ 32, 0, 32, 32, 32, 0, 2, 8, 0, 8, 32, 8 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_deinterleave_rx_to_codeword", "variant": "mapped_ft8_gray_alt_high_demap_msb_input+no_interleaver" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_15", "info87_bits": [ 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1 ], "info87_bitstring": "010110111111110111101101111101101110111111110010111111111001101011111010111110111010111", "info87_llr": [ -0.371962, -0.0, 3.84703, -0.0, -3.1786, 1.244573, -3.304358, -0.0, -0.0, -0.0, -4.040302, -0.0, -2.16115, -0.0, 1.217068, -0.0, -0.0, -0.0, -0.0, 1.016056, -0.0, -0.0, 3.550132, -0.0, -4.067559, -0.0, -1.520683, -4.024359, 0.223834, -1.735293, -0.0, 2.747906, -0.0, -0.0, -0.0, 0.866097, -0.0, -2.896537, -0.0, -2.049638, -0.0, -0.0, -0.0, -0.971433, 3.903775, 1.641699, -3.055165, 1.650458, -3.314887, -0.544065, -3.370789, -3.522097, -0.0, -4.198216, -2.805792, -0.0, -3.081186, 1.917489, 3.728239, -2.103109, -0.0, 2.072304, -0.0, 2.005133, -0.0, -3.475137, -2.144982, -3.481024, -0.0, 3.492025, -0.0, 1.113849, -0.0, -4.397118, -4.116626, -1.032513, -0.0, 3.683064, -0.0, -0.072644, -0.0, 2.179638, -0.736832, 2.039762, -0.0, -4.61604, -4.070281 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 7, 8, 9, 11, 13, 15, 16, 17, 18, 20, 21, 23, 25, 30, 32, 33 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 3543, "computed_crc12": 3890, "message_preview_12chars": "M+tjzk+o+vhw", "message_words_6bit": [ 22, 63, 55, 45, 61, 46, 63, 50, 63, 57, 43, 58 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse+inverted_bits", "variant": "mapped_raw_msb+ft8_bitrev_deinterleave_rx_to_codeword" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_9", "info87_bits": [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "001000000000011011101101101000101001001011110001011000000000000000000000000000000000000", "info87_llr": [ 3.302363, 3.25263, -2.348985, 1.002312, 0.721564, 0.588251, 0.132996, 0.181135, 2.697169, 2.02146, 1.828782, 3.118228, 0.587027, -0.520486, -1.432345, 0.607786, -0.370865, -0.90483, -0.458664, 0.194261, -0.983668, -2.838815, 1.902866, -2.80789, -2.733105, 1.664597, -2.545159, 1.580571, 1.392205, 2.745399, -2.095367, 1.52224, -2.512216, 2.757916, 0.809921, -0.666809, 2.568328, 1.795894, -1.337623, 0.925458, -0.78217, -1.471544, 0.173418, 0.085104, 0.946548, 1.747553, 1.627368, -0.621794, -0.097243, -0.129806, -0.812639, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 0, "computed_crc12": 1148, "message_preview_12chars": "80RjefBnO000", "message_words_6bit": [ 8, 0, 27, 45, 40, 41, 11, 49, 24, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "transform": "ft8_gray_primary_demap_lsb_input+no_interleaver", "variant": "mapped_ft8_gray_primary_demap_msb_input+no_interleaver" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_10", "info87_bits": [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "001000000000011011101101101000101001001011110001011000000000000000000000000000000000000", "info87_llr": [ 3.302363, 2.594768, -2.845718, 1.002312, 0.514013, 0.387826, 0.132996, 0.120732, 2.467688, 2.02146, 1.815203, 3.07884, 0.587027, -0.410081, -1.272161, 0.607786, -0.293051, -0.814257, -0.458664, 0.208113, -0.96643, -2.838815, 2.147549, -2.413842, -2.733105, 1.965755, -2.100455, 1.580571, 1.375261, 2.698495, -2.095367, 1.607397, -2.348466, 2.757916, 0.70672, -0.768541, 2.568328, 1.43542, -1.673206, 0.925458, -0.671741, -1.319132, 0.173418, 0.077117, 0.936672, 1.747553, 1.088577, -1.037263, -0.097243, 0.045154, -0.614553, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 0, "computed_crc12": 1148, "message_preview_12chars": "80RjefBnO000", "message_words_6bit": [ 8, 0, 27, 45, 40, 41, 11, 49, 24, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_12", "info87_bits": [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], "info87_bitstring": "100000000000100000100000100000000000000010001000000000001000100000001000100000000000100", "info87_llr": [ -3.259655, 0.0, 0.927954, 0.0, 2.131585, 0.0, 0.0, 0.0, 3.044819, 0.0, 0.0, 0.0, -0.781632, 0.0, 0.0, 0.0, 0.068472, 0.0, -0.462678, 0.0, 1.351633, 0.0, 0.0, 0.0, -0.640133, 0.0, 0.0, 0.0, 1.34651, 0.0, 0.0, 0.0, 0.498652, 0.0, 0.946898, 0.0, 1.942077, 0.0, 0.0, 0.0, -1.015452, 0.0, 0.0, 0.0, -1.788252, 0.0, 0.0, 0.0, 2.007042, 0.0, 0.0, 0.0, 1.597987, 0.0, 0.0, 0.0, -0.959131, 0.0, 0.0, 0.0, 0.166158, 0.0, 0.0, 0.0, 2.858617, 0.0, 0.913998, 0.0, -2.707497, 0.0, 0.0, 0.0, -0.486017, 0.0, 0.0, 0.0, 2.343998, 0.0, 0.0, 0.0, 2.276317, 0.0, 0.0, 0.0, -2.087149, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 25, 26 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 4, "computed_crc12": 3720, "message_preview_12chars": "W0WWW02808W8", "message_words_6bit": [ 32, 0, 32, 32, 32, 0, 2, 8, 0, 8, 32, 8 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_15", "info87_bits": [ 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1 ], "info87_bitstring": "010110111111110111101101111101101110111111110010111111111001101011111010111110111010111", "info87_llr": [ -0.371962, -0.0, 3.84703, -0.0, -3.1786, 1.244573, -3.304358, -0.0, -0.0, -0.0, -4.040302, -0.0, -2.16115, -0.0, 1.217068, -0.0, -0.0, -0.0, -0.0, 1.016056, -0.0, -0.0, 3.550132, -0.0, -4.067559, -0.0, -1.520683, -4.024359, 0.223834, -1.735293, -0.0, 2.747906, -0.0, -0.0, -0.0, 0.866097, -0.0, -2.896537, -0.0, -2.049638, -0.0, -0.0, -0.0, -0.971433, 3.903775, 1.641699, -3.055165, 1.650458, -3.314887, -0.544065, -3.370789, -3.522097, -0.0, -4.198216, -2.805792, -0.0, -3.081186, 1.917489, 3.728239, -2.103109, -0.0, 2.072304, -0.0, 2.005133, -0.0, -3.475137, -2.144982, -3.481024, -0.0, 3.492025, -0.0, 1.113849, -0.0, -4.397118, -4.116626, -1.032513, -0.0, 3.683064, -0.0, -0.072644, -0.0, 2.179638, -0.736832, 2.039762, -0.0, -4.61604, -4.070281 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 1, 3, 7, 8, 9, 11, 13, 15, 16, 17, 18, 20, 21, 23, 25, 30, 32, 33 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 3543, "computed_crc12": 3890, "message_preview_12chars": "M+tjzk+o+vhw", "message_words_6bit": [ 22, 63, 55, 45, 61, 46, 63, 50, 63, 57, 43, 58 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_9", "info87_bits": [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "info87_bitstring": "001000000000011011101101101000101001001011110001011000000000000000000000000000000000000", "info87_llr": [ 3.302363, 3.25263, -2.348985, 1.002312, 0.721564, 0.588251, 0.132996, 0.181135, 2.697169, 2.02146, 1.828782, 3.118228, 0.587027, -0.520486, -1.432345, 0.607786, -0.370865, -0.90483, -0.458664, 0.194261, -0.983668, -2.838815, 1.902866, -2.80789, -2.733105, 1.664597, -2.545159, 1.580571, 1.392205, 2.745399, -2.095367, 1.52224, -2.512216, 2.757916, 0.809921, -0.666809, 2.568328, 1.795894, -1.337623, 0.925458, -0.78217, -1.471544, 0.173418, 0.085104, 0.946548, 1.747553, 1.627368, -0.621794, -0.097243, -0.129806, -0.812639, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 0, "computed_crc12": 1148, "message_preview_12chars": "80RjefBnO000", "message_words_6bit": [ 8, 0, 27, 45, 40, 41, 11, 49, 24, 0, 0, 0 ] }, "source_index_context": { "info87_scope": "post-LDPC information bits 0..86 from source-aligned message174/CRC12 contract", "message_words": "bits 0..71 form 12 x 6-bit words in extractmessage174()", "crc12_contract": "CRC12 poly 0xc06, xor 42; checkCRC12() extracts received CRC from packed bytes bits[9]/bits[10] after MSB-first packing", "deinterleaver_whitening_status": "not asserted as final; this probe exports runtime rows so the next step can align source-derived reorder/whitening indices against real LDPC rows" }, "matrix_meta": {} } ], "outputs": { "post_ldpc_info87_runtime_export_json": "/decoders/js8_decoder/runtime/step85_post_ldpc_info87_window0/step61_post_ldpc_info87_runtime_export.json" }, "warnings": [ "This is still a diagnostic runtime export, not a final JS8 text decoder.", "Step61 patches the runtime LDPC probes to expose post-LDPC info87 rows and source-index context for the next reorder/whitening alignment step." ], "next_action": "If best_distance is 0, implement source-confirmed message174 text unpack. If best_distance remains >0, build Step62 to test source-derived deinterleaver/whitening index maps against these exact runtime rows." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json [webftr-js8-lab] JSON timeout guard: 120s { "ok": true, "tool": "webftr-js8-source-exact-map-probe", "tool_version": "step64-source-confirmed-message174-decodes-output", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "source_checked": [ { "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "exists": true, "is_dir": true } ], "source": { "source_available": true, "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "files_scanned": 16, "focused_files_present": [ "JS8_Mode/JS8.cpp", "JS8_Mode/JS8.h", "JS8_Mode/Decoder.cpp", "JS8_Mode/Decoder.h", "JS8_Mode/DecodedText.cpp", "JS8_Mode/DecodedText.h", "JS8_Mode/JS8Submode.cpp", "JS8_Mode/JS8Submode.h", "JS8_Mode/soft_combiner.h", "JS8_Mode/ldpc_feedback.h", "JS8_Mode/whitening_processor.h", "JS8_Include/commons.h", "JS8_Main/Varicode.cpp", "JS8_Main/Varicode.h", "JS8_JSC/JSC_map.cpp", "JS8_JSC/JSC_list.cpp" ], "focused_files_missing": [], "exact_maps": [], "source_evidence": [ { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 11, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten" ], "context": { "start_line": 8, "end_line": 14, "lines": [ { "line": 8, "text": "#include \"JS8.h\"" }, { "line": 9, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/FrequencyTracker.h\"" }, { "line": 11, "text": "#include \"JS8_Mode/whitening_processor.h\"" }, { "line": 12, "text": "#include \"ldpc_feedback.h\"" }, { "line": 13, "text": "#include \"soft_combiner.h\"" }, { "line": 14, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 12, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 9, "end_line": 15, "lines": [ { "line": 9, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/FrequencyTracker.h\"" }, { "line": 11, "text": "#include \"JS8_Mode/whitening_processor.h\"" }, { "line": 12, "text": "#include \"ldpc_feedback.h\"" }, { "line": 13, "text": "#include \"soft_combiner.h\"" }, { "line": 14, "text": "" }, { "line": 15, "text": "#include " } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 729, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 726, "end_line": 732, "lines": [ { "line": 726, "text": "" }, { "line": 727, "text": "// Belief Propagation Decoder" }, { "line": 728, "text": "" }, { "line": 729, "text": "int bpdecode174(std::array const &llr, std::array &decoded," }, { "line": 730, "text": " std::array &cw) {" }, { "line": 731, "text": " // Initialize messages and variables" }, { "line": 732, "text": " std::array, N> tov =" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 748, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 745, "end_line": 751, "lines": [ { "line": 745, "text": " // Initialize toc (messages from bits to checks)" }, { "line": 746, "text": " for (int i = 0; i < M; ++i) {" }, { "line": 747, "text": " for (int j = 0; j < Nm[i].valid_neighbors; ++j) {" }, { "line": 748, "text": " toc[i][j] = llr[Nm[i].neighbors[j]];" }, { "line": 749, "text": " }" }, { "line": 750, "text": " }" }, { "line": 751, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 757, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 754, "end_line": 760, "lines": [ { "line": 754, "text": " // Update bit log likelihood ratios" }, { "line": 755, "text": " for (int i = 0; i < N; ++i) {" }, { "line": 756, "text": " zn[i] =" }, { "line": 757, "text": " llr[i] + std::accumulate(tov[i].begin()," }, { "line": 758, "text": " tov[i].begin() + BP_MAX_CHECKS, 0.0f);" }, { "line": 759, "text": " }" }, { "line": 760, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 782, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 779, "end_line": 785, "lines": [ { "line": 779, "text": " // Count errors" }, { "line": 780, "text": " int nerr = 0;" }, { "line": 781, "text": " for (int i = 0; i < N; ++i) {" }, { "line": 782, "text": " if ((2 * cw[i] - 1) * llr[i] < 0.0f) {" }, { "line": 783, "text": " ++nerr;" }, { "line": 784, "text": " }" }, { "line": 785, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 895, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "checkCRC12" ], "context": { "start_line": 892, "end_line": 898, "lines": [ { "line": 892, "text": " return boost::augmented_crc<12, 0xc06>(range.data(), range.size()) ^ 42;" }, { "line": 893, "text": "}" }, { "line": 894, "text": "" }, { "line": 895, "text": "bool checkCRC12(std::array const &decoded) {" }, { "line": 896, "text": " std::array bits = {};" }, { "line": 897, "text": "" }, { "line": 898, "text": " for (std::size_t i = 0; i < decoded.size(); ++i) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 918, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "message174", "extractmessage174" ], "context": { "start_line": 915, "end_line": 921, "lines": [ { "line": 915, "text": " return crc == CRC12(bits);" }, { "line": 916, "text": "}" }, { "line": 917, "text": "" }, { "line": 918, "text": "std::string extractmessage174(std::array const &decoded) {" }, { "line": 919, "text": " std::string message;" }, { "line": 920, "text": "" }, { "line": 921, "text": " // Ensure received CRC matches computed CRC." } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 923, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "checkCRC12" ], "context": { "start_line": 920, "end_line": 926, "lines": [ { "line": 920, "text": "" }, { "line": 921, "text": " // Ensure received CRC matches computed CRC." }, { "line": 922, "text": "" }, { "line": 923, "text": " if (checkCRC12(decoded)) {" }, { "line": 924, "text": " message.reserve(12);" }, { "line": 925, "text": "" }, { "line": 926, "text": " // Decode the message from the 72 data bits" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 950, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 947, "end_line": 953, "lines": [ { "line": 947, "text": "// This should be 952 bytes in size; to store an 87x87 matrix of bits," }, { "line": 948, "text": "// you need 7569 bits, which requires 119 64-bit values, or 952 bytes." }, { "line": 949, "text": "//" }, { "line": 950, "text": "// Background here is that this is a low-density parity check code (LDPC)," }, { "line": 951, "text": "// generated using the PEG algorithm. In short, true values in a row i of" }, { "line": 952, "text": "// the matrix define which of the 87 message bits must be summed, modulo" }, { "line": 953, "text": "// 2, to produce the ith parity check bit. Decent references on this are:" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 959, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 956, "end_line": 962, "lines": [ { "line": 956, "text": "// 2. https://inference.org.uk/mackay/PEG_ECC.html" }, { "line": 957, "text": "// 3. https://github.com/Lcrypto/classic-PEG-" }, { "line": 958, "text": "//" }, { "line": 959, "text": "// The data used was harvested from the original 'ldpc_174_87_params.f90'," }, { "line": 960, "text": "// but you'll note that the rows have been reordered here, because this" }, { "line": 961, "text": "// isn't Fortran; C++ is row-major, not column-major." }, { "line": 962, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1084, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1081, "end_line": 1087, "lines": [ { "line": 1081, "text": " js8::SoftCombiner m_softCombiner;" }, { "line": 1082, "text": " bool m_enableFreqTracking = true;" }, { "line": 1083, "text": " bool m_enableTimingTracking = true;" }, { "line": 1084, "text": " float m_llrErasureThreshold = js8::llrErasureThreshold();" }, { "line": 1085, "text": " bool m_enableLdpcFeedback = js8::ldpcFeedbackEnabled();" }, { "line": 1086, "text": " int m_maxLdpcPasses = js8::ldpcFeedbackMaxPasses();" }, { "line": 1087, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1085, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1082, "end_line": 1088, "lines": [ { "line": 1082, "text": " bool m_enableFreqTracking = true;" }, { "line": 1083, "text": " bool m_enableTimingTracking = true;" }, { "line": 1084, "text": " float m_llrErasureThreshold = js8::llrErasureThreshold();" }, { "line": 1085, "text": " bool m_enableLdpcFeedback = js8::ldpcFeedbackEnabled();" }, { "line": 1086, "text": " int m_maxLdpcPasses = js8::ldpcFeedbackMaxPasses();" }, { "line": 1087, "text": "" }, { "line": 1088, "text": " using Plan = FFTWPlanManager::Type;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1086, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1083, "end_line": 1089, "lines": [ { "line": 1083, "text": " bool m_enableTimingTracking = true;" }, { "line": 1084, "text": " float m_llrErasureThreshold = js8::llrErasureThreshold();" }, { "line": 1085, "text": " bool m_enableLdpcFeedback = js8::ldpcFeedbackEnabled();" }, { "line": 1086, "text": " int m_maxLdpcPasses = js8::ldpcFeedbackMaxPasses();" }, { "line": 1087, "text": "" }, { "line": 1088, "text": " using Plan = FFTWPlanManager::Type;" }, { "line": 1089, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1473, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten" ], "context": { "start_line": 1470, "end_line": 1476, "lines": [ { "line": 1470, "text": " symbolWinners[j] = winner;" }, { "line": 1471, "text": " }" }, { "line": 1472, "text": "" }, { "line": 1473, "text": " auto const whitening = js8::WhiteningProcessor::process(" }, { "line": 1474, "text": " s1, symbolWinners, m_llrErasureThreshold," }, { "line": 1475, "text": " decoder_js8().isDebugEnabled());" }, { "line": 1476, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1474, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1471, "end_line": 1477, "lines": [ { "line": 1471, "text": " }" }, { "line": 1472, "text": "" }, { "line": 1473, "text": " auto const whitening = js8::WhiteningProcessor::process(" }, { "line": 1474, "text": " s1, symbolWinners, m_llrErasureThreshold," }, { "line": 1475, "text": " decoder_js8().isDebugEnabled());" }, { "line": 1476, "text": "" }, { "line": 1477, "text": " auto llr0 = whitening.llr0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1477, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten", "llr" ], "context": { "start_line": 1474, "end_line": 1480, "lines": [ { "line": 1474, "text": " s1, symbolWinners, m_llrErasureThreshold," }, { "line": 1475, "text": " decoder_js8().isDebugEnabled());" }, { "line": 1476, "text": "" }, { "line": 1477, "text": " auto llr0 = whitening.llr0;" }, { "line": 1478, "text": " auto llr1 = whitening.llr1;" }, { "line": 1479, "text": "" }, { "line": 1480, "text": " // Only apply a second erasure threshold pass if whitening didn't" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1478, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten", "llr" ], "context": { "start_line": 1475, "end_line": 1481, "lines": [ { "line": 1475, "text": " decoder_js8().isDebugEnabled());" }, { "line": 1476, "text": "" }, { "line": 1477, "text": " auto llr0 = whitening.llr0;" }, { "line": 1478, "text": " auto llr1 = whitening.llr1;" }, { "line": 1479, "text": "" }, { "line": 1480, "text": " // Only apply a second erasure threshold pass if whitening didn't" }, { "line": 1481, "text": " // already zero low-magnitude LLRs using the configured threshold." } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1480, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten" ], "context": { "start_line": 1477, "end_line": 1483, "lines": [ { "line": 1477, "text": " auto llr0 = whitening.llr0;" }, { "line": 1478, "text": " auto llr1 = whitening.llr1;" }, { "line": 1479, "text": "" }, { "line": 1480, "text": " // Only apply a second erasure threshold pass if whitening didn't" }, { "line": 1481, "text": " // already zero low-magnitude LLRs using the configured threshold." }, { "line": 1482, "text": " if (!whitening.erasureApplied) {" }, { "line": 1483, "text": " std::size_t erasuresAfterThreshold = 0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1481, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1478, "end_line": 1484, "lines": [ { "line": 1478, "text": " auto llr1 = whitening.llr1;" }, { "line": 1479, "text": "" }, { "line": 1480, "text": " // Only apply a second erasure threshold pass if whitening didn't" }, { "line": 1481, "text": " // already zero low-magnitude LLRs using the configured threshold." }, { "line": 1482, "text": " if (!whitening.erasureApplied) {" }, { "line": 1483, "text": " std::size_t erasuresAfterThreshold = 0;" }, { "line": 1484, "text": " double sumAbsPreErasure = 0.0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1482, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "whiten" ], "context": { "start_line": 1479, "end_line": 1485, "lines": [ { "line": 1479, "text": "" }, { "line": 1480, "text": " // Only apply a second erasure threshold pass if whitening didn't" }, { "line": 1481, "text": " // already zero low-magnitude LLRs using the configured threshold." }, { "line": 1482, "text": " if (!whitening.erasureApplied) {" }, { "line": 1483, "text": " std::size_t erasuresAfterThreshold = 0;" }, { "line": 1484, "text": " double sumAbsPreErasure = 0.0;" }, { "line": 1485, "text": " double sumAbsPostErasure = 0.0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1487, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1484, "end_line": 1490, "lines": [ { "line": 1484, "text": " double sumAbsPreErasure = 0.0;" }, { "line": 1485, "text": " double sumAbsPostErasure = 0.0;" }, { "line": 1486, "text": "" }, { "line": 1487, "text": " auto const applyErasureThreshold = [&](auto &llr) {" }, { "line": 1488, "text": " for (auto const value : llr)" }, { "line": 1489, "text": " sumAbsPreErasure += std::abs(value);" }, { "line": 1490, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1488, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1485, "end_line": 1491, "lines": [ { "line": 1485, "text": " double sumAbsPostErasure = 0.0;" }, { "line": 1486, "text": "" }, { "line": 1487, "text": " auto const applyErasureThreshold = [&](auto &llr) {" }, { "line": 1488, "text": " for (auto const value : llr)" }, { "line": 1489, "text": " sumAbsPreErasure += std::abs(value);" }, { "line": 1490, "text": "" }, { "line": 1491, "text": " if (m_llrErasureThreshold > 0.0f) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1491, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1488, "end_line": 1494, "lines": [ { "line": 1488, "text": " for (auto const value : llr)" }, { "line": 1489, "text": " sumAbsPreErasure += std::abs(value);" }, { "line": 1490, "text": "" }, { "line": 1491, "text": " if (m_llrErasureThreshold > 0.0f) {" }, { "line": 1492, "text": " for (auto &value : llr) {" }, { "line": 1493, "text": " if (std::abs(value) < m_llrErasureThreshold) {" }, { "line": 1494, "text": " value = 0.0f;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1492, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1489, "end_line": 1495, "lines": [ { "line": 1489, "text": " sumAbsPreErasure += std::abs(value);" }, { "line": 1490, "text": "" }, { "line": 1491, "text": " if (m_llrErasureThreshold > 0.0f) {" }, { "line": 1492, "text": " for (auto &value : llr) {" }, { "line": 1493, "text": " if (std::abs(value) < m_llrErasureThreshold) {" }, { "line": 1494, "text": " value = 0.0f;" }, { "line": 1495, "text": " ++erasuresAfterThreshold;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1493, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1490, "end_line": 1496, "lines": [ { "line": 1490, "text": "" }, { "line": 1491, "text": " if (m_llrErasureThreshold > 0.0f) {" }, { "line": 1492, "text": " for (auto &value : llr) {" }, { "line": 1493, "text": " if (std::abs(value) < m_llrErasureThreshold) {" }, { "line": 1494, "text": " value = 0.0f;" }, { "line": 1495, "text": " ++erasuresAfterThreshold;" }, { "line": 1496, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1501, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1498, "end_line": 1504, "lines": [ { "line": 1498, "text": " sumAbsPostErasure += std::abs(value);" }, { "line": 1499, "text": " }" }, { "line": 1500, "text": " } else {" }, { "line": 1501, "text": " for (auto const value : llr)" }, { "line": 1502, "text": " sumAbsPostErasure += std::abs(value);" }, { "line": 1503, "text": " }" }, { "line": 1504, "text": " };" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1506, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1503, "end_line": 1509, "lines": [ { "line": 1503, "text": " }" }, { "line": 1504, "text": " };" }, { "line": 1505, "text": "" }, { "line": 1506, "text": " applyErasureThreshold(llr0);" }, { "line": 1507, "text": " applyErasureThreshold(llr1);" }, { "line": 1508, "text": "" }, { "line": 1509, "text": " if (decoder_js8().isDebugEnabled()) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1507, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1504, "end_line": 1510, "lines": [ { "line": 1504, "text": " };" }, { "line": 1505, "text": "" }, { "line": 1506, "text": " applyErasureThreshold(llr0);" }, { "line": 1507, "text": " applyErasureThreshold(llr1);" }, { "line": 1508, "text": "" }, { "line": 1509, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1510, "text": " auto const total =" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1511, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1508, "end_line": 1514, "lines": [ { "line": 1508, "text": "" }, { "line": 1509, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1510, "text": " auto const total =" }, { "line": 1511, "text": " static_cast(llr0.size() + llr1.size());" }, { "line": 1512, "text": " double const avgPre =" }, { "line": 1513, "text": " total > 0.0 ? sumAbsPreErasure / total : 0.0;" }, { "line": 1514, "text": " double const avgPost =" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1518, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1515, "end_line": 1521, "lines": [ { "line": 1515, "text": " total > 0.0 ? sumAbsPostErasure / total : 0.0;" }, { "line": 1516, "text": "" }, { "line": 1517, "text": " qCDebug(decoder_js8)" }, { "line": 1518, "text": " << \"LLR erasure threshold\" << m_llrErasureThreshold" }, { "line": 1519, "text": " << \"erasures:\" << erasuresAfterThreshold" }, { "line": 1520, "text": " << \"avg|LLR| pre/post:\" << avgPre << avgPost;" }, { "line": 1521, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1520, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1517, "end_line": 1523, "lines": [ { "line": 1517, "text": " qCDebug(decoder_js8)" }, { "line": 1518, "text": " << \"LLR erasure threshold\" << m_llrErasureThreshold" }, { "line": 1519, "text": " << \"erasures:\" << erasuresAfterThreshold" }, { "line": 1520, "text": " << \"avg|LLR| pre/post:\" << avgPre << avgPost;" }, { "line": 1521, "text": " }" }, { "line": 1522, "text": " }" }, { "line": 1523, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1529, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1526, "end_line": 1532, "lines": [ { "line": 1526, "text": " m_softCombiner.flush(ttl);" }, { "line": 1527, "text": "" }, { "line": 1528, "text": " auto const key =" }, { "line": 1529, "text": " m_softCombiner.makeKey(Mode::NSUBMODE, f1, xdt, llr0, llr1);" }, { "line": 1530, "text": " auto combined = m_softCombiner.combine(key, llr0, llr1, ttl);" }, { "line": 1531, "text": "" }, { "line": 1532, "text": " auto llr0Combined = combined.llr0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1530, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1527, "end_line": 1533, "lines": [ { "line": 1527, "text": "" }, { "line": 1528, "text": " auto const key =" }, { "line": 1529, "text": " m_softCombiner.makeKey(Mode::NSUBMODE, f1, xdt, llr0, llr1);" }, { "line": 1530, "text": " auto combined = m_softCombiner.combine(key, llr0, llr1, ttl);" }, { "line": 1531, "text": "" }, { "line": 1532, "text": " auto llr0Combined = combined.llr0;" }, { "line": 1533, "text": " auto llr1Combined = combined.llr1;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1532, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1529, "end_line": 1535, "lines": [ { "line": 1529, "text": " m_softCombiner.makeKey(Mode::NSUBMODE, f1, xdt, llr0, llr1);" }, { "line": 1530, "text": " auto combined = m_softCombiner.combine(key, llr0, llr1, ttl);" }, { "line": 1531, "text": "" }, { "line": 1532, "text": " auto llr0Combined = combined.llr0;" }, { "line": 1533, "text": " auto llr1Combined = combined.llr1;" }, { "line": 1534, "text": "" }, { "line": 1535, "text": " std::array decoded;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1533, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1530, "end_line": 1536, "lines": [ { "line": 1530, "text": " auto combined = m_softCombiner.combine(key, llr0, llr1, ttl);" }, { "line": 1531, "text": "" }, { "line": 1532, "text": " auto llr0Combined = combined.llr0;" }, { "line": 1533, "text": " auto llr1Combined = combined.llr1;" }, { "line": 1534, "text": "" }, { "line": 1535, "text": " std::array decoded;" }, { "line": 1536, "text": " std::array cw;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1538, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1535, "end_line": 1541, "lines": [ { "line": 1535, "text": " std::array decoded;" }, { "line": 1536, "text": " std::array cw;" }, { "line": 1537, "text": "" }, { "line": 1538, "text": " int totalLdpcPasses = 0;" }, { "line": 1539, "text": " bool usedFeedbackPass = false;" }, { "line": 1540, "text": " bool feedbackTurnedSuccess = false;" }, { "line": 1541, "text": " int feedbackConfident = 0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1544, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1541, "end_line": 1547, "lines": [ { "line": 1541, "text": " int feedbackConfident = 0;" }, { "line": 1542, "text": " int feedbackUncertain = 0;" }, { "line": 1543, "text": "" }, { "line": 1544, "text": " auto const tryDecode = [&](std::array const &llrInput," }, { "line": 1545, "text": " int ipass) -> std::optional {" }, { "line": 1546, "text": " nharderrors = bpdecode174(llrInput, decoded, cw);" }, { "line": 1547, "text": " xsnr = -99.0f;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1546, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1543, "end_line": 1549, "lines": [ { "line": 1543, "text": "" }, { "line": 1544, "text": " auto const tryDecode = [&](std::array const &llrInput," }, { "line": 1545, "text": " int ipass) -> std::optional {" }, { "line": 1546, "text": " nharderrors = bpdecode174(llrInput, decoded, cw);" }, { "line": 1547, "text": " xsnr = -99.0f;" }, { "line": 1548, "text": "" }, { "line": 1549, "text": " if (std::all_of(cw.begin(), cw.end()," } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1558, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "checkCRC12" ], "context": { "start_line": 1555, "end_line": 1561, "lines": [ { "line": 1555, "text": " !(sync < 2.0f && nharderrors > 35) &&" }, { "line": 1556, "text": " !(ipass > 2 && nharderrors > 39) &&" }, { "line": 1557, "text": " !(ipass == 4 && nharderrors > 30)) {" }, { "line": 1558, "text": " if (checkCRC12(decoded)) {" }, { "line": 1559, "text": " if (syncStats)" }, { "line": 1560, "text": " emitEvent(JS8::Event::SyncState{" }, { "line": 1561, "text": " JS8::Event::SyncState::Type::DECODED," } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1567, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "message174", "extractmessage174" ], "context": { "start_line": 1564, "end_line": 1570, "lines": [ { "line": 1564, "text": " xdt2," }, { "line": 1565, "text": " {.decoded = sync}});" }, { "line": 1566, "text": "" }, { "line": 1567, "text": " auto message = extractmessage174(decoded);" }, { "line": 1568, "text": "" }, { "line": 1569, "text": " int const i3bit =" }, { "line": 1570, "text": " (decoded[72] << 2) | (decoded[73] << 1) | decoded[74];" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1604, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1601, "end_line": 1607, "lines": [ { "line": 1601, "text": " };" }, { "line": 1602, "text": "" }, { "line": 1603, "text": " // Loop over decoding passes" }, { "line": 1604, "text": " for (int ipass = 1; ipass <= 4 && totalLdpcPasses < m_maxLdpcPasses;" }, { "line": 1605, "text": " ++ipass) {" }, { "line": 1606, "text": " auto &llr = ipass == 2 ? llr1Combined : llr0Combined;" }, { "line": 1607, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1606, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1603, "end_line": 1609, "lines": [ { "line": 1603, "text": " // Loop over decoding passes" }, { "line": 1604, "text": " for (int ipass = 1; ipass <= 4 && totalLdpcPasses < m_maxLdpcPasses;" }, { "line": 1605, "text": " ++ipass) {" }, { "line": 1606, "text": " auto &llr = ipass == 2 ? llr1Combined : llr0Combined;" }, { "line": 1607, "text": "" }, { "line": 1608, "text": " // Zero ranges for certain passes to mirror legacy behavior." }, { "line": 1609, "text": " if (ipass == 3)" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1610, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1607, "end_line": 1613, "lines": [ { "line": 1607, "text": "" }, { "line": 1608, "text": " // Zero ranges for certain passes to mirror legacy behavior." }, { "line": 1609, "text": " if (ipass == 3)" }, { "line": 1610, "text": " std::fill(llr0Combined.begin(), llr0Combined.begin() + 24," }, { "line": 1611, "text": " 0.0f);" }, { "line": 1612, "text": " else if (ipass == 4)" }, { "line": 1613, "text": " std::fill(llr0Combined.begin() + 24, llr0Combined.begin() + 48," } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1613, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1610, "end_line": 1616, "lines": [ { "line": 1610, "text": " std::fill(llr0Combined.begin(), llr0Combined.begin() + 24," }, { "line": 1611, "text": " 0.0f);" }, { "line": 1612, "text": " else if (ipass == 4)" }, { "line": 1613, "text": " std::fill(llr0Combined.begin() + 24, llr0Combined.begin() + 48," }, { "line": 1614, "text": " 0.0f);" }, { "line": 1615, "text": "" }, { "line": 1616, "text": " std::array llrPrimary = llr;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1616, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1613, "end_line": 1619, "lines": [ { "line": 1613, "text": " std::fill(llr0Combined.begin() + 24, llr0Combined.begin() + 48," }, { "line": 1614, "text": " 0.0f);" }, { "line": 1615, "text": "" }, { "line": 1616, "text": " std::array llrPrimary = llr;" }, { "line": 1617, "text": " if (auto result = tryDecode(llrPrimary, ipass)) {" }, { "line": 1618, "text": " ++totalLdpcPasses;" }, { "line": 1619, "text": " return result;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1617, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1614, "end_line": 1620, "lines": [ { "line": 1614, "text": " 0.0f);" }, { "line": 1615, "text": "" }, { "line": 1616, "text": " std::array llrPrimary = llr;" }, { "line": 1617, "text": " if (auto result = tryDecode(llrPrimary, ipass)) {" }, { "line": 1618, "text": " ++totalLdpcPasses;" }, { "line": 1619, "text": " return result;" }, { "line": 1620, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1618, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1615, "end_line": 1621, "lines": [ { "line": 1615, "text": "" }, { "line": 1616, "text": " std::array llrPrimary = llr;" }, { "line": 1617, "text": " if (auto result = tryDecode(llrPrimary, ipass)) {" }, { "line": 1618, "text": " ++totalLdpcPasses;" }, { "line": 1619, "text": " return result;" }, { "line": 1620, "text": " }" }, { "line": 1621, "text": " ++totalLdpcPasses;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1621, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1618, "end_line": 1624, "lines": [ { "line": 1618, "text": " ++totalLdpcPasses;" }, { "line": 1619, "text": " return result;" }, { "line": 1620, "text": " }" }, { "line": 1621, "text": " ++totalLdpcPasses;" }, { "line": 1622, "text": "" }, { "line": 1623, "text": " // Feedback refinement and second attempt, if enabled and budget" }, { "line": 1624, "text": " // allows." } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1625, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1622, "end_line": 1628, "lines": [ { "line": 1622, "text": "" }, { "line": 1623, "text": " // Feedback refinement and second attempt, if enabled and budget" }, { "line": 1624, "text": " // allows." }, { "line": 1625, "text": " if (m_enableLdpcFeedback && totalLdpcPasses < m_maxLdpcPasses) {" }, { "line": 1626, "text": " std::array llrRefined;" }, { "line": 1627, "text": " int confident = 0;" }, { "line": 1628, "text": " int uncertain = 0;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1626, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1623, "end_line": 1629, "lines": [ { "line": 1623, "text": " // Feedback refinement and second attempt, if enabled and budget" }, { "line": 1624, "text": " // allows." }, { "line": 1625, "text": " if (m_enableLdpcFeedback && totalLdpcPasses < m_maxLdpcPasses) {" }, { "line": 1626, "text": " std::array llrRefined;" }, { "line": 1627, "text": " int confident = 0;" }, { "line": 1628, "text": " int uncertain = 0;" }, { "line": 1629, "text": " js8::refineLlrsWithLdpcFeedback(" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1629, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr", "LDPC", "ldpc" ], "context": { "start_line": 1626, "end_line": 1632, "lines": [ { "line": 1626, "text": " std::array llrRefined;" }, { "line": 1627, "text": " int confident = 0;" }, { "line": 1628, "text": " int uncertain = 0;" }, { "line": 1629, "text": " js8::refineLlrsWithLdpcFeedback(" }, { "line": 1630, "text": " llrPrimary, cw, m_llrErasureThreshold, llrRefined," }, { "line": 1631, "text": " confident, uncertain);" }, { "line": 1632, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1630, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1627, "end_line": 1633, "lines": [ { "line": 1627, "text": " int confident = 0;" }, { "line": 1628, "text": " int uncertain = 0;" }, { "line": 1629, "text": " js8::refineLlrsWithLdpcFeedback(" }, { "line": 1630, "text": " llrPrimary, cw, m_llrErasureThreshold, llrRefined," }, { "line": 1631, "text": " confident, uncertain);" }, { "line": 1632, "text": "" }, { "line": 1633, "text": " if (decoder_js8().isDebugEnabled()) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1635, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1632, "end_line": 1638, "lines": [ { "line": 1632, "text": "" }, { "line": 1633, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1634, "text": " qCDebug(decoder_js8)" }, { "line": 1635, "text": " << \"LDPC feedback pass\"" }, { "line": 1636, "text": " << \"ipass\" << ipass << \"confident\" << confident" }, { "line": 1637, "text": " << \"uncertain\" << uncertain;" }, { "line": 1638, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1644, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 1641, "end_line": 1647, "lines": [ { "line": 1641, "text": " feedbackConfident += confident;" }, { "line": 1642, "text": " feedbackUncertain += uncertain;" }, { "line": 1643, "text": "" }, { "line": 1644, "text": " if (auto result = tryDecode(llrRefined, ipass)) {" }, { "line": 1645, "text": " ++totalLdpcPasses;" }, { "line": 1646, "text": " feedbackTurnedSuccess = true;" }, { "line": 1647, "text": " if (decoder_js8().isDebugEnabled()) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1645, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1642, "end_line": 1648, "lines": [ { "line": 1642, "text": " feedbackUncertain += uncertain;" }, { "line": 1643, "text": "" }, { "line": 1644, "text": " if (auto result = tryDecode(llrRefined, ipass)) {" }, { "line": 1645, "text": " ++totalLdpcPasses;" }, { "line": 1646, "text": " feedbackTurnedSuccess = true;" }, { "line": 1647, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1648, "text": " qCDebug(decoder_js8)" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1649, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1646, "end_line": 1652, "lines": [ { "line": 1646, "text": " feedbackTurnedSuccess = true;" }, { "line": 1647, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1648, "text": " qCDebug(decoder_js8)" }, { "line": 1649, "text": " << \"LDPC feedback succeeded on second pass\"" }, { "line": 1650, "text": " << \"ipass\" << ipass << \"confident\"" }, { "line": 1651, "text": " << feedbackConfident << \"uncertain\"" }, { "line": 1652, "text": " << feedbackUncertain << \"passes\" << totalLdpcPasses;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1652, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1649, "end_line": 1655, "lines": [ { "line": 1649, "text": " << \"LDPC feedback succeeded on second pass\"" }, { "line": 1650, "text": " << \"ipass\" << ipass << \"confident\"" }, { "line": 1651, "text": " << feedbackConfident << \"uncertain\"" }, { "line": 1652, "text": " << feedbackUncertain << \"passes\" << totalLdpcPasses;" }, { "line": 1653, "text": " }" }, { "line": 1654, "text": " return result;" }, { "line": 1655, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1657, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1654, "end_line": 1660, "lines": [ { "line": 1654, "text": " return result;" }, { "line": 1655, "text": " }" }, { "line": 1656, "text": "" }, { "line": 1657, "text": " ++totalLdpcPasses;" }, { "line": 1658, "text": " }" }, { "line": 1659, "text": " }" }, { "line": 1660, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1663, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1660, "end_line": 1666, "lines": [ { "line": 1660, "text": "" }, { "line": 1661, "text": " if (decoder_js8().isDebugEnabled()) {" }, { "line": 1662, "text": " qCDebug(decoder_js8)" }, { "line": 1663, "text": " << \"LDPC feedback summary\"" }, { "line": 1664, "text": " << \"used\" << usedFeedbackPass << \"success\"" }, { "line": 1665, "text": " << feedbackTurnedSuccess << \"confident\" << feedbackConfident" }, { "line": 1666, "text": " << \"uncertain\" << feedbackUncertain << \"passes\"" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/JS8.cpp", "line": 1667, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "LDPC", "ldpc" ], "context": { "start_line": 1664, "end_line": 1670, "lines": [ { "line": 1664, "text": " << \"used\" << usedFeedbackPass << \"success\"" }, { "line": 1665, "text": " << feedbackTurnedSuccess << \"confident\" << feedbackConfident" }, { "line": 1666, "text": " << \"uncertain\" << feedbackUncertain << \"passes\"" }, { "line": 1667, "text": " << totalLdpcPasses;" }, { "line": 1668, "text": " }" }, { "line": 1669, "text": "" }, { "line": 1670, "text": " logTracker(\"fail\");" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 22, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 19, "end_line": 25, "lines": [ { "line": 19, "text": "" }, { "line": 20, "text": "namespace js8 {" }, { "line": 21, "text": "/**" }, { "line": 22, "text": " * @brief Cache and combine repeated LLR frames for the same decode candidate." }, { "line": 23, "text": " *" }, { "line": 24, "text": " * Uses a coarse freq/dt bin and a small LLR signature as the key; repeated" }, { "line": 25, "text": " * receptions accumulate LLRs to improve decode probability without changing" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 24, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 21, "end_line": 27, "lines": [ { "line": 21, "text": "/**" }, { "line": 22, "text": " * @brief Cache and combine repeated LLR frames for the same decode candidate." }, { "line": 23, "text": " *" }, { "line": 24, "text": " * Uses a coarse freq/dt bin and a small LLR signature as the key; repeated" }, { "line": 25, "text": " * receptions accumulate LLRs to improve decode probability without changing" }, { "line": 26, "text": " * over-the-air behavior. Templated on the LLR length so the caller binds it" }, { "line": 27, "text": " * to the decoder's bit count." } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 25, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 22, "end_line": 28, "lines": [ { "line": 22, "text": " * @brief Cache and combine repeated LLR frames for the same decode candidate." }, { "line": 23, "text": " *" }, { "line": 24, "text": " * Uses a coarse freq/dt bin and a small LLR signature as the key; repeated" }, { "line": 25, "text": " * receptions accumulate LLRs to improve decode probability without changing" }, { "line": 26, "text": " * over-the-air behavior. Templated on the LLR length so the caller binds it" }, { "line": 27, "text": " * to the decoder's bit count." }, { "line": 28, "text": " */" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 26, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 23, "end_line": 29, "lines": [ { "line": 23, "text": " *" }, { "line": 24, "text": " * Uses a coarse freq/dt bin and a small LLR signature as the key; repeated" }, { "line": 25, "text": " * receptions accumulate LLRs to improve decode probability without changing" }, { "line": 26, "text": " * over-the-air behavior. Templated on the LLR length so the caller binds it" }, { "line": 27, "text": " * to the decoder's bit count." }, { "line": 28, "text": " */" }, { "line": 29, "text": "template class SoftCombiner {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 47, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 44, "end_line": 50, "lines": [ { "line": 44, "text": "" }, { "line": 45, "text": " struct Combined {" }, { "line": 46, "text": " Key key;" }, { "line": 47, "text": " std::array llr0;" }, { "line": 48, "text": " std::array llr1;" }, { "line": 49, "text": " int repeats;" }, { "line": 50, "text": " bool combined;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 48, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 45, "end_line": 51, "lines": [ { "line": 45, "text": " struct Combined {" }, { "line": 46, "text": " Key key;" }, { "line": 47, "text": " std::array llr0;" }, { "line": 48, "text": " std::array llr1;" }, { "line": 49, "text": " int repeats;" }, { "line": 50, "text": " bool combined;" }, { "line": 51, "text": " };" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 65, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 62, "end_line": 68, "lines": [ { "line": 62, "text": " maybeRunSelfTest();" }, { "line": 63, "text": " }" }, { "line": 64, "text": "" }, { "line": 65, "text": " Key makeKey(int mode, float f1, float dt, std::array const &llr0," }, { "line": 66, "text": " std::array const &llr1) const {" }, { "line": 67, "text": " return Key{mode, static_cast(std::lround(f1))," }, { "line": 68, "text": " static_cast(std::lround(dt * 10.0f)), // 100 ms bins" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 66, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 63, "end_line": 69, "lines": [ { "line": 63, "text": " }" }, { "line": 64, "text": "" }, { "line": 65, "text": " Key makeKey(int mode, float f1, float dt, std::array const &llr0," }, { "line": 66, "text": " std::array const &llr1) const {" }, { "line": 67, "text": " return Key{mode, static_cast(std::lround(f1))," }, { "line": 68, "text": " static_cast(std::lround(dt * 10.0f)), // 100 ms bins" }, { "line": 69, "text": " signature(llr0, llr1)};" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 69, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 66, "end_line": 72, "lines": [ { "line": 66, "text": " std::array const &llr1) const {" }, { "line": 67, "text": " return Key{mode, static_cast(std::lround(f1))," }, { "line": 68, "text": " static_cast(std::lround(dt * 10.0f)), // 100 ms bins" }, { "line": 69, "text": " signature(llr0, llr1)};" }, { "line": 70, "text": " }" }, { "line": 71, "text": "" }, { "line": 72, "text": " Combined combine(Key const &key, std::array const &llr0," } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 72, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 69, "end_line": 75, "lines": [ { "line": 69, "text": " signature(llr0, llr1)};" }, { "line": 70, "text": " }" }, { "line": 71, "text": "" }, { "line": 72, "text": " Combined combine(Key const &key, std::array const &llr0," }, { "line": 73, "text": " std::array const &llr1," }, { "line": 74, "text": " std::chrono::seconds ttl) {" }, { "line": 75, "text": " flush(ttl);" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 73, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 70, "end_line": 76, "lines": [ { "line": 70, "text": " }" }, { "line": 71, "text": "" }, { "line": 72, "text": " Combined combine(Key const &key, std::array const &llr0," }, { "line": 73, "text": " std::array const &llr1," }, { "line": 74, "text": " std::chrono::seconds ttl) {" }, { "line": 75, "text": " flush(ttl);" }, { "line": 76, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 78, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 75, "end_line": 81, "lines": [ { "line": 75, "text": " flush(ttl);" }, { "line": 76, "text": "" }, { "line": 77, "text": " if (!m_enabled) {" }, { "line": 78, "text": " return Combined{key, llr0, llr1, 1, false};" }, { "line": 79, "text": " }" }, { "line": 80, "text": "" }, { "line": 81, "text": " auto &bucket = m_entries[keyForLookup(key)];" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 85, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 82, "end_line": 88, "lines": [ { "line": 82, "text": " auto it = findEntry(bucket, key.signature);" }, { "line": 83, "text": "" }, { "line": 84, "text": " if (it == bucket.end()) {" }, { "line": 85, "text": " bucket.push_back(makeEntry(key.signature, llr0, llr1));" }, { "line": 86, "text": " return Combined{key, llr0, llr1, 1, false};" }, { "line": 87, "text": " }" }, { "line": 88, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 86, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 83, "end_line": 89, "lines": [ { "line": 83, "text": "" }, { "line": 84, "text": " if (it == bucket.end()) {" }, { "line": 85, "text": " bucket.push_back(makeEntry(key.signature, llr0, llr1));" }, { "line": 86, "text": " return Combined{key, llr0, llr1, 1, false};" }, { "line": 87, "text": " }" }, { "line": 88, "text": "" }, { "line": 89, "text": " for (std::size_t i = 0; i < llr0.size(); ++i) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 89, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 86, "end_line": 92, "lines": [ { "line": 86, "text": " return Combined{key, llr0, llr1, 1, false};" }, { "line": 87, "text": " }" }, { "line": 88, "text": "" }, { "line": 89, "text": " for (std::size_t i = 0; i < llr0.size(); ++i) {" }, { "line": 90, "text": " it->llr0[i] += llr0[i];" }, { "line": 91, "text": " it->llr1[i] += llr1[i];" }, { "line": 92, "text": " }" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 90, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 87, "end_line": 93, "lines": [ { "line": 87, "text": " }" }, { "line": 88, "text": "" }, { "line": 89, "text": " for (std::size_t i = 0; i < llr0.size(); ++i) {" }, { "line": 90, "text": " it->llr0[i] += llr0[i];" }, { "line": 91, "text": " it->llr1[i] += llr1[i];" }, { "line": 92, "text": " }" }, { "line": 93, "text": "" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 91, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 88, "end_line": 94, "lines": [ { "line": 88, "text": "" }, { "line": 89, "text": " for (std::size_t i = 0; i < llr0.size(); ++i) {" }, { "line": 90, "text": " it->llr0[i] += llr0[i];" }, { "line": 91, "text": " it->llr1[i] += llr1[i];" }, { "line": 92, "text": " }" }, { "line": 93, "text": "" }, { "line": 94, "text": " ++it->repeats;" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 101, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 98, "end_line": 104, "lines": [ { "line": 98, "text": " << \"soft-combining repeats\" << it->repeats << \"mode\" << key.mode" }, { "line": 99, "text": " << \"freq\" << key.freqBin << \"dtbin\" << key.dtBin;" }, { "line": 100, "text": "" }, { "line": 101, "text": " return Combined{key, it->llr0, it->llr1, it->repeats, true};" }, { "line": 102, "text": " }" }, { "line": 103, "text": "" }, { "line": 104, "text": " void markDecoded(Key const &key) {" } ] } }, { "name": "keyword_context", "path": "JS8_Mode/soft_combiner.h", "line": 170, "kind": "source_snippet", "confidence": "source_evidence", "matched_keywords": [ "llr" ], "context": { "start_line": 167, "end_line": 173, "lines": [ { "line": 167, "text": "" }, { "line": 168, "text": " struct Entry {" }, { "line": 169, "text": " uint32_t signature;" }, { "line": 170, "text": " std::array llr0;" }, { "line": 171, "text": " std::array llr1;" }, { "line": 172, "text": " int repeats;" }, { "line": 173, "text": " Clock::time_point lastSeen;" } ] } } ] }, "info87_rows_found": 810, "source_reports": [ { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T081844Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T075340Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T075340Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T075340Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T074622Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T071154Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T071154Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T071154Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T070926Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070926Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070926Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T070154Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T051150Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T043640Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window2_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window2_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window1_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window1_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window1_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_runtime_info87_row.info87_bits", "$.runtime_info87_rows_preview[0].info87_bits", "$.runtime_info87_rows_preview[1].info87_bits", "$.runtime_info87_rows_preview[2].info87_bits", "$.runtime_info87_rows_preview[3].info87_bits", "$.runtime_info87_rows_preview[4].info87_bits", "$.runtime_info87_rows_preview[5].info87_bits", "$.runtime_info87_rows_preview[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260528T041054Z_step85_window0_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/js8_step83_source_confirmed_message174_decode_latest.json", "exists": true, "info87_row_count": 2, "row_paths_preview": [ "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring" ] } ], "source_exact_map_count": 0, "map_tests": 240, "zero_distance_candidate_count": 16, "best_distance": 0, "best_candidate": { "source_file": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 214, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, "top_candidates": [ { "source_file": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 214, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 215, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 187, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 188, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 160, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 161, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 133, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 134, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 106, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 107, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 79, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 80, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 52, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 53, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "row_index": 25, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "001XqOA2iDZ0", "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_source_confirmed_message174_decode_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "row_index": 26, "source_kind": "info87_bitstring", "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "message_preview_12chars": "Q0VsKWqfJ96x", "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.best_runtime_info87_row.info87_bits", "row_index": 135, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[0].info87_bits", "row_index": 136, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[1].info87_bits", "row_index": 137, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[2].info87_bits", "row_index": 138, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[3].info87_bits", "row_index": 139, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.best_runtime_info87_row.info87_bits", "row_index": 27, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[0].info87_bits", "row_index": 28, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[1].info87_bits", "row_index": 29, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[2].info87_bits", "row_index": 30, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[3].info87_bits", "row_index": 31, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 2, "crc_match": false, "message_preview_12chars": "XXGYQH9k0JIe", "received_crc12": 144, "computed_crc12": 432, "message_words_6bit": [ 33, 33, 16, 34, 26, 17, 9, 46, 0, 19, 18, 40 ], "info87_bitstring": "100001100001010000100010011010010001001001101110000000010011010010101000000000010010000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.best_runtime_info87_row.info87_bits", "row_index": 189, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[0].info87_bits", "row_index": 190, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[1].info87_bits", "row_index": 191, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[2].info87_bits", "row_index": 192, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[3].info87_bits", "row_index": 193, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "json_path": "$.runtime_info87_rows_preview[4].info87_bits", "row_index": 194, "source_kind": "info87_bits", "map_name": "raw", "map_source": null, "distance": 3, "crc_match": false, "message_preview_12chars": "8708y0po872W", "received_crc12": 624, "computed_crc12": 2288, "message_words_6bit": [ 8, 7, 0, 8, 60, 0, 51, 50, 8, 7, 2, 32 ], "info87_bitstring": "001000000111000000001000111100000000110011110010001000000111000010100000000001001110000" } ], "decodes": [], "warnings": [ "Step63 is still a diagnostic/source-extraction step, not a final text decoder.", "It starts no JS8Call GUI/Qt process and performs no TX/PTT/Tune/Send actions." ], "next_action": "Zero-distance message174/CRC12 candidate found: build Step64 source-confirmed message174 text unpack and WebFTR-style decodes[] output." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json [webftr-js8-lab] JSON timeout guard: 60s { "ok": true, "tool": "webftr-js8-source-confirmed-message174-decode", "tool_version": "step64-source-confirmed-message174-decodes-output", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "log_dir": "/decoders/js8_decoder/logs", "source_contract": { "source": "JS8Call-Improved JS8_Mode/JS8.cpp extractmessage174/checkCRC12", "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "crc_width": 12, "crc_poly_hex": "0xc06", "crc_xor_decimal": 42, "message_bits": "first 72 data bits as 12 x 6-bit words", "crc_gate": "Only zero-distance CRC12 candidates are emitted as decodes[]." }, "step63_source_reports": [ { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window2_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window1_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T090400Z_step85_window0_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T084822Z_step85_window0_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window2_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window1_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260528T084104Z_step85_window0_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 17, "tool_version": "step64-source-confirmed-message174-decodes-output" } ], "runtime_fallback_reports": [], "candidate_source": "step63_source_exact_map_probe", "zero_distance_candidate_count": 2, "decode_count": 2, "top_candidates": [ { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "message_text_12chars": "001XqOA2iDZ0", "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "message_text_12chars": "Q0VsKWqfJ96x", "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" } ], "decodes": [ { "id": "js8-msg174-fb81ef2f", "mode": "JS8", "decoder": "webftr-js8lab-step64-message174-source-confirmed", "text": "001XqOA2iDZ0", "raw": "001XqOA2iDZ0", "message_text_12chars": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "parsed": { "raw": "001XqOA2iDZ0", "normalized": "001XQOA2IDZ0", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "001XQOA2IDZ0" }, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 0 }, { "id": "js8-msg174-9546833a", "mode": "JS8", "decoder": "webftr-js8lab-step64-message174-source-confirmed", "text": "Q0VsKWqfJ96x", "raw": "Q0VsKWqfJ96x", "message_text_12chars": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "parsed": { "raw": "Q0VsKWqfJ96x", "normalized": "Q0VSKWQFJ96X", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "Q0VSKWQFJ96X" }, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 1 } ], "warnings": [ "Step64 emits source-confirmed message174 CRC12-zero-distance text candidates; it is not yet a full live JS8 decoder chain from audio to final chat UI.", "It starts no JS8Call GUI/Qt process and performs no TX/PTT/Tune/Send actions.", "Random-looking 12-character payloads can still be valid message174 candidates until higher JS8 text/Varicode framing is connected." ], "next_action": "Use Step64 decodes[] as the contract for the next step: connect source-confirmed message174 output into a richer JS8 text/Varicode/framing interpretation and then feed WebFTR RX display fields." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json [webftr-js8-lab] JSON timeout guard: 60s { "ok": true, "tool": "webftr-js8-source-varicode-frame-unpack-probe", "tool_version": "step66-source-varicode-frame-unpack-probe", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "input_reports": [ { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "selected_input": true } ], "source_resolution": { "selected_source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "checked": [ { "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "exists": true, "is_dir": true } ] }, "source_snippets": { "source_available": true, "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "focused_files_present": [ "JS8_Main/Varicode.cpp", "JS8_Main/Varicode.h", "JS8_JSC/JSC.cpp", "JS8_JSC/JSC.h", "JS8_JSC/JSC_map.cpp", "JS8_JSC/JSC_list.cpp", "JS8_Mode/JS8.cpp" ], "focused_files_missing": [], "snippets": [ { "name": "unpack72bits", "path": "JS8_Main/Varicode.cpp", "line": 767, "context": { "start_line": 762, "end_line": 772, "lines": [ { "line": 762, "text": " quint32 b = packed & 0xFFFFFFFF;" }, { "line": 763, "text": " return pack32bits(a) + pack32bits(b);" }, { "line": 764, "text": "}" }, { "line": 765, "text": "" }, { "line": 766, "text": "// returns the first 64 bits and sets the last 8 bits in pRem" }, { "line": 767, "text": "quint64 Varicode::unpack72bits(QString const &text, quint8 *pRem) {" }, { "line": 768, "text": " quint64 value = 0;" }, { "line": 769, "text": " quint8 rem = 0;" }, { "line": 770, "text": " quint8 mask2 = ((1 << 2) - 1);" }, { "line": 771, "text": "" }, { "line": 772, "text": " for (int i = 0; i < 10; i++) {" } ] } }, { "name": "pack72bits", "path": "JS8_Main/Varicode.cpp", "line": 767, "context": { "start_line": 762, "end_line": 772, "lines": [ { "line": 762, "text": " quint32 b = packed & 0xFFFFFFFF;" }, { "line": 763, "text": " return pack32bits(a) + pack32bits(b);" }, { "line": 764, "text": "}" }, { "line": 765, "text": "" }, { "line": 766, "text": "// returns the first 64 bits and sets the last 8 bits in pRem" }, { "line": 767, "text": "quint64 Varicode::unpack72bits(QString const &text, quint8 *pRem) {" }, { "line": 768, "text": " quint64 value = 0;" }, { "line": 769, "text": " quint8 rem = 0;" }, { "line": 770, "text": " quint8 mask2 = ((1 << 2) - 1);" }, { "line": 771, "text": "" }, { "line": 772, "text": " for (int i = 0; i < 10; i++) {" } ] } }, { "name": "unpackDirectedMessage", "path": "JS8_Main/Varicode.cpp", "line": 1716, "context": { "start_line": 1711, "end_line": 1721, "lines": [ { "line": 1711, "text": " if (n)" }, { "line": 1712, "text": " *n = match.captured(0).length();" }, { "line": 1713, "text": " return Varicode::pack72bits(Varicode::bitsToInt(bits), packed_extra);" }, { "line": 1714, "text": "}" }, { "line": 1715, "text": "" }, { "line": 1716, "text": "QStringList Varicode::unpackDirectedMessage(const QString &text," }, { "line": 1717, "text": " quint8 *pType) {" }, { "line": 1718, "text": " QStringList unpacked;" }, { "line": 1719, "text": "" }, { "line": 1720, "text": " if (text.length() < 12 || text.contains(\" \")) {" }, { "line": 1721, "text": " return unpacked;" } ] } }, { "name": "packDirectedMessage", "path": "JS8_Main/Varicode.cpp", "line": 1605, "context": { "start_line": 1600, "end_line": 1610, "lines": [ { "line": 1600, "text": "" }, { "line": 1601, "text": "// J1Y ACK" }, { "line": 1602, "text": "// J1Y?" }, { "line": 1603, "text": "// KN4CRD: J1Y$" }, { "line": 1604, "text": "// KN4CRD: J1Y! HELLO WORLD" }, { "line": 1605, "text": "QString Varicode::packDirectedMessage(const QString &text," }, { "line": 1606, "text": " const QString &mycall, QString *pTo," }, { "line": 1607, "text": " bool *pToCompound, QString *pCmd," }, { "line": 1608, "text": " QString *pNum, int *n) {" }, { "line": 1609, "text": " QString frame;" }, { "line": 1610, "text": "" } ] } }, { "name": "unpackCompoundFrame", "path": "JS8_Main/Varicode.cpp", "line": 1420, "context": { "start_line": 1415, "end_line": 1425, "lines": [ { "line": 1415, "text": " bool *isAlt, quint8 *pBits3) {" }, { "line": 1416, "text": " quint8 type = Varicode::FrameHeartbeat;" }, { "line": 1417, "text": " quint16 num = nmaxgrid;" }, { "line": 1418, "text": " quint8 bits3 = 0;" }, { "line": 1419, "text": "" }, { "line": 1420, "text": " QStringList unpacked = unpackCompoundFrame(text, &type, &num, &bits3);" }, { "line": 1421, "text": " if (unpacked.isEmpty() || type != Varicode::FrameHeartbeat) {" }, { "line": 1422, "text": " return QStringList{};" }, { "line": 1423, "text": " }" }, { "line": 1424, "text": "" }, { "line": 1425, "text": " unpacked.append(Varicode::unpackGrid(num & ((1 << 15) - 1)));" } ] } }, { "name": "packCompoundFrame", "path": "JS8_Main/Varicode.cpp", "line": 1401, "context": { "start_line": 1396, "end_line": 1406, "lines": [ { "line": 1396, "text": " if (isAlt) {" }, { "line": 1397, "text": " packed_extra |= (1 << 15);" }, { "line": 1398, "text": " cqNumber = cqs.key(type, 0);" }, { "line": 1399, "text": " }" }, { "line": 1400, "text": "" }, { "line": 1401, "text": " frame = packCompoundFrame(callsign, Varicode::FrameHeartbeat, packed_extra," }, { "line": 1402, "text": " cqNumber);" }, { "line": 1403, "text": " if (frame.isEmpty()) {" }, { "line": 1404, "text": " if (n)" }, { "line": 1405, "text": " *n = 0;" }, { "line": 1406, "text": " return frame;" } ] } }, { "name": "unpackCompoundMessage", "path": "JS8_Main/Varicode.cpp", "line": 1491, "context": { "start_line": 1486, "end_line": 1496, "lines": [ { "line": 1486, "text": " if (n)" }, { "line": 1487, "text": " *n = parsedText.captured(0).length();" }, { "line": 1488, "text": " return frame;" }, { "line": 1489, "text": "}" }, { "line": 1490, "text": "" }, { "line": 1491, "text": "QStringList Varicode::unpackCompoundMessage(const QString &text, quint8 *pType," }, { "line": 1492, "text": " quint8 *pBits3) {" }, { "line": 1493, "text": " quint8 type = Varicode::FrameCompound;" }, { "line": 1494, "text": " quint16 extra = nmaxgrid;" }, { "line": 1495, "text": " quint8 bits3 = 0;" }, { "line": 1496, "text": "" } ] } }, { "name": "unpackHeartbeatMessage", "path": "JS8_Main/Varicode.cpp", "line": 1414, "context": { "start_line": 1409, "end_line": 1419, "lines": [ { "line": 1409, "text": " if (n)" }, { "line": 1410, "text": " *n = parsedText.captured(0).length();" }, { "line": 1411, "text": " return frame;" }, { "line": 1412, "text": "}" }, { "line": 1413, "text": "" }, { "line": 1414, "text": "QStringList Varicode::unpackHeartbeatMessage(const QString &text, quint8 *pType," }, { "line": 1415, "text": " bool *isAlt, quint8 *pBits3) {" }, { "line": 1416, "text": " quint8 type = Varicode::FrameHeartbeat;" }, { "line": 1417, "text": " quint16 num = nmaxgrid;" }, { "line": 1418, "text": " quint8 bits3 = 0;" }, { "line": 1419, "text": "" } ] } }, { "name": "unpackDataMessage", "path": "JS8_Main/Varicode.cpp", "line": 1912, "context": { "start_line": 1907, "end_line": 1917, "lines": [ { "line": 1907, "text": "}" }, { "line": 1908, "text": "" }, { "line": 1909, "text": "// TODO: DEPRECATED in 2.2 (still available for decoding legacy frames, but will" }, { "line": 1910, "text": "// eventually no longer be decodable) unpack data message using 70 bits" }, { "line": 1911, "text": "// available flagged as data by the first 2 bits" }, { "line": 1912, "text": "QString Varicode::unpackDataMessage(const QString &text) {" }, { "line": 1913, "text": " QString unpacked;" }, { "line": 1914, "text": "" }, { "line": 1915, "text": " if (text.length() < 12 || text.contains(\" \")) {" }, { "line": 1916, "text": " return unpacked;" }, { "line": 1917, "text": " }" } ] } }, { "name": "unpackFastDataMessage", "path": "JS8_Main/Varicode.cpp", "line": 1983, "context": { "start_line": 1978, "end_line": 1988, "lines": [ { "line": 1978, "text": "#endif" }, { "line": 1979, "text": "}" }, { "line": 1980, "text": "" }, { "line": 1981, "text": "// unpack data message using the full 72 bits available (with the data flag in" }, { "line": 1982, "text": "// the i3bit header)" }, { "line": 1983, "text": "QString Varicode::unpackFastDataMessage(const QString &text) {" }, { "line": 1984, "text": " QString unpacked;" }, { "line": 1985, "text": "" }, { "line": 1986, "text": " if (text.length() < 12 || text.contains(\" \")) {" }, { "line": 1987, "text": " return unpacked;" }, { "line": 1988, "text": " }" } ] } }, { "name": "unpackCallsign", "path": "JS8_Main/Varicode.cpp", "line": 1037, "context": { "start_line": 1032, "end_line": 1042, "lines": [ { "line": 1032, "text": " packed = 27 * packed + alphanumeric.indexOf(matched.at(5)) - 10;" }, { "line": 1033, "text": "" }, { "line": 1034, "text": " return packed;" }, { "line": 1035, "text": "}" }, { "line": 1036, "text": "" }, { "line": 1037, "text": "QString Varicode::unpackCallsign(quint32 value, bool portable) {" }, { "line": 1038, "text": " foreach (auto key, basecalls.keys()) {" }, { "line": 1039, "text": " if (basecalls[key] == value) {" }, { "line": 1040, "text": " return key;" }, { "line": 1041, "text": " }" }, { "line": 1042, "text": " }" } ] } }, { "name": "unpackAlphaNumeric50", "path": "JS8_Main/Varicode.cpp", "line": 905, "context": { "start_line": 900, "end_line": 910, "lines": [ { "line": 900, "text": " quint64 packed = a + b + c + d + e + f + g + h + i + j + k;" }, { "line": 901, "text": "" }, { "line": 902, "text": " return packed;" }, { "line": 903, "text": "}" }, { "line": 904, "text": "" }, { "line": 905, "text": "QString Varicode::unpackAlphaNumeric50(quint64 packed) {" }, { "line": 906, "text": " QChar word[11];" }, { "line": 907, "text": "" }, { "line": 908, "text": " quint64 tmp = packed % 38;" }, { "line": 909, "text": " word[10] = alphanumeric.at(tmp);" }, { "line": 910, "text": " packed = packed / 38;" } ] } }, { "name": "unpackGrid", "path": "JS8_Main/Varicode.cpp", "line": 1157, "context": { "start_line": 1152, "end_line": 1162, "lines": [ { "line": 1152, "text": " int ilat = pair.second + 90;" }, { "line": 1153, "text": "" }, { "line": 1154, "text": " return ((ilong + 180) / 2) * 180 + ilat;" }, { "line": 1155, "text": "}" }, { "line": 1156, "text": "" }, { "line": 1157, "text": "QString Varicode::unpackGrid(quint16 value) {" }, { "line": 1158, "text": " if (value > nbasegrid) {" }, { "line": 1159, "text": " return \"\";" }, { "line": 1160, "text": " }" }, { "line": 1161, "text": "" }, { "line": 1162, "text": " float dlat = value % 180 - 90;" } ] } }, { "name": "unpackCmd", "path": "JS8_Main/Varicode.cpp", "line": 1207, "context": { "start_line": 1202, "end_line": 1212, "lines": [ { "line": 1202, "text": " }" }, { "line": 1203, "text": "" }, { "line": 1204, "text": " return value;" }, { "line": 1205, "text": "}" }, { "line": 1206, "text": "" }, { "line": 1207, "text": "quint8 Varicode::unpackCmd(quint8 value, quint8 *pNum) {" }, { "line": 1208, "text": " // if the first bit is 1, this is an SNR with a number encoded in the lower" }, { "line": 1209, "text": " // 6 bits" }, { "line": 1210, "text": " if (value & (1 << 7)) {" }, { "line": 1211, "text": " if (pNum)" }, { "line": 1212, "text": " *pNum = value & ((1 << 6) - 1);" } ] } }, { "name": "huffDecode", "path": "JS8_Main/Varicode.cpp", "line": 597, "context": { "start_line": 592, "end_line": 602, "lines": [ { "line": 592, "text": " }" }, { "line": 593, "text": "" }, { "line": 594, "text": " return out;" }, { "line": 595, "text": "}" }, { "line": 596, "text": "" }, { "line": 597, "text": "QString Varicode::huffDecode(QMap const &huff," }, { "line": 598, "text": " QVector const &bitvec) {" }, { "line": 599, "text": " QString text;" }, { "line": 600, "text": "" }, { "line": 601, "text": " QString bits = Varicode::bitsToStr(bitvec);" }, { "line": 602, "text": "" } ] } }, { "name": "JSC::decompress", "path": "JS8_Main/Varicode.cpp", "line": 1938, "context": { "start_line": 1933, "end_line": 1943, "lines": [ { "line": 1933, "text": " // trim off the pad bits" }, { "line": 1934, "text": " bits = bits.mid(1, n - 1);" }, { "line": 1935, "text": "" }, { "line": 1936, "text": " if (compressed) {" }, { "line": 1937, "text": " // partial word (s,c)-dense coding with code tables" }, { "line": 1938, "text": " unpacked = JSC::decompress(bits);" }, { "line": 1939, "text": " } else {" }, { "line": 1940, "text": " // huff decode the bits (without escapes)" }, { "line": 1941, "text": " unpacked = Varicode::huffDecode(Varicode::defaultHuffTable(), bits);" }, { "line": 1942, "text": " }" }, { "line": 1943, "text": "" } ] } }, { "name": "unpack72bits", "path": "JS8_Main/Varicode.h", "line": 135, "context": { "start_line": 130, "end_line": 140, "lines": [ { "line": 130, "text": " static QString pack32bits(quint32 packed);" }, { "line": 131, "text": "" }, { "line": 132, "text": " static quint64 unpack64bits(QString const &value);" }, { "line": 133, "text": " static QString pack64bits(quint64 packed);" }, { "line": 134, "text": "" }, { "line": 135, "text": " static quint64 unpack72bits(QString const &value, quint8 *pRem);" }, { "line": 136, "text": " static QString pack72bits(quint64 value, quint8 rem);" }, { "line": 137, "text": "" }, { "line": 138, "text": " static quint32 packAlphaNumeric22(QString const &value, bool isFlag);" }, { "line": 139, "text": " static QString unpackAlphaNumeric22(quint32 packed, bool *isFlag);" }, { "line": 140, "text": "" } ] } }, { "name": "pack72bits", "path": "JS8_Main/Varicode.h", "line": 135, "context": { "start_line": 130, "end_line": 140, "lines": [ { "line": 130, "text": " static QString pack32bits(quint32 packed);" }, { "line": 131, "text": "" }, { "line": 132, "text": " static quint64 unpack64bits(QString const &value);" }, { "line": 133, "text": " static QString pack64bits(quint64 packed);" }, { "line": 134, "text": "" }, { "line": 135, "text": " static quint64 unpack72bits(QString const &value, quint8 *pRem);" }, { "line": 136, "text": " static QString pack72bits(quint64 value, quint8 rem);" }, { "line": 137, "text": "" }, { "line": 138, "text": " static quint32 packAlphaNumeric22(QString const &value, bool isFlag);" }, { "line": 139, "text": " static QString unpackAlphaNumeric22(quint32 packed, bool *isFlag);" }, { "line": 140, "text": "" } ] } }, { "name": "unpackDirectedMessage", "path": "JS8_Main/Varicode.h", "line": 185, "context": { "start_line": 180, "end_line": 190, "lines": [ { "line": 180, "text": "" }, { "line": 181, "text": " static QString packDirectedMessage(QString const &text," }, { "line": 182, "text": " QString const &mycall, QString *pTo," }, { "line": 183, "text": " bool *pToCompound, QString *pCmd," }, { "line": 184, "text": " QString *pNum, int *n);" }, { "line": 185, "text": " static QStringList unpackDirectedMessage(QString const &text," }, { "line": 186, "text": " quint8 *pType);" }, { "line": 187, "text": "" }, { "line": 188, "text": " static QString packDataMessage(QString const &text, int *n);" }, { "line": 189, "text": " static QString unpackDataMessage(QString const &text);" }, { "line": 190, "text": "" } ] } }, { "name": "packDirectedMessage", "path": "JS8_Main/Varicode.h", "line": 181, "context": { "start_line": 176, "end_line": 186, "lines": [ { "line": 176, "text": " static QString packCompoundFrame(const QString &callsign, quint8 type," }, { "line": 177, "text": " quint16 num, quint8 bits3);" }, { "line": 178, "text": " static QStringList unpackCompoundFrame(const QString &text, quint8 *pType," }, { "line": 179, "text": " quint16 *pNum, quint8 *pBits3);" }, { "line": 180, "text": "" }, { "line": 181, "text": " static QString packDirectedMessage(QString const &text," }, { "line": 182, "text": " QString const &mycall, QString *pTo," }, { "line": 183, "text": " bool *pToCompound, QString *pCmd," }, { "line": 184, "text": " QString *pNum, int *n);" }, { "line": 185, "text": " static QStringList unpackDirectedMessage(QString const &text," }, { "line": 186, "text": " quint8 *pType);" } ] } }, { "name": "unpackCompoundFrame", "path": "JS8_Main/Varicode.h", "line": 178, "context": { "start_line": 173, "end_line": 183, "lines": [ { "line": 173, "text": " static QStringList unpackCompoundMessage(const QString &text, quint8 *pType," }, { "line": 174, "text": " quint8 *pBits3);" }, { "line": 175, "text": "" }, { "line": 176, "text": " static QString packCompoundFrame(const QString &callsign, quint8 type," }, { "line": 177, "text": " quint16 num, quint8 bits3);" }, { "line": 178, "text": " static QStringList unpackCompoundFrame(const QString &text, quint8 *pType," }, { "line": 179, "text": " quint16 *pNum, quint8 *pBits3);" }, { "line": 180, "text": "" }, { "line": 181, "text": " static QString packDirectedMessage(QString const &text," }, { "line": 182, "text": " QString const &mycall, QString *pTo," }, { "line": 183, "text": " bool *pToCompound, QString *pCmd," } ] } }, { "name": "packCompoundFrame", "path": "JS8_Main/Varicode.h", "line": 176, "context": { "start_line": 171, "end_line": 181, "lines": [ { "line": 171, "text": "" }, { "line": 172, "text": " static QString packCompoundMessage(QString const &text, int *n);" }, { "line": 173, "text": " static QStringList unpackCompoundMessage(const QString &text, quint8 *pType," }, { "line": 174, "text": " quint8 *pBits3);" }, { "line": 175, "text": "" }, { "line": 176, "text": " static QString packCompoundFrame(const QString &callsign, quint8 type," }, { "line": 177, "text": " quint16 num, quint8 bits3);" }, { "line": 178, "text": " static QStringList unpackCompoundFrame(const QString &text, quint8 *pType," }, { "line": 179, "text": " quint16 *pNum, quint8 *pBits3);" }, { "line": 180, "text": "" }, { "line": 181, "text": " static QString packDirectedMessage(QString const &text," } ] } }, { "name": "unpackCompoundMessage", "path": "JS8_Main/Varicode.h", "line": 173, "context": { "start_line": 168, "end_line": 178, "lines": [ { "line": 168, "text": " static QStringList unpackHeartbeatMessage(const QString &text," }, { "line": 169, "text": " quint8 *pType, bool *isAlt," }, { "line": 170, "text": " quint8 *pBits3);" }, { "line": 171, "text": "" }, { "line": 172, "text": " static QString packCompoundMessage(QString const &text, int *n);" }, { "line": 173, "text": " static QStringList unpackCompoundMessage(const QString &text, quint8 *pType," }, { "line": 174, "text": " quint8 *pBits3);" }, { "line": 175, "text": "" }, { "line": 176, "text": " static QString packCompoundFrame(const QString &callsign, quint8 type," }, { "line": 177, "text": " quint16 num, quint8 bits3);" }, { "line": 178, "text": " static QStringList unpackCompoundFrame(const QString &text, quint8 *pType," } ] } }, { "name": "unpackHeartbeatMessage", "path": "JS8_Main/Varicode.h", "line": 168, "context": { "start_line": 163, "end_line": 173, "lines": [ { "line": 163, "text": " static bool isCompoundCallsign(const QString &callsign);" }, { "line": 164, "text": " static bool isGroupAllowed(const QString &group);" }, { "line": 165, "text": "" }, { "line": 166, "text": " static QString packHeartbeatMessage(QString const &text," }, { "line": 167, "text": " QString const &callsign, int *n);" }, { "line": 168, "text": " static QStringList unpackHeartbeatMessage(const QString &text," }, { "line": 169, "text": " quint8 *pType, bool *isAlt," }, { "line": 170, "text": " quint8 *pBits3);" }, { "line": 171, "text": "" }, { "line": 172, "text": " static QString packCompoundMessage(QString const &text, int *n);" }, { "line": 173, "text": " static QStringList unpackCompoundMessage(const QString &text, quint8 *pType," } ] } }, { "name": "unpackDataMessage", "path": "JS8_Main/Varicode.h", "line": 189, "context": { "start_line": 184, "end_line": 194, "lines": [ { "line": 184, "text": " QString *pNum, int *n);" }, { "line": 185, "text": " static QStringList unpackDirectedMessage(QString const &text," }, { "line": 186, "text": " quint8 *pType);" }, { "line": 187, "text": "" }, { "line": 188, "text": " static QString packDataMessage(QString const &text, int *n);" }, { "line": 189, "text": " static QString unpackDataMessage(QString const &text);" }, { "line": 190, "text": "" }, { "line": 191, "text": " static QString packFastDataMessage(QString const &text, int *n);" }, { "line": 192, "text": " static QString unpackFastDataMessage(QString const &text);" }, { "line": 193, "text": "" }, { "line": 194, "text": " static QList>" } ] } }, { "name": "unpackFastDataMessage", "path": "JS8_Main/Varicode.h", "line": 192, "context": { "start_line": 187, "end_line": 197, "lines": [ { "line": 187, "text": "" }, { "line": 188, "text": " static QString packDataMessage(QString const &text, int *n);" }, { "line": 189, "text": " static QString unpackDataMessage(QString const &text);" }, { "line": 190, "text": "" }, { "line": 191, "text": " static QString packFastDataMessage(QString const &text, int *n);" }, { "line": 192, "text": " static QString unpackFastDataMessage(QString const &text);" }, { "line": 193, "text": "" }, { "line": 194, "text": " static QList>" }, { "line": 195, "text": " buildMessageFrames(QString const &mycall, QString const &mygrid," }, { "line": 196, "text": " QString const &selectedCall, QString const &text," }, { "line": 197, "text": " bool forceIdentify, bool forceData, int submode," } ] } }, { "name": "unpackCallsign", "path": "JS8_Main/Varicode.h", "line": 145, "context": { "start_line": 140, "end_line": 150, "lines": [ { "line": 140, "text": "" }, { "line": 141, "text": " static quint64 packAlphaNumeric50(QString const &value);" }, { "line": 142, "text": " static QString unpackAlphaNumeric50(quint64 packed);" }, { "line": 143, "text": "" }, { "line": 144, "text": " static quint32 packCallsign(QString const &value, bool *pPortable);" }, { "line": 145, "text": " static QString unpackCallsign(quint32 value, bool portable);" }, { "line": 146, "text": "" }, { "line": 147, "text": " static QString deg2grid(float dlong, float dlat);" }, { "line": 148, "text": " static QPair grid2deg(QString const &grid);" }, { "line": 149, "text": " static quint16 packGrid(QString const &value);" }, { "line": 150, "text": " static QString unpackGrid(quint16 value);" } ] } }, { "name": "unpackAlphaNumeric50", "path": "JS8_Main/Varicode.h", "line": 142, "context": { "start_line": 137, "end_line": 147, "lines": [ { "line": 137, "text": "" }, { "line": 138, "text": " static quint32 packAlphaNumeric22(QString const &value, bool isFlag);" }, { "line": 139, "text": " static QString unpackAlphaNumeric22(quint32 packed, bool *isFlag);" }, { "line": 140, "text": "" }, { "line": 141, "text": " static quint64 packAlphaNumeric50(QString const &value);" }, { "line": 142, "text": " static QString unpackAlphaNumeric50(quint64 packed);" }, { "line": 143, "text": "" }, { "line": 144, "text": " static quint32 packCallsign(QString const &value, bool *pPortable);" }, { "line": 145, "text": " static QString unpackCallsign(quint32 value, bool portable);" }, { "line": 146, "text": "" }, { "line": 147, "text": " static QString deg2grid(float dlong, float dlat);" } ] } }, { "name": "unpackGrid", "path": "JS8_Main/Varicode.h", "line": 150, "context": { "start_line": 145, "end_line": 155, "lines": [ { "line": 145, "text": " static QString unpackCallsign(quint32 value, bool portable);" }, { "line": 146, "text": "" }, { "line": 147, "text": " static QString deg2grid(float dlong, float dlat);" }, { "line": 148, "text": " static QPair grid2deg(QString const &grid);" }, { "line": 149, "text": " static quint16 packGrid(QString const &value);" }, { "line": 150, "text": " static QString unpackGrid(quint16 value);" }, { "line": 151, "text": "" }, { "line": 152, "text": " static quint8 packNum(QString const &num, bool *ok);" }, { "line": 153, "text": " static quint8 packPwr(QString const &pwr, bool *ok);" }, { "line": 154, "text": " static quint8 packCmd(quint8 cmd, quint8 num, bool *pPackedNum);" }, { "line": 155, "text": " static quint8 unpackCmd(quint8 value, quint8 *pNum);" } ] } }, { "name": "unpackCmd", "path": "JS8_Main/Varicode.h", "line": 155, "context": { "start_line": 150, "end_line": 160, "lines": [ { "line": 150, "text": " static QString unpackGrid(quint16 value);" }, { "line": 151, "text": "" }, { "line": 152, "text": " static quint8 packNum(QString const &num, bool *ok);" }, { "line": 153, "text": " static quint8 packPwr(QString const &pwr, bool *ok);" }, { "line": 154, "text": " static quint8 packCmd(quint8 cmd, quint8 num, bool *pPackedNum);" }, { "line": 155, "text": " static quint8 unpackCmd(quint8 value, quint8 *pNum);" }, { "line": 156, "text": "" }, { "line": 157, "text": " static bool isSNRCommand(const QString &cmd);" }, { "line": 158, "text": " static bool isCommandAllowed(const QString &cmd);" }, { "line": 159, "text": " static bool isCommandBuffered(const QString &cmd);" }, { "line": 160, "text": " static int isCommandChecksumed(const QString &cmd);" } ] } }, { "name": "huffDecode", "path": "JS8_Main/Varicode.h", "line": 107, "context": { "start_line": 102, "end_line": 112, "lines": [ { "line": 102, "text": " static QStringList parseCallsigns(QString const &input);" }, { "line": 103, "text": " static QStringList parseGrids(QString const &input);" }, { "line": 104, "text": "" }, { "line": 105, "text": " static QList>>" }, { "line": 106, "text": " huffEncode(const QMap &huff, QString const &text);" }, { "line": 107, "text": " static QString huffDecode(const QMap &huff," }, { "line": 108, "text": " QVector const &bitvec);" }, { "line": 109, "text": " static QSet huffValidChars(const QMap &huff);" }, { "line": 110, "text": "" }, { "line": 111, "text": " static QVector bytesToBits(char *bitvec, int n);" }, { "line": 112, "text": " static QVector strToBits(QString const &bitvec);" } ] } }, { "name": "JSC::decompress", "path": "JS8_JSC/JSC.cpp", "line": 127, "context": { "start_line": 122, "end_line": 132, "lines": [ { "line": 122, "text": " * @brief Decompresses the given bit vector into a string." }, { "line": 123, "text": " *" }, { "line": 124, "text": " * @param bitvec" }, { "line": 125, "text": " * @return QString" }, { "line": 126, "text": " */" }, { "line": 127, "text": "QString JSC::decompress(Codeword const &bitvec) {" }, { "line": 128, "text": " const quint32 b = 4;" }, { "line": 129, "text": " const quint32 s = 7;" }, { "line": 130, "text": " const quint32 c = pow(2, b) - s;" }, { "line": 131, "text": "" }, { "line": 132, "text": " QStringList out;" } ] } } ] }, "source_contract": { "message174_alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "alphabet72": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+/?.", "frame_types": { "0": "FrameHeartbeat", "1": "FrameCompound", "2": "FrameCompoundDirected", "3": "FrameDirected", "4": "FrameData", "5": "FrameData", "6": "FrameDataCompressed", "7": "FrameDataCompressed" }, "implemented_rx_unpack": [ "unpack72bits", "frame_type", "directed", "heartbeat", "compound", "callsign", "grid", "legacy_huff_data_probe" ], "not_yet_ported": [ "JSC::decompress full compressed text", "multi-frame buffer assembly", "WebFTR live integration" ] }, "input_decode_count": 2, "frame_probe_count": 2, "webftr_display_count": 0, "hidden_candidate_count": 2, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "webftr_rx_rows": [], "candidate_rows": [ { "id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "001XqOA2iDZ0", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 107552465662168, "value_hex": "0x000061d18282b0d8", "rem": 192, "top3": 0, "top2": 0, "first_16_bits": "0000000000000000" }, "frame_type": "FrameHeartbeat", "frame_type_bits": 0, "displayable_after_frame_unpack": false, "frame_fields": { "packed_type": 0, "callsign": "004REY/0V4", "packed_callsign": 52515852374, "packed_num": 6936, "bits3": 0, "valid_callsign_hint": true, "kind": "heartbeat_or_cq", "is_cq_alt": false, "grid": "OJ16", "message_token": "HB", "valid_grid_hint": true }, "plausibility": { "score": 6, "reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "HB 004REY/0V4 OJ16" }, "show_in_rx_list": false, "display_text": "HB 004REY/0V4 OJ16", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 0 }, { "id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "Q0VsKWqfJ96x", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 7496230937050041489, "value_hex": "0x6807f6520d294c91", "rem": 187, "top3": 3, "top2": 1, "first_16_bits": "0110100000000111" }, "frame_type": "FrameDirected", "frame_type_bits": 3, "displayable_after_frame_unpack": false, "frame_fields": { "from": "9I2TZR/P", "to": "0Z0PMP", "cmd_id": 17, "cmd": " INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "portable_from": true, "portable_to": false, "valid_from_hint": true, "valid_to_hint": true }, "plausibility": { "score": 10, "reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "9I2TZR/P 0Z0PMP INFO 28" }, "show_in_rx_list": false, "display_text": "9I2TZR/P 0Z0PMP INFO 28", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 1 } ], "suppressed_candidates": [ { "id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "001XqOA2iDZ0", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 107552465662168, "value_hex": "0x000061d18282b0d8", "rem": 192, "top3": 0, "top2": 0, "first_16_bits": "0000000000000000" }, "frame_type": "FrameHeartbeat", "frame_type_bits": 0, "displayable_after_frame_unpack": false, "frame_fields": { "packed_type": 0, "callsign": "004REY/0V4", "packed_callsign": 52515852374, "packed_num": 6936, "bits3": 0, "valid_callsign_hint": true, "kind": "heartbeat_or_cq", "is_cq_alt": false, "grid": "OJ16", "message_token": "HB", "valid_grid_hint": true }, "plausibility": { "score": 6, "reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "HB 004REY/0V4 OJ16" }, "show_in_rx_list": false, "display_text": "HB 004REY/0V4 OJ16", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 0 }, { "id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "Q0VsKWqfJ96x", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 7496230937050041489, "value_hex": "0x6807f6520d294c91", "rem": 187, "top3": 3, "top2": 1, "first_16_bits": "0110100000000111" }, "frame_type": "FrameDirected", "frame_type_bits": 3, "displayable_after_frame_unpack": false, "frame_fields": { "from": "9I2TZR/P", "to": "0Z0PMP", "cmd_id": 17, "cmd": " INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "portable_from": true, "portable_to": false, "valid_from_hint": true, "valid_to_hint": true }, "plausibility": { "score": 10, "reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "9I2TZR/P 0Z0PMP INFO 28" }, "show_in_rx_list": false, "display_text": "9I2TZR/P 0Z0PMP INFO 28", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 1 } ], "verdict": "source_varicode_frames_classified_but_not_displayable", "warnings": [ "Step66 is still RX-only diagnostics. It classifies message174 text as JS8 Varicode frame families but does not start JS8Call GUI/Qt.", "Rows remain hidden unless callsign/grid/command/text plausibility survives source-style frame unpacking.", "Compressed Data frames still require a later JSC::decompress port before real JS8 chat text can be displayed." ], "next_action": "If frame types look plausible but hidden, port JSC::decompress and multi-frame assembly next; if a display row appears, wire webftr_rx_rows into the JS8 RX UI contract." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json [webftr-js8-lab] JSON timeout guard: 60s { "ok": true, "tool": "webftr-js8-source-confirmed-control-frame-rx-release", "tool_version": "step67-source-confirmed-control-frame-rx-release", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "input_reports": [ { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "exists": true, "selected_input": true, "input_kind": "step66_source_varicode_frame_unpack_probe" } ], "source_step66_version": "step66-source-varicode-frame-unpack-probe", "source_frame_probe_count": 2, "source_webftr_display_count_before_release": 0, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "release_contract": { "allowed_to_display": [ "FrameCompound", "FrameCompoundDirected", "FrameDirected", "FrameHeartbeat" ], "blocked_until_future_steps": [ "FrameData", "FrameDataCompressed" ], "minimum_conditions": [ "valid_message174_crc12 == true", "crc12_distance == 0", "source Varicode frame unpack produced a supported fixed control frame", "frame_display_candidate == true" ], "data_text_rule": "FrameData and FrameDataCompressed stay hidden until JSC::decompress/multi-frame assembly is ported and tested." }, "input_candidate_count": 2, "webftr_display_count": 2, "hidden_candidate_count": 0, "webftr_rx_rows": [ { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true }, { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } ], "candidate_rows": [ { "id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "001XqOA2iDZ0", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 107552465662168, "value_hex": "0x000061d18282b0d8", "rem": 192, "top3": 0, "top2": 0, "first_16_bits": "0000000000000000" }, "frame_type": "FrameHeartbeat", "frame_type_bits": 0, "displayable_after_frame_unpack": false, "frame_fields": { "packed_type": 0, "callsign": "004REY/0V4", "packed_callsign": 52515852374, "packed_num": 6936, "bits3": 0, "valid_callsign_hint": true, "kind": "heartbeat_or_cq", "is_cq_alt": false, "grid": "OJ16", "message_token": "HB", "valid_grid_hint": true }, "plausibility": { "score": 6, "reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "HB 004REY/0V4 OJ16" }, "show_in_rx_list": false, "display_text": "HB 004REY/0V4 OJ16", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 0 }, { "id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "frame_probe": { "message_text_12chars": "Q0VsKWqfJ96x", "length": 12, "source_alphabet72_compatible": true, "ok": true, "unpack72": { "value": 7496230937050041489, "value_hex": "0x6807f6520d294c91", "rem": 187, "top3": 3, "top2": 1, "first_16_bits": "0110100000000111" }, "frame_type": "FrameDirected", "frame_type_bits": 3, "displayable_after_frame_unpack": false, "frame_fields": { "from": "9I2TZR/P", "to": "0Z0PMP", "cmd_id": 17, "cmd": " INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "portable_from": true, "portable_to": false, "valid_from_hint": true, "valid_to_hint": true }, "plausibility": { "score": 10, "reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ] }, "frame_display_candidate": true, "display_guard_reason": "step66_annotation_only_pending_jsc_or_multiframe_text_confirmation", "candidate_class": "source_varicode_frame_candidate_guarded", "display_text_hint": "9I2TZR/P 0Z0PMP INFO 28" }, "show_in_rx_list": false, "display_text": "9I2TZR/P 0Z0PMP INFO 28", "candidate_class": "source_varicode_frame_candidate_guarded", "sort_index": 1 } ], "suppressed_candidates": [], "release_decisions": [ { "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "raw_message174": "001XqOA2iDZ0", "frame_type": "FrameHeartbeat", "decision": "released_source_confirmed_control_frame", "sort_index": 0, "released_row_id": "js8-rx67-de15d3110b0d" }, { "source_candidate_id": "js8-frame66-66ab29ded46c", "raw_message174": "Q0VsKWqfJ96x", "frame_type": "FrameDirected", "decision": "released_source_confirmed_control_frame", "sort_index": 1, "released_row_id": "js8-rx67-bd37f68199eb" } ], "verdict": "source_confirmed_control_frames_ready_for_webftr_rx_rows", "warnings": [ "Step67 is still RX-only and does not start JS8Call GUI/Qt.", "Only source-confirmed fixed control frames such as Heartbeat/Directed/Compound are released to webftr_rx_rows.", "Free-text Data/Compressed frames remain blocked until JSC::decompress and multi-frame assembly are source-ported and tested." ], "next_action": "Wire these guarded webftr_rx_rows into the JS8 RX display contract, then continue with JSC::decompress/multi-frame assembly for real JS8 chat text." } ========== STEP85 3/4: WINDOW RESULT MANIFEST ========== { "ok": true, "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav", "plan_json": "/decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_window_plan_output.json", "windows": [ { "window_index": 0, "window_id": "step85-window-00", "start_seconds": 0.0, "end_seconds": 15.0, "selection_score": -39.0763, "window_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "candidate_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "post_ldpc_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "source_exact_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "message174_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "varicode_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "rx_release_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json", "exit_codes": { "candidate_export": 0, "post_ldpc_info87_runtime_export": 0, "source_exact_map_probe": 0, "source_confirmed_message174_decode": 0, "source_varicode_frame_unpack_probe": 0, "source_confirmed_control_frame_rx_release": 0 } } ] } ========== STEP85 4/4: WIDE SEARCH SUMMARY ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_data_frame_search_output.json [webftr-js8-lab] JSON timeout guard: 180s [webftr-js8-lab] stderr log: /decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_data_frame_search_output.stderr.log /decoders/js8_decoder/src/webftr_js8_lab/js8_real_wav_wide_data_frame_search.py:4: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop { "ok": true, "tool": "webftr-js8-real-wav-wide-data-frame-search", "tool_version": "step85-real-wav-wide-data-frame-search", "schema": "webftr-js8-real-wav-wide-data-frame-search-v1", "created_utc": "2026-05-28T09:13:45Z", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "purpose": "Run a bounded multi-window real-WAV search for JS8 Data/FrameDataCompressed candidates while keeping chat/free-text release blocked.", "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav", "plan_json": "/decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_window_plan_output.json", "window_result_manifest_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window_results_manifest.json", "wav_was_read": true, "planned_window_count": 1, "tested_window_count": 1, "scan_params": { "window_seconds": 54.0, "hop_seconds": 12.0, "max_seconds": 240.0, "max_windows": 3, "min_gap_seconds": 30.0, "output_dir": "/decoders/js8_decoder/runtime/step85_wide_windows" }, "runtime_info87_rows_count": 48, "source_exact_zero_distance_candidate_count": 16, "message174_decode_count": 2, "frame_probe_count": 2, "control_frame_release_count": 2, "webftr_display_count": 2, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "data_frame_candidate_count": 0, "compressed_data_frame_candidate_count": 0, "webftr_rx_rows_preview": [ { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true }, { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } ], "per_window_summaries": [ { "window_index": 0, "window_id": "step85-window-00", "window_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "start_seconds": 0.0, "end_seconds": 15.0, "selection_score": -39.0763, "exit_codes": { "candidate_export": 0, "post_ldpc_info87_runtime_export": 0, "source_exact_map_probe": 0, "source_confirmed_message174_decode": 0, "source_varicode_frame_unpack_probe": 0, "source_confirmed_control_frame_rx_release": 0 }, "runtime_info87_rows_count": 48, "source_exact_zero_distance_candidate_count": 16, "message174_decode_count": 2, "frame_probe_count": 2, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "control_frame_release_count": 2, "webftr_display_count": 2, "webftr_rx_rows_preview": [ { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true }, { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } ], "outputs": { "candidate_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "post_ldpc_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "source_exact_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "message174_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "varicode_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "rx_release_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json" } } ], "output_stats_preview": [ { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "exists": true, "is_file": true, "size": 76395, "mtime_utc": "2026-05-28T09:12:36Z" } }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "exists": true, "is_file": true, "size": 99742, "mtime_utc": "2026-05-28T09:13:41Z" } }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "exists": true, "is_file": true, "size": 158166, "mtime_utc": "2026-05-28T09:13:44Z" } }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "exists": true, "is_file": true, "size": 8022, "mtime_utc": "2026-05-28T09:13:44Z" } }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "exists": true, "is_file": true, "size": 60579, "mtime_utc": "2026-05-28T09:13:45Z" } }, { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json", "stat": { "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json", "exists": true, "is_file": true, "size": 9856, "mtime_utc": "2026-05-28T09:13:45Z" } } ], "verdict": "step85_real_wav_wide_search_control_frames_only", "warnings": [ "Step85 searches multiple real-WAV windows for FrameData/FrameDataCompressed candidates; it still does not release free-text chat rows.", "Only source-confirmed fixed control frames remain eligible for WebFTR display unless a later external fixture/release gate validates compressed text." ], "notes": [ "This step follows the user's observation that fast JSON/source-only passes were no longer exercising the real JS8 WAV enough.", "A compressed_data_frame_candidate_count above zero is the desired trigger for the next guarded JSC/text validation step." ], "next_action": "If compressed_data_frame_candidate_count stays 0, capture or provide a real JS8Call/RF FrameDataCompressed fixture; if it becomes >0, feed those rows into the Step79 release gate without productive WebFTR chat release.", "latest_previous_contracts": { "step84_real_wav_message174_regeneration": "/decoders/js8_decoder/logs/js8_real_wav_message174_regeneration_latest.json", "step79_compressed_text_release_gate": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json" } } [webftr-js8-lab] step85 summary exit_code=0 [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T091124Z_real-wav-wide-data-frame-search.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T091124Z_real-wav-wide-data-frame-search_manifest.json [webftr-js8-lab] nested Step85 exit_code=0 ========== STEP86 2/2: UNIQUE FRAME CENSUS / DEDUP ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T091124Z_real_wav_unique_frame_census_output.json [webftr-js8-lab] JSON timeout guard: 60s { "ok": true, "tool": "webftr-js8-real-wav-unique-frame-census", "tool_version": "step86-real-wav-unique-frame-census", "schema": "webftr-js8-real-wav-unique-frame-census-v1", "created_utc": "2026-05-28T09:13:47Z", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "purpose": "Deduplicate Step85 real-WAV multi-window results and separate repeated control-frame evidence from true Data/FrameDataCompressed discoveries.", "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav", "source_step85_json": "/decoders/js8_decoder/logs/js8_real_wav_wide_data_frame_search_latest.json", "source_step85_stat": { "path": "/decoders/js8_decoder/logs/js8_real_wav_wide_data_frame_search_latest.json", "exists": true, "is_file": true, "size": 12676, "mtime_utc": "2026-05-28T09:13:46Z" }, "source_step85_verdict": "step85_real_wav_wide_search_control_frames_only", "wav_was_read": true, "planned_window_count": 1, "tested_window_count": 1, "runtime_info87_rows_count": 48, "source_exact_zero_distance_candidate_count": 16, "message174_decode_count": 2, "frame_probe_count": 2, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "data_frame_candidate_count": 0, "compressed_data_frame_candidate_count": 0, "webftr_display_count": 2, "unique_webftr_display_count": 2, "duplicate_control_frame_group_count": 2, "unique_frame_rows": [ { "key": "message174:001XqOA2iDZ0", "raw_message174": "001XqOA2iDZ0", "frame_type": "FrameHeartbeat", "status": "HB", "from": "004REY/0V4", "to": "@HB", "text": "HB 004REY/0V4 OJ16", "valid_message174_crc12": true, "crc12_distance": 0, "seen_count": 2, "windows_seen": [ 0 ], "example_row": { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true } }, { "key": "message174:Q0VsKWqfJ96x", "raw_message174": "Q0VsKWqfJ96x", "frame_type": "FrameDirected", "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "text": "9I2TZR/P 0Z0PMP INFO 28", "valid_message174_crc12": true, "crc12_distance": 0, "seen_count": 2, "windows_seen": [ 0 ], "example_row": { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } } ], "duplicate_frame_rows": [ { "key": "message174:001XqOA2iDZ0", "raw_message174": "001XqOA2iDZ0", "frame_type": "FrameHeartbeat", "status": "HB", "from": "004REY/0V4", "to": "@HB", "text": "HB 004REY/0V4 OJ16", "valid_message174_crc12": true, "crc12_distance": 0, "seen_count": 2, "windows_seen": [ 0 ], "example_row": { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true } }, { "key": "message174:Q0VsKWqfJ96x", "raw_message174": "Q0VsKWqfJ96x", "frame_type": "FrameDirected", "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "text": "9I2TZR/P 0Z0PMP INFO 28", "valid_message174_crc12": true, "crc12_distance": 0, "seen_count": 2, "windows_seen": [ 0 ], "example_row": { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } } ], "per_window_summaries_preview": [ { "window_index": 0, "window_id": "step85-window-00", "window_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav", "start_seconds": 0.0, "end_seconds": 15.0, "selection_score": -39.0763, "exit_codes": { "candidate_export": 0, "post_ldpc_info87_runtime_export": 0, "source_exact_map_probe": 0, "source_confirmed_message174_decode": 0, "source_varicode_frame_unpack_probe": 0, "source_confirmed_control_frame_rx_release": 0 }, "runtime_info87_rows_count": 48, "source_exact_zero_distance_candidate_count": 16, "message174_decode_count": 2, "frame_probe_count": 2, "frame_type_counts": { "FrameHeartbeat": 1, "FrameDirected": 1 }, "control_frame_release_count": 2, "webftr_display_count": 2, "webftr_rx_rows_preview": [ { "id": "js8-rx67-de15d3110b0d", "source_candidate_id": "js8-frame66-bf1ce62fdb4a", "source_decode_id": "js8-msg174-fb81ef2f", "mode": "JS8", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "frame_type": "FrameHeartbeat", "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 0, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[0].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 214, "map_name": "raw", "map_source": null }, "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "is_control_frame": true }, { "id": "js8-rx67-bd37f68199eb", "source_candidate_id": "js8-frame66-66ab29ded46c", "source_decode_id": "js8-msg174-9546833a", "mode": "JS8", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "frame_type": "FrameDirected", "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "candidate_class": "webftr_control_frame_display_ready", "release_guard": "step67_source_confirmed_fixed_control_frame_only", "sort_index": 1, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "json_path": "$.top_candidates[1].info87_bitstring", "source_kind": "info87_bitstring", "row_index": 215, "map_name": "raw", "map_source": null }, "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "command": "INFO", "extra": 59, "extra_value": { "kind": "number", "value": 28 }, "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "is_control_frame": true } ], "outputs": { "candidate_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json", "post_ldpc_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json", "source_exact_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json", "message174_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json", "varicode_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json", "rx_release_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json" } } ], "verdict": "step86_real_wav_unique_control_frames_only_no_data_frames", "warnings": [ "Step86 is a census/dedup gate; it does not release JS8 free text.", "Repeated Heartbeat/Directed rows across nearby windows are counted as duplicate evidence, not separate new messages.", "FrameData and FrameDataCompressed remain blocked until a real externally confirmed fixture or real-WAV data candidate exists." ], "notes": [ "This step was added after Step85 confirmed the real WAV path but repeated the same two control frames across multiple windows.", "If data_frame_candidate_count and compressed_data_frame_candidate_count remain 0, the current js8_test.wav appears to contain only the two confirmed control frames for this chain." ], "next_action": "Use a WAV containing a real JS8 free-text/Data/Compressed frame or import an externally confirmed fixture; otherwise continue decoder work with the two unique control frames as the confirmed audio-to-message174 regression baseline." } [webftr-js8-lab] step86 census exit_code=0 [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T091124Z_real-wav-unique-frame-census.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T091124Z_real-wav-unique-frame-census_manifest.json