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