[js8.sh job] utc=2026-05-27T16:35:11Z [js8.sh job] build=step65-rx-display-contract-message174-plausibility-guard [js8.sh job] root=/decoders/js8_decoder [js8.sh job] command=./run_js8_decoder_lab.sh source-confirmed-rx-display-contract /decoders/js8_test.wav [js8.sh job] rx-only: no TX / no PTT / no Tune / no Send [webftr-js8-lab] command=source-confirmed-rx-display-contract [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T163511Z_source-confirmed-rx-display-contract.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T163511Z_source-confirmed-rx-display-contract_manifest.json [webftr-js8-lab] utc=20260527T163511Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step65 RX display contract + message174 plausibility guard [webftr-js8-lab] input Step63/Step64 JSON argument: /decoders/js8_test.wav [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T163511Z_source_confirmed_message174_decode_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-source-confirmed-message174-decode", "tool_version": "step64-source-confirmed-message174-decodes-output", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "log_dir": "/decoders/js8_decoder/logs", "source_contract": { "source": "JS8Call-Improved JS8_Mode/JS8.cpp extractmessage174/checkCRC12", "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "crc_width": 12, "crc_poly_hex": "0xc06", "crc_xor_decimal": 42, "message_bits": "first 72 data bits as 12 x 6-bit words", "crc_gate": "Only zero-distance CRC12 candidates are emitted as decodes[]." }, "step63_source_reports": [ { "path": "/decoders/js8_test.wav", "exists": true, "error": "json_load_failed: Expecting value: line 1 column 1 (char 0)" }, { "path": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "exists": true, "zero_distance_candidates_extracted": 33, "tool_version": "step63-source-exact-interleaver-whitening-index-extract" } ], "runtime_fallback_reports": [], "candidate_source": "step63_source_exact_map_probe", "zero_distance_candidate_count": 2, "decode_count": 2, "top_candidates": [ { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.best_candidate.candidate_bits", "source_kind": "generic_bit_list", "row_index": 237, "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "message_text_12chars": "001XqOA2iDZ0", "info87_bitstring": "000000000000000001100001110100011000001010000010101100001101100011000000000101101101000" }, { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 82, "map_name": "raw", "map_source": null, "distance": 0, "crc_match": true, "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "message_text_12chars": "Q0VsKWqfJ96x", "info87_bitstring": "011010000000011111110110010100100000110100101001010011001001000110111011101001111010100" } ], "decodes": [ { "id": "js8-msg174-2b7db8e6", "mode": "JS8", "decoder": "webftr-js8lab-step64-message174-source-confirmed", "text": "001XqOA2iDZ0", "raw": "001XqOA2iDZ0", "message_text_12chars": "001XqOA2iDZ0", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "message_words_6bit": [ 0, 0, 1, 33, 52, 24, 10, 2, 44, 13, 35, 0 ], "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "parsed": { "raw": "001XqOA2iDZ0", "normalized": "001XQOA2IDZ0", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "001XQOA2IDZ0" }, "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.best_candidate.candidate_bits", "source_kind": "generic_bit_list", "row_index": 237, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 0 }, { "id": "js8-msg174-369b0507", "mode": "JS8", "decoder": "webftr-js8lab-step64-message174-source-confirmed", "text": "Q0VsKWqfJ96x", "raw": "Q0VsKWqfJ96x", "message_text_12chars": "Q0VsKWqfJ96x", "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "message_words_6bit": [ 26, 0, 31, 54, 20, 32, 52, 41, 19, 9, 6, 59 ], "alphabet": "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+", "parsed": { "raw": "Q0VsKWqfJ96x", "normalized": "Q0VSKWQFJ96X", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "Q0VSKWQFJ96X" }, "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 82, "map_name": "raw", "map_source": null }, "confidence": "crc12_zero_distance_source_extractmessage174", "rx_only": true, "sort_index": 1 } ], "warnings": [ "Step64 emits source-confirmed message174 CRC12-zero-distance text candidates; it is not yet a full live JS8 decoder chain from audio to final chat UI.", "It starts no JS8Call GUI/Qt process and performs no TX/PTT/Tune/Send actions.", "Random-looking 12-character payloads can still be valid message174 candidates until higher JS8 text/Varicode framing is connected." ], "next_action": "Use Step64 decodes[] as the contract for the next step: connect source-confirmed message174 output into a richer JS8 text/Varicode/framing interpretation and then feed WebFTR RX display fields." } [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T163511Z_rx_display_contract_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "tool": "webftr-js8-rx-display-contract", "tool_version": "step65-rx-display-contract-message174-plausibility-guard", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "no_gui_runtime_started": true, "log_dir": "/decoders/js8_decoder/logs", "input_step64_reports": [ { "path": "/decoders/js8_decoder/logs/20260527T163511Z_source_confirmed_message174_decode_output.json", "exists": true, "tool_version": "step64-source-confirmed-message174-decodes-output", "decode_count": 2, "selected": true } ], "source_step64_tool_version": "step64-source-confirmed-message174-decodes-output", "input_decode_count": 2, "webftr_display_count": 0, "hidden_candidate_count": 2, "verdict": "message174_candidates_but_no_plausible_js8_text_yet", "webftr_rx_contract": { "schema": "webftr-js8-rx-display-contract-v1", "display_policy": "Only show rows with show_in_rx_list=true in a normal RX table; keep other CRC-valid rows as candidate diagnostics.", "fields": [ "mode", "status", "display_text", "show_in_rx_list", "candidate_class", "valid_message174_crc12", "crc12_distance", "received_crc12", "computed_crc12" ] }, "webftr_rx_rows": [], "candidate_rows": [ { "id": "js8-rx65-f55bc2ac28", "source_decode_id": "js8-msg174-2b7db8e6", "mode": "JS8", "status": "CANDIDATE", "text": "001XqOA2iDZ0", "display_text": "001XQOA2IDZ0", "raw": "001XqOA2iDZ0", "show_in_rx_list": false, "candidate_class": "crc_candidate_unframed", "candidate_score": -3, "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "parsed": { "raw": "001XqOA2iDZ0", "normalized": "001XQOA2IDZ0", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "001XQOA2IDZ0" }, "plausibility": { "score": -3, "classification": "crc_candidate_unframed", "displayable": false, "reasons": [ "allowed_js8_display_chars", "compact_mixed_12char_payload" ], "known_tokens": [], "callsigns": [], "locators": [], "char_entropy": 3.189, "compact_random_payload_hint": true, "allowed_display_chars": true }, "confidence": "crc12_zero_distance_but_unframed", "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.best_candidate.candidate_bits", "source_kind": "generic_bit_list", "row_index": 237, "map_name": "raw", "map_source": null }, "sort_index": 0 }, { "id": "js8-rx65-c793e911ba", "source_decode_id": "js8-msg174-369b0507", "mode": "JS8", "status": "CANDIDATE", "text": "Q0VsKWqfJ96x", "display_text": "Q0VSKWQFJ96X", "raw": "Q0VsKWqfJ96x", "show_in_rx_list": false, "candidate_class": "crc_candidate_unframed", "candidate_score": -3, "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "parsed": { "raw": "Q0VsKWqfJ96x", "normalized": "Q0VSKWQFJ96X", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "Q0VSKWQFJ96X" }, "plausibility": { "score": -3, "classification": "crc_candidate_unframed", "displayable": false, "reasons": [ "allowed_js8_display_chars", "compact_mixed_12char_payload" ], "known_tokens": [], "callsigns": [], "locators": [], "char_entropy": 3.585, "compact_random_payload_hint": true, "allowed_display_chars": true }, "confidence": "crc12_zero_distance_but_unframed", "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 82, "map_name": "raw", "map_source": null }, "sort_index": 1 } ], "suppressed_candidates": [ { "id": "js8-rx65-f55bc2ac28", "source_decode_id": "js8-msg174-2b7db8e6", "mode": "JS8", "status": "CANDIDATE", "text": "001XqOA2iDZ0", "display_text": "001XQOA2IDZ0", "raw": "001XqOA2iDZ0", "show_in_rx_list": false, "candidate_class": "crc_candidate_unframed", "candidate_score": -3, "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 2920, "computed_crc12": 2920, "parsed": { "raw": "001XqOA2iDZ0", "normalized": "001XQOA2IDZ0", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "001XQOA2IDZ0" }, "plausibility": { "score": -3, "classification": "crc_candidate_unframed", "displayable": false, "reasons": [ "allowed_js8_display_chars", "compact_mixed_12char_payload" ], "known_tokens": [], "callsigns": [], "locators": [], "char_entropy": 3.189, "compact_random_payload_hint": true, "allowed_display_chars": true }, "confidence": "crc12_zero_distance_but_unframed", "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.best_candidate.candidate_bits", "source_kind": "generic_bit_list", "row_index": 237, "map_name": "raw", "map_source": null }, "sort_index": 0 }, { "id": "js8-rx65-c793e911ba", "source_decode_id": "js8-msg174-369b0507", "mode": "JS8", "status": "CANDIDATE", "text": "Q0VsKWqfJ96x", "display_text": "Q0VSKWQFJ96X", "raw": "Q0VsKWqfJ96x", "show_in_rx_list": false, "candidate_class": "crc_candidate_unframed", "candidate_score": -3, "valid_message174_crc12": true, "crc12_distance": 0, "received_crc12": 980, "computed_crc12": 980, "parsed": { "raw": "Q0VsKWqfJ96x", "normalized": "Q0VSKWQFJ96X", "message_type": "MESSAGE", "directed_to": null, "callsigns": [], "primary_callsign": null, "locators": [], "primary_locator": null, "body": "Q0VSKWQFJ96X" }, "plausibility": { "score": -3, "classification": "crc_candidate_unframed", "displayable": false, "reasons": [ "allowed_js8_display_chars", "compact_mixed_12char_payload" ], "known_tokens": [], "callsigns": [], "locators": [], "char_entropy": 3.585, "compact_random_payload_hint": true, "allowed_display_chars": true }, "confidence": "crc12_zero_distance_but_unframed", "source": { "source_file": "/decoders/js8_decoder/logs/20260527T150600Z_source_exact_map_probe_output.json", "json_path": "$.top_llr_row_exports[6].hard_bits", "source_kind": "generic_bit_list", "row_index": 82, "map_name": "raw", "map_source": null }, "sort_index": 1 } ], "summary": { "display_ready": 0, "candidate_only": 2, "class_counts": { "crc_candidate_unframed": 2 } }, "warnings": [ "Step65 is a safety/display-contract layer: CRC12-zero message174 candidates are not automatically treated as real user-visible JS8 chat lines.", "Random-looking compact 12-character payloads remain preserved as diagnostics but are hidden from normal WebFTR RX rows until source text/framing is connected.", "No JS8Call GUI/Qt process is started and no TX/PTT/Tune/Send action is performed." ], "next_action": "If webftr_display_count is 0, continue with source extraction around JS8 text/framing/callsign packing before WebFTR UI integration; if >0, wire webftr_rx_rows into the JS8 RX table contract." } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T163511Z_source-confirmed-rx-display-contract.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T163511Z_source-confirmed-rx-display-contract_manifest.json [js8.sh job] finished utc=2026-05-27T16:35:13Z exit_code=0