{
  "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."
}
