[webftr-js8-lab] command=jsc-cpp-reference-compare-probe [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T025704Z_jsc-cpp-reference-compare-probe.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T025704Z_jsc-cpp-reference-compare-probe_manifest.json [webftr-js8-lab] utc=20260528T025704Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step80 JSC C++ reference compare probe [webftr-js8-lab] source-dir argument: auto-detect source + JS8LAB_SOURCE_DIR [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T025704Z_jsc_cpp_reference_compare_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-jsc-cpp-reference-compare-probe", "tool_version": "step80-jsc-cpp-reference-compare-probe", "schema": "webftr-js8-jsc-cpp-reference-compare-v1", "created_utc": "2026-05-28T02:57:11Z", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false, "webftr_productive_integration": false }, "no_gui_runtime_started": true, "root": "/decoders/js8_decoder", "log_dir": "/decoders/js8_decoder/logs", "state": "cpp_reference_compare_mismatch", "source_resolution": { "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "source_found": true, "checked": [ { "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "exists": true, "is_dir": true } ] }, "jsc_map": { "ok": true, "source_file": "JS8_JSC/JSC_map.cpp", "entry_count": 200000, "declared_size": 262144, "declared_size_matches": false, "map_fingerprint_sha256": "edbc4c529a809c0e900f2ad443aefe6cca271f1f6df52f6e651b4997b3d4d949", "sample_entries": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C", "U", "M", "W", "F", "G", "Y", "P", "B" ], "attempts": [ { "path": "JS8_JSC/JSC_map.cpp", "bytes": 7082880, "sha256": "ab2bd62ef594f4629a2c93b6de43f5469b1fd6fe67ebf4d24f915bd11ccef813", "declared_size": 262144, "parsed_entry_count": 200000, "sample": [ "E", "T", "A", "O", "I", "N", "S", "H", "R", "D", "L", "C" ] } ] }, "cpp_reference_harness": { "work_dir": "/decoders/js8_decoder/runtime/jsc_cpp_reference_step80", "available": true, "compiled": true, "ran": true, "reason": null, "returncode": 0, "stderr_tail": "" }, "comparison": { "fixture_count": 36, "pass_count": 20, "all_passed": false, "rows": [ { "index": 121, "word": "CQ", "separate": false, "bits": "0111111000100", "python_text": "CQ", "cpp_text": "CP?", "expected_text": "CQ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 121, "word": "CQ", "separate": true, "bits": "0111111000101", "python_text": "CQ ", "cpp_text": "CP? ", "expected_text": "CQ ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 240, "word": "TEST", "separate": false, "bits": "1001110100100", "python_text": "TEST", "cpp_text": "TEMP", "expected_text": "TEST", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 240, "word": "TEST", "separate": true, "bits": "1001110100101", "python_text": "TEST ", "cpp_text": "TEMP ", "expected_text": "TEST ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 6571, "word": "HELLO", "separate": false, "bits": "011110001011100001010", "python_text": "HELLO", "cpp_text": "OFLI", "expected_text": "HELLO", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 6571, "word": "HELLO", "separate": true, "bits": "011110001011100001011", "python_text": "HELLO ", "cpp_text": "OFLI ", "expected_text": "HELLO ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 125, "word": "DE", "separate": false, "bits": "0111111001100", "python_text": "DE", "cpp_text": "CUD", "expected_text": "DE", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 125, "word": "DE", "separate": true, "bits": "0111111001101", "python_text": "DE ", "cpp_text": "CUD ", "expected_text": "DE ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 0, "word": "E", "separate": false, "bits": "00000", "python_text": "E", "cpp_text": "E", "expected_text": "E", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 0, "word": "E", "separate": true, "bits": "00001", "python_text": "E ", "cpp_text": "E ", "expected_text": "E ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": false, "bits": "00010", "python_text": "T", "cpp_text": "T", "expected_text": "T", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 1, "word": "T", "separate": true, "bits": "00011", "python_text": "T ", "cpp_text": "T ", "expected_text": "T ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": false, "bits": "00100", "python_text": "A", "cpp_text": "A", "expected_text": "A", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 2, "word": "A", "separate": true, "bits": "00101", "python_text": "A ", "cpp_text": "A ", "expected_text": "A ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": false, "bits": "111101000", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 67, "word": " ", "separate": true, "bits": "111101001", "python_text": " ", "cpp_text": " ", "expected_text": " ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": false, "bits": "00110", "python_text": "O", "cpp_text": "O", "expected_text": "O", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 3, "word": "O", "separate": true, "bits": "00111", "python_text": "O ", "cpp_text": "O ", "expected_text": "O ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": false, "bits": "01100", "python_text": "S", "cpp_text": "S", "expected_text": "S", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 6, "word": "S", "separate": true, "bits": "01101", "python_text": "S ", "cpp_text": "S ", "expected_text": "S ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": false, "bits": "011100000", "python_text": "H", "cpp_text": "H", "expected_text": "H", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 7, "word": "H", "separate": true, "bits": "011100001", "python_text": "H ", "cpp_text": "H ", "expected_text": "H ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": false, "bits": "011100010", "python_text": "R", "cpp_text": "R", "expected_text": "R", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 8, "word": "R", "separate": true, "bits": "011100011", "python_text": "R ", "cpp_text": "R ", "expected_text": "R ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": false, "bits": "100000010", "python_text": "F", "cpp_text": "F", "expected_text": "F", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 15, "word": "F", "separate": true, "bits": "100000011", "python_text": "F ", "cpp_text": "F ", "expected_text": "F ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": false, "bits": "101000110", "python_text": ")", "cpp_text": ")", "expected_text": ")", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 31, "word": ")", "separate": true, "bits": "101000111", "python_text": ") ", "cpp_text": ") ", "expected_text": ") ", "python_complete": true, "cpp_complete": true, "passes": true }, { "index": 100, "word": "BD", "separate": false, "bits": "0111101100100", "python_text": "BD", "cpp_text": "BCNU", "expected_text": "BD", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 100, "word": "BD", "separate": true, "bits": "0111101100101", "python_text": "BD ", "cpp_text": "BCNU ", "expected_text": "BD ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 1000, "word": "TNU", "separate": false, "bits": "01111100110101100", "python_text": "TNU", "cpp_text": "TURN", "expected_text": "TNU", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 1000, "word": "TNU", "separate": true, "bits": "01111100110101101", "python_text": "TNU ", "cpp_text": "TURN ", "expected_text": "TNU ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 12345, "word": "EB33", "separate": false, "bits": "100010011100111001000", "python_text": "EB33", "cpp_text": "EB32", "expected_text": "EB33", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 12345, "word": "EB33", "separate": true, "bits": "100010011100111001001", "python_text": "EB33 ", "cpp_text": "EB32 ", "expected_text": "EB33 ", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 199999, "word": "LSYR", "separate": false, "bits": "1010100101111100101100100", "python_text": "LSYR", "cpp_text": "MITK", "expected_text": "LSYR", "python_complete": true, "cpp_complete": true, "passes": false }, { "index": 199999, "word": "LSYR", "separate": true, "bits": "1010100101111100101100101", "python_text": "LSYR ", "cpp_text": "MITK ", "expected_text": "LSYR ", "python_complete": true, "cpp_complete": true, "passes": false } ] }, "release_gate_status": { "compressed_text_release_allowed": false, "productive_webftr_integration_allowed": false, "step79_release_gate_still_required": true, "external_fixture_still_required": true, "multi_frame_assembly_validated": false }, "webftr_adapter_hint": { "safe_to_poll_read_only": true, "productive_integration": false, "step68_contract_remains_current_stable_ui_source": true, "cpp_reference_latest": "/logs/js8_jsc_cpp_reference_compare_latest.json", "do_not_merge_as_productive_chat_text_yet": true }, "warnings": [ "Step80 compares the Python JSC decompressor against an independent C++ harness using the source-extracted JSC map.", "It still does not prove a real RF/JS8Call FrameDataCompressed text fixture.", "Compressed JS8 free-text release remains blocked until Step79 sees an externally confirmed fixture.", "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send." ], "verdict": "step80_cpp_reference_compare_failed", "next_action": "Do not use compressed text release. Review mismatching rows and map/codeword order.", "stable_latest_written": "/decoders/js8_decoder/logs/js8_jsc_cpp_reference_compare_latest.json" } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T025704Z_jsc-cpp-reference-compare-probe.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T025704Z_jsc-cpp-reference-compare-probe_manifest.json