diagnostics_ok/decoders/js8_decoder/decoders/js8_test.wav?t=1779884731482 ""
},
{
"line": 100,
"text": " public slots:"
},
{
"line": 101,
"text": ""
}
]
},
{
"line": 104,
"match": "void decode();",
"context": [
{
"line": 101,
"text": ""
},
{
"line": 102,
"text": " void start(QThread::Priority priority);"
},
{
"line": 103,
"text": " void quit();"
},
{
"line": 104,
"text": " void decode();"
},
{
"line": 105,
"text": "};"
},
{
"line": 106,
"text": "} // namespace JS8"
},
{
"line": 107,
"text": ""
}
]
}
]
},
{
"path": "JS8_Mode/Decoder.h",
"exists": true,
"bytes": 2022,
"lines": 90,
"score": 14,
"keyword_hits": {
"decode": 7,
"Decode": 7
},
"phase_scores": {
"symbol_to_bits": 0,
"bit_order_interleaver": 0,
"whitening_mask": 0,
"ldpc_fec": 0,
"message91_crc": 0,
"timing_constants": 0
},
"candidate_functions": [],
"candidate_arrays": [],
"candidate_defines": [],
"snippets": [
{
"line": 1,
"match": "#ifndef DECODER_H",
"context": [
{
"line": 1,
"text": "#ifndef DECODER_H"
},
{
"line": 2,
"text": "#define DECODER_H"
},
{
"line": 3,
"text": ""
},
{
"line": 4,
"text": "/**"
}
]
},
{
"line": 2,
"match": "#define DECODER_H",
"context": [
{
"line": 1,
"text": "#ifndef DECODER_H"
},
{
"line": 2,
"text": "#define DECODER_H"
},
{
"line": 3,
"text": ""
},
{
"line": 4,
"text": "/**"
},
{
"line": 5,
"text": " * (C) 2019 Jordan Sherer <kn4crd@gmail.com> - All Rights Reserved"
}
]
},
{
"line": 37,
"match": "class Decoder : public QObject {",
"context": [
{
"line": 34,
"text": " QScopedPointer<QProcess> m_proc;"
},
{
"line": 35,
"text": "};"
},
{
"line": 36,
"text": ""
},
{
"line": 37,
"text": "class Decoder : public QObject {"
},
{
"line": 38,
"text": " Q_OBJECT"
},
{
"line": 39,
"text": " public:"
},
{
"line": 40,
"text": " Decoder(QObject *parent = nullptr);"
}
]
},
{
"line": 40,
"match": "Decoder(QObject *parent = nullptr);",
"context": [
{
"line": 37,
"text": "class Decoder : public QObject {"
},
{
"line": 38,
"text": " Q_OBJECT"
},
{
"line": 39,
"text": " public:"
},
{
"line": 40,
"text": " Decoder(QObject *parent = nullptr);"
},
{
"line": 41,
"text": " ~Decoder();"
},
{
"line": 42,
"text": ""
},
{
"line": 43,
"text": " void lock();"
}
]
},
{
"line": 41,
"match": "~Decoder();",
"context": [
{
"line": 38,
"text": " Q_OBJECT"
},
{
"line": 39,
"text": " public:"
},
{
"line": 40,
"text": " Decoder(QObject *parent = nullptr);"
},
{
"line": 41,
"text": " ~Decoder();"
},
{
"line": 42,
"text": ""
},
{
"line": 43,
"text": " void lock();"
},
{
"line": 44,
"text": " void unlock();"
}
]
},
{
"line": 88,
"match": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)",
"context": [
{
"line": 85,
"text": " QThread m_thread;"
},
{
"line": 86,
"text": "};"
},
{
"line": 87,
"text": ""
},
{
"line": 88,
"text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)"
},
{
"line": 89,
"text": ""
},
{
"line": 90,
"text": "#endif // DECODER_H"
}
]
},
{
"line": 90,
"match": "#endif // DECODER_H",
"context": [
{
"line": 87,
"text": ""
},
{
"line": 88,
"text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)"
},
{
"line": 89,
"text": ""
},
{
"line": 90,
"text": "#endif // DECODER_H"
}
]
}
]
}
],
"additional_candidates": [],
"phase_top_files": {
"symbol_to_bits": [
{
"path": "JS8_JSC/JSC_list.cpp",
"phase_score": 837,
"score": 1105
},
{
"path": "JS8_JSC/JSC_map.cpp",
"phase_score": 837,
"score": 1104
},
{
"path": "JS8_Main/Varicode.cpp",
"phase_score": 231,
"score": 1011
},
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 224,
"score": 387
},
{
"path": "JS8_Mode/whitening_processor.h",
"phase_score": 73,
"score": 153
},
{
"path": "JS8_Mode/soft_combiner.h",
"phase_score": 61,
"score": 125
},
{
"path": "JS8_Mode/JS8Submode.cpp",
"phase_score": 41,
"score": 157
},
{
"path": "JS8_Main/Varicode.h",
"phase_score": 32,
"score": 154
},
{
"path": "JS8_Mode/ldpc_feedback.h",
"phase_score": 31,
"score": 109
},
{
"path": "JS8_Mode/DecodedText.cpp",
"phase_score": 23,
"score": 176
}
],
"bit_order_interleaver": [
{
"path": "JS8_JSC/JSC_list.cpp",
"phase_score": 10,
"score": 1105
},
{
"path": "JS8_JSC/JSC_map.cpp",
"phase_score": 10,
"score": 1104
},
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 6,
"score": 387
},
{
"path": "JS8_Mode/soft_combiner.h",
"phase_score": 2,
"score": 125
}
],
"whitening_mask": [
{
"path": "JS8_JSC/JSC_list.cpp",
"phase_score": 76,
"score": 1105
},
{
"path": "JS8_JSC/JSC_map.cpp",
"phase_score": 76,
"score": 1104
},
{
"path": "JS8_Mode/whitening_processor.h",
"phase_score": 24,
"score": 153
},
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 21,
"score": 387
},
{
"path": "JS8_Main/Varicode.cpp",
"phase_score": 11,
"score": 1011
}
],
"ldpc_fec": [
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 30,
"score": 387
},
{
"path": "JS8_Mode/ldpc_feedback.h",
"phase_score": 13,
"score": 109
},
{
"path": "JS8_JSC/JSC_list.cpp",
"phase_score": 5,
"score": 1105
},
{
"path": "JS8_JSC/JSC_map.cpp",
"phase_score": 5,
"score": 1104
}
],
"message91_crc": [
{
"path": "JS8_Main/Varicode.cpp",
"phase_score": 641,
"score": 1011
},
{
"path": "JS8_JSC/JSC_list.cpp",
"phase_score": 121,
"score": 1105
},
{
"path": "JS8_JSC/JSC_map.cpp",
"phase_score": 120,
"score": 1104
},
{
"path": "JS8_Mode/DecodedText.cpp",
"phase_score": 76,
"score": 176
},
{
"path": "JS8_Main/Varicode.h",
"phase_score": 66,
"score": 154
},
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 24,
"score": 387
},
{
"path": "JS8_Mode/DecodedText.h",
"phase_score": 24,
"score": 86
},
{
"path": "JS8_Mode/JS8Submode.cpp",
"phase_score": 7,
"score": 157
}
],
"timing_constants": [
{
"path": "JS8_Mode/JS8Submode.cpp",
"phase_score": 26,
"score": 157
},
{
"path": "JS8_Mode/JS8.cpp",
"phase_score": 5,
"score": 387
},
{
"path": "JS8_Include/commons.h",
"phase_score": 3,
"score": 66
},
{
"path": "JS8_Mode/JS8Submode.h",
"phase_score": 3,
"score": 40
}
]
},
"lab_alignment_questions": [
{
"lab_observation": "Step51 source-aligned NSPS=6192 still reaches best syndrome 22 and prefers tone-spacing offset -0.03.",
"source_question": "Find whether JS8Call-Improved applies submode-specific symbol timing/tone correction after JS8_NSPS or before FEC extraction.",
"look_in": [
"JS8_Mode/JS8Submode.cpp",
"JS8_Mode/JS8.cpp",
"JS8_Mode/Decoder.cpp"
]
},
{
"lab_observation": "Best row currently depends on lab FT8-style Gray demap and bit-order hypotheses.",
"source_question": "Find exact symbol-to-bit and interleaver/deinterleaver path before LDPC to replace the lab hypothesis.",
"look_in": [
"JS8_Mode/Decoder.cpp",
"JS8_Mode/ldpc_feedback.h",
"JS8_Mode/soft_combiner.h"
]
},
{
"lab_observation": "Syndrome-closure/CRC probes do not validate Message91 candidates.",
"source_question": "Find whitening/scrambling/mask and Varicode/JSC unpack order before adding more repair probes.",
"look_in": [
"JS8_Mode/whitening_processor.h",
"JS8_Main/Varicode.cpp",
"JS8_JSC/JSC_map.cpp"
]
}
],
"audit_conclusion": {
"no_gui_runtime_started": true,
"recommended_next_step": "Use top focused snippets to implement a source-derived bitpath/interleaver/whitening patch before another LDPC/CRC repair run.",
"why": "Step51 confirmed source NSPS but did not improve below syndrome 22; remaining uncertainty is exact source bitpath rather than wider timing."
}
}
[webftr-js8-lab] OK
[webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T120240Z_source-bitpath-audit.log
[webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T120240Z_source-bitpath-audit_manifest.json
Auto-Refresh alle 5 Sekunden mit frischem ?t=.... RX-only: kein TX, kein PTT, kein Tune, kein Send.