[js8.sh job] utc=2026-05-27T15:06:00Z [js8.sh job] build=step63-source-exact-interleaver-whitening-index-extract [js8.sh job] root=/decoders/js8_decoder [js8.sh job] command=./run_js8_decoder_lab.sh source-exact-map-probe [js8.sh job] rx-only: no TX / no PTT / no Tune / no Send [webftr-js8-lab] command=source-exact-map-probe [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T150600Z_source-exact-map-probe.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T150600Z_source-exact-map-probe_manifest.json [webftr-js8-lab] utc=20260527T150600Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step63 source-exact interleaver/whitening index extract + Info87 probe [webftr-js8-lab] source argument: auto-detect [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-source-exact-map-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, "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": 319, "source_reports": [ { "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": [] }, { "path": "/decoders/js8_decoder/logs/20260527T060649Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T055654Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T055654Z_real_run_auto_ldpc_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T053939Z_ldpc-soft-decode_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T053939Z_ldpc_soft_decode_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T053936Z_ldpc-matrix-probe_manifest.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T053936Z_ldpc_matrix_probe_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] }, { "path": "/decoders/js8_decoder/logs/20260527T052959Z_real_run_candidate_export_output.json", "exists": true, "info87_row_count": 0, "row_paths_preview": [] } ], "source_exact_map_count": 0, "map_tests": 240, "zero_distance_candidate_count": 76, "best_distance": 0, "best_candidate": { "source_file": "/decoders/js8_decoder/logs/20260527T141520Z_info87_reorder_dewhiten_output.json", "json_path": "$.best_candidate.candidate_bits", "row_index": 237, "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/20260527T141520Z_info87_reorder_dewhiten_output.json", "json_path": "$.best_candidate.candidate_bits", "row_index": 237, "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/20260527T141520Z_info87_reorder_dewhiten_output.json", "json_path": "$.top_candidates[0].candidate_bits", "row_index": 238, "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/20260527T141520Z_info87_reorder_dewhiten_output.json", "json_path": "$.top_candidates[1].candidate_bits", "row_index": 239, "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[0].hard_bits", "row_index": 76, "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": 78, "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": 79, "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": 81, "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": 82, "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": 84, "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": 85, "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": 87, "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": 88, "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": 90, "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": 91, "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": 93, "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": 94, "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": 96, "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": 97, "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": 99, "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": 100, "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": 102, "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": 103, "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": 105, "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": 106, "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": 108, "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": 109, "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": 111, "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": 145, "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": 146, "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": 147, "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": 148, "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": 149, "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" } ], "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] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T150600Z_source-exact-map-probe.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T150600Z_source-exact-map-probe_manifest.json [js8.sh job] finished utc=2026-05-27T15:06:04Z exit_code=0