[webftr-js8-lab] command=real-wav-message174-regeneration [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T033900Z_real-wav-message174-regeneration.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T033900Z_real-wav-message174-regeneration_manifest.json [webftr-js8-lab] utc=20260528T033900Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step83 real WAV -> message174 regeneration chain [webftr-js8-lab] requested path: /decoders/js8_test.wav [webftr-js8-lab] This default run reads the JS8 WAV and regenerates candidate/message174/control-frame evidence in the same run. [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_test.wav ========== STEP83 1/8: REAL WAV INPUT CHECK ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_input_check_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "mode": "JS8", "tool": "webftr-js8-input-check", "tool_version": "step63-source-exact-interleaver-whitening-index-extract", "input_wav": "/decoders/js8_test.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "decodes": [], "warnings": [], "wav": { "path": "/decoders/js8_test.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 2304199, "duration_seconds": 192.016583, "rms_dbfs": -9.42, "peak_dbfs": -0.72, "clipped": false }, "next_action": "Run profile-scan, then auto-ldpc-probe on this WAV." } [webftr-js8-lab] step83 input-check exit_code=0 ========== STEP83 2/8: REAL WAV QUICK WINDOW SCAN ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_quick_window_scan_output.json [webftr-js8-lab] JSON timeout guard: 90s [webftr-js8-lab] stderr log: /decoders/js8_decoder/logs/20260528T033900Z_step83_quick_window_scan_output.stderr.log /decoders/js8_decoder/src/webftr_js8_lab/js8_quick_window_scan.py:4: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop { "ok": true, "mode": "JS8", "tool": "webftr-js8-quick-window-scan", "tool_version": "step63-source-exact-interleaver-whitening-index-extract", "input_wav": "/decoders/js8_test.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "wav": { "sample_rate": 12000, "duration_seconds": 192.016583, "frames": 2304199, "rms_dbfs": -9.417419601662104, "peak_dbfs": -0.7246929351669301, "clipped": false }, "scan_params": { "window_seconds": 60.0, "hop_seconds": 6.0, "max_seconds": 240.0, "output_dir": "/decoders/js8_decoder/runtime/step83_quick_windows" }, "selected_window": { "start_seconds": 18.0, "end_seconds": 78.0, "duration_seconds": 60.0, "avg_activity_score": -6.286, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.714, "window_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "tone_candidates": [ { "freq_hz": 1000.0, "relative_db": 0.0, "power": 15.76347305 }, { "freq_hz": 1025.0, "relative_db": -0.8, "power": 13.10923242 }, { "freq_hz": 2025.0, "relative_db": -14.3, "power": 0.58516574 }, { "freq_hz": 975.0, "relative_db": -16.4, "power": 0.3608126 }, { "freq_hz": 1050.0, "relative_db": -29.42, "power": 0.01801849 }, { "freq_hz": 1525.0, "relative_db": -32.35, "power": 0.00916685 }, { "freq_hz": 1825.0, "relative_db": -32.46, "power": 0.00893784 }, { "freq_hz": 1925.0, "relative_db": -34.06, "power": 0.00619164 }, { "freq_hz": 1650.0, "relative_db": -34.23, "power": 0.0059545 }, { "freq_hz": 2575.0, "relative_db": -34.47, "power": 0.00562689 }, { "freq_hz": 1625.0, "relative_db": -34.8, "power": 0.00521457 }, { "freq_hz": 950.0, "relative_db": -35.04, "power": 0.00494236 } ] }, "selected_window_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "top_windows": [ { "start_seconds": 18.0, "end_seconds": 78.0, "duration_seconds": 60.0, "avg_activity_score": -6.286, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.714, "window_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "tone_candidates": [ { "freq_hz": 1000.0, "relative_db": 0.0, "power": 15.76347305 }, { "freq_hz": 1025.0, "relative_db": -0.8, "power": 13.10923242 }, { "freq_hz": 2025.0, "relative_db": -14.3, "power": 0.58516574 }, { "freq_hz": 975.0, "relative_db": -16.4, "power": 0.3608126 }, { "freq_hz": 1050.0, "relative_db": -29.42, "power": 0.01801849 }, { "freq_hz": 1525.0, "relative_db": -32.35, "power": 0.00916685 }, { "freq_hz": 1825.0, "relative_db": -32.46, "power": 0.00893784 }, { "freq_hz": 1925.0, "relative_db": -34.06, "power": 0.00619164 }, { "freq_hz": 1650.0, "relative_db": -34.23, "power": 0.0059545 }, { "freq_hz": 2575.0, "relative_db": -34.47, "power": 0.00562689 }, { "freq_hz": 1625.0, "relative_db": -34.8, "power": 0.00521457 }, { "freq_hz": 950.0, "relative_db": -35.04, "power": 0.00494236 } ] }, { "start_seconds": 24.0, "end_seconds": 84.0, "duration_seconds": 60.0, "avg_activity_score": -6.288, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.712 }, { "start_seconds": 12.0, "end_seconds": 72.0, "duration_seconds": 60.0, "avg_activity_score": -6.2893, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.7107 }, { "start_seconds": 6.0, "end_seconds": 66.0, "duration_seconds": 60.0, "avg_activity_score": -6.2897, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.7103 }, { "start_seconds": 30.0, "end_seconds": 90.0, "duration_seconds": 60.0, "avg_activity_score": -6.2905, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.7095 }, { "start_seconds": 36.0, "end_seconds": 96.0, "duration_seconds": 60.0, "avg_activity_score": -6.2973, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.7027 }, { "start_seconds": 42.0, "end_seconds": 102.0, "duration_seconds": 60.0, "avg_activity_score": -6.3015, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.6985 }, { "start_seconds": 0.0, "end_seconds": 60.0, "duration_seconds": 60.0, "avg_activity_score": -6.3078, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.6922 } ], "chunk_preview": [ { "chunk_index": 0, "start_seconds": 0.0, "end_seconds": 6.0, "rms_dbfs": -9.55, "peak_dbfs": -3.23, "activity_score": -6.7075 }, { "chunk_index": 1, "start_seconds": 6.0, "end_seconds": 12.0, "rms_dbfs": -8.65, "peak_dbfs": -3.22, "activity_score": -5.8087 }, { "chunk_index": 2, "start_seconds": 12.0, "end_seconds": 18.0, "rms_dbfs": -10.06, "peak_dbfs": -3.01, "activity_score": -7.2095 }, { "chunk_index": 3, "start_seconds": 18.0, "end_seconds": 24.0, "rms_dbfs": -8.61, "peak_dbfs": -3.44, "activity_score": -5.7779 }, { "chunk_index": 4, "start_seconds": 24.0, "end_seconds": 30.0, "rms_dbfs": -9.13, "peak_dbfs": -3.01, "activity_score": -6.2812 }, { "chunk_index": 5, "start_seconds": 30.0, "end_seconds": 36.0, "rms_dbfs": -9.35, "peak_dbfs": -2.73, "activity_score": -6.4889 }, { "chunk_index": 6, "start_seconds": 36.0, "end_seconds": 42.0, "rms_dbfs": -8.61, "peak_dbfs": -2.39, "activity_score": -5.7277 }, { "chunk_index": 7, "start_seconds": 42.0, "end_seconds": 48.0, "rms_dbfs": -9.99, "peak_dbfs": -2.6, "activity_score": -7.1176 } ], "chunk_tail_preview": [ { "chunk_index": 25, "start_seconds": 150.0, "end_seconds": 156.0, "rms_dbfs": -9.46, "peak_dbfs": -2.8, "activity_score": -6.5977 }, { "chunk_index": 26, "start_seconds": 156.0, "end_seconds": 162.0, "rms_dbfs": -8.7, "peak_dbfs": -3.5, "activity_score": -5.8709 }, { "chunk_index": 27, "start_seconds": 162.0, "end_seconds": 168.0, "rms_dbfs": -10.09, "peak_dbfs": -0.89, "activity_score": -7.133 }, { "chunk_index": 28, "start_seconds": 168.0, "end_seconds": 174.0, "rms_dbfs": -8.69, "peak_dbfs": -3.67, "activity_score": -5.8733 }, { "chunk_index": 29, "start_seconds": 174.0, "end_seconds": 180.0, "rms_dbfs": -9.32, "peak_dbfs": -3.03, "activity_score": -6.4728 }, { "chunk_index": 30, "start_seconds": 180.0, "end_seconds": 186.0, "rms_dbfs": -17.31, "peak_dbfs": -2.41, "activity_score": -14.429 }, { "chunk_index": 31, "start_seconds": 186.0, "end_seconds": 192.0, "rms_dbfs": -22.78, "peak_dbfs": -10.06, "activity_score": -20.2802 }, { "chunk_index": 32, "start_seconds": 192.0, "end_seconds": 192.017, "rms_dbfs": -23.23, "peak_dbfs": -14.09, "activity_score": -20.9354 } ], "decodes": [], "warnings": [ "Quick-window-scan only selects a likely analysis window; it is not a JS8 text decoder." ], "next_action": "Run sync/soft-symbol/FEC probes on selected_window_wav. Message unpack is not implemented in Step 54." } [webftr-js8-lab] step83 quick-window-scan exit_code=0 [webftr-js8-lab] selected analysis WAV: /decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav ========== STEP83 3/8: FEC CANDIDATE EXPORT FROM SELECTED WAV ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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/step83_quick_windows/js8_quick_selected_window.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": 0.0, "base_freq_hz": 995.0, "candidate_score": 27.62, "costas_hits": 2, "avg_margin_db": 2.05, "candidate_count": 12 }, "frame": { "symbols_available_after_start": 108, "data_symbol_count_estimate": 58, "expected_data_symbols_candidate": 58 }, "fec": { "soft_bit_count_estimate": 174, "missing_soft_bits_estimate": 0, "complete_ldpc_input_candidate_estimate": true }, "rank_score": 205.266 }, "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": 0.0, "base_freq_hz": 995.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": 0.0, "base_freq_hz": 995.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/step83_quick_windows/js8_quick_selected_window.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 720000, "duration_seconds": 60.0, "rms_dbfs": -9.04, "peak_dbfs": -0.72, "clipped": false }, "sync_candidate": { "start_sample": 0, "start_seconds": 0.0, "base_freq_hz": 995.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": 96, "excluded_costas_symbol_count": 0, "detected_costas_blocks": [], "data_symbol_count_available": 96, "data_symbol_count_used": 58, "expected_data_symbols_candidate": 58, "costas_policy": "js8_leading_only" }, "fec_input_summary": { "soft_bit_count": 174, "missing_soft_bits": 0, "complete_ldpc_input_candidate": true, "llr_convention": "positive=bit0_more_likely, negative=bit1_more_likely, MSB-first candidate" }, "anchor_context": { "enabled": true, "source": "candidate_export_local_profile_scan", "start_seconds": 0.0, "base_freq_hz": 995.0, "tone_spacing_hz": 2.0, "nsps": 6000, "symbol_count_extracted": 96 }, "variant_count": 23, "selected_variant": { "name": "raw_msb_symbol_order", "rank_score": 127.022408, "complete_174bit_candidate": true, "hard_bits_sha256_16": "383f4533d68eb0fc", "hard_weight_174": 85, "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 } }, "variants": [ { "name": "raw_msb_symbol_order", "description": "Current FEC bridge: Costas-stripped symbols, MSB-first tone bits.", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "000000000000110111011011000100110111011110001000111111000011100101111111110110000100101111011000110110010111101010000100110100001110000100101110011000100101101011100110000100", "hard_bits_sha256_16": "383f4533d68eb0fc", "hard_weight_174": 85, "llr_full_174": [ 3.97418, 3.88521, 3.595107, 2.959276, 1.814096, 2.723723, 3.560461, 3.458174, 2.68093, 3.987519, 3.933672, 3.878589, -3.832182, -0.089283, 0.029294, -3.130713, -1.875167, -2.439579, 0.619573, -0.757489, -0.660757, 3.194903, -3.163131, -1.63158, 4.164351, 4.097975, 3.211936, -0.95288, 0.357277, 0.315753, -4.207657, -1.748394, 1.206337, -3.223279, -2.849812, -3.084383, 2.565229, -2.428139, -1.443267, -4.245366, -1.865991, 0.886974, 3.570442, 3.594874, -3.744063, 4.251272, 4.031745, 1.720087, -3.123085, -2.702687, -3.024483, -3.768259, -3.317727, -2.618929, 3.584166, 3.533642, 2.69733, 3.287228, -2.502631, -2.559199, -0.077355, 0.255066, 0.613777, -3.973349, 0.111616, -0.391078, -3.62632, -1.846087, -1.616675, -3.670105, -0.988042, -0.997897, -2.116817, -1.903056, 0.341822, -2.359812, -2.483697, 2.779974, 4.194521, 1.919288, 0.654794, -1.400655, 1.71415, 1.446893, -2.376504, 0.904259, -0.998807, -2.124451, -1.639487, -2.087743, 3.921789, -3.743445, -3.418347, 3.609661, 3.559494, 2.348588, -4.092575, -1.684572, 1.208803, -3.446915, -2.696081, 2.964235, 1.721757, -1.638686, 0.148054, -3.544803, -2.417021, -3.223933, -4.133556, 2.025931, -1.511435, 0.043763, -0.229575, 0.004984, 4.180876, 4.131755, 2.307302, -1.450192, 0.560624, 0.822402, -2.398868, -2.808398, 1.272116, 0.205078, -0.216872, 0.783466, 4.155958, 4.133171, -1.983908, -2.902462, -1.896431, 1.437112, 3.82675, 3.684946, 3.511598, -1.518836, 1.24689, 1.337102, -0.761545, 0.197774, 0.185494, -4.236574, -1.440389, 1.104476, 3.635987, -3.387134, -3.627866, 3.829679, 3.69754, 3.564003, -1.368584, 1.460526, 1.597346, -3.471709, 0.532839, -0.667959, -0.99505, 0.772037, -2.771841, 0.512883, -2.24179, -0.705034, -1.631603, 1.60442, 1.226465, -2.392533, -3.158724, 2.368508, 3.286767, 1.081328, 0.788813, -1.20036, 1.264156, 1.61828 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 127.022408 }, { "name": "lsb_within_each_tone", "description": "Same symbols, but each 3-bit tone value reversed for bit-order comparison.", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "000000000000011111110110000001011111110011100000111111000110001101111111011011000001101111110000011011010111101010000001011001100011000001101011110000001101101110001011000001", "hard_bits_sha256_16": "0c8479d716f2ed32", "hard_weight_174": 85, "llr_full_174": [ 3.97418, 3.88521, 3.595107, 2.959276, 1.814096, 2.723723, 3.560461, 3.458174, 2.68093, 3.987519, 3.933672, 3.878589, -3.832182, -0.089283, 0.029294, -3.130713, -1.875167, -2.439579, 0.619573, -0.757489, -0.660757, 3.194903, -3.163131, -1.63158, 4.164351, 4.097975, 3.211936, -0.95288, 0.357277, 0.315753, -4.207657, -1.748394, 1.206337, -3.223279, -2.849812, -3.084383, 2.565229, -2.428139, -1.443267, -4.245366, -1.865991, 0.886974, 3.570442, 3.594874, -3.744063, 4.251272, 4.031745, 1.720087, -3.123085, -2.702687, -3.024483, -3.768259, -3.317727, -2.618929, 3.584166, 3.533642, 2.69733, 3.287228, -2.502631, -2.559199, -0.077355, 0.255066, 0.613777, -3.973349, 0.111616, -0.391078, -3.62632, -1.846087, -1.616675, -3.670105, -0.988042, -0.997897, -2.116817, -1.903056, 0.341822, -2.359812, -2.483697, 2.779974, 4.194521, 1.919288, 0.654794, -1.400655, 1.71415, 1.446893, -2.376504, 0.904259, -0.998807, -2.124451, -1.639487, -2.087743, 3.921789, -3.743445, -3.418347, 3.609661, 3.559494, 2.348588, -4.092575, -1.684572, 1.208803, -3.446915, -2.696081, 2.964235, 1.721757, -1.638686, 0.148054, -3.544803, -2.417021, -3.223933, -4.133556, 2.025931, -1.511435, 0.043763, -0.229575, 0.004984, 4.180876, 4.131755, 2.307302, -1.450192, 0.560624, 0.822402, -2.398868, -2.808398, 1.272116, 0.205078, -0.216872, 0.783466, 4.155958, 4.133171, -1.983908, -2.902462, -1.896431, 1.437112, 3.82675, 3.684946, 3.511598, -1.518836, 1.24689, 1.337102, -0.761545, 0.197774, 0.185494, -4.236574, -1.440389, 1.104476, 3.635987, -3.387134, -3.627866, 3.829679, 3.69754, 3.564003, -1.368584, 1.460526, 1.597346, -3.471709, 0.532839, -0.667959, -0.99505, 0.772037, -2.771841, 0.512883, -2.24179, -0.705034, -1.631603, 1.60442, 1.226465, -2.392533, -3.158724, 2.368508, 3.286767, 1.081328, 0.788813, -1.20036, 1.264156, 1.61828 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 119.022408 }, { "name": "reverse_symbol_order", "description": "Same 3-bit symbols in reverse order; diagnostic only.", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000110100011101101100000011110101100000110001100110100000010101111010110110000011111101100000110110111111101100011000111111000001110011111110100000011011111110000000000000", "hard_bits_sha256_16": "0563d3286fdc0137", "hard_weight_174": 85, "llr_full_174": [ 1.61828, 1.264156, -1.20036, 0.788813, 1.081328, 3.286767, 2.368508, -3.158724, -2.392533, 1.226465, 1.60442, -1.631603, -0.705034, -2.24179, 0.512883, -2.771841, 0.772037, -0.99505, -0.667959, 0.532839, -3.471709, 1.597346, 1.460526, -1.368584, 3.564003, 3.69754, 3.829679, -3.627866, -3.387134, 3.635987, 1.104476, -1.440389, -4.236574, 0.185494, 0.197774, -0.761545, 1.337102, 1.24689, -1.518836, 3.511598, 3.684946, 3.82675, 1.437112, -1.896431, -2.902462, -1.983908, 4.133171, 4.155958, 0.783466, -0.216872, 0.205078, 1.272116, -2.808398, -2.398868, 0.822402, 0.560624, -1.450192, 2.307302, 4.131755, 4.180876, 0.004984, -0.229575, 0.043763, -1.511435, 2.025931, -4.133556, -3.223933, -2.417021, -3.544803, 0.148054, -1.638686, 1.721757, 2.964235, -2.696081, -3.446915, 1.208803, -1.684572, -4.092575, 2.348588, 3.559494, 3.609661, -3.418347, -3.743445, 3.921789, -2.087743, -1.639487, -2.124451, -0.998807, 0.904259, -2.376504, 1.446893, 1.71415, -1.400655, 0.654794, 1.919288, 4.194521, 2.779974, -2.483697, -2.359812, 0.341822, -1.903056, -2.116817, -0.997897, -0.988042, -3.670105, -1.616675, -1.846087, -3.62632, -0.391078, 0.111616, -3.973349, 0.613777, 0.255066, -0.077355, -2.559199, -2.502631, 3.287228, 2.69733, 3.533642, 3.584166, -2.618929, -3.317727, -3.768259, -3.024483, -2.702687, -3.123085, 1.720087, 4.031745, 4.251272, -3.744063, 3.594874, 3.570442, 0.886974, -1.865991, -4.245366, -1.443267, -2.428139, 2.565229, -3.084383, -2.849812, -3.223279, 1.206337, -1.748394, -4.207657, 0.315753, 0.357277, -0.95288, 3.211936, 4.097975, 4.164351, -1.63158, -3.163131, 3.194903, -0.660757, -0.757489, 0.619573, -2.439579, -1.875167, -3.130713, 0.029294, -0.089283, -3.832182, 3.878589, 3.933672, 3.987519, 2.68093, 3.458174, 3.560461, 2.723723, 1.814096, 2.959276, 3.595107, 3.88521, 3.97418 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 113.022408 }, { "name": "reverse_full_bitstream", "description": "Full hard-bit stream reversed; diagnostic only.", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "001000011001110101101001000110011101001000011100001011001000010101111010011011000110111101001000011011111111101001110000111111000100011110111011001000110110111011000000000000", "hard_bits_sha256_16": "60b387991b136b74", "hard_weight_174": 85, "llr_full_174": [ 1.61828, 1.264156, -1.20036, 0.788813, 1.081328, 3.286767, 2.368508, -3.158724, -2.392533, 1.226465, 1.60442, -1.631603, -0.705034, -2.24179, 0.512883, -2.771841, 0.772037, -0.99505, -0.667959, 0.532839, -3.471709, 1.597346, 1.460526, -1.368584, 3.564003, 3.69754, 3.829679, -3.627866, -3.387134, 3.635987, 1.104476, -1.440389, -4.236574, 0.185494, 0.197774, -0.761545, 1.337102, 1.24689, -1.518836, 3.511598, 3.684946, 3.82675, 1.437112, -1.896431, -2.902462, -1.983908, 4.133171, 4.155958, 0.783466, -0.216872, 0.205078, 1.272116, -2.808398, -2.398868, 0.822402, 0.560624, -1.450192, 2.307302, 4.131755, 4.180876, 0.004984, -0.229575, 0.043763, -1.511435, 2.025931, -4.133556, -3.223933, -2.417021, -3.544803, 0.148054, -1.638686, 1.721757, 2.964235, -2.696081, -3.446915, 1.208803, -1.684572, -4.092575, 2.348588, 3.559494, 3.609661, -3.418347, -3.743445, 3.921789, -2.087743, -1.639487, -2.124451, -0.998807, 0.904259, -2.376504, 1.446893, 1.71415, -1.400655, 0.654794, 1.919288, 4.194521, 2.779974, -2.483697, -2.359812, 0.341822, -1.903056, -2.116817, -0.997897, -0.988042, -3.670105, -1.616675, -1.846087, -3.62632, -0.391078, 0.111616, -3.973349, 0.613777, 0.255066, -0.077355, -2.559199, -2.502631, 3.287228, 2.69733, 3.533642, 3.584166, -2.618929, -3.317727, -3.768259, -3.024483, -2.702687, -3.123085, 1.720087, 4.031745, 4.251272, -3.744063, 3.594874, 3.570442, 0.886974, -1.865991, -4.245366, -1.443267, -2.428139, 2.565229, -3.084383, -2.849812, -3.223279, 1.206337, -1.748394, -4.207657, 0.315753, 0.357277, -0.95288, 3.211936, 4.097975, 4.164351, -1.63158, -3.163131, 3.194903, -0.660757, -0.757489, 0.619573, -2.439579, -1.875167, -3.130713, 0.029294, -0.089283, -3.832182, 3.878589, 3.933672, 3.987519, 2.68093, 3.458174, 3.560461, 2.723723, 1.814096, 2.959276, 3.595107, 3.88521, 3.97418 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 112.022408 }, { "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": "000000000000110111011011000100110111011110001000111111000011100101111111110110000100101111011000110110010111101010000100110100001110000100101110011000100101101011100110000100", "hard_bits_sha256_16": "383f4533d68eb0fc", "hard_weight_174": 85, "llr_full_174": [ 3.97418, 3.88521, 3.595107, 2.959276, 1.814096, 2.723723, 3.560461, 3.458174, 2.68093, 3.987519, 3.933672, 3.878589, -3.832182, -0.089283, 0.029294, -3.130713, -1.875167, -2.439579, 0.619573, -0.757489, -0.660757, 3.194903, -3.163131, -1.63158, 4.164351, 4.097975, 3.211936, -0.95288, 0.357277, 0.315753, -4.207657, -1.748394, 1.206337, -3.223279, -2.849812, -3.084383, 2.565229, -2.428139, -1.443267, -4.245366, -1.865991, 0.886974, 3.570442, 3.594874, -3.744063, 4.251272, 4.031745, 1.720087, -3.123085, -2.702687, -3.024483, -3.768259, -3.317727, -2.618929, 3.584166, 3.533642, 2.69733, 3.287228, -2.502631, -2.559199, -0.077355, 0.255066, 0.613777, -3.973349, 0.111616, -0.391078, -3.62632, -1.846087, -1.616675, -3.670105, -0.988042, -0.997897, -2.116817, -1.903056, 0.341822, -2.359812, -2.483697, 2.779974, 4.194521, 1.919288, 0.654794, -1.400655, 1.71415, 1.446893, -2.376504, 0.904259, -0.998807, -2.124451, -1.639487, -2.087743, 3.921789, -3.743445, -3.418347, 3.609661, 3.559494, 2.348588, -4.092575, -1.684572, 1.208803, -3.446915, -2.696081, 2.964235, 1.721757, -1.638686, 0.148054, -3.544803, -2.417021, -3.223933, -4.133556, 2.025931, -1.511435, 0.043763, -0.229575, 0.004984, 4.180876, 4.131755, 2.307302, -1.450192, 0.560624, 0.822402, -2.398868, -2.808398, 1.272116, 0.205078, -0.216872, 0.783466, 4.155958, 4.133171, -1.983908, -2.902462, -1.896431, 1.437112, 3.82675, 3.684946, 3.511598, -1.518836, 1.24689, 1.337102, -0.761545, 0.197774, 0.185494, -4.236574, -1.440389, 1.104476, 3.635987, -3.387134, -3.627866, 3.829679, 3.69754, 3.564003, -1.368584, 1.460526, 1.597346, -3.471709, 0.532839, -0.667959, -0.99505, 0.772037, -2.771841, 0.512883, -2.24179, -0.705034, -1.631603, 1.60442, 1.226465, -2.392533, -3.158724, 2.368508, 3.286767, 1.081328, 0.788813, -1.20036, 1.264156, 1.61828 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "011010110001110000100010100010000000011100110100011110111100010001000011110010010010110111110111011010111110101001010010011001100100111011001101001100110100100001110010101110", "hard_bits_sha256_16": "a577fc1a7db6a52e", "hard_weight_174": 85, "llr_full_174": [ 3.97418, -2.124451, -3.744063, 1.437112, -3.163131, 2.025931, -3.62632, -3.471709, 3.878589, 1.208803, 3.533642, -1.440389, -3.223279, -2.398868, 2.779974, 1.226465, 3.560461, 3.609661, -3.024483, 1.337102, 0.357277, 4.131755, -2.116817, 0.512883, -2.439579, 0.148054, 0.255066, 3.69754, -4.245366, 4.155958, 1.71415, 1.081328, 2.959276, 3.921789, 1.720087, 3.511598, 4.097975, -0.229575, -3.670105, -0.99505, 0.029294, 2.964235, -2.502631, -3.387134, 2.565229, 0.205078, 0.654794, 2.368508, 3.987519, -4.092575, -2.618929, 0.185494, -1.748394, 0.560624, -2.359812, -1.631603, -0.660757, -3.223933, 0.111616, 1.460526, 3.570442, -2.902462, 0.904259, 1.264156, 3.595107, -2.087743, 4.031745, 3.684946, 4.164351, 0.043763, -1.616675, -0.667959, -0.089283, -2.696081, 3.287228, 3.635987, -3.084383, 1.272116, 1.919288, -3.158724, 2.68093, 2.348588, -3.317727, 0.197774, -4.207657, -1.450192, 0.341822, -0.705034, -0.757489, -2.417021, -3.973349, -1.368584, 0.886974, -1.983908, -2.376504, -1.20036, 2.723723, -3.418347, -2.702687, 1.24689, -0.95288, 4.180876, -0.997897, -2.771841, -1.875167, -1.638686, -0.077355, 3.829679, -1.443267, 0.783466, -1.400655, 3.286767, 3.933672, -1.684572, 3.584166, -4.236574, 1.206337, 0.822402, -2.483697, 1.60442, 3.194903, -4.133556, -0.391078, 1.597346, 3.594874, -1.896431, -0.998807, 1.61828, 3.88521, -1.639487, 4.251272, 3.82675, -1.63158, -1.511435, -1.846087, 0.532839, -3.832182, -3.446915, 2.69733, 1.104476, -2.849812, -2.808398, 4.194521, -2.392533, 3.458174, 3.559494, -3.768259, -0.761545, 0.315753, 2.307302, -1.903056, -2.24179, 0.619573, -3.544803, 0.613777, 3.564003, -1.865991, 4.133171, 1.446893, 0.788813, 1.814096, -3.743445, -3.123085, -1.518836, 3.211936, 0.004984, -0.988042, 0.772037, -3.130713, 1.721757, -2.559199, -3.627866, -2.428139, -0.216872 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "010011100110011000010100100110110111101011100111100101001000100010001110111000100111000011111111100010010110100111000011110000000000011011001000101111111011101101001000010010", "hard_bits_sha256_16": "f680938f1a73a8eb", "hard_weight_174": 85, "llr_full_174": [ 3.97418, -1.983908, 0.111616, 1.206337, -2.24179, -4.092575, -1.875167, 3.635987, 0.654794, -3.123085, -0.229575, 2.68093, 1.24689, -2.116817, -1.865991, 3.286767, 0.148054, 4.164351, 1.597346, -1.639487, 2.69733, -2.398868, 1.814096, 3.82675, -1.616675, 2.565229, 1.226465, -2.696081, -0.660757, 3.69754, -2.376504, -3.317727, 2.307302, -3.832182, 0.185494, -2.483697, -3.744063, 1.264156, -4.133556, 0.357277, -0.99505, -3.418347, -0.077355, -0.216872, 3.595107, -1.896431, -3.62632, -2.849812, -1.631603, 1.208803, 0.619573, -3.627866, 1.71415, -3.024483, 4.180876, 3.933672, -0.761545, 0.341822, 3.570442, 0.788813, -2.417021, 3.211936, 0.532839, 3.921789, -2.502631, 1.272116, 3.560461, 3.511598, -0.988042, -1.443267, -3.158724, 1.721757, -3.163131, -1.368584, -0.998807, 3.584166, 0.560624, 0.029294, -1.440389, 4.194521, 4.031745, -1.511435, -4.207657, -2.771841, 3.559494, 0.613777, 4.155958, 3.88521, -2.902462, -0.391078, -3.223279, -0.705034, -1.684572, -2.439579, -3.387134, -1.400655, -2.702687, 0.004984, 3.987519, 1.337102, -1.903056, 0.886974, 1.081328, -3.544803, 4.097975, -3.471709, -2.087743, 3.287228, -2.808398, 2.723723, 3.684946, -3.670105, -2.428139, -2.392533, 2.964235, 3.194903, 3.564003, 0.904259, -2.618929, -1.450192, -0.089283, -4.236574, 2.779974, 4.251272, 1.61828, 2.025931, 0.315753, 0.772037, 3.609661, 0.255066, 0.783466, 2.959276, 1.437112, -1.846087, -3.084383, 1.60442, -3.446915, -0.757489, 3.829679, 1.446893, -3.768259, 4.131755, 3.878589, 0.197774, -2.359812, 3.594874, -1.20036, -3.223933, -0.95288, -0.667959, -3.743445, -2.559199, 0.205078, 3.458174, -1.518836, -0.997897, -4.245366, 2.368508, -1.638686, -1.63158, 1.460526, -2.124451, 3.533642, 0.822402, -3.130713, 1.104476, 1.919288, 1.720087, 0.043763, -1.748394, 0.512883, 2.348588, -3.973349, 4.133171 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "000000000000011111110110000001011111110011100000111111000110001101111111011011000001101111110000011011010111101010000001011001100011000001101011110000001101101110001011000001", "hard_bits_sha256_16": "0c8479d716f2ed32", "hard_weight_174": 85, "llr_full_174": [ 3.595107, 3.88521, 3.97418, 2.723723, 1.814096, 2.959276, 2.68093, 3.458174, 3.560461, 3.878589, 3.933672, 3.987519, 0.029294, -0.089283, -3.832182, -2.439579, -1.875167, -3.130713, -0.660757, -0.757489, 0.619573, -1.63158, -3.163131, 3.194903, 3.211936, 4.097975, 4.164351, 0.315753, 0.357277, -0.95288, 1.206337, -1.748394, -4.207657, -3.084383, -2.849812, -3.223279, -1.443267, -2.428139, 2.565229, 0.886974, -1.865991, -4.245366, -3.744063, 3.594874, 3.570442, 1.720087, 4.031745, 4.251272, -3.024483, -2.702687, -3.123085, -2.618929, -3.317727, -3.768259, 2.69733, 3.533642, 3.584166, -2.559199, -2.502631, 3.287228, 0.613777, 0.255066, -0.077355, -0.391078, 0.111616, -3.973349, -1.616675, -1.846087, -3.62632, -0.997897, -0.988042, -3.670105, 0.341822, -1.903056, -2.116817, 2.779974, -2.483697, -2.359812, 0.654794, 1.919288, 4.194521, 1.446893, 1.71415, -1.400655, -0.998807, 0.904259, -2.376504, -2.087743, -1.639487, -2.124451, -3.418347, -3.743445, 3.921789, 2.348588, 3.559494, 3.609661, 1.208803, -1.684572, -4.092575, 2.964235, -2.696081, -3.446915, 0.148054, -1.638686, 1.721757, -3.223933, -2.417021, -3.544803, -1.511435, 2.025931, -4.133556, 0.004984, -0.229575, 0.043763, 2.307302, 4.131755, 4.180876, 0.822402, 0.560624, -1.450192, 1.272116, -2.808398, -2.398868, 0.783466, -0.216872, 0.205078, -1.983908, 4.133171, 4.155958, 1.437112, -1.896431, -2.902462, 3.511598, 3.684946, 3.82675, 1.337102, 1.24689, -1.518836, 0.185494, 0.197774, -0.761545, 1.104476, -1.440389, -4.236574, -3.627866, -3.387134, 3.635987, 3.564003, 3.69754, 3.829679, 1.597346, 1.460526, -1.368584, -0.667959, 0.532839, -3.471709, -2.771841, 0.772037, -0.99505, -0.705034, -2.24179, 0.512883, 1.226465, 1.60442, -1.631603, 2.368508, -3.158724, -2.392533, 0.788813, 1.081328, 3.286767, 1.61828, 1.264156, -1.20036 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "010110110101101100110001100001000100011111111001001110000100100001000011111111010010001011101010001000111100010001001110111101110100011000011100001110111110101001100010100010", "hard_bits_sha256_16": "1da367e1edc5db30", "hard_weight_174": 85, "llr_full_174": [ 3.595107, -2.087743, 3.570442, -2.902462, -3.163131, 2.025931, -1.616675, -0.667959, 3.987519, -4.092575, 3.533642, -1.440389, -3.084383, 1.272116, -2.359812, -1.631603, 2.68093, 2.348588, -3.123085, -1.518836, 0.357277, 4.131755, 0.341822, -0.705034, -3.130713, 1.721757, 0.255066, 3.69754, 0.886974, -1.983908, 1.71415, 1.081328, 2.723723, -3.418347, 4.251272, 3.82675, 4.097975, -0.229575, -0.997897, -2.771841, -3.832182, -3.446915, -2.502631, -3.387134, -1.443267, 0.783466, 4.194521, -2.392533, 3.878589, 1.208803, -3.768259, -0.761545, -1.748394, 0.560624, 2.779974, 1.226465, 0.619573, -3.544803, 0.111616, 1.460526, -3.744063, 1.437112, 0.904259, 1.264156, 3.97418, -2.124451, 4.031745, 3.684946, 3.211936, 0.004984, -3.62632, -3.471709, -0.089283, -2.696081, -2.559199, -3.627866, -3.223279, -2.398868, 1.919288, -3.158724, 3.560461, 3.609661, -3.317727, 0.197774, 1.206337, 0.822402, -2.116817, 0.512883, -0.757489, -2.417021, -0.391078, 1.597346, -4.245366, 4.155958, -0.998807, 1.61828, 2.959276, 3.921789, -2.702687, 1.24689, 0.315753, 2.307302, -3.670105, -0.99505, -1.875167, -1.638686, 0.613777, 3.564003, 2.565229, 0.205078, 1.446893, 0.788813, 3.933672, -1.684572, 2.69733, 1.104476, -4.207657, -1.450192, -2.483697, 1.60442, -1.63158, -1.511435, -3.973349, -1.368584, 3.594874, -1.896431, -2.376504, -1.20036, 3.88521, -1.639487, 1.720087, 3.511598, 3.194903, -4.133556, -1.846087, 0.532839, 0.029294, 2.964235, 3.584166, -4.236574, -2.849812, -2.808398, 0.654794, 2.368508, 3.458174, 3.559494, -2.618929, 0.185494, -0.95288, 4.180876, -1.903056, -2.24179, -0.660757, -3.223933, -0.077355, 3.829679, -1.865991, 4.133171, -1.400655, 3.286767, 1.814096, -3.743445, -3.024483, 1.337102, 4.164351, 0.043763, -0.988042, 0.772037, -2.439579, 0.148054, 3.287228, 3.635987, -2.428139, -0.216872 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "000110110110001000110000111100110011001010000111011001001110100111001010101001100101011001101110100111010111100110110010101010100010111001011000000101100001011001011100011010", "hard_bits_sha256_16": "74c934d0e98cc4c7", "hard_weight_174": 85, "llr_full_174": [ 3.595107, 4.155958, 0.111616, -4.207657, -2.24179, 1.208803, -1.875167, -3.627866, 4.194521, -3.024483, -0.229575, 3.560461, 1.24689, 0.341822, -1.865991, 0.788813, 1.721757, 3.211936, -1.368584, -1.639487, 3.584166, 1.272116, 1.814096, 3.511598, -3.62632, -1.443267, -1.631603, -2.696081, 0.619573, 3.69754, -0.998807, -3.317727, 4.180876, 0.029294, -0.761545, -2.483697, 3.570442, 1.264156, -1.511435, 0.357277, -2.771841, 3.921789, 0.613777, -0.216872, 3.97418, -1.896431, -1.616675, -2.849812, 1.226465, -4.092575, -0.660757, 3.635987, 1.71415, -3.123085, 2.307302, 3.933672, 0.185494, -2.116817, -3.744063, 3.286767, -2.417021, 4.164351, 0.532839, -3.418347, -2.502631, -2.398868, 2.68093, 3.82675, -0.988042, 2.565229, -3.158724, 0.148054, -3.163131, 1.597346, -2.376504, 2.69733, 0.560624, -3.832182, -1.440389, 0.654794, 4.031745, -4.133556, 1.206337, -0.99505, 3.559494, -0.077355, -1.983908, 3.88521, 1.437112, -3.973349, -3.084383, 0.512883, -1.684572, -3.130713, -3.387134, 1.446893, -2.702687, 0.043763, 3.878589, -1.518836, -1.903056, -4.245366, 1.081328, -3.223933, 4.097975, -0.667959, -2.124451, -2.559199, -2.808398, 2.959276, 3.684946, -0.997897, -2.428139, 2.368508, -3.446915, -1.63158, 3.829679, 0.904259, -3.768259, 0.822402, -0.089283, 1.104476, -2.359812, 1.720087, -1.20036, 2.025931, -0.95288, 0.772037, 2.348588, 0.255066, 0.205078, 2.723723, -2.902462, -1.846087, -3.223279, 1.60442, 2.964235, -0.757489, 3.564003, -1.400655, -2.618929, 4.131755, 3.987519, 0.197774, 2.779974, 3.594874, 1.61828, -3.544803, 0.315753, -3.471709, -3.743445, 3.287228, 0.783466, 3.458174, 1.337102, -3.670105, 0.886974, -2.392533, -1.638686, 3.194903, 1.460526, -2.087743, 3.533642, -1.450192, -2.439579, -4.236574, 1.919288, 4.251272, 0.004984, -1.748394, -0.705034, 3.609661, -0.391078, 4.133171 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 109.022408 }, { "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": "000000000000101111010010000110101111010101001000111111000010110100111111101101000110100111010000101101011111100011000110101110001101000110100101010000110100100010110101000110", "hard_bits_sha256_16": "33d7a0c5fc84f730", "hard_weight_174": 83, "llr_full_174": [ 3.97418, 3.249021, 3.047977, 2.959276, 1.561438, 1.500948, 3.560461, 2.847421, 2.325211, 3.987519, 3.277529, 3.222592, -3.832182, -0.000613, -0.087415, -3.130713, -1.454181, -1.649261, 0.619573, -0.565477, -0.10321, 3.194903, -3.020824, 1.258919, 4.164351, 3.456893, 2.878713, -0.95288, 0.058456, 0.27221, -4.207657, 0.761871, -1.729699, -3.223279, -2.287441, -2.346952, 2.565229, -2.283691, 0.897682, -4.245366, 0.59767, -1.840237, 3.570442, 3.572104, -2.52803, 4.251272, 3.513463, 1.643862, -3.123085, -2.179373, -2.219934, -3.768259, -2.234197, -2.852844, 3.584166, 2.898272, 2.359538, 3.287228, -2.471665, 1.621607, -0.077355, 0.08278, 0.168437, -3.973349, 0.023191, 0.109152, -3.62632, -1.078963, -1.718498, -3.670105, -0.441255, -0.946443, -2.116817, 0.064594, -1.637406, -2.359812, 1.416808, -2.425171, 4.194521, 1.855615, 0.495566, -1.400655, -0.421501, 1.524563, -2.376504, 0.436728, 0.779222, -2.124451, -1.213799, -1.227422, 3.921789, -3.717748, 2.566592, 3.609661, 2.936336, 2.112888, -4.092575, 0.739408, -1.665052, -3.446915, 1.885947, -2.673954, 1.721757, -1.27981, -0.291266, -3.544803, -2.060533, -2.14869, -4.133556, 1.083019, 1.933004, 0.043763, -0.11664, -0.112194, 4.180876, 3.508884, 2.173662, -1.450192, -0.068614, 0.492752, -2.398868, 0.807113, -2.541138, 0.205078, -0.08294, -0.1416, 4.155958, 4.022937, -1.766309, -2.902462, 0.830881, -1.832883, 3.82675, 3.074566, 2.914095, -1.518836, -0.334628, 1.131311, -0.761545, 0.050332, 0.140416, -4.236574, 0.611708, -1.426313, 3.635987, -3.36767, 2.438653, 3.829679, 3.082027, 2.947802, -1.368584, -0.411944, 1.326915, -3.471709, 0.178782, 0.51066, -0.99505, 0.699827, 0.366029, 0.512883, -1.410739, -0.264457, -1.631603, -0.395442, 1.436738, -2.392533, 1.451881, -3.002044, 3.286767, 1.01768, 0.397646, -1.20036, -0.319197, 1.143496 ], "llr_stats": { "count": 174, "avg_abs": 1.97006, "min_abs": 0.000613, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 107.88024 }, { "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": "011110110100111000101010111010100000011111110101011001110101010101000010000011000010111011111111001110101110001000011001010000000100001011011001001100010100000001110110100011", "hard_bits_sha256_16": "d99843e2637d90d2", "hard_weight_174": 83, "llr_full_174": [ 3.97418, -2.124451, -2.52803, -1.832883, -3.020824, 1.083019, -3.62632, -3.471709, 3.222592, -1.665052, 2.898272, 0.611708, -3.223279, -2.398868, -2.425171, 1.436738, 3.560461, 3.609661, -2.219934, 1.131311, 0.058456, 3.508884, -2.116817, 0.512883, -1.649261, -0.291266, 0.08278, 3.082027, -4.245366, 4.155958, -0.421501, 1.01768, 2.959276, 3.921789, 1.643862, 2.914095, 3.456893, -0.11664, -3.670105, -0.99505, -0.087415, -2.673954, -2.471665, -3.36767, 2.565229, 0.205078, 0.495566, -3.002044, 3.987519, -4.092575, -2.852844, 0.140416, 0.761871, -0.068614, -2.359812, -1.631603, -0.10321, -2.14869, 0.023191, -0.411944, 3.570442, -2.902462, 0.436728, -0.319197, 3.047977, -1.227422, 3.513463, 3.074566, 4.164351, 0.043763, -1.718498, 0.51066, -0.000613, 1.885947, 3.287228, 3.635987, -2.346952, -2.541138, 1.855615, 1.451881, 2.325211, 2.112888, -2.234197, 0.050332, -4.207657, -1.450192, -1.637406, -0.264457, -0.565477, -2.060533, -3.973349, -1.368584, -1.840237, -1.766309, -2.376504, -1.20036, 1.500948, 2.566592, -2.179373, -0.334628, -0.95288, 4.180876, -0.946443, 0.366029, -1.454181, -1.27981, -0.077355, 3.829679, 0.897682, -0.1416, -1.400655, 3.286767, 3.277529, 0.739408, 3.584166, -4.236574, -1.729699, 0.492752, 1.416808, -0.395442, 3.194903, -4.133556, 0.109152, 1.326915, 3.572104, 0.830881, 0.779222, 1.143496, 3.249021, -1.213799, 4.251272, 3.82675, 1.258919, 1.933004, -1.078963, 0.178782, -3.832182, -3.446915, 2.359538, -1.426313, -2.287441, 0.807113, 4.194521, -2.392533, 2.847421, 2.936336, -3.768259, -0.761545, 0.27221, 2.173662, 0.064594, -1.410739, 0.619573, -3.544803, 0.168437, 2.947802, 0.59767, 4.022937, 1.524563, 0.397646, 1.561438, -3.717748, -3.123085, -1.518836, 2.878713, -0.112194, -0.441255, 0.699827, -3.130713, 1.721757, 1.621607, 2.438653, -2.283691, -0.08294 ], "llr_stats": { "count": 174, "avg_abs": 1.97006, "min_abs": 0.000613, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 107.88024 }, { "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": "010111100110110010010100100000110100111110110011110011001100100011001000110011000010000010100111110001010110000111100011011000000100111111001000101110101011111011001100000010", "hard_bits_sha256_16": "ad539c980197c5a5", "hard_weight_174": 83, "llr_full_174": [ 3.97418, -1.766309, 0.023191, -1.729699, -1.410739, -4.092575, -1.454181, 3.635987, 0.495566, -3.123085, -0.11664, 2.325211, -0.334628, -2.116817, 0.59767, 3.286767, -0.291266, 4.164351, 1.326915, -1.213799, 2.359538, -2.398868, 1.561438, 3.82675, -1.718498, 2.565229, 1.436738, 1.885947, -0.10321, 3.082027, -2.376504, -2.234197, 2.173662, -3.832182, 0.140416, 1.416808, -2.52803, -0.319197, -4.133556, 0.058456, -0.99505, 2.566592, -0.077355, -0.08294, 3.047977, 0.830881, -3.62632, -2.287441, -1.631603, -1.665052, 0.619573, 2.438653, -0.421501, -2.219934, 4.180876, 3.277529, -0.761545, -1.637406, 3.570442, 0.397646, -2.060533, 2.878713, 0.178782, 3.921789, -2.471665, -2.541138, 3.560461, 2.914095, -0.441255, 0.897682, 1.451881, 1.721757, -3.020824, -1.368584, 0.779222, 3.584166, -0.068614, -0.087415, 0.611708, 4.194521, 3.513463, 1.933004, -4.207657, 0.366029, 2.936336, 0.168437, 4.155958, 3.249021, -2.902462, 0.109152, -3.223279, -0.264457, 0.739408, -1.649261, -3.36767, -1.400655, -2.179373, -0.112194, 3.987519, 1.131311, 0.064594, -1.840237, 1.01768, -3.544803, 3.456893, -3.471709, -1.227422, 3.287228, 0.807113, 1.500948, 3.074566, -3.670105, -2.283691, -2.392533, -2.673954, 3.194903, 2.947802, 0.436728, -2.852844, -1.450192, -0.000613, -4.236574, -2.425171, 4.251272, 1.143496, 1.083019, 0.27221, 0.699827, 3.609661, 0.08278, -0.1416, 2.959276, -1.832883, -1.078963, -2.346952, -0.395442, -3.446915, -0.565477, 3.829679, 1.524563, -3.768259, 3.508884, 3.222592, 0.050332, -2.359812, 3.572104, -1.20036, -2.14869, -0.95288, 0.51066, -3.717748, 1.621607, 0.205078, 2.847421, -1.518836, -0.946443, -4.245366, -3.002044, -1.27981, 1.258919, -0.411944, -2.124451, 2.898272, 0.492752, -3.130713, -1.426313, 1.855615, 1.643862, 0.043763, 0.761871, 0.512883, 2.112888, -3.973349, 4.022937 ], "llr_stats": { "count": 174, "avg_abs": 1.97006, "min_abs": 0.000613, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 107.88024 }, { "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": "000000000000101100010010000110101100010101001000100100000010110111100100101101000110111100010000101101011100111011000110101110001101000110111101010000110111111010110101000110", "hard_bits_sha256_16": "b5b68dfecbfe9d94", "hard_weight_174": 79, "llr_full_174": [ 3.97418, 3.235945, 3.037092, 2.959276, 1.54627, 1.486355, 3.560461, 2.815758, 2.304873, 3.987519, 3.267449, 3.213009, -3.832182, 0.085492, -0.001307, -3.130713, 1.631146, 1.438205, 0.619573, -0.218005, 0.231641, 3.194903, -2.487475, 1.444088, 4.164351, 3.437723, 2.867395, -0.95288, -0.157071, 0.055368, -4.207657, 1.668942, -0.798712, -3.223279, 2.328365, 2.269732, 2.565229, -1.807949, 1.146529, -4.245366, 1.779638, -0.629815, 3.570442, 2.890209, -2.974191, 4.251272, 3.442602, 1.62877, -3.123085, 2.200754, 2.1608, -3.768259, 2.825522, 2.217981, 3.584166, 2.866248, 2.339312, 3.287228, -2.129783, 1.843682, -0.077355, -0.009807, 0.075536, -3.973349, -0.107486, -0.02153, -3.62632, 1.694474, 1.062531, -3.670105, 0.931299, 0.428425, -2.116817, 1.328884, -0.251999, -2.359812, 1.734539, -1.932919, 4.194521, 1.82367, 0.479533, -1.400655, -0.895451, 0.91998, -2.376504, -0.734635, -0.396257, -2.124451, 1.182634, 1.169333, 3.921789, -3.135968, 2.875371, 3.609661, 2.891885, 2.090533, -4.092575, 1.601492, -0.779418, -3.446915, 2.311624, -2.131525, 1.721757, -1.020343, -0.099794, -3.544803, 2.139124, 2.051601, -4.133556, -1.913352, -1.071481, 0.043763, -0.005001, -0.00057, 4.180876, 3.463112, 2.159354, -1.450192, -0.342088, 0.213622, -2.398868, 1.895128, -1.093982, 0.205078, -0.022075, -0.08059, 4.155958, 3.451604, -1.875849, -2.902462, 1.592993, -0.982526, 3.82675, 3.060736, 2.902122, -1.518836, -0.741529, 0.670592, -0.761545, -0.071664, 0.018232, -4.236574, 1.384555, -0.640802, 3.635987, -2.811583, 2.808024, 3.829679, 3.068819, 2.936099, -1.368584, -0.777738, 0.879368, -3.471709, -0.499335, -0.168069, -0.99505, -0.341905, -0.673577, 0.512883, -0.411195, 0.5614, -1.631603, -0.963339, 0.761832, -2.392533, 2.014703, -1.998333, 3.286767, 0.989382, 0.374588, -1.20036, -0.620228, 0.786963 ], "llr_stats": { "count": 174, "avg_abs": 1.930574, "min_abs": 0.00057, "max_abs": 4.251272, "positive": 96, "negative": 78, "zero": 0 }, "rank_score": 107.722296 }, { "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": "011111110100111000001010011010100000011111110101010101110011011100000001000001000001111010111111000110010110001000011001011000100000010111010001001100010100000001110101100011", "hard_bits_sha256_16": "ef2f789b55ab4cd2", "hard_weight_174": 79, "llr_full_174": [ 3.97418, -2.124451, -2.974191, -0.982526, -2.487475, -1.913352, -3.62632, -3.471709, 3.213009, -0.779418, 2.866248, 1.384555, -3.223279, -2.398868, -1.932919, 0.761832, 3.560461, 3.609661, 2.1608, 0.670592, -0.157071, 3.463112, -2.116817, 0.512883, 1.438205, -0.099794, -0.009807, 3.068819, -4.245366, 4.155958, -0.895451, 0.989382, 2.959276, 3.921789, 1.62877, 2.902122, 3.437723, -0.005001, -3.670105, -0.99505, -0.001307, -2.131525, -2.129783, -2.811583, 2.565229, 0.205078, 0.479533, -1.998333, 3.987519, -4.092575, 2.217981, 0.018232, 1.668942, -0.342088, -2.359812, -1.631603, 0.231641, 2.051601, -0.107486, -0.777738, 3.570442, -2.902462, -0.734635, -0.620228, 3.037092, 1.169333, 3.442602, 3.060736, 4.164351, 0.043763, 1.062531, -0.168069, 0.085492, 2.311624, 3.287228, 3.635987, 2.269732, -1.093982, 1.82367, 2.014703, 2.304873, 2.090533, 2.825522, -0.071664, -4.207657, -1.450192, -0.251999, 0.5614, -0.218005, 2.139124, -3.973349, -1.368584, -0.629815, -1.875849, -2.376504, -1.20036, 1.486355, 2.875371, 2.200754, -0.741529, -0.95288, 4.180876, 0.428425, -0.673577, 1.631146, -1.020343, -0.077355, 3.829679, 1.146529, -0.08059, -1.400655, 3.286767, 3.267449, 1.601492, 3.584166, -4.236574, -0.798712, 0.213622, 1.734539, -0.963339, 3.194903, -4.133556, -0.02153, 0.879368, 2.890209, 1.592993, -0.396257, 0.786963, 3.235945, 1.182634, 4.251272, 3.82675, 1.444088, -1.071481, 1.694474, -0.499335, -3.832182, -3.446915, 2.339312, -0.640802, 2.328365, 1.895128, 4.194521, -2.392533, 2.815758, 2.891885, -3.768259, -0.761545, 0.055368, 2.159354, 1.328884, -0.411195, 0.619573, -3.544803, 0.075536, 2.936099, 1.779638, 3.451604, 0.91998, 0.374588, 1.54627, -3.135968, -3.123085, -1.518836, 2.867395, -0.00057, 0.931299, -0.341905, -3.130713, 1.721757, 1.843682, 2.808024, -1.807949, -0.022075 ], "llr_stats": { "count": 174, "avg_abs": 1.930574, "min_abs": 0.00057, "max_abs": 4.251272, "positive": 96, "negative": 78, "zero": 0 }, "rank_score": 107.722296 }, { "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": "011111000110110010000100000000100110111110110010110010001100001011000000111011000111000011100011010001010100000111100101011001010100100111001001101011101010111011001100000010", "hard_bits_sha256_16": "16d374c1dd8e4c3c", "hard_weight_174": 79, "llr_full_174": [ 3.97418, -1.875849, -0.107486, -0.798712, -0.411195, -4.092575, 1.631146, 3.635987, 0.479533, -3.123085, -0.005001, 2.304873, -0.741529, -2.116817, 1.779638, 3.286767, -0.099794, 4.164351, 0.879368, 1.182634, 2.339312, -2.398868, 1.54627, 3.82675, 1.062531, 2.565229, 0.761832, 2.311624, 0.231641, 3.068819, -2.376504, 2.825522, 2.159354, -3.832182, 0.018232, 1.734539, -2.974191, -0.620228, -4.133556, -0.157071, -0.99505, 2.875371, -0.077355, -0.022075, 3.037092, 1.592993, -3.62632, 2.328365, -1.631603, -0.779418, 0.619573, 2.808024, -0.895451, 2.1608, 4.180876, 3.267449, -0.761545, -0.251999, 3.570442, 0.374588, 2.139124, 2.867395, -0.499335, 3.921789, -2.129783, -1.093982, 3.560461, 2.902122, 0.931299, 1.146529, 2.014703, 1.721757, -2.487475, -1.368584, -0.396257, 3.584166, -0.342088, -0.001307, 1.384555, 4.194521, 3.442602, -1.071481, -4.207657, -0.673577, 2.891885, 0.075536, 4.155958, 3.235945, -2.902462, -0.02153, -3.223279, 0.5614, 1.601492, 1.438205, -2.811583, -1.400655, 2.200754, -0.00057, 3.987519, 0.670592, 1.328884, -0.629815, 0.989382, -3.544803, 3.437723, -3.471709, 1.169333, 3.287228, 1.895128, 1.486355, 3.060736, -3.670105, -1.807949, -2.392533, -2.131525, 3.194903, 2.936099, -0.734635, 2.217981, -1.450192, 0.085492, -4.236574, -1.932919, 4.251272, 0.786963, -1.913352, 0.055368, -0.341905, 3.609661, -0.009807, -0.08059, 2.959276, -0.982526, 1.694474, 2.269732, -0.963339, -3.446915, -0.218005, 3.829679, 0.91998, -3.768259, 3.463112, 3.213009, -0.071664, -2.359812, 2.890209, -1.20036, 2.051601, -0.95288, -0.168069, -3.135968, 1.843682, 0.205078, 2.815758, -1.518836, 0.428425, -4.245366, -1.998333, -1.020343, 1.444088, -0.777738, -2.124451, 2.866248, 0.213622, -3.130713, -0.640802, 1.82367, 1.62877, 0.043763, 1.668942, 0.512883, 2.090533, -3.973349, 3.451604 ], "llr_stats": { "count": 174, "avg_abs": 1.930574, "min_abs": 0.00057, "max_abs": 4.251272, "positive": 96, "negative": 78, "zero": 0 }, "rank_score": 107.722296 }, { "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": "000000000000010111101101000001010111101010110000111111000101001100111111010010000001100111101000010010011111100011000001010001110010000001100010101000001100100101001010000001", "hard_bits_sha256_16": "5c8f64b97903dc8d", "hard_weight_174": 72, "llr_full_174": [ 3.595107, 3.047977, 3.249021, 2.723723, 1.500948, 1.561438, 2.68093, 2.325211, 2.847421, 3.878589, 3.222592, 3.277529, 0.029294, -0.087415, -0.000613, -2.439579, -1.649261, -1.454181, -0.660757, -0.10321, -0.565477, -1.63158, 1.258919, -3.020824, 3.211936, 2.878713, 3.456893, 0.315753, 0.27221, 0.058456, 1.206337, -1.729699, 0.761871, -3.084383, -2.346952, -2.287441, -1.443267, 0.897682, -2.283691, 0.886974, -1.840237, 0.59767, -3.744063, -2.52803, 3.572104, 1.720087, 1.643862, 3.513463, -3.024483, -2.219934, -2.179373, -2.618929, -2.852844, -2.234197, 2.69733, 2.359538, 2.898272, -2.559199, 1.621607, -2.471665, 0.613777, 0.168437, 0.08278, -0.391078, 0.109152, 0.023191, -1.616675, -1.718498, -1.078963, -0.997897, -0.946443, -0.441255, 0.341822, -1.637406, 0.064594, 2.779974, -2.425171, 1.416808, 0.654794, 0.495566, 1.855615, 1.446893, 1.524563, -0.421501, -0.998807, 0.779222, 0.436728, -2.087743, -1.227422, -1.213799, -3.418347, 2.566592, -3.717748, 2.348588, 2.112888, 2.936336, 1.208803, -1.665052, 0.739408, 2.964235, -2.673954, 1.885947, 0.148054, -0.291266, -1.27981, -3.223933, -2.14869, -2.060533, -1.511435, 1.933004, 1.083019, 0.004984, -0.112194, -0.11664, 2.307302, 2.173662, 3.508884, 0.822402, 0.492752, -0.068614, 1.272116, -2.541138, 0.807113, 0.783466, -0.1416, -0.08294, -1.983908, -1.766309, 4.022937, 1.437112, -1.832883, 0.830881, 3.511598, 2.914095, 3.074566, 1.337102, 1.131311, -0.334628, 0.185494, 0.140416, 0.050332, 1.104476, -1.426313, 0.611708, -3.627866, 2.438653, -3.36767, 3.564003, 2.947802, 3.082027, 1.597346, 1.326915, -0.411944, -0.667959, 0.51066, 0.178782, -2.771841, 0.366029, 0.699827, -0.705034, -0.264457, -1.410739, 1.226465, 1.436738, -0.395442, 2.368508, -3.002044, 1.451881, 0.788813, 0.397646, 1.01768, 1.61828, 1.143496, -0.319197 ], "llr_stats": { "count": 174, "avg_abs": 1.625187, "min_abs": 0.000613, "max_abs": 4.022937, "positive": 101, "negative": 73, "zero": 0 }, "rank_score": 106.500748 }, { "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": "010000110001100100110001110001000100011100001000001010001100100001000010111110010010000101100010011000101100110001000110110111010100101000001100001110101110111000100110101100", "hard_bits_sha256_16": "9510d2e819449ad8", "hard_weight_174": 72, "llr_full_174": [ 3.595107, -2.087743, 3.572104, 0.830881, 1.258919, 1.933004, -1.616675, -0.667959, 3.277529, 0.739408, 2.359538, -1.426313, -3.084383, 1.272116, 1.416808, -0.395442, 2.68093, 2.348588, -2.179373, -0.334628, 0.27221, 2.173662, 0.341822, -0.705034, -1.454181, -1.27981, 0.168437, 2.947802, 0.886974, -1.983908, 1.524563, 0.397646, 2.723723, -3.418347, 3.513463, 3.074566, 2.878713, -0.112194, -0.997897, -2.771841, -0.000613, 1.885947, 1.621607, 2.438653, -1.443267, 0.783466, 1.855615, 1.451881, 3.878589, 1.208803, -2.234197, 0.050332, -1.729699, 0.492752, 2.779974, 1.226465, -0.565477, -2.060533, 0.109152, 1.326915, -3.744063, 1.437112, 0.779222, 1.143496, 3.249021, -1.213799, 1.643862, 2.914095, 3.211936, 0.004984, -1.078963, 0.178782, -0.087415, -2.673954, -2.559199, -3.627866, -2.287441, 0.807113, 0.495566, -3.002044, 2.847421, 2.936336, -2.852844, 0.140416, 1.206337, 0.822402, 0.064594, -1.410739, -0.10321, -2.14869, -0.391078, 1.597346, 0.59767, 4.022937, -0.998807, 1.61828, 1.561438, -3.717748, -2.219934, 1.131311, 0.315753, 2.307302, -0.441255, 0.699827, -1.649261, -0.291266, 0.613777, 3.564003, -2.283691, -0.08294, 1.446893, 0.788813, 3.222592, -1.665052, 2.69733, 1.104476, 0.761871, -0.068614, -2.425171, 1.436738, -1.63158, -1.511435, 0.023191, -0.411944, -2.52803, -1.832883, 0.436728, -0.319197, 3.047977, -1.227422, 1.720087, 3.511598, -3.020824, 1.083019, -1.718498, 0.51066, 0.029294, 2.964235, 2.898272, 0.611708, -2.346952, -2.541138, 0.654794, 2.368508, 2.325211, 2.112888, -2.618929, 0.185494, 0.058456, 3.508884, -1.637406, -0.264457, -0.660757, -3.223933, 0.08278, 3.082027, -1.840237, -1.766309, -0.421501, 1.01768, 1.500948, 2.566592, -3.024483, 1.337102, 3.456893, -0.11664, -0.946443, 0.366029, -2.439579, 0.148054, -2.471665, -3.36767, 0.897682, -0.1416 ], "llr_stats": { "count": 174, "avg_abs": 1.625187, "min_abs": 0.000613, "max_abs": 4.022937, "positive": 101, "negative": 73, "zero": 0 }, "rank_score": 106.500748 }, { "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": "000000110110001010110000111110110001001011000111001101001010100100001110000000100000011000111100110110010111100100010010100010100010011000011000010100010001001101011000011011", "hard_bits_sha256_16": "34d09f4d2d24e1c6", "hard_weight_174": 72, "llr_full_174": [ 3.595107, 4.022937, 0.109152, 0.761871, -0.264457, 1.208803, -1.649261, -3.627866, 1.855615, -3.024483, -0.112194, 2.847421, 1.131311, 0.341822, -1.840237, 0.788813, -1.27981, 3.211936, -0.411944, -1.227422, 2.898272, 1.272116, 1.500948, 3.511598, -1.078963, -1.443267, -0.395442, -2.673954, -0.565477, 2.947802, -0.998807, -2.852844, 3.508884, 0.029294, 0.050332, -2.425171, 3.572104, 1.143496, -1.511435, 0.27221, -2.771841, -3.717748, 0.613777, -0.1416, 3.249021, -1.832883, -1.616675, -2.346952, 1.226465, 0.739408, -0.660757, -3.36767, 1.524563, -2.179373, 2.307302, 3.222592, 0.185494, 0.064594, -3.744063, 1.01768, -2.14869, 3.456893, 0.51066, -3.418347, 1.621607, 0.807113, 2.68093, 3.074566, -0.946443, -2.283691, -3.002044, 0.148054, 1.258919, 1.597346, 0.436728, 2.69733, 0.492752, -0.000613, -1.426313, 0.654794, 1.643862, 1.083019, 1.206337, 0.699827, 2.112888, 0.08278, -1.983908, 3.047977, 1.437112, 0.023191, -3.084383, -1.410739, -1.665052, -1.454181, 2.438653, 1.446893, -2.219934, -0.11664, 3.878589, -0.334628, -1.637406, 0.59767, 0.397646, -3.223933, 2.878713, -0.667959, -1.213799, -2.559199, -2.541138, 1.561438, 2.914095, -0.997897, 0.897682, 2.368508, 1.885947, -1.63158, 3.082027, 0.779222, -2.234197, 0.822402, -0.087415, 1.104476, 1.416808, 1.720087, -0.319197, 1.933004, 0.058456, 0.366029, 2.348588, 0.168437, -0.08294, 2.723723, 0.830881, -1.718498, -2.287441, 1.436738, 2.964235, -0.10321, 3.564003, -0.421501, -2.618929, 2.173662, 3.277529, 0.140416, 2.779974, -2.52803, 1.61828, -2.060533, 0.315753, 0.178782, 2.566592, -2.471665, 0.783466, 2.325211, 1.337102, -0.441255, 0.886974, 1.451881, -0.291266, -3.020824, 1.326915, -2.087743, 2.359538, -0.068614, -2.439579, 0.611708, 0.495566, 3.513463, 0.004984, -1.729699, -0.705034, 2.936336, -0.391078, -1.766309 ], "llr_stats": { "count": 174, "avg_abs": 1.625187, "min_abs": 0.000613, "max_abs": 4.022937, "positive": 101, "negative": 73, "zero": 0 }, "rank_score": 106.500748 }, { "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": "000000000000010100101101000001010100101010110000100100000101001111100100010010000001111100101000010010011100111011000001010001110010000001111010101000001111111101001010000001", "hard_bits_sha256_16": "30105e0e13571804", "hard_weight_174": 68, "llr_full_174": [ 3.595107, 3.037092, 3.235945, 2.723723, 1.486355, 1.54627, 2.68093, 2.304873, 2.815758, 3.878589, 3.213009, 3.267449, 0.029294, -0.001307, 0.085492, -2.439579, 1.438205, 1.631146, -0.660757, 0.231641, -0.218005, -1.63158, 1.444088, -2.487475, 3.211936, 2.867395, 3.437723, 0.315753, 0.055368, -0.157071, 1.206337, -0.798712, 1.668942, -3.084383, 2.269732, 2.328365, -1.443267, 1.146529, -1.807949, 0.886974, -0.629815, 1.779638, -3.744063, -2.974191, 2.890209, 1.720087, 1.62877, 3.442602, -3.024483, 2.1608, 2.200754, -2.618929, 2.217981, 2.825522, 2.69733, 2.339312, 2.866248, -2.559199, 1.843682, -2.129783, 0.613777, 0.075536, -0.009807, -0.391078, -0.02153, -0.107486, -1.616675, 1.062531, 1.694474, -0.997897, 0.428425, 0.931299, 0.341822, -0.251999, 1.328884, 2.779974, -1.932919, 1.734539, 0.654794, 0.479533, 1.82367, 1.446893, 0.91998, -0.895451, -0.998807, -0.396257, -0.734635, -2.087743, 1.169333, 1.182634, -3.418347, 2.875371, -3.135968, 2.348588, 2.090533, 2.891885, 1.208803, -0.779418, 1.601492, 2.964235, -2.131525, 2.311624, 0.148054, -0.099794, -1.020343, -3.223933, 2.051601, 2.139124, -1.511435, -1.071481, -1.913352, 0.004984, -0.00057, -0.005001, 2.307302, 2.159354, 3.463112, 0.822402, 0.213622, -0.342088, 1.272116, -1.093982, 1.895128, 0.783466, -0.08059, -0.022075, -1.983908, -1.875849, 3.451604, 1.437112, -0.982526, 1.592993, 3.511598, 2.902122, 3.060736, 1.337102, 0.670592, -0.741529, 0.185494, 0.018232, -0.071664, 1.104476, -0.640802, 1.384555, -3.627866, 2.808024, -2.811583, 3.564003, 2.936099, 3.068819, 1.597346, 0.879368, -0.777738, -0.667959, -0.168069, -0.499335, -2.771841, -0.673577, -0.341905, -0.705034, 0.5614, -0.411195, 1.226465, 0.761832, -0.963339, 2.368508, -1.998333, 2.014703, 0.788813, 0.374588, 0.989382, 1.61828, 0.786963, -0.620228 ], "llr_stats": { "count": 174, "avg_abs": 1.585702, "min_abs": 0.00057, "max_abs": 3.878589, "positive": 107, "negative": 67, "zero": 0 }, "rank_score": 106.342808 }, { "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": "010001110001100100010001010001000100011100001000000110001010101000000001111100010001000100100010010000010100110001000110111111110000110100000100001110101110111000100101101100", "hard_bits_sha256_16": "b8992053859842de", "hard_weight_174": 68, "llr_full_174": [ 3.595107, -2.087743, 2.890209, 1.592993, 1.444088, -1.071481, -1.616675, -0.667959, 3.267449, 1.601492, 2.339312, -0.640802, -3.084383, 1.272116, 1.734539, -0.963339, 2.68093, 2.348588, 2.200754, -0.741529, 0.055368, 2.159354, 0.341822, -0.705034, 1.631146, -1.020343, 0.075536, 2.936099, 0.886974, -1.983908, 0.91998, 0.374588, 2.723723, -3.418347, 3.442602, 3.060736, 2.867395, -0.00057, -0.997897, -2.771841, 0.085492, 2.311624, 1.843682, 2.808024, -1.443267, 0.783466, 1.82367, 2.014703, 3.878589, 1.208803, 2.825522, -0.071664, -0.798712, 0.213622, 2.779974, 1.226465, -0.218005, 2.139124, -0.02153, 0.879368, -3.744063, 1.437112, -0.396257, 0.786963, 3.235945, 1.182634, 1.62877, 2.902122, 3.211936, 0.004984, 1.694474, -0.499335, -0.001307, -2.131525, -2.559199, -3.627866, 2.328365, 1.895128, 0.479533, -1.998333, 2.815758, 2.891885, 2.217981, 0.018232, 1.206337, 0.822402, 1.328884, -0.411195, 0.231641, 2.051601, -0.391078, 1.597346, 1.779638, 3.451604, -0.998807, 1.61828, 1.54627, -3.135968, 2.1608, 0.670592, 0.315753, 2.307302, 0.931299, -0.341905, 1.438205, -0.099794, 0.613777, 3.564003, -1.807949, -0.022075, 1.446893, 0.788813, 3.213009, -0.779418, 2.69733, 1.104476, 1.668942, -0.342088, -1.932919, 0.761832, -1.63158, -1.511435, -0.107486, -0.777738, -2.974191, -0.982526, -0.734635, -0.620228, 3.037092, 1.169333, 1.720087, 3.511598, -2.487475, -1.913352, 1.062531, -0.168069, 0.029294, 2.964235, 2.866248, 1.384555, 2.269732, -1.093982, 0.654794, 2.368508, 2.304873, 2.090533, -2.618929, 0.185494, -0.157071, 3.463112, -0.251999, 0.5614, -0.660757, -3.223933, -0.009807, 3.068819, -0.629815, -1.875849, -0.895451, 0.989382, 1.486355, 2.875371, -3.024483, 1.337102, 3.437723, -0.005001, 0.428425, -0.673577, -2.439579, 0.148054, -2.129783, -2.811583, 1.146529, -0.08059 ], "llr_stats": { "count": 174, "avg_abs": 1.585702, "min_abs": 0.00057, "max_abs": 3.878589, "positive": 107, "negative": 67, "zero": 0 }, "rank_score": 106.342808 }, { "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": "001000010110001010100000011110100011001011000110001100001010001100000110001000100101011001111000010110010101100100010100100011110010000000011001010001010000001101011000011011", "hard_bits_sha256_16": "b63c02eb4d5d7190", "hard_weight_174": 68, "llr_full_174": [ 3.595107, 3.451604, -0.02153, 1.668942, 0.5614, 1.208803, 1.438205, -3.627866, 1.82367, -3.024483, -0.00057, 2.815758, 0.670592, 0.341822, -0.629815, 0.788813, -1.020343, 3.211936, -0.777738, 1.169333, 2.866248, 1.272116, 1.486355, 3.511598, 1.694474, -1.443267, -0.963339, -2.131525, -0.218005, 2.936099, -0.998807, 2.217981, 3.463112, 0.029294, -0.071664, -1.932919, 2.890209, 0.786963, -1.511435, 0.055368, -2.771841, -3.135968, 0.613777, -0.08059, 3.235945, -0.982526, -1.616675, 2.269732, 1.226465, 1.601492, -0.660757, -2.811583, 0.91998, 2.200754, 2.307302, 3.213009, 0.185494, 1.328884, -3.744063, 0.989382, 2.051601, 3.437723, -0.168069, -3.418347, 1.843682, 1.895128, 2.68093, 3.060736, 0.428425, -1.807949, -1.998333, 0.148054, 1.444088, 1.597346, -0.734635, 2.69733, 0.213622, 0.085492, -0.640802, 0.654794, 1.62877, -1.913352, 1.206337, -0.341905, 2.090533, -0.009807, -1.983908, 3.037092, 1.437112, -0.107486, -3.084383, -0.411195, -0.779418, 1.631146, 2.808024, 1.446893, 2.1608, -0.005001, 3.878589, -0.741529, -0.251999, 1.779638, 0.374588, -3.223933, 2.867395, -0.667959, 1.182634, -2.559199, -1.093982, 1.54627, 2.902122, -0.997897, 1.146529, 2.368508, 2.311624, -1.63158, 3.068819, -0.396257, 2.825522, 0.822402, -0.001307, 1.104476, 1.734539, 1.720087, -0.620228, -1.071481, -0.157071, -0.673577, 2.348588, 0.075536, -0.022075, 2.723723, 1.592993, 1.062531, 2.328365, 0.761832, 2.964235, 0.231641, 3.564003, -0.895451, -2.618929, 2.159354, 3.267449, 0.018232, 2.779974, -2.974191, 1.61828, 2.139124, 0.315753, -0.499335, 2.875371, -2.129783, 0.783466, 2.304873, 1.337102, 0.931299, 0.886974, 2.014703, -0.099794, -2.487475, 0.879368, -2.087743, 2.339312, -0.342088, -2.439579, 1.384555, 0.479533, 3.442602, 0.004984, -0.798712, -0.705034, 2.891885, -0.391078, -1.875849 ], "llr_stats": { "count": 174, "avg_abs": 1.585702, "min_abs": 0.00057, "max_abs": 3.878589, "positive": 107, "negative": 67, "zero": 0 }, "rank_score": 106.342808 }, { "name": "lab_mask_xor_preview", "description": "Deterministic lab-only XOR mask preview; not the real JS8 whitening polynomial.", "bit_count": 174, "llr_count": 174, "complete_174bit_candidate": true, "hard_bits_174": "100000110011100011100010111111100111110100110110011010000101011101000000010111110011001010111100010110000110100110010011100010111110011101000100000100011000000011110011011011", "hard_bits_sha256_16": "fdbdf99c400d8fc3", "hard_weight_174": 86, "llr_full_174": [ 3.97418, 3.88521, 3.595107, 2.959276, 1.814096, 2.723723, 3.560461, 3.458174, 2.68093, 3.987519, 3.933672, 3.878589, -3.832182, -0.089283, 0.029294, -3.130713, -1.875167, -2.439579, 0.619573, -0.757489, -0.660757, 3.194903, -3.163131, -1.63158, 4.164351, 4.097975, 3.211936, -0.95288, 0.357277, 0.315753, -4.207657, -1.748394, 1.206337, -3.223279, -2.849812, -3.084383, 2.565229, -2.428139, -1.443267, -4.245366, -1.865991, 0.886974, 3.570442, 3.594874, -3.744063, 4.251272, 4.031745, 1.720087, -3.123085, -2.702687, -3.024483, -3.768259, -3.317727, -2.618929, 3.584166, 3.533642, 2.69733, 3.287228, -2.502631, -2.559199, -0.077355, 0.255066, 0.613777, -3.973349, 0.111616, -0.391078, -3.62632, -1.846087, -1.616675, -3.670105, -0.988042, -0.997897, -2.116817, -1.903056, 0.341822, -2.359812, -2.483697, 2.779974, 4.194521, 1.919288, 0.654794, -1.400655, 1.71415, 1.446893, -2.376504, 0.904259, -0.998807, -2.124451, -1.639487, -2.087743, 3.921789, -3.743445, -3.418347, 3.609661, 3.559494, 2.348588, -4.092575, -1.684572, 1.208803, -3.446915, -2.696081, 2.964235, 1.721757, -1.638686, 0.148054, -3.544803, -2.417021, -3.223933, -4.133556, 2.025931, -1.511435, 0.043763, -0.229575, 0.004984, 4.180876, 4.131755, 2.307302, -1.450192, 0.560624, 0.822402, -2.398868, -2.808398, 1.272116, 0.205078, -0.216872, 0.783466, 4.155958, 4.133171, -1.983908, -2.902462, -1.896431, 1.437112, 3.82675, 3.684946, 3.511598, -1.518836, 1.24689, 1.337102, -0.761545, 0.197774, 0.185494, -4.236574, -1.440389, 1.104476, 3.635987, -3.387134, -3.627866, 3.829679, 3.69754, 3.564003, -1.368584, 1.460526, 1.597346, -3.471709, 0.532839, -0.667959, -0.99505, 0.772037, -2.771841, 0.512883, -2.24179, -0.705034, -1.631603, 1.60442, 1.226465, -2.392533, -3.158724, 2.368508, 3.286767, 1.081328, 0.788813, -1.20036, 1.264156, 1.61828 ], "llr_stats": { "count": 174, "avg_abs": 2.255602, "min_abs": 0.004984, "max_abs": 4.251272, "positive": 90, "negative": 84, "zero": 0 }, "rank_score": 101.022408 } ], "outputs": { "candidate_json": "/decoders/js8_decoder/runtime/step83_fec_candidates/js8_quick_selected_window_fec_candidate_step17.json", "selected_bits_file": "/decoders/js8_decoder/runtime/step83_fec_candidates/js8_quick_selected_window_fec_candidate_step17.bits" }, "decodes": [], "warnings": [ "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] step83 candidate-export exit_code=0 ========== STEP83 4/8: POST-LDPC INFO87 RUNTIME EXPORT ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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/step83_quick_windows/js8_quick_selected_window.wav", "log_dir": "/decoders/js8_decoder/logs", "output_dir": "/decoders/js8_decoder/runtime/step83_post_ldpc_info87", "candidate_json": "/decoders/js8_decoder/runtime/step83_post_ldpc_info87/js8_quick_selected_window_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": 3, "best_runtime_info87_row": { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_10", "info87_bits": [ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0 ], "info87_bitstring": "111000011001001111001011010111101001101011101100101100111001011100110110010100111000100", "info87_llr": [ -3.047977, -4.155958, -0.023191, 4.207657, 1.410739, 1.665052, 1.454181, -2.438653, -4.194521, 2.219934, 0.11664, -3.560461, 0.334628, 1.637406, -0.59767, -0.397646, -1.721757, -2.878713, 1.368584, 1.213799, -3.584166, 2.541138, -1.561438, -2.914095, 3.62632, -0.897682, 1.631603, -1.885947, -0.619573, -3.082027, -0.779222, 2.234197, -4.180876, 0.087415, 0.761545, -1.416808, -3.570442, 0.319197, -1.933004, -0.058456, -0.366029, -3.921789, -0.168437, 0.08294, -3.97418, -0.830881, 1.718498, 2.287441, -1.436738, 4.092575, 0.10321, -3.635987, 0.421501, 3.123085, -2.173662, -3.277529, -0.140416, 2.116817, 2.52803, -3.286767, 2.060533, -4.164351, -0.178782, -2.566592, 2.471665, 2.398868, -2.325211, -3.82675, 0.441255, -2.565229, -1.451881, 0.291266, 3.020824, -1.326915, 2.376504, -2.359538, 0.068614, 3.832182, -0.611708, -0.495566, -3.513463, 4.133556, 1.729699, 0.99505, -2.936336, 0.077355, 1.766309 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 39, 76, 85, 43, 33, 50, 10, 56, 42, 62, 71, 37, 12, 40, 15, 52, 68 ], "message174_crc12": { "ok": true, "distance": 3, "crc_match": false, "received_crc12": 2500, "computed_crc12": 2188, "message_preview_12chars": "uPFBNfhiivSs", "message_words_6bit": [ 56, 25, 15, 11, 23, 41, 43, 44, 44, 57, 28, 54 ] }, "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_ft8_gray_primary_demap_msb_input+no_interleaver" }, "runtime_info87_rows_preview": [ { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_10", "info87_bits": [ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0 ], "info87_bitstring": "111000011001001111001011010111101001101011101100101100111001011100110110010100111000100", "info87_llr": [ -3.047977, -4.155958, -0.023191, 4.207657, 1.410739, 1.665052, 1.454181, -2.438653, -4.194521, 2.219934, 0.11664, -3.560461, 0.334628, 1.637406, -0.59767, -0.397646, -1.721757, -2.878713, 1.368584, 1.213799, -3.584166, 2.541138, -1.561438, -2.914095, 3.62632, -0.897682, 1.631603, -1.885947, -0.619573, -3.082027, -0.779222, 2.234197, -4.180876, 0.087415, 0.761545, -1.416808, -3.570442, 0.319197, -1.933004, -0.058456, -0.366029, -3.921789, -0.168437, 0.08294, -3.97418, -0.830881, 1.718498, 2.287441, -1.436738, 4.092575, 0.10321, -3.635987, 0.421501, 3.123085, -2.173662, -3.277529, -0.140416, 2.116817, 2.52803, -3.286767, 2.060533, -4.164351, -0.178782, -2.566592, 2.471665, 2.398868, -2.325211, -3.82675, 0.441255, -2.565229, -1.451881, 0.291266, 3.020824, -1.326915, 2.376504, -2.359538, 0.068614, 3.832182, -0.611708, -0.495566, -3.513463, 4.133556, 1.729699, 0.99505, -2.936336, 0.077355, 1.766309 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 39, 76, 85, 43, 33, 50, 10, 56, 42, 62, 71, 37, 12, 40, 15, 52, 68 ], "message174_crc12": { "ok": true, "distance": 3, "crc_match": false, "received_crc12": 2500, "computed_crc12": 2188, "message_preview_12chars": "uPFBNfhiivSs", "message_words_6bit": [ 56, 25, 15, 11, 23, 41, 43, 44, 44, 57, 28, 54 ] }, "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_ft8_gray_primary_demap_msb_input+no_interleaver" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_10", "info87_bits": [ 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0 ], "info87_bitstring": "111000011001001111001011010111101001101011101100101100111001011100110110010100111000100", "info87_llr": [ -3.047977, -4.155958, -0.023191, 4.207657, 1.410739, 1.665052, 1.454181, -2.438653, -4.194521, 2.219934, 0.11664, -3.560461, 0.334628, 1.637406, -0.59767, -0.397646, -1.721757, -2.878713, 1.368584, 1.213799, -3.584166, 2.541138, -1.561438, -2.914095, 3.62632, -0.897682, 1.631603, -1.885947, -0.619573, -3.082027, -0.779222, 2.234197, -4.180876, 0.087415, 0.761545, -1.416808, -3.570442, 0.319197, -1.933004, -0.058456, -0.366029, -3.921789, -0.168437, 0.08294, -3.97418, -0.830881, 1.718498, 2.287441, -1.436738, 4.092575, 0.10321, -3.635987, 0.421501, 3.123085, -2.173662, -3.277529, -0.140416, 2.116817, 2.52803, -3.286767, 2.060533, -4.164351, -0.178782, -2.566592, 2.471665, 2.398868, -2.325211, -3.82675, 0.441255, -2.565229, -1.451881, 0.291266, 3.020824, -1.326915, 2.376504, -2.359538, 0.068614, 3.832182, -0.611708, -0.495566, -3.513463, 4.133556, 1.729699, 0.99505, -2.936336, 0.077355, 1.766309 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 2, 39, 76, 85, 43, 33, 50, 10, 56, 42, 62, 71, 37, 12, 40, 15, 52, 68 ], "message174_crc12": { "ok": true, "distance": 3, "crc_match": false, "received_crc12": 2500, "computed_crc12": 2188, "message_preview_12chars": "uPFBNfhiivSs", "message_words_6bit": [ 56, 25, 15, 11, 23, 41, 43, 44, 44, 57, 28, 54 ] }, "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_5", "info87_bits": [ 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0 ], "info87_bitstring": "101111010110100000000011111100100010001100010010000000111001011000010000100111011111010", "info87_llr": [ -3.595107, 1.1952, -3.149991, -0.949382, -1.809129, -2.959276, 0.993064, -3.458174, 2.701443, -3.878589, -2.646413, 0.663626, -0.008688, 0.089283, 2.965357, 2.439579, 0.945319, 3.130713, 1.620108, 0.706913, -0.377184, 1.63158, -1.450866, -3.194903, -2.739804, -4.097975, -1.33459, -0.186534, 1.445121, 0.094196, -1.206337, 0.186371, 0.907532, 3.084383, -2.287204, 2.058558, 2.314691, 2.305738, -2.565229, -0.881087, 1.865991, -0.272949, 3.744063, -1.944022, 1.891631, 0.934905, -4.031745, 2.66712, 3.024483, 1.953202, 3.123085, 2.004651, 2.978029, 1.08372, -2.69733, -1.34906, -3.584166, 0.198463, 2.502631, -0.147196, 0.378595, -1.626016, -0.068263, 0.391078, 0.064433, 0.928286, 1.616675, -1.511443, 3.1736, -0.100065, 0.305148, 3.670105, -0.338181, 1.903056, 0.293322, -2.779974, -0.608455, -1.145169, 0.466608, -1.919288, -3.169398, -0.13226, -1.71415, -1.993399, 0.968797, -1.410878, 2.376504 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 12, 64, 62, 13, 29, 69, 81, 59, 31, 27, 57, 41, 74, 70, 72, 20, 60, 63 ], "message174_crc12": { "ok": true, "distance": 3, "crc_match": false, "received_crc12": 3834, "computed_crc12": 1626, "message_preview_12chars": "lMW3yYCI0vOG", "message_words_6bit": [ 47, 22, 32, 3, 60, 34, 12, 18, 0, 57, 24, 16 ] }, "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_5", "info87_bits": [ 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0 ], "info87_bitstring": "101111010110100000000011111100100010001100010010000000111001011000010000100111011111010", "info87_llr": [ -3.595107, 1.1952, -3.149991, -0.949382, -1.809129, -2.959276, 0.993064, -3.458174, 2.701443, -3.878589, -2.646413, 0.663626, -0.008688, 0.089283, 2.965357, 2.439579, 0.945319, 3.130713, 1.620108, 0.706913, -0.377184, 1.63158, -1.450866, -3.194903, -2.739804, -4.097975, -1.33459, -0.186534, 1.445121, 0.094196, -1.206337, 0.186371, 0.907532, 3.084383, -2.287204, 2.058558, 2.314691, 2.305738, -2.565229, -0.881087, 1.865991, -0.272949, 3.744063, -1.944022, 1.891631, 0.934905, -4.031745, 2.66712, 3.024483, 1.953202, 3.123085, 2.004651, 2.978029, 1.08372, -2.69733, -1.34906, -3.584166, 0.198463, 2.502631, -0.147196, 0.378595, -1.626016, -0.068263, 0.391078, 0.064433, 0.928286, 1.616675, -1.511443, 3.1736, -0.100065, 0.305148, 3.670105, -0.338181, 1.903056, 0.293322, -2.779974, -0.608455, -1.145169, 0.466608, -1.919288, -3.169398, -0.13226, -1.71415, -1.993399, 0.968797, -1.410878, 2.376504 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 12, 64, 62, 13, 29, 69, 81, 59, 31, 27, 57, 41, 74, 70, 72, 20, 60, 63 ], "message174_crc12": { "ok": true, "distance": 3, "crc_match": false, "received_crc12": 3834, "computed_crc12": 1626, "message_preview_12chars": "lMW3yYCI0vOG", "message_words_6bit": [ 47, 22, 32, 3, 60, 34, 12, 18, 0, 57, 24, 16 ] }, "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_interleave_codeword_to_rx_inverse+inverted_bits", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_deinterleave_rx_to_codeword" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_13", "info87_bits": [ 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0 ], "info87_bitstring": "000100110010011001000001110100101010000100011001001010111001000111000101110111001001010", "info87_llr": [ 0.023191, 0.109152, 0.003204, -0.005848, 1.467241, 1.322815, -0.441255, -0.946443, 0.106784, 0.089358, -0.701319, 0.046473, 1.416808, -2.425171, -0.064905, 0.439493, 0.495566, -1.400655, 0.991379, 0.370453, -0.094143, 2.372739, 0.779222, -2.124451, -0.270012, -0.951204, 0.159668, -0.222539, 2.566592, 3.609661, -0.355064, 0.18297, -4.092575, 0.739408, -0.783114, 0.746296, 1.174557, 1.652756, 1.721757, -1.27981, 0.261761, 0.033074, 0.375346, -1.119567, -4.133556, 1.083019, 0.592435, -0.961822, 2.325211, 3.987519, -0.352283, 1.4342, -1.522432, 1.243735, -0.087415, -3.130713, -0.65147, 1.135731, 1.819281, 0.137144, 3.047977, 2.959276, 0.163216, -3.305025, -1.665216, -2.369784, 2.057331, 0.863014, 1.436738, -2.392533, 2.494333, -1.2965, -0.46386, -0.046885, 0.397646, -1.20036, -0.134443, 0.000596, 3.104401, 1.080763, -1.353406, 1.490899, 0.337135, -1.428769, 2.173662, -1.450192, 1.205602 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 77, 2, 3, 0, 41, 11, 73, 14, 54, 9, 20, 8, 1, 76, 59, 26, 62, 31 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 3658, "computed_crc12": 3858, "message_preview_12chars": "4oP1qg4PAv75", "message_words_6bit": [ 4, 50, 25, 1, 52, 42, 4, 25, 10, 57, 7, 5 ] }, "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_primary_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_15", "info87_bits": [ 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1 ], "info87_bitstring": "001011111000011011110000000001011011111011000001110011100010111111010111001100110111111", "info87_llr": [ 0.02153, 0.107486, 0.023972, 0.000833, -1.369132, -1.328593, -0.428425, -0.931299, -0.000517, 0.003968, -0.171071, -0.016894, 1.932919, -1.734539, -0.186482, 0.281054, -1.82367, -1.446893, -0.760804, -0.68079, 0.195882, 1.42747, 0.734635, 2.087743, 0.356429, 0.345315, 0.157558, 0.076637, 3.135968, -2.348588, 0.183124, -0.25836, -1.208803, 0.779418, -0.628706, -0.667749, -0.567925, -0.917604, -0.148054, 0.099794, -0.109547, -0.088963, 0.936453, 1.399062, 1.511435, 1.071481, 0.19658, -0.283961, -2.815758, -3.878589, 0.80317, 0.8399, -1.96837, -0.721557, -0.085492, 2.439579, 0.394728, 0.345352, -1.199431, 0.605074, -3.235945, -2.723723, -0.007436, -0.285474, -2.828506, -1.264543, 1.217978, -0.84723, 0.963339, -2.368508, -2.162966, -1.040933, 0.103309, 0.17878, -0.989382, -1.61828, 0.001049, 0.000656, -0.431521, -0.448768, 1.338373, -1.3742, -0.718002, -0.760588, -3.463112, -0.822402, -0.871297 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 8, 77, 3, 76, 9, 62, 11, 0, 2, 27, 54, 41, 39, 72, 1, 40, 38, 26 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2495, "computed_crc12": 186, "message_preview_12chars": "BuRm1Rx1pY+N", "message_words_6bit": [ 11, 56, 27, 48, 1, 27, 59, 1, 51, 34, 63, 23 ] }, "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+inverted_bits", "variant": "mapped_ft8_gray_alt_high_demap_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_6", "info87_bits": [ 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0 ], "info87_bitstring": "110100000111011001000011111000001011000100011101001001110101000111100101110101000111010", "info87_llr": [ -0.107486, -0.02153, 0.000853, 0.000395, 1.453559, 1.308647, 0.931299, 0.428425, 0.004579, -0.000456, -0.700738, -0.066116, 1.734539, -1.932919, -0.323275, 0.190468, 0.479533, -1.400655, 0.510131, 0.895273, 0.210905, 2.366177, -0.396257, -2.124451, -0.092593, -0.925269, -0.443723, 0.074379, 2.875371, 3.609661, 0.652368, 0.346167, -4.092575, 1.601492, -1.475376, -0.649796, 0.644605, 1.379848, 1.721757, -1.020343, 0.571953, 0.380363, 0.353638, -1.047591, -4.133556, -1.913352, 1.32986, -0.455157, 2.304873, 3.987519, -0.78203, 0.875538, 1.751632, -1.094196, -0.001307, -3.130713, 0.446137, -1.083605, 0.829256, 0.148798, 3.037092, 2.959276, 0.073203, -2.986277, -1.763023, -2.364375, -2.089509, 1.266954, 0.761832, -2.392533, 2.486479, -1.29019, -1.261046, -0.358262, 0.374588, -1.20036, -0.017459, -0.083052, 3.056828, 1.059509, 1.509939, -1.226631, -0.69291, -0.872813, 2.159354, -1.450192, 1.106864 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 3, 9, 2, 54, 8, 76, 1, 11, 62, 27, 77, 24, 0, 59, 15, 20, 14, 31 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2618, "computed_crc12": 2076, "message_preview_12chars": "q7P3uB4T9r7b", "message_words_6bit": [ 52, 7, 25, 3, 56, 11, 4, 29, 9, 53, 7, 37 ] }, "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+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_13", "info87_bits": [ 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0 ], "info87_bitstring": "000100110010011001000001110100101010000100011001001010111001000111000101110111001001010", "info87_llr": [ 0.023191, 0.109152, 0.003204, -0.005848, 1.467241, 1.322815, -0.441255, -0.946443, 0.106784, 0.089358, -0.701319, 0.046473, 1.416808, -2.425171, -0.064905, 0.439493, 0.495566, -1.400655, 0.991379, 0.370453, -0.094143, 2.372739, 0.779222, -2.124451, -0.270012, -0.951204, 0.159668, -0.222539, 2.566592, 3.609661, -0.355064, 0.18297, -4.092575, 0.739408, -0.783114, 0.746296, 1.174557, 1.652756, 1.721757, -1.27981, 0.261761, 0.033074, 0.375346, -1.119567, -4.133556, 1.083019, 0.592435, -0.961822, 2.325211, 3.987519, -0.352283, 1.4342, -1.522432, 1.243735, -0.087415, -3.130713, -0.65147, 1.135731, 1.819281, 0.137144, 3.047977, 2.959276, 0.163216, -3.305025, -1.665216, -2.369784, 2.057331, 0.863014, 1.436738, -2.392533, 2.494333, -1.2965, -0.46386, -0.046885, 0.397646, -1.20036, -0.134443, 0.000596, 3.104401, 1.080763, -1.353406, 1.490899, 0.337135, -1.428769, 2.173662, -1.450192, 1.205602 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 77, 2, 3, 0, 41, 11, 73, 14, 54, 9, 20, 8, 1, 76, 59, 26, 62, 31 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 3658, "computed_crc12": 3858, "message_preview_12chars": "4oP1qg4PAv75", "message_words_6bit": [ 4, 50, 25, 1, 52, 42, 4, 25, 10, 57, 7, 5 ] }, "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, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1 ], "info87_bitstring": "001011111000011011110000000001011011111011000001110011100010111111010111001100110111111", "info87_llr": [ 0.02153, 0.107486, 0.023972, 0.000833, -1.369132, -1.328593, -0.428425, -0.931299, -0.000517, 0.003968, -0.171071, -0.016894, 1.932919, -1.734539, -0.186482, 0.281054, -1.82367, -1.446893, -0.760804, -0.68079, 0.195882, 1.42747, 0.734635, 2.087743, 0.356429, 0.345315, 0.157558, 0.076637, 3.135968, -2.348588, 0.183124, -0.25836, -1.208803, 0.779418, -0.628706, -0.667749, -0.567925, -0.917604, -0.148054, 0.099794, -0.109547, -0.088963, 0.936453, 1.399062, 1.511435, 1.071481, 0.19658, -0.283961, -2.815758, -3.878589, 0.80317, 0.8399, -1.96837, -0.721557, -0.085492, 2.439579, 0.394728, 0.345352, -1.199431, 0.605074, -3.235945, -2.723723, -0.007436, -0.285474, -2.828506, -1.264543, 1.217978, -0.84723, 0.963339, -2.368508, -2.162966, -1.040933, 0.103309, 0.17878, -0.989382, -1.61828, 0.001049, 0.000656, -0.431521, -0.448768, 1.338373, -1.3742, -0.718002, -0.760588, -3.463112, -0.822402, -0.871297 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 8, 77, 3, 76, 9, 62, 11, 0, 2, 27, 54, 41, 39, 72, 1, 40, 38, 26 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2495, "computed_crc12": 186, "message_preview_12chars": "BuRm1Rx1pY+N", "message_words_6bit": [ 11, 56, 27, 48, 1, 27, 59, 1, 51, 34, 63, 23 ] }, "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_6", "info87_bits": [ 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0 ], "info87_bitstring": "110100000111011001000011111000001011000100011101001001110101000111100101110101000111010", "info87_llr": [ -0.107486, -0.02153, 0.000853, 0.000395, 1.453559, 1.308647, 0.931299, 0.428425, 0.004579, -0.000456, -0.700738, -0.066116, 1.734539, -1.932919, -0.323275, 0.190468, 0.479533, -1.400655, 0.510131, 0.895273, 0.210905, 2.366177, -0.396257, -2.124451, -0.092593, -0.925269, -0.443723, 0.074379, 2.875371, 3.609661, 0.652368, 0.346167, -4.092575, 1.601492, -1.475376, -0.649796, 0.644605, 1.379848, 1.721757, -1.020343, 0.571953, 0.380363, 0.353638, -1.047591, -4.133556, -1.913352, 1.32986, -0.455157, 2.304873, 3.987519, -0.78203, 0.875538, 1.751632, -1.094196, -0.001307, -3.130713, 0.446137, -1.083605, 0.829256, 0.148798, 3.037092, 2.959276, 0.073203, -2.986277, -1.763023, -2.364375, -2.089509, 1.266954, 0.761832, -2.392533, 2.486479, -1.29019, -1.261046, -0.358262, 0.374588, -1.20036, -0.017459, -0.083052, 3.056828, 1.059509, 1.509939, -1.226631, -0.69291, -0.872813, 2.159354, -1.450192, 1.106864 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 3, 9, 2, 54, 8, 76, 1, 11, 62, 27, 77, 24, 0, 59, 15, 20, 14, 31 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2618, "computed_crc12": 2076, "message_preview_12chars": "q7P3uB4T9r7b", "message_words_6bit": [ 52, 7, 25, 3, 56, 11, 4, 29, 9, 53, 7, 37 ] }, "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_2", "info87_bits": [ 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0 ], "info87_bitstring": "000011010010100011010000111010010111110101010111110100000011001001110011000100001000110", "info87_llr": [ 0.109152, 0.15427, 3.436287, 1.208803, -0.180994, -0.134256, 1.855615, -3.019462, 0.913454, 2.847421, -0.111623, 0.090034, -1.840237, -0.103331, 0.31857, 3.211936, -1.193577, -0.459023, 2.898272, -1.163605, 0.15367, 3.511598, 1.407238, 0.765997, -0.395442, -0.921153, -0.503957, 2.947802, -0.561645, 0.435152, 3.508884, -2.725181, 0.78486, -2.425171, 0.003413, 0.0463, -1.511435, -0.633942, 1.129622, -3.717748, 0.191774, -2.619239, 3.249021, -0.134714, -0.045788, -2.346952, -1.099571, -1.289165, -0.660757, -0.013967, 0.617033, -2.179373, 1.398706, 1.142309, 0.185494, 0.32533, 2.389458, 1.01768, -1.705081, -0.566319, 0.51066, 2.62823, -0.225079, 0.807113, 1.574741, -0.462502, -0.946443, -0.658067, 2.74253, 0.148054, -2.362161, -0.046043, 0.436728, 0.527376, 1.059178, -0.000613, 0.030357, 0.460503, 1.643862, 0.61102, -0.223196, 0.699827, 0.557829, 0.746929, -1.983908, -0.047048, 0.080619 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 75, 34, 49, 76, 44, 71, 35, 85, 86, 11, 13, 0, 10, 5, 43, 69, 20, 1 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2118, "computed_crc12": 1238, "message_preview_12chars": "3IZGwNrNq39p", "message_words_6bit": [ 3, 18, 35, 16, 58, 23, 53, 23, 52, 3, 9, 51 ] }, "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_2", "info87_bits": [ 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0 ], "info87_bitstring": "000011010010100011010000111010010111110101010111110100000011001001110011000100001000110", "info87_llr": [ 0.109152, 0.15427, 3.436287, 1.208803, -0.180994, -0.134256, 1.855615, -3.019462, 0.913454, 2.847421, -0.111623, 0.090034, -1.840237, -0.103331, 0.31857, 3.211936, -1.193577, -0.459023, 2.898272, -1.163605, 0.15367, 3.511598, 1.407238, 0.765997, -0.395442, -0.921153, -0.503957, 2.947802, -0.561645, 0.435152, 3.508884, -2.725181, 0.78486, -2.425171, 0.003413, 0.0463, -1.511435, -0.633942, 1.129622, -3.717748, 0.191774, -2.619239, 3.249021, -0.134714, -0.045788, -2.346952, -1.099571, -1.289165, -0.660757, -0.013967, 0.617033, -2.179373, 1.398706, 1.142309, 0.185494, 0.32533, 2.389458, 1.01768, -1.705081, -0.566319, 0.51066, 2.62823, -0.225079, 0.807113, 1.574741, -0.462502, -0.946443, -0.658067, 2.74253, 0.148054, -2.362161, -0.046043, 0.436728, 0.527376, 1.059178, -0.000613, 0.030357, 0.460503, 1.643862, 0.61102, -0.223196, 0.699827, 0.557829, 0.746929, -1.983908, -0.047048, 0.080619 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 75, 34, 49, 76, 44, 71, 35, 85, 86, 11, 13, 0, 10, 5, 43, 69, 20, 1 ], "message174_crc12": { "ok": true, "distance": 4, "crc_match": false, "received_crc12": 2118, "computed_crc12": 1238, "message_preview_12chars": "3IZGwNrNq39p", "message_words_6bit": [ 3, 18, 35, 16, 58, 23, 53, 23, 52, 3, 9, 51 ] }, "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_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_17", "info87_bits": [ 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "001010100000000000111100000110111101001011001111001101101000000000001101010001101100010", "info87_llr": [ -1.20036, 1.62877, -1.913352, -0.640802, 0.085492, -2.359812, -0.341905, -0.95288, 2.090533, 0.205078, -0.009807, -1.998333, -1.807949, -3.446915, 3.060736, 2.959276, 0.428425, 3.829679, 1.444088, -0.734635, 0.213622, -3.768259, 0.989382, -4.245366, 2.051601, -1.518836, 3.213009, 1.328884, -0.168069, 3.437723, -2.124451, 1.895128, 1.843682, 0.512883, 2.269732, 1.601492, -0.982526, 3.235945, -3.973349, -2.811583, -3.130713, 0.91998, 0.043763, 2.200754, 0.786963, 2.890209, -3.544803, -0.071664, 3.987519, -1.932919, -3.471709, 0.055368, -3.135968, -0.08059, 3.287228, -0.963339, -3.223279, -2.131525, -2.902462, 1.486355, 1.694474, 2.936099, -0.218005, -1.400655, 3.463112, 2.217981, -2.392533, -0.629815, -1.020343, 0.670592, 2.815758, -3.670105, -0.777738, 3.194903, 1.169333, -1.450192, 2.866248, 0.5614, 1.668942, 3.609661, 3.451604, -0.02153, -4.236574, 1.438205, 1.82367, -0.00057, 4.251272 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 85, 10, 81, 42, 51, 47, 53, 4, 28, 9, 20, 62, 6, 16, 33, 77, 67, 3 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 866, "computed_crc12": 3186, "message_preview_12chars": "AW0y6zBFDe0D", "message_words_6bit": [ 10, 32, 0, 60, 6, 61, 11, 15, 13, 40, 0, 13 ] }, "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_interleave_codeword_to_rx_inverse", "variant": "reverse_symbol_order" }, { "source": "matrix_probe.post_ldpc_info87_llr_rows", "row_name": "matrix_export_17", "info87_bits": [ 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "001010100000000000111100000110111101001011001111001101101000000000001101010001101100010", "info87_llr": [ -1.20036, 1.62877, -1.913352, -0.640802, 0.085492, -2.359812, -0.341905, -0.95288, 2.090533, 0.205078, -0.009807, -1.998333, -1.807949, -3.446915, 3.060736, 2.959276, 0.428425, 3.829679, 1.444088, -0.734635, 0.213622, -3.768259, 0.989382, -4.245366, 2.051601, -1.518836, 3.213009, 1.328884, -0.168069, 3.437723, -2.124451, 1.895128, 1.843682, 0.512883, 2.269732, 1.601492, -0.982526, 3.235945, -3.973349, -2.811583, -3.130713, 0.91998, 0.043763, 2.200754, 0.786963, 2.890209, -3.544803, -0.071664, 3.987519, -1.932919, -3.471709, 0.055368, -3.135968, -0.08059, 3.287228, -0.963339, -3.223279, -2.131525, -2.902462, 1.486355, 1.694474, 2.936099, -0.218005, -1.400655, 3.463112, 2.217981, -2.392533, -0.629815, -1.020343, 0.670592, 2.815758, -3.670105, -0.777738, 3.194903, 1.169333, -1.450192, 2.866248, 0.5614, 1.668942, 3.609661, 3.451604, -0.02153, -4.236574, 1.438205, 1.82367, -0.00057, 4.251272 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 85, 10, 81, 42, 51, 47, 53, 4, 28, 9, 20, 62, 6, 16, 33, 77, 67, 3 ], "message174_crc12": { "ok": true, "distance": 5, "crc_match": false, "received_crc12": 866, "computed_crc12": 3186, "message_preview_12chars": "AW0y6zBFDe0D", "message_words_6bit": [ 10, 32, 0, 60, 6, 61, 11, 15, 13, 40, 0, 13 ] }, "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_12", "info87_bits": [ 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1 ], "info87_bitstring": "101011111010010100111001111111001010011010010100010100110001110101111111011101111011111", "info87_llr": [ -3.97418, 1.763023, -0.078888, 0.798712, -0.154149, -0.397325, -1.631146, -1.509939, -0.454024, 3.123085, -0.004579, 0.004094, 0.741529, -0.571953, 1.261046, -3.286767, 0.092593, 0.096735, -0.879368, -0.446137, -0.938269, 2.398868, 1.210346, -1.453559, -1.062531, -0.887838, -0.644605, -2.311624, -0.189591, -0.210905, 2.376504, 1.888363, -1.751632, 3.832182, 0.017459, -0.012762, 2.974191, -0.556587, -0.599448, 0.157071, -0.072162, 0.873716, 0.077355, -0.000853, 0.020054, -1.592993, 1.475376, 2.089509, 1.631603, -0.510131, 0.223775, -2.808024, 0.78203, 0.69291, -4.180876, -2.93074, 0.700738, 0.251999, 0.238069, -0.353638, -2.139124, -1.751902, 0.443723, -3.921789, 1.978019, -0.829256, -3.560461, -2.486479, -0.822253, -1.146529, -0.837572, -1.187952, 2.487475, -1.106864, -0.233518, -3.584166, 0.323275, -0.000221, -1.384555, -1.32986, -3.056828, 1.071481, -1.034034, -0.652368, -2.891885, -0.06759, -0.073203 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 77, 43, 11, 10, 35, 34, 44, 85, 40, 86, 42, 2, 16, 17, 4, 39, 28, 29 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 3039, "computed_crc12": 1436, "message_preview_12chars": "hwKv+AQKKnr+", "message_words_6bit": [ 43, 58, 20, 57, 63, 10, 26, 20, 20, 49, 53, 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_alt_high_demap_msb_input+no_interleaver+inverted_bits", "variant": "mapped_ft8_gray_alt_high_demap_msb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_2", "info87_bits": [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1 ], "info87_bitstring": "000000010010110011010000111010010110110101000111110100110011001001110010000000001000101", "info87_llr": [ 0.109152, 0.15427, 3.436287, 1.208803, -0.180994, -0.134256, 1.855615, -3.019462, 0.913454, 2.847421, -0.111623, 0.090034, -1.840237, -0.103331, 0.31857, 3.211936, -1.193577, -0.459023, 2.898272, -1.163605, 0.15367, 3.511598, 1.407238, 0.765997, -0.395442, -0.921153, -0.503957, 2.947802, -0.561645, 0.435152, 3.508884, -2.725181, 0.78486, -2.425171, 0.003413, 0.0463, -1.511435, -0.633942, 1.129622, -3.717748, 0.191774, -2.619239, 3.249021, -0.134714, -0.045788, -2.346952, -1.099571, -1.289165, -0.660757, -0.013967, 0.617033, -2.179373, 1.398706, 1.142309, 0.185494, 0.32533, 2.389458, 1.01768, -1.705081, -0.566319, 0.51066, 2.62823, -0.225079, 0.807113, 1.574741, -0.462502, -0.946443, -0.658067, 2.74253, 0.148054, -2.362161, -0.046043, 0.436728, 0.527376, 1.059178, -0.000613, 0.030357, 0.460503, 1.643862, 0.61102, -0.223196, 0.699827, 0.557829, 0.746929, -1.983908, -0.047048, 0.080619 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 75, 34, 49, 76, 44, 71, 35, 85, 86, 11, 13, 0, 10, 5, 43, 69, 20, 1 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 69, "computed_crc12": 310, "message_preview_12chars": "0IpGwMr7qp9o", "message_words_6bit": [ 0, 18, 51, 16, 58, 22, 53, 7, 52, 51, 9, 50 ] }, "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_lsb_input+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_7", "info87_bits": [ 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "000101101101001000101000111110101010001011000111010001001101110111001011100001110100010", "info87_llr": [ 3.595107, 3.507464, 0.157294, -4.207657, 0.890898, -2.210815, -1.875167, 1.627596, -3.556098, -3.024483, 0.195966, -0.228982, 1.24689, 0.321006, -0.117042, 0.788813, 0.571522, 1.58426, -1.368584, 0.781598, -1.612565, 1.272116, 0.880283, 1.684975, -3.62632, -0.897728, -1.358784, -2.696081, -0.50802, 0.617556, -0.998807, 0.86857, -3.211451, 0.029294, -0.698713, -0.046151, 3.570442, 1.248112, -0.690512, 0.357277, -0.343452, -2.602985, 0.613777, -0.067115, -0.211641, -1.896431, -1.402237, -1.108442, 1.226465, -2.299957, 0.038192, 3.635987, 1.708345, -1.392495, 2.307302, 2.637825, 0.339064, -2.116817, 1.686126, -3.592031, -2.417021, -0.306957, 3.062981, -3.418347, -1.781726, -2.19326, 2.68093, 3.232332, -0.727366, 2.565229, -2.498444, -0.25866, -3.163131, 1.25154, 1.430761, 2.69733, 0.559044, -0.463833, -1.440389, -0.376752, 0.650106, -4.133556, 0.51672, 1.171632, 3.559494, -0.076837, 0.054874 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 33, 50, 35, 86, 43, 85, 14, 2, 10, 44, 11, 71, 61, 13, 56, 40, 39, 79 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 930, "computed_crc12": 2416, "message_preview_12chars": "5j8e-gB7HDtB", "message_words_6bit": [ 5, 45, 8, 40, 62, 42, 11, 7, 17, 13, 55, 11 ] }, "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", "variant": "mapped_lsb_within_each_tone+ft8_bitrev_interleave_codeword_to_rx_inverse" }, { "source": "matrix_probe.all_matrix_probes", "row_name": "matrix_probe_8", "info87_bits": [ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "110110111101100110110000010011111101100110001010110110001010001000000011100100100100010", "info87_llr": [ -3.595107, -2.348588, 2.502631, -4.180876, -1.460526, 2.702687, -1.721757, -2.779974, -4.031745, -1.226465, 2.428139, -4.194521, -2.964235, 3.163131, 2.771841, -0.004984, -4.097975, 3.62632, -0.783466, -1.437112, -0.185494, 0.089283, 2.24179, 2.902462, 0.988042, -3.570442, 2.439579, 1.903056, -3.584166, -0.315753, -3.559494, -1.71415, -3.829679, -1.24689, 2.618929, -0.560624, -3.97418, 0.391078, 2.808398, -0.619573, -0.886974, 1.684572, 2.417021, 1.20036, -0.111616, -0.205078, -2.68093, 0.761545, -3.533642, -3.878589, 1.368584, -1.61828, -1.206337, 0.660757, 3.446915, 0.229575, -3.564003, 2.376504, -0.613777, 0.705034, 2.124451, 1.631603, -1.337102, 3.084383, 3.744063, 2.359812, 1.875167, 3.223279, 3.158724, 1.511435, -1.919288, -1.081328, -1.814096, 3.743445, 1.983908, -2.307302, 3.768259, 1.865991, -3.987519, 1.440389, 1.616675, -3.684946, 0.998807, 1.638686, 3.387134, -0.532839, 0.95288 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 15, 21, 44, 20, 45, 55, 29, 37, 85, 35, 58, 39, 53, 59, 47, 18, 40, 86 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 2338, "computed_crc12": 1536, "message_preview_12chars": "szcmJzcAsA83", "message_words_6bit": [ 54, 61, 38, 48, 19, 61, 38, 10, 54, 10, 8, 3 ] }, "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_interleave_codeword_to_rx_inverse+inverted_bits", "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_12", "info87_bits": [ 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1 ], "info87_bitstring": "101011111010010100111001111111001010011010010100010100110001110101111111011101111011111", "info87_llr": [ -3.97418, 1.763023, -0.078888, 0.798712, -0.154149, -0.397325, -1.631146, -1.509939, -0.454024, 3.123085, -0.004579, 0.004094, 0.741529, -0.571953, 1.261046, -3.286767, 0.092593, 0.096735, -0.879368, -0.446137, -0.938269, 2.398868, 1.210346, -1.453559, -1.062531, -0.887838, -0.644605, -2.311624, -0.189591, -0.210905, 2.376504, 1.888363, -1.751632, 3.832182, 0.017459, -0.012762, 2.974191, -0.556587, -0.599448, 0.157071, -0.072162, 0.873716, 0.077355, -0.000853, 0.020054, -1.592993, 1.475376, 2.089509, 1.631603, -0.510131, 0.223775, -2.808024, 0.78203, 0.69291, -4.180876, -2.93074, 0.700738, 0.251999, 0.238069, -0.353638, -2.139124, -1.751902, 0.443723, -3.921789, 1.978019, -0.829256, -3.560461, -2.486479, -0.822253, -1.146529, -0.837572, -1.187952, 2.487475, -1.106864, -0.233518, -3.584166, 0.323275, -0.000221, -1.384555, -1.32986, -3.056828, 1.071481, -1.034034, -0.652368, -2.891885, -0.06759, -0.073203 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 77, 43, 11, 10, 35, 34, 44, 85, 40, 86, 42, 2, 16, 17, 4, 39, 28, 29 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 3039, "computed_crc12": 1436, "message_preview_12chars": "hwKv+AQKKnr+", "message_words_6bit": [ 43, 58, 20, 57, 63, 10, 26, 20, 20, 49, 53, 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.post_ldpc_info87_llr_rows", "row_name": "matrix_export_2", "info87_bits": [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1 ], "info87_bitstring": "000000010010110011010000111010010110110101000111110100110011001001110010000000001000101", "info87_llr": [ 0.109152, 0.15427, 3.436287, 1.208803, -0.180994, -0.134256, 1.855615, -3.019462, 0.913454, 2.847421, -0.111623, 0.090034, -1.840237, -0.103331, 0.31857, 3.211936, -1.193577, -0.459023, 2.898272, -1.163605, 0.15367, 3.511598, 1.407238, 0.765997, -0.395442, -0.921153, -0.503957, 2.947802, -0.561645, 0.435152, 3.508884, -2.725181, 0.78486, -2.425171, 0.003413, 0.0463, -1.511435, -0.633942, 1.129622, -3.717748, 0.191774, -2.619239, 3.249021, -0.134714, -0.045788, -2.346952, -1.099571, -1.289165, -0.660757, -0.013967, 0.617033, -2.179373, 1.398706, 1.142309, 0.185494, 0.32533, 2.389458, 1.01768, -1.705081, -0.566319, 0.51066, 2.62823, -0.225079, 0.807113, 1.574741, -0.462502, -0.946443, -0.658067, 2.74253, 0.148054, -2.362161, -0.046043, 0.436728, 0.527376, 1.059178, -0.000613, 0.030357, 0.460503, 1.643862, 0.61102, -0.223196, 0.699827, 0.557829, 0.746929, -1.983908, -0.047048, 0.080619 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 75, 34, 49, 76, 44, 71, 35, 85, 86, 11, 13, 0, 10, 5, 43, 69, 20, 1 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 69, "computed_crc12": 310, "message_preview_12chars": "0IpGwMr7qp9o", "message_words_6bit": [ 0, 18, 51, 16, 58, 22, 53, 7, 52, 51, 9, 50 ] }, "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_7", "info87_bits": [ 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "000101101101001000101000111110101010001011000111010001001101110111001011100001110100010", "info87_llr": [ 3.595107, 3.507464, 0.157294, -4.207657, 0.890898, -2.210815, -1.875167, 1.627596, -3.556098, -3.024483, 0.195966, -0.228982, 1.24689, 0.321006, -0.117042, 0.788813, 0.571522, 1.58426, -1.368584, 0.781598, -1.612565, 1.272116, 0.880283, 1.684975, -3.62632, -0.897728, -1.358784, -2.696081, -0.50802, 0.617556, -0.998807, 0.86857, -3.211451, 0.029294, -0.698713, -0.046151, 3.570442, 1.248112, -0.690512, 0.357277, -0.343452, -2.602985, 0.613777, -0.067115, -0.211641, -1.896431, -1.402237, -1.108442, 1.226465, -2.299957, 0.038192, 3.635987, 1.708345, -1.392495, 2.307302, 2.637825, 0.339064, -2.116817, 1.686126, -3.592031, -2.417021, -0.306957, 3.062981, -3.418347, -1.781726, -2.19326, 2.68093, 3.232332, -0.727366, 2.565229, -2.498444, -0.25866, -3.163131, 1.25154, 1.430761, 2.69733, 0.559044, -0.463833, -1.440389, -0.376752, 0.650106, -4.133556, 0.51672, 1.171632, 3.559494, -0.076837, 0.054874 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 33, 50, 35, 86, 43, 85, 14, 2, 10, 44, 11, 71, 61, 13, 56, 40, 39, 79 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 930, "computed_crc12": 2416, "message_preview_12chars": "5j8e-gB7HDtB", "message_words_6bit": [ 5, 45, 8, 40, 62, 42, 11, 7, 17, 13, 55, 11 ] }, "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_8", "info87_bits": [ 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0 ], "info87_bitstring": "110110111101100110110000010011111101100110001010110110001010001000000011100100100100010", "info87_llr": [ -3.595107, -2.348588, 2.502631, -4.180876, -1.460526, 2.702687, -1.721757, -2.779974, -4.031745, -1.226465, 2.428139, -4.194521, -2.964235, 3.163131, 2.771841, -0.004984, -4.097975, 3.62632, -0.783466, -1.437112, -0.185494, 0.089283, 2.24179, 2.902462, 0.988042, -3.570442, 2.439579, 1.903056, -3.584166, -0.315753, -3.559494, -1.71415, -3.829679, -1.24689, 2.618929, -0.560624, -3.97418, 0.391078, 2.808398, -0.619573, -0.886974, 1.684572, 2.417021, 1.20036, -0.111616, -0.205078, -2.68093, 0.761545, -3.533642, -3.878589, 1.368584, -1.61828, -1.206337, 0.660757, 3.446915, 0.229575, -3.564003, 2.376504, -0.613777, 0.705034, 2.124451, 1.631603, -1.337102, 3.084383, 3.744063, 2.359812, 1.875167, 3.223279, 3.158724, 1.511435, -1.919288, -1.081328, -1.814096, 3.743445, 1.983908, -2.307302, 3.768259, 1.865991, -3.987519, 1.440389, 1.616675, -3.684946, 0.998807, 1.638686, 3.387134, -0.532839, 0.95288 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 15, 21, 44, 20, 45, 55, 29, 37, 85, 35, 58, 39, 53, 59, 47, 18, 40, 86 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 2338, "computed_crc12": 1536, "message_preview_12chars": "szcmJzcAsA83", "message_words_6bit": [ 54, 61, 38, 48, 19, 61, 38, 10, 54, 10, 8, 3 ] }, "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_3", "info87_bits": [ 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 ], "info87_bitstring": "001111010100111011111110111110010010111010101001000100000011001101100100110010010011000", "info87_llr": [ 3.97418, 0.72755, -2.287595, -2.000433, -0.893658, -2.702687, 0.137351, -2.359812, 3.416945, -1.631603, 2.176659, 0.618908, -1.463742, -3.163131, -0.163041, 0.043763, -3.090949, -1.616675, -0.17546, -2.585658, -0.729583, -0.089283, -0.933797, 1.437112, -0.921972, -3.744063, -0.746624, -0.925828, -1.354449, 0.869893, 3.559494, -1.581312, 2.670532, 1.24689, -1.358695, 0.528863, -0.205197, -2.170599, -2.808398, 0.572227, -4.245366, 0.473933, -2.417021, 1.551702, -0.084589, 0.094661, 3.560461, -0.177586, 3.533642, 0.004803, 1.597346, -1.121301, 1.44943, 0.327257, 2.964235, 0.210066, 3.829679, 0.563142, -0.077355, -0.356846, 1.867977, 1.01594, -1.391352, -3.223279, 0.322772, -2.571398, -1.875167, 1.598737, 1.287835, -1.213491, 0.785417, 1.081328, -1.385879, -3.743445, 0.593685, 4.180876, -0.767803, 1.308875, 3.304366, -1.440389, 1.737191, 2.40153, -2.376504, -1.263318, 2.114884, 0.489832, 0.315753 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 49, 15, 58, 44, 21, 45, 6, 14, 18, 47, 36, 55, 86, 64, 53, 59, 41, 85 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 1176, "computed_crc12": 2572, "message_preview_12chars": "FKx--Iwf43Da", "message_words_6bit": [ 15, 20, 59, 62, 62, 18, 58, 41, 4, 3, 13, 36 ] }, "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_4", "info87_bits": [ 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 ], "info87_bitstring": "001111010100111011111110111110010010111010101001000100000011001101100100110010010011000", "info87_llr": [ 3.97418, 0.72755, -2.287595, -2.000433, -0.893658, -2.702687, 0.137351, -2.359812, 3.416945, -1.631603, 2.176659, 0.618908, -1.463742, -3.163131, -0.163041, 0.043763, -3.090949, -1.616675, -0.17546, -2.585658, -0.729583, -0.089283, -0.933797, 1.437112, -0.921972, -3.744063, -0.746624, -0.925828, -1.354449, 0.869893, 3.559494, -1.581312, 2.670532, 1.24689, -1.358695, 0.528863, -0.205197, -2.170599, -2.808398, 0.572227, -4.245366, 0.473933, -2.417021, 1.551702, -0.084589, 0.094661, 3.560461, -0.177586, 3.533642, 0.004803, 1.597346, -1.121301, 1.44943, 0.327257, 2.964235, 0.210066, 3.829679, 0.563142, -0.077355, -0.356846, 1.867977, 1.01594, -1.391352, -3.223279, 0.322772, -2.571398, -1.875167, 1.598737, 1.287835, -1.213491, 0.785417, 1.081328, -1.385879, -3.743445, 0.593685, 4.180876, -0.767803, 1.308875, 3.304366, -1.440389, 1.737191, 2.40153, -2.376504, -1.263318, 2.114884, 0.489832, 0.315753 ], "info87_llr_count": 87, "least_reliable_info87_indices": [ 49, 15, 58, 44, 21, 45, 6, 14, 18, 47, 36, 55, 86, 64, 53, 59, 41, 85 ], "message174_crc12": { "ok": true, "distance": 6, "crc_match": false, "received_crc12": 1176, "computed_crc12": 2572, "message_preview_12chars": "FKx--Iwf43Da", "message_words_6bit": [ 15, 20, 59, 62, 62, 18, 58, 41, 4, 3, 13, 36 ] }, "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": {} } ], "outputs": { "post_ldpc_info87_runtime_export_json": "/decoders/js8_decoder/runtime/step83_post_ldpc_info87/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] step83 post-ldpc-info87-runtime-export exit_code=0 ========== STEP83 5/8: SOURCE-EXACT MESSAGE174 CRC12 PROBE ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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": 354, "source_reports": [ { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_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/20260528T033900Z_step83_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T180708Z_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/20260527T174048Z_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/20260527T173043Z_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/20260527T163511Z_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/20260527T162222Z_source-confirmed-message174-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T162222Z_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/20260527T145731Z_info87-source-map-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T145731Z_info87_source_map_probe_output.json", "exists": true, "info87_row_count": 25, "row_paths_preview": [ "$.best_candidate.info87_bitstring", "$.top_candidates[0].info87_bitstring", "$.top_candidates[1].info87_bitstring", "$.top_candidates[2].info87_bitstring", "$.top_candidates[3].info87_bitstring", "$.top_candidates[4].info87_bitstring", "$.top_candidates[5].info87_bitstring", "$.top_candidates[6].info87_bitstring" ] }, { "path": "/decoders/js8_decoder/logs/20260527T144602Z_info87-source-map-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T144602Z_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/20260527T143645Z_post-ldpc-info87-runtime-export_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T143645Z_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/20260527T142247Z_info87-llr-row-export_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T142247Z_info87_llr_row_export_output.json", "exists": true, "info87_row_count": 121, "row_paths_preview": [ "$.best_overall_candidate.info87_bits", "$.top_llr_row_exports[0].hard_bits", "$.top_llr_row_exports[1].hard_bits", "$.top_llr_row_exports[2].hard_bits", "$.top_llr_row_exports[3].hard_bits", "$.top_llr_row_exports[4].hard_bits", "$.top_llr_row_exports[5].hard_bits", "$.top_llr_row_exports[6].hard_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260527T141941Z_info87-ldpc-export_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T141941Z_info87_ldpc_export_output.json", "exists": true, "info87_row_count": 41, "row_paths_preview": [ "$.best_info87_export.info87_bits", "$.top_info87_exports[0].info87_bits", "$.top_info87_exports[1].info87_bits", "$.top_info87_exports[2].info87_bits", "$.top_info87_exports[3].info87_bits", "$.top_info87_exports[4].info87_bits", "$.top_info87_exports[5].info87_bits", "$.top_info87_exports[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260527T141520Z_info87-reorder-dewhiten_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T141520Z_info87_reorder_dewhiten_output.json", "exists": true, "info87_row_count": 41, "row_paths_preview": [ "$.best_candidate.candidate_bits", "$.top_candidates[0].candidate_bits", "$.top_candidates[1].candidate_bits", "$.top_candidates[2].candidate_bits", "$.top_candidates[3].candidate_bits", "$.top_candidates[4].candidate_bits", "$.top_candidates[5].candidate_bits", "$.top_candidates[6].candidate_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260527T140319Z_info87-ldpc-export_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T140319Z_info87_ldpc_export_output.json", "exists": true, "info87_row_count": 41, "row_paths_preview": [ "$.best_info87_export.info87_bits", "$.top_info87_exports[0].info87_bits", "$.top_info87_exports[1].info87_bits", "$.top_info87_exports[2].info87_bits", "$.top_info87_exports[3].info87_bits", "$.top_info87_exports[4].info87_bits", "$.top_info87_exports[5].info87_bits", "$.top_info87_exports[6].info87_bits" ] }, { "path": "/decoders/js8_decoder/logs/20260527T134516Z_message174-crc12-onebit-repair_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T134516Z_message174_crc12_onebit_repair_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T133332Z_message174-crc12-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T133332Z_message174_crc12_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T132423Z_message174-crc12-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T132423Z_message174_crc12_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T131546Z_message174-crc12-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T131546Z_message174_crc12_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T125938Z_source-message174-crc12-contract_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T125938Z_source_message174_crc12_contract_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/step55_source_message174_crc12_contract.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T111112Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T111112Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T111109Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T111109Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T110128Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T110128Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104839Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104839Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104836Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104836Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104133Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T104133Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T083033Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T083033Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T083030Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T083030Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T082046Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T082046Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T081203Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T081203Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T081200Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T081200Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T080216Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T080216Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T074601Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T074601Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T074558Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T074558Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073615Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073615Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073629Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073629Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073626Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T073626Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T072638Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T072638Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T071643Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T071643Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T071640Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T071640Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T070658Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T070658Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T065456Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T065456Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T065453Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T065453Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T064500Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T064500Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T063119Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T063119Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T063116Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T063116Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T062127Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T062127Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T060652Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T060652Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T060649Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] } ], "source_exact_map_count": 0, "map_tests": 240, "zero_distance_candidate_count": 83, "best_distance": 0, "best_candidate": { "source_file": "/decoders/js8_decoder/logs/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "row_index": 111, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "row_index": 111, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[2].hard_bits", "row_index": 113, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[3].hard_bits", "row_index": 114, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[5].hard_bits", "row_index": 116, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "row_index": 117, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[8].hard_bits", "row_index": 119, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[9].hard_bits", "row_index": 120, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[11].hard_bits", "row_index": 122, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[12].hard_bits", "row_index": 123, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[14].hard_bits", "row_index": 125, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[15].hard_bits", "row_index": 126, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[17].hard_bits", "row_index": 128, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[18].hard_bits", "row_index": 129, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[20].hard_bits", "row_index": 131, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[21].hard_bits", "row_index": 132, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[23].hard_bits", "row_index": 134, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[24].hard_bits", "row_index": 135, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[26].hard_bits", "row_index": 137, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[27].hard_bits", "row_index": 138, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[29].hard_bits", "row_index": 140, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[30].hard_bits", "row_index": 141, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[32].hard_bits", "row_index": 143, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[33].hard_bits", "row_index": 144, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_llr_row_exports[35].hard_bits", "row_index": 146, "source_kind": "generic_bit_list", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[9].info87_bits", "row_index": 180, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[10].info87_bits", "row_index": 181, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[11].info87_bits", "row_index": 182, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[12].info87_bits", "row_index": 183, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[13].info87_bits", "row_index": 184, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[14].info87_bits", "row_index": 185, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[15].info87_bits", "row_index": 186, "source_kind": "info87_bits", "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/20260527T142247Z_info87_llr_row_export_output.json", "json_path": "$.top_bit_row_exports[16].info87_bits", "row_index": 187, "source_kind": "info87_bits", "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" } ], "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] step83 source-exact-map-probe exit_code=0 ========== STEP83 6/8: SOURCE-CONFIRMED MESSAGE174 DECODE ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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/20260528T033900Z_step83_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 33, "tool_version": "step64-source-confirmed-message174-decodes-output" }, { "path": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 33, "tool_version": "step63-source-exact-interleaver-whitening-index-extract" } ], "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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-b6d145ef", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 0 }, { "id": "js8-msg174-568c15d7", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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] step83 source-confirmed-message174-decode exit_code=0 ========== STEP83 7/8: VARICODE FRAME UNPACK + CONTROL-FRAME RELEASE ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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/20260528T033900Z_step83_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-b6d145ef", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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-568c15d7", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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-b6d145ef", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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-568c15d7", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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] step83 source-varicode-frame-unpack-probe exit_code=0 [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_step83_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/20260528T033900Z_step83_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-b6d145ef", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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-568c15d7", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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-b6d145ef", "mode": "JS8", "text": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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-568c15d7", "mode": "JS8", "text": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "source": { "source_file": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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." } [webftr-js8-lab] step83 source-confirmed-control-frame-rx-release exit_code=0 ========== STEP83 8/8: REAL WAV MESSAGE174 REGENERATION SUMMARY ========== [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T033900Z_real_wav_message174_regeneration_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-real-wav-message174-regeneration", "tool_version": "step83-real-wav-message174-regeneration-chain", "schema": "webftr-js8-real-wav-message174-regeneration-v1", "created_utc": "2026-05-28T03:41:36Z", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "purpose": "Run a visible real-WAV regeneration chain from /decoders/js8_test.wav through candidate export, post-LDPC Info87, source-exact message174 CRC12 probe and guarded control-frame release.", "input_wav": "/decoders/js8_test.wav", "analysis_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "wav_was_read": true, "wav_duration_seconds": 192.016583, "quick_window_selected": true, "selected_window": { "start_seconds": 18.0, "end_seconds": 78.0, "duration_seconds": 60.0, "avg_activity_score": -6.286, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.714, "window_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "tone_candidates": [ { "freq_hz": 1000.0, "relative_db": 0.0, "power": 15.76347305 }, { "freq_hz": 1025.0, "relative_db": -0.8, "power": 13.10923242 }, { "freq_hz": 2025.0, "relative_db": -14.3, "power": 0.58516574 }, { "freq_hz": 975.0, "relative_db": -16.4, "power": 0.3608126 }, { "freq_hz": 1050.0, "relative_db": -29.42, "power": 0.01801849 }, { "freq_hz": 1525.0, "relative_db": -32.35, "power": 0.00916685 }, { "freq_hz": 1825.0, "relative_db": -32.46, "power": 0.00893784 }, { "freq_hz": 1925.0, "relative_db": -34.06, "power": 0.00619164 }, { "freq_hz": 1650.0, "relative_db": -34.23, "power": 0.0059545 }, { "freq_hz": 2575.0, "relative_db": -34.47, "power": 0.00562689 }, { "freq_hz": 1625.0, "relative_db": -34.8, "power": 0.00521457 }, { "freq_hz": 950.0, "relative_db": -35.04, "power": 0.00494236 } ] }, "selected_window_wav": "/decoders/js8_decoder/runtime/step83_quick_windows/js8_quick_selected_window.wav", "candidate_export_ok": true, "candidate_json": "/decoders/js8_decoder/runtime/step83_fec_candidates/js8_quick_selected_window_fec_candidate_step17.json", "runtime_info87_rows_count": 48, "post_ldpc_zero_distance_candidate_count": 0, "source_exact_zero_distance_candidate_count": 2, "message174_decode_count": 2, "message174_decodes_preview": [ { "id": "js8-msg174-b6d145ef", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 0 }, { "id": "js8-msg174-568c15d7", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 1 } ], "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-b6d145ef", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[0].hard_bits", "source_kind": "generic_bit_list", "row_index": 111, "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-568c15d7", "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/20260528T033900Z_step83_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 117, "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 } ], "source_chain_ran_from_real_wav_this_step": true, "exit_codes": { "input_check": 0, "quick_window_scan": 0, "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 }, "outputs": { "input_check_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_input_check_output.json", "quick_window_scan_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_quick_window_scan_output.json", "candidate_export_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_candidate_export_output.json", "post_ldpc_info87_runtime_export_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_post_ldpc_info87_runtime_export_output.json", "source_exact_map_probe_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "source_confirmed_message174_decode_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_confirmed_message174_decode_output.json", "source_varicode_frame_unpack_probe_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_varicode_frame_unpack_probe_output.json", "source_confirmed_control_frame_rx_release_json": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_confirmed_control_frame_rx_release_output.json" }, "output_stats": { "input_check_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_input_check_output.json", "exists": true, "is_file": true, "size": 698, "mtime_utc": "2026-05-28T03:39:00Z" }, "quick_window_scan_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_quick_window_scan_output.json", "exists": true, "is_file": true, "size": 8839, "mtime_utc": "2026-05-28T03:39:15Z" }, "candidate_export_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_candidate_export_output.json", "exists": true, "is_file": true, "size": 99951, "mtime_utc": "2026-05-28T03:40:17Z" }, "post_ldpc_info87_runtime_export_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_post_ldpc_info87_runtime_export_output.json", "exists": true, "is_file": true, "size": 106824, "mtime_utc": "2026-05-28T03:41:32Z" }, "source_exact_map_probe_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_exact_map_probe_output.json", "exists": true, "is_file": true, "size": 142707, "mtime_utc": "2026-05-28T03:41:35Z" }, "source_confirmed_message174_decode_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_confirmed_message174_decode_output.json", "exists": true, "is_file": true, "size": 6357, "mtime_utc": "2026-05-28T03:41:35Z" }, "source_varicode_frame_unpack_probe_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_varicode_frame_unpack_probe_output.json", "exists": true, "is_file": true, "size": 60531, "mtime_utc": "2026-05-28T03:41:36Z" }, "source_confirmed_control_frame_rx_release_json": { "path": "/decoders/js8_decoder/logs/20260528T033900Z_step83_source_confirmed_control_frame_rx_release_output.json", "exists": true, "is_file": true, "size": 9808, "mtime_utc": "2026-05-28T03:41:36Z" } }, "verdict": "step83_wav_to_message174_regeneration_confirmed", "latest_previous_contracts": { "step82_real_wav_full_chain_regression": { "path": "/decoders/js8_decoder/logs/js8_real_wav_full_chain_regression_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_real_wav_full_chain_regression_latest.json", "exists": true, "is_file": true, "size": 46354, "mtime_utc": "2026-05-28T03:19:08Z" }, "preview": { "ok": true, "tool": "webftr-js8-real-wav-full-chain-regression", "tool_version": "step82-real-wav-full-chain-regression", "schema": "webftr-js8-real-wav-full-chain-regression-v1", "created_utc": "2026-05-28T03:19:08Z", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "purpose": "Make the default Step82 run visibly re-read the real JS8 WAV and perform the fast audio path before later source/JSC logic is considered.", "verdict": "step82_real_wav_regression_complete", "input_wav": "/decoders/js8_test.wav", "analysis_wav": "/decoders/js8_decoder/runtime/step82_quick_windows/js8_quick_selected_window.wav", "wav_was_read": true, "wav_duration_seconds": 192.016583, "quick_window_selected": true, "selected_window": { "start_seconds": 18.0, "end_seconds": 78.0, "duration_seconds": 60.0, "avg_activity_score": -6.286, "active_chunks": 10, "chunk_count": 10, "selection_score": 18.714, "window_wav": "/decoders/js8_decoder/runtime/step82_quick_windows/js8_quick_selected_window.wav", "tone_candidates": [ { "freq_hz": 1000.0, "relative_db": 0.0, "power": 15.76347305 }, { "freq_hz": 1025.0, "relative_db": -0.8, "power": 13.10923242 }, { "freq_hz": 2025.0, "relative_db": -14.3, "power": 0.58516574 }, { "freq_hz": 975.0, "relative_db": -16.4, "power": 0.3608126 }, { "freq_hz": 1050.0, "relative_db": -29.42, "power": 0.01801849 }, { "freq_hz": 1525.0, "relative_db": -32.35, "power": 0.00916685 }, { "freq_hz": 1825.0, "relative_db": -32.46, "power": 0.00893784 }, { "freq_hz": 1925.0, "relative_db": -34.06, "power": 0.00619164 }, { "freq_hz": 1650.0, "relative_db": -34.23, "power": 0.0059545 }, { "freq_hz": 2575.0, "relative_db": -34.47, "power": 0.00562689 }, { "freq_hz": 1625.0, "relative_db": -34.8, "power": 0.00521457 }, { "freq_hz": 950.0, "relative_db": -35.04, "power": 0.00494236 } ] }, "selected_window_wav": "/decoders/js8_decoder/runtime/step82_quick_windows/js8_quick_selected_window.wav", "sync_candidate_count": 12, "best_sync_candidate": { "ok": true, "start_sample": 376164, "start_seconds": 31.347, "base_freq_hz": 1000.0, "tone_spacing_hz": 1.937984, "nsps": 6192, "costas_pattern": [ 3, 1, 4, 0, 6, 5, 2 ], "costas_hits": 2, "costas_symbols": 7, "avg_margin_db": 2.4, "energy_score_db": 5.26, "candidate_score": 27.66, "symbols": [ { "symbol": 0, "expected_tone": 3, "strongest_tone": 3, "expected_is_strongest": true, "expected_power": 173.3098525436, "median_other_power": 4.0136394344, "margin_db": 16.35, "tone_powers": [ 15.9425535414, 16.7064438607, 3.6144531567, 173.3098525436, 95.4717245231, 2.9193626913, 4.0136394344, 0.1693303583 ] }, { "symbol": 1, "expected_tone": 1, "strongest_tone": 3, "expected_is_strongest": false, "expected_power": 28.1803520794, "median_other_power": 18.8050880779, "margin_db": 1.76, "tone_powers": [ 20.9762208024, 28.1803520794, 5.7419781066, 71.0558343619, 24.7557112336, 18.8050880779, 2.0989356467, 0.2430214014 ] }, { "symbol": 2, "expected_tone": 4, "strongest_tone": 2, "expected_is_strongest": false, "expected_power": 71.6248687943, "median_other_power": 38.8187957059, "margin_db": 2.66, "tone_powers": [ 38.8187957059, 45.4486252133, 72.3087962275, 34.7312575895, 71.6248687943, 1.77870258, 40.2071552171, 29.3427085469 ] }, { "symbol": 3, "expected_tone": 0, "strongest_tone": 7, "expected_is_strongest": false, "expected_power": 0.2622539501, "median_other_power": 6.4065684994, "margin_db": -13.88, "tone_powers": [ 0.2622539501, 5.3123464342, 6.4065684994, 0.0185561141, 4.0123103831, 16.6485585208, 30.7318605032, 45.2413496556 ] }, { "symbol": 4, "expected_tone": 6, "strongest_tone": 2, "expected_is_strongest": false, "expected_power": 5.0109164476, "median_other_power": 4.7646757363, "margin_db": 0.22, "tone_powers": [ 4.0082543216, 2.6972288443, 7.2574165131, 5.6821055182, 4.7646757363, 6.2751230304, 5.0109164476, 3.9892771877 ] }, { "symbol": 5, "expected_tone": 5, "strongest_tone": 6, "expected_is_strongest": false, "expected_power": 16.3535460217, "median_other_power": 3.8125993628, "margin_db": 6.32, "tone_powers": [ 3.255794393, 3.8125993628, 0.106178069, 3.3903884596, 10.6058363401, 16.3535460217, 21.3440985425, 20.457437264 ] }, { "symbol": 6, "expected_tone": 2, "strongest_tone": 2, "expected_is_strongest": true, "expected_power": 69.0973179158, "median_other_power": 31.8068413839, "margin_db": 3.37, "tone_powers": [ 46.9814165652, 31.8068413839, 69.0973179158, 32.7987510886, 39.5558795637, 8.4831093131, 1.3130524868, 0.2201954402 ] } ], "symbol_preview": [ { "symbol": 0, "tone_index": 3, "confidence_db": 2.59, "powers": [ 15.9425535414, 16.7064438607, 3.6144531567, 173.3098525436, 95.4717245231, 2.9193626913, 4.0136394344, 0.1693303583 ] }, { "symbol": 1, "tone_index": 3, "confidence_db": 4.02, "powers": [ 20.9762208024, 28.1803520794, 5.7419781066, 71.0558343619, 24.7557112336, 18.8050880779, 2.0989356467, 0.2430214014 ] }, { "symbol": 2, "tone_index": 2, "confidence_db": 0.04, "powers": [ 38.8187957059, 45.4486252133, 72.3087962275, 34.7312575895, 71.6248687943, 1.77870258, 40.2071552171, 29.3427085469 ] }, { "symbol": 3, "tone_index": 7, "confidence_db": 1.68, "powers": [ 0.2622539501, 5.3123464342, 6.4065684994, 0.0185561141, 4.0123103831, 16.6485585208, 30.7318605032, 45.2413496556 ] }, { "symbol": 4, "tone_index": 2, "confidence_db": 0.63, "powers": [ 4.0082543216, 2.6972288443, 7.2574165131, 5.6821055182, 4.7646757363, 6.2751230304, 5.0109164476, 3.9892771877 ] }, { "symbol": 5, "tone_index": 6, "confidence_db": 0.18, "powers": [ 3.255794393, 3.8125993628, 0.106178069, 3.3903884596, 10.6058363401, 16.3535460217, 21.3440985425, 20.457437264 ] }, { "symbol": 6, "tone_index": 2, "confidence_db": 1.68, "powers": [ 46.9814165652, 31.8068413839, 69.0973179158, 32.7987510886, 39.5558795637, 8.4831093131, 1.3130524868, 0.2201954402 ] }, { "symbol": 7, "tone_index": 6, "confidence_db": 0.36, "powers": [ 0.0629283536, 3.0124650248, 2.468160732, 0.2225482449, 4.4643187524, 18.5556593714, 38.6239050934, 35.5384115811 ] }, { "symbol": 8, "tone_index": 0, "confidence_db": 3.58, "powers": [ 51.7003137421, 22.6654786526, 10.2647749623, 0.7338068813, 0.5959166114, 1.0856570407, 0.5900548002, 0.2839134732 ] }, { "symbol": 9, "tone_index": 3, "confidence_db": 1.07, "powers": [ 1.4796655515, 12.1054506125, 33.4390522719, 42.7952693524, 29.2713114212, 13.1339502314, 0.838227994, 0.3977469966 ] }, { "symbol": 10, "tone_index": 0, "confidence_db": 7.05, "powers": [ 3.8021340128, 0.7507762707, 0.2978649112, 0.0865288349, 0.4188550056, 0.3510137616, 0.3321666239, 0.0771960487 ] }, { "symbol": 11, "tone_index": 6, "confidence_db": 0.3, "powers": [ 0.0210093782, 1.5143422975, 3.7724887739, 0.4083904831, 3.7523006972, 24.1449148934, 40.0439871543, 37.3772424523 ] }, { "symbol": 12, "tone_index": 6, "confidence_db": 0.41, "powers": [ 0.0109343582, 1.9233440029, 2.579563716, 0.2904271254, 4.0535156863, 21.1102304339, 41.820006292, 38.0891239855 ] }, { "symbol": 13, "tone_index": 5, "confidence_db": 1.02, "powers": [ 0.172114006, 0.1445949201, 0.1822446788, 0.1639477524, 0.157369185, 0.2304836028, 0.149017709, 0.1303750464 ] }, { "symbol": 14, "tone_index": 1, "confidence_db": 2.25, "powers": [ 0.158294336, 0.8024176986, 0.4774565415, 0.171771953, 0.3435910183, 0.2150891283, 0.0664453529, 0.0117068462 ] }, { "symbol": 15, "tone_index": 0, "confidence_db": 2.82, "powers": [ 0.9429973402, 0.2194876093, 0.4927987108, 0.296484266, 0.2724135549, 0.3059153636, 0.1171919035, 0.2277210294 ] }, { "symbol": 16, "tone_index": 2, "confidence_db": 1.05, "powers": [ 0.9886947642, 15.2533994562, 46.4017479022, 36.4288409122, 33.5023068387, 4.1614953364, 1.6047486967, 1.5781366508 ] }, { "symbol": 17, "tone_index": 2, "confidence_db": 0.29, "powers": [ 38.0082486891, 50.2272680621, 53.7458997861, 39.5879636035, 28.3147057357, 5.5691491742, 0.8237785114, 0.9557250636 ] }, { "symbol": 18, "tone_index": 1, "confidence_db": 1.57, "powers": [ 0.0918783675, 0.307797933, 0.1050100761, 0.0141874336, 0.1515434304, 0.2145300217, 0.1105823567, 0.0880243845 ] }, { "symbol": 19, "tone_index": 6, "confidence_db": 0.74, "powers": [ 0.0868825702, 0.0397866232, 0.1686785232, 0.0927654971, 0.0154835097, 0.1791772439, 0.2125035654, 0.0792307676 ] }, { "symbol": 20, "tone_index": 6, "confidence_db": 0.24, "powers": [ 0.0086936555, 0.0628387052, 0.0498876206, 0.0421193635, 0.1264136464, 0.1308918823, 0.1449241888, 0.1370848814 ] }, { "symbol": 21, "tone_index": 5, "confidence_db": 0.26, "powers": [ 0.0039904011, 0.0008005547, 0.0273221681, 0.0195367608, 0.0129234533, 0.0325339455, 0.0306277596, 0.0214755839 ] }, { "symbol": 22, "tone_index": 6, "confidence_db": 2.65, "powers": [ 0.1788142554, 0.4853471741, 0.2694809704, 0.4544718388, 0.6492196999, 0.3152692631, 1.1938135494, 0.4456102593 ] }, { "symbol": 23, "tone_index": 1, "confidence_db": 5.18, "powers": [ 0.181050027, 1.6778984579, 0.4701928836, 0.307478218, 0.1431618802, 0.5094538581, 0.0631630623, 0.0575143534 ] }, { "symbol": 24, "tone_index": 1, "confidence_db": 1.35, "powers": [ 33.2015442878, 62.2968777169, 43.8426328549, 45.6891069921, 19.6205599411, 5.8107647037, 0.0185971127, 0.6717585263 ] }, { "symbol": 25, "tone_index": 4, "confidence_db": 0.16, "powers": [ 2.5571353043, 3.8143679082, 2.4766498838, 3.4608756257, 3.9561522002, 2.7219017493, 2.8968871756, 2.4777395482 ] } ] }, "exit_codes": { "input_check": 0, "quick_window_scan": 0, "sync_probe": 0 }, "outputs": { "input_check_json": "/decoders/js8_decoder/logs/20260528T031839Z_step82_input_check_output.json", "quick_window_scan_json": "/decoders/js8_decoder/logs/20260528T031839Z_step82_quick_window_scan_output.json", "sync_probe_json": "/decoders/js8_decoder/logs/20260528T031839Z_step82_sync_probe_output.json" }, "output_stats": { "input_check_json": { "path": "/decoders/js8_decoder/logs/20260528T031839Z_step82_input_check_output.json", "exists": true, "is_file": true, "size": 698, "mtime_utc": "2026-05-28T03:18:39Z" }, "quick_window_scan_json": { "path": "/decoders/js8_decoder/logs/20260528T031839Z_step82_quick_window_scan_output.json", "exists": true, "is_file": true, "size": 8839, "mtime_utc": "2026-05-28T03:18:52Z" }, "sync_probe_json": { "path": "/decoders/js8_decoder/logs/20260528T031839Z_step82_sync_probe_output.json", "exists": true, "is_file": true, "size": 60947, "mtime_utc": "2026-05-28T03:19:07Z" }, "selected_window_wav": { "path": "/decoders/js8_decoder/runtime/step82_quick_windows/js8_quick_selected_window.wav", "exists": true, "is_file": true, "size": 1440044, "mtime_utc": "2026-05-28T03:18:40Z" } }, "latest_previous_contracts": { "step68_webftr_rx_ui_contract": { "path": "/decoders/js8_decoder/logs/js8_webftr_rx_ui_contract_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_webftr_rx_ui_contract_latest.json", "exists": true, "is_file": true, "size": 5935, "mtime_utc": "2026-05-27T18:16:44Z" }, "preview": { "ok": true, "tool": "webftr-js8-webftr-rx-ui-contract-export", "tool_version": "step69-jsc-decompress-source-audit-probe", "schema": "webftr-js8-rx-ui-contract-v1", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "input_reports": [ { "path": "/decoders/js8_decoder/logs/20260527T180708Z_source_confirmed_control_frame_rx_release_output.json", "exists": true, "selected_latest_step67": true, "webftr_display_count": 2 } ], "source_step67_version": "step67-source-confirmed-control-frame-rx-release", "source_webftr_display_count": 2, "source_hidden_candidate_count": 0, "webftr_rx_ui_count": 2, "webftr_rx_rows": [ { "id": "js8-ui68-80c34aaa298675", "source_row_id": "js8-rx67-de15d3110b0d", "mode": "JS8", "protocol": "JS8", "decoder": "JS8Lab Step68 guarded control-frame contract", "row_type": "control_frame", "frame_type": "FrameHeartbeat", "status": "HB", "from": "004REY/0V4", "to": "@HB", "grid": "OJ16", "command": "HB", "message": "HB 004REY/0V4 OJ16", "text": "HB 004REY/0V4 OJ16", "display_text": "HB 004REY/0V4 OJ16", "raw_message174": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "confidence": "high", "confidence_score": 6, "confidence_reasons": [ "valid_heartbeat_callsign", "valid_heartbeat_grid" ], "show_in_rx_list": true, "ui_badge": "HB", "ui_title": "HB 004REY/0V4 OJ16", "ui_subtitle": "004REY/0V4 → @HB OJ16", "sort_index": 0, "rx_only": true, "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.best_candidate.candidate_bits", "source_kind": "generic_bit_list", "row_index": 237, "map_name": "raw", "map_source": null }, "release_guard": "step67_source_confirmed_fixed_control_frame_only", "candidate_class": "webftr_control_frame_display_ready" }, { "id": "js8-ui68-50f4e1e7052c17", "source_row_id": "js8-rx67-bd37f68199eb", "mode": "JS8", "protocol": "JS8", "decoder": "JS8Lab Step68 guarded control-frame contract", "row_type": "control_frame", "frame_type": "FrameDirected", "status": "INFO", "from": "9I2TZR/P", "to": "0Z0PMP", "grid": "", "command": "INFO", "message": "INFO 28", "text": "9I2TZR/P 0Z0PMP INFO 28", "display_text": "9I2TZR/P 0Z0PMP INFO 28", "raw_message174": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "confidence": "high", "confidence_score": 10, "confidence_reasons": [ "valid_directed_from", "valid_directed_to", "directed_command" ], "show_in_rx_list": true, "ui_badge": "INFO", "ui_title": "9I2TZR/P 0Z0PMP INFO 28", "ui_subtitle": "9I2TZR/P → 0Z0PMP", "sort_index": 1, "rx_only": true, "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 82, "map_name": "raw", "map_source": null }, "release_guard": "step67_source_confirmed_fixed_control_frame_only", "candidate_class": "webftr_control_frame_display_ready" } ], "ui_contract": { "polling_target": "logs/js8_webftr_rx_ui_contract_latest.json", "rows_key": "webftr_rx_rows", "display_fields": [ "mode", "status", "from", "to", "grid", "message", "display_text", "confidence" ], "dedupe_key": "id", "sort_key": "sort_index", "current_scope": "source-confirmed fixed JS8 control frames only", "blocked_scope": "FrameData and FrameDataCompressed remain excluded until JSC::decompress and multi-frame assembly are source-ported." }, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "suggested_module": "JS8 RX preview / diagnostics panel", "do_not_merge_as_chat_text_yet": true, "note": "This contract is stable enough for WebFTR display experiments, but it is still diagnostic and control-frame-only." }, "suppressed_candidates": [], "source_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": "webftr_rx_ui_contract_ready_control_frames_only", "warnings": [ "Step68 remains RX-only and does not start JS8Call GUI/Qt.", "Only Step67 source-confirmed fixed control frames are exported for UI display.", "Normal JS8 free text still needs JSC::decompress and multi-frame assembly before productive display." ], "next_action": "Use this contract as a read-only WebFTR JS8 RX preview source; next research step is source-porting JSC::decompress/multi-frame assembly for free text." } }, "step79_compressed_text_release_gate": { "path": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json", "exists": true, "is_file": true, "size": 3100, "mtime_utc": "2026-05-28T02:49:01Z" }, "preview": { "ok": true, "tool": "webftr-js8-real-compressed-text-release-gate", "tool_version": "step79-real-compressed-text-release-gate", "schema": "webftr-js8-real-compressed-text-release-gate-v1", "created_utc": "2026-05-28T02:49:00Z", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "state": "waiting_for_real_external_compressed_fixture", "step78_state": "operator_commands_ready_waiting_for_real_fixture", "step74_verdict": "fixture_gate_selftest_ready_waiting_for_real_compressed_frame_fixture", "external_fixture_count": 0, "external_fixture_pass_count": 0, "external_source_comparison_pass_count": 0, "synthetic_selftest_all_passed": true, "jsc_entry_count": 200000, "allow_experimental_lab_display": false, "release_candidate_count": 0, "release_candidate_rows": [], "webftr_rx_rows": [], "webftr_display_count": 0, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "step68_contract_remains_current_stable_ui_source": true, "compressed_text_latest": "/logs/js8_compressed_text_release_gate_latest.json", "do_not_merge_as_productive_chat_text_yet": true, "lab_display_requires_flag": "JS8LAB_ALLOW_EXPERIMENTAL_COMPRESSED_TEXT_RELEASE=1" }, "release_gate_policy": { "requires_external_source_comparison": true, "requires_expected_text_match": true, "requires_jsc_complete": true, "releases_only_single_frame_FrameDataCompressed": true, "multi_frame_assembly_validated": false, "productive_webftr_integration_allowed": false, "tx_ptt_tune_send_allowed": false }, "helper_files": { "step78_readme": "/decoders/js8_decoder/runtime/fixtures/README_STEP78_REAL_FIXTURE_COMMAND_EXPORT.md", "step78_print_helper": "/decoders/js8_decoder/runtime/fixtures/step78_print_fixture_commands.sh", "target_fixture_file": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json", "step74_gate_latest": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_gate_latest.json", "step78_command_latest": "/decoders/js8_decoder/logs/js8_real_fixture_command_export_latest.json" }, "warnings": [ "Step79 is a release gate, not productive WebFTR integration.", "Without a real externally confirmed compressed fixture, no compressed JS8 text is released.", "Even with a validated fixture, lab display rows require an explicit flag and multi-frame assembly remains unvalidated.", "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send." ], "verdict": "release_gate_ready_but_waiting_for_external_fixture", "next_action": "Import one externally confirmed compressed FrameDataCompressed fixture using the Step78/76 helpers, then rerun Step79.", "stable_latest_written": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json" } }, "step81_jsc_cpp_reference_compare": { "path": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json", "exists": true, "is_file": true, "size": 14399, "mtime_utc": "2026-05-28T03:07:38Z" }, "preview": { "ok": true, "tool": "webftr-js8-jsc-cpp-reference-map-transport-fix", "tool_version": "step81-jsc-cpp-reference-map-transport-fix", "schema": "webftr-js8-jsc-cpp-reference-map-transport-fix-v1", "created_utc": "2026-05-28T03:07:38Z", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "state": "cpp_reference_compare_passed_waiting_for_real_fixture", "source_resolution": { "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "source_found": true, "checked": [ { "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "exists": true, "is_dir": true } ] }, "jsc_map": { "ok": true, "source_file": "JS8_JSC/JSC_map.cpp", "entry_count": 200000, "declared_size": 262144, "declared_size_matches": false, "map_fingerprint_sha256": "edbc4c529a809c0e900f2ad443aefe6cca271f1f6df52f6e651b4997b3d4d949", "sample_entries": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C", "U", "M", "W", "F", "G", "Y", "P", "B" ], "attempts": [ { "path": "JS8_JSC/JSC_map.cpp", "bytes": 7082880, "sha256": "ab2bd62ef594f4629a2c93b6de43f5469b1fd6fe67ebf4d24f915bd11ccef813", "declared_size": 262144, "parsed_entry_count": 200000, "sample": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C" ] } ] }, "cpp_reference_harness": { "work_dir": "/decoders/js8_decoder/runtime/jsc_cpp_reference_step81", "map_transport": "hex-lines-utf8-v1", "available": true, "compiled": true, "ran": true, "reason": null, "returncode": 0, "stderr_tail": "" }, "comparison": { "fixture_count": 36, "pass_count": 36, "all_passed": true, "rows": [ { "index": 121, "word": "CQ", "separate": false, "bits": "0111111000100", "python_text": "CQ", "cpp_text": "CQ", "expected_text": "CQ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 121, "word": "CQ", "separate": true, "bits": "0111111000101", "python_text": "CQ ", "cpp_text": "CQ ", "expected_text": "CQ ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 240, "word": "TEST", "separate": false, "bits": "1001110100100", "python_text": "TEST", "cpp_text": "TEST", "expected_text": "TEST", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 240, "word": "TEST", "separate": true, "bits": "1001110100101", "python_text": "TEST ", "cpp_text": "TEST ", "expected_text": "TEST ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6571, "word": "HELLO", "separate": false, "bits": "011110001011100001010", "python_text": "HELLO", "cpp_text": "HELLO", "expected_text": "HELLO", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6571, "word": "HELLO", "separate": true, "bits": "011110001011100001011", "python_text": "HELLO ", "cpp_text": "HELLO ", "expected_text": "HELLO ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 125, "word": "DE", "separate": false, "bits": "0111111001100", "python_text": "DE", "cpp_text": "DE", "expected_text": "DE", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 125, "word": "DE", "separate": true, "bits": "0111111001101", "python_text": "DE ", "cpp_text": "DE ", "expected_text": "DE ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 0, "word": "E", "separate": false, "bits": "00000", "python_text": "E", "cpp_text": "E", "expected_text": "E", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 0, "word": "E", "separate": true, "bits": "00001", "python_text": "E ", "cpp_text": "E ", "expected_text": "E ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": false, "bits": "00010", "python_text": "T", "cpp_text": "T", "expected_text": "T", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": true, "bits": "00011", "python_text": "T ", "cpp_text": "T ", "expected_text": "T ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": false, "bits": "00100", "python_text": "A", "cpp_text": "A", "expected_text": "A", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": true, "bits": "00101", "python_text": "A ", "cpp_text": "A ", "expected_text": "A ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": false, "bits": "111101000", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": true, "bits": "111101001", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": false, "bits": "00110", "python_text": "O", "cpp_text": "O", "expected_text": "O", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": true, "bits": "00111", "python_text": "O ", "cpp_text": "O ", "expected_text": "O ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": false, "bits": "01100", "python_text": "S", "cpp_text": "S", "expected_text": "S", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": true, "bits": "01101", "python_text": "S ", "cpp_text": "S ", "expected_text": "S ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": false, "bits": "011100000", "python_text": "H", "cpp_text": "H", "expected_text": "H", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": true, "bits": "011100001", "python_text": "H ", "cpp_text": "H ", "expected_text": "H ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": false, "bits": "011100010", "python_text": "R", "cpp_text": "R", "expected_text": "R", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": true, "bits": "011100011", "python_text": "R ", "cpp_text": "R ", "expected_text": "R ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": false, "bits": "100000010", "python_text": "F", "cpp_text": "F", "expected_text": "F", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": true, "bits": "100000011", "python_text": "F ", "cpp_text": "F ", "expected_text": "F ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": false, "bits": "101000110", "python_text": ")", "cpp_text": ")", "expected_text": ")", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": true, "bits": "101000111", "python_text": ") ", "cpp_text": ") ", "expected_text": ") ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 100, "word": "BD", "separate": false, "bits": "0111101100100", "python_text": "BD", "cpp_text": "BD", "expected_text": "BD", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 100, "word": "BD", "separate": true, "bits": "0111101100101", "python_text": "BD ", "cpp_text": "BD ", "expected_text": "BD ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1000, "word": "TNU", "separate": false, "bits": "01111100110101100", "python_text": "TNU", "cpp_text": "TNU", "expected_text": "TNU", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1000, "word": "TNU", "separate": true, "bits": "01111100110101101", "python_text": "TNU ", "cpp_text": "TNU ", "expected_text": "TNU ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 12345, "word": "EB33", "separate": false, "bits": "100010011100111001000", "python_text": "EB33", "cpp_text": "EB33", "expected_text": "EB33", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 12345, "word": "EB33", "separate": true, "bits": "100010011100111001001", "python_text": "EB33 ", "cpp_text": "EB33 ", "expected_text": "EB33 ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 199999, "word": "LSYR", "separate": false, "bits": "1010100101111100101100100", "python_text": "LSYR", "cpp_text": "LSYR", "expected_text": "LSYR", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 199999, "word": "LSYR", "separate": true, "bits": "1010100101111100101100101", "python_text": "LSYR ", "cpp_text": "LSYR ", "expected_text": "LSYR ", "python_complete": true, "cpp_complete": true, "passes": true } ] }, "release_gate_status": { "compressed_text_release_allowed": false, "productive_webftr_integration_allowed": false, "step79_release_gate_still_required": true, "external_fixture_still_required": true, "multi_frame_assembly_validated": false }, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "step68_contract_remains_current_stable_ui_source": true, "cpp_reference_latest": "/logs/js8_jsc_cpp_reference_compare_latest.json", "do_not_merge_as_productive_chat_text_yet": true }, "warnings": [ "Step81 compares the Python JSC decompressor against an independent C++ harness using the source-extracted JSC map with a hex length-safe map transport.", "It still does not prove a real RF/JS8Call FrameDataCompressed text fixture.", "Compressed JS8 free-text release remains blocked until Step79 sees an externally confirmed fixture.", "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send." ], "map_transport_fix": { "previous_step80_issue": "line-delimited-map-transport-corrupted-words-with-embedded-newlines-or-control-bytes", "current_transport": "hex-lines-utf8-v1", "purpose": "keep Python and C++ harness map indices byte-identical" }, "verdict": "step81_cpp_reference_compare_passed_waiting_for_real_external_fixture", "next_action": "Import one externally confirmed compressed FrameDataCompressed fixture, then rerun Step79/Step81 before any lab text release.", "stable_latest_written": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json" } } }, "source_chain_mode": "not_run", "warnings": [ "Quick-window-scan only selects a likely analysis window; it is not a JS8 text decoder.", "No JS8 text decode is expected in Step 54. Final real LDPC/FEC and Varicode/message unpack are not implemented yet.", "Costas7 scoring is a lab candidate extractor; real decoder validation requires actual JS8 WAV samples." ], "decodes": [], "webftr_display_count": 0, "notes": [ "Step82 is a real-WAV regression gate, not a chat text release.", "A fast run is expected because only input-check, quick-window-scan and bounded sync-probe are mandatory by default.", "For deeper audio-to-LDPC regeneration use server-deep-run or real-run manually; Step82 keeps the normal ./start.sh cycle lightweight." ], "next_action": "If Step82 confirms the WAV path and sync candidates, continue with a bounded full audio-to-message174 regeneration step before any new Freitext release work." } }, "step79_compressed_text_release_gate": { "path": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json", "exists": true, "is_file": true, "size": 3100, "mtime_utc": "2026-05-28T02:49:01Z" }, "preview": { "ok": true, "tool": "webftr-js8-real-compressed-text-release-gate", "tool_version": "step79-real-compressed-text-release-gate", "schema": "webftr-js8-real-compressed-text-release-gate-v1", "created_utc": "2026-05-28T02:49:00Z", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "state": "waiting_for_real_external_compressed_fixture", "step78_state": "operator_commands_ready_waiting_for_real_fixture", "step74_verdict": "fixture_gate_selftest_ready_waiting_for_real_compressed_frame_fixture", "external_fixture_count": 0, "external_fixture_pass_count": 0, "external_source_comparison_pass_count": 0, "synthetic_selftest_all_passed": true, "jsc_entry_count": 200000, "allow_experimental_lab_display": false, "release_candidate_count": 0, "release_candidate_rows": [], "webftr_rx_rows": [], "webftr_display_count": 0, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "step68_contract_remains_current_stable_ui_source": true, "compressed_text_latest": "/logs/js8_compressed_text_release_gate_latest.json", "do_not_merge_as_productive_chat_text_yet": true, "lab_display_requires_flag": "JS8LAB_ALLOW_EXPERIMENTAL_COMPRESSED_TEXT_RELEASE=1" }, "release_gate_policy": { "requires_external_source_comparison": true, "requires_expected_text_match": true, "requires_jsc_complete": true, "releases_only_single_frame_FrameDataCompressed": true, "multi_frame_assembly_validated": false, "productive_webftr_integration_allowed": false, "tx_ptt_tune_send_allowed": false }, "helper_files": { "step78_readme": "/decoders/js8_decoder/runtime/fixtures/README_STEP78_REAL_FIXTURE_COMMAND_EXPORT.md", "step78_print_helper": "/decoders/js8_decoder/runtime/fixtures/step78_print_fixture_commands.sh", "target_fixture_file": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json", "step74_gate_latest": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_gate_latest.json", "step78_command_latest": "/decoders/js8_decoder/logs/js8_real_fixture_command_export_latest.json" }, "warnings": [ "Step79 is a release gate, not productive WebFTR integration.", "Without a real externally confirmed compressed fixture, no compressed JS8 text is released.", "Even with a validated fixture, lab display rows require an explicit flag and multi-frame assembly remains unvalidated.", "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send." ], "verdict": "release_gate_ready_but_waiting_for_external_fixture", "next_action": "Import one externally confirmed compressed FrameDataCompressed fixture using the Step78/76 helpers, then rerun Step79.", "stable_latest_written": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json" } }, "step81_jsc_cpp_reference_compare": { "path": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json", "stat": { "path": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json", "exists": true, "is_file": true, "size": 14399, "mtime_utc": "2026-05-28T03:07:38Z" }, "preview": { "ok": true, "tool": "webftr-js8-jsc-cpp-reference-map-transport-fix", "tool_version": "step81-jsc-cpp-reference-map-transport-fix", "schema": "webftr-js8-jsc-cpp-reference-map-transport-fix-v1", "created_utc": "2026-05-28T03:07:38Z", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "state": "cpp_reference_compare_passed_waiting_for_real_fixture", "source_resolution": { "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "source_found": true, "checked": [ { "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "exists": true, "is_dir": true } ] }, "jsc_map": { "ok": true, "source_file": "JS8_JSC/JSC_map.cpp", "entry_count": 200000, "declared_size": 262144, "declared_size_matches": false, "map_fingerprint_sha256": "edbc4c529a809c0e900f2ad443aefe6cca271f1f6df52f6e651b4997b3d4d949", "sample_entries": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C", "U", "M", "W", "F", "G", "Y", "P", "B" ], "attempts": [ { "path": "JS8_JSC/JSC_map.cpp", "bytes": 7082880, "sha256": "ab2bd62ef594f4629a2c93b6de43f5469b1fd6fe67ebf4d24f915bd11ccef813", "declared_size": 262144, "parsed_entry_count": 200000, "sample": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C" ] } ] }, "cpp_reference_harness": { "work_dir": "/decoders/js8_decoder/runtime/jsc_cpp_reference_step81", "map_transport": "hex-lines-utf8-v1", "available": true, "compiled": true, "ran": true, "reason": null, "returncode": 0, "stderr_tail": "" }, "comparison": { "fixture_count": 36, "pass_count": 36, "all_passed": true, "rows": [ { "index": 121, "word": "CQ", "separate": false, "bits": "0111111000100", "python_text": "CQ", "cpp_text": "CQ", "expected_text": "CQ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 121, "word": "CQ", "separate": true, "bits": "0111111000101", "python_text": "CQ ", "cpp_text": "CQ ", "expected_text": "CQ ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 240, "word": "TEST", "separate": false, "bits": "1001110100100", "python_text": "TEST", "cpp_text": "TEST", "expected_text": "TEST", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 240, "word": "TEST", "separate": true, "bits": "1001110100101", "python_text": "TEST ", "cpp_text": "TEST ", "expected_text": "TEST ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6571, "word": "HELLO", "separate": false, "bits": "011110001011100001010", "python_text": "HELLO", "cpp_text": "HELLO", "expected_text": "HELLO", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6571, "word": "HELLO", "separate": true, "bits": "011110001011100001011", "python_text": "HELLO ", "cpp_text": "HELLO ", "expected_text": "HELLO ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 125, "word": "DE", "separate": false, "bits": "0111111001100", "python_text": "DE", "cpp_text": "DE", "expected_text": "DE", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 125, "word": "DE", "separate": true, "bits": "0111111001101", "python_text": "DE ", "cpp_text": "DE ", "expected_text": "DE ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 0, "word": "E", "separate": false, "bits": "00000", "python_text": "E", "cpp_text": "E", "expected_text": "E", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 0, "word": "E", "separate": true, "bits": "00001", "python_text": "E ", "cpp_text": "E ", "expected_text": "E ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": false, "bits": "00010", "python_text": "T", "cpp_text": "T", "expected_text": "T", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": true, "bits": "00011", "python_text": "T ", "cpp_text": "T ", "expected_text": "T ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": false, "bits": "00100", "python_text": "A", "cpp_text": "A", "expected_text": "A", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": true, "bits": "00101", "python_text": "A ", "cpp_text": "A ", "expected_text": "A ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": false, "bits": "111101000", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": true, "bits": "111101001", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": false, "bits": "00110", "python_text": "O", "cpp_text": "O", "expected_text": "O", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": true, "bits": "00111", "python_text": "O ", "cpp_text": "O ", "expected_text": "O ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": false, "bits": "01100", "python_text": "S", "cpp_text": "S", "expected_text": "S", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": true, "bits": "01101", "python_text": "S ", "cpp_text": "S ", "expected_text": "S ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": false, "bits": "011100000", "python_text": "H", "cpp_text": "H", "expected_text": "H", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": true, "bits": "011100001", "python_text": "H ", "cpp_text": "H ", "expected_text": "H ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": false, "bits": "011100010", "python_text": "R", "cpp_text": "R", "expected_text": "R", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": true, "bits": "011100011", "python_text": "R ", "cpp_text": "R ", "expected_text": "R ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": false, "bits": "100000010", "python_text": "F", "cpp_text": "F", "expected_text": "F", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": true, "bits": "100000011", "python_text": "F ", "cpp_text": "F ", "expected_text": "F ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": false, "bits": "101000110", "python_text": ")", "cpp_text": ")", "expected_text": ")", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": true, "bits": "101000111", "python_text": ") ", "cpp_text": ") ", "expected_text": ") ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 100, "word": "BD", "separate": false, "bits": "0111101100100", "python_text": "BD", "cpp_text": "BD", "expected_text": "BD", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 100, "word": "BD", "separate": true, "bits": "0111101100101", "python_text": "BD ", "cpp_text": "BD ", "expected_text": "BD ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1000, "word": "TNU", "separate": false, "bits": "01111100110101100", "python_text": "TNU", "cpp_text": "TNU", "expected_text": "TNU", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1000, "word": "TNU", "separate": true, "bits": "01111100110101101", "python_text": "TNU ", "cpp_text": "TNU ", "expected_text": "TNU ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 12345, "word": "EB33", "separate": false, "bits": "100010011100111001000", "python_text": "EB33", "cpp_text": "EB33", "expected_text": "EB33", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 12345, "word": "EB33", "separate": true, "bits": "100010011100111001001", "python_text": "EB33 ", "cpp_text": "EB33 ", "expected_text": "EB33 ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 199999, "word": "LSYR", "separate": false, "bits": "1010100101111100101100100", "python_text": "LSYR", "cpp_text": "LSYR", "expected_text": "LSYR", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 199999, "word": "LSYR", "separate": true, "bits": "1010100101111100101100101", "python_text": "LSYR ", "cpp_text": "LSYR ", "expected_text": "LSYR ", "python_complete": true, "cpp_complete": true, "passes": true } ] }, "release_gate_status": { "compressed_text_release_allowed": false, "productive_webftr_integration_allowed": false, "step79_release_gate_still_required": true, "external_fixture_still_required": true, "multi_frame_assembly_validated": false }, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "step68_contract_remains_current_stable_ui_source": true, "cpp_reference_latest": "/logs/js8_jsc_cpp_reference_compare_latest.json", "do_not_merge_as_productive_chat_text_yet": true }, "warnings": [ "Step81 compares the Python JSC decompressor against an independent C++ harness using the source-extracted JSC map with a hex length-safe map transport.", "It still does not prove a real RF/JS8Call FrameDataCompressed text fixture.", "Compressed JS8 free-text release remains blocked until Step79 sees an externally confirmed fixture.", "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send." ], "map_transport_fix": { "previous_step80_issue": "line-delimited-map-transport-corrupted-words-with-embedded-newlines-or-control-bytes", "current_transport": "hex-lines-utf8-v1", "purpose": "keep Python and C++ harness map indices byte-identical" }, "verdict": "step81_cpp_reference_compare_passed_waiting_for_real_external_fixture", "next_action": "Import one externally confirmed compressed FrameDataCompressed fixture, then rerun Step79/Step81 before any lab text release.", "stable_latest_written": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json" } } }, "warnings": [ "Quick-window-scan only selects a likely analysis window; it is not a JS8 text decoder.", "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.", "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.", "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.", "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.", "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.", "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." ], "notes": [ "Step83 intentionally makes the default ./start.sh path touch the real WAV and regenerate message174 evidence instead of only reusing old JSONs.", "This remains RX-only and does not start or control JS8Call GUI/Qt runtime.", "Compressed/free-text release remains governed by the Step79 fixture gate; Step83 only validates the real-WAV-to-message174/control-frame chain." ], "next_action": "If Step83 confirms message174/control-frame regeneration from the real WAV, continue with either a wider real-WAV search for FrameDataCompressed or a real JS8Call/RF comparison fixture." } [webftr-js8-lab] step83 summary exit_code=0 [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T033900Z_real-wav-message174-regeneration.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T033900Z_real-wav-message174-regeneration_manifest.json