{
  "ok": true,
  "tool": "webftr-js8-real-wav-wide-data-frame-search",
  "tool_version": "step85-real-wav-wide-data-frame-search",
  "schema": "webftr-js8-real-wav-wide-data-frame-search-v1",
  "created_utc": "2026-05-28T09:13:45Z",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "purpose": "Run a bounded multi-window real-WAV search for JS8 Data/FrameDataCompressed candidates while keeping chat/free-text release blocked.",
  "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav",
  "plan_json": "/decoders/js8_decoder/logs/20260528T091124Z_real_wav_wide_window_plan_output.json",
  "window_result_manifest_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window_results_manifest.json",
  "wav_was_read": true,
  "planned_window_count": 1,
  "tested_window_count": 1,
  "scan_params": {
    "window_seconds": 54.0,
    "hop_seconds": 12.0,
    "max_seconds": 240.0,
    "max_windows": 3,
    "min_gap_seconds": 30.0,
    "output_dir": "/decoders/js8_decoder/runtime/step85_wide_windows"
  },
  "runtime_info87_rows_count": 48,
  "source_exact_zero_distance_candidate_count": 16,
  "message174_decode_count": 2,
  "frame_probe_count": 2,
  "control_frame_release_count": 2,
  "webftr_display_count": 2,
  "frame_type_counts": {
    "FrameHeartbeat": 1,
    "FrameDirected": 1
  },
  "data_frame_candidate_count": 0,
  "compressed_data_frame_candidate_count": 0,
  "webftr_rx_rows_preview": [
    {
      "id": "js8-rx67-de15d3110b0d",
      "source_candidate_id": "js8-frame66-bf1ce62fdb4a",
      "source_decode_id": "js8-msg174-fb81ef2f",
      "mode": "JS8",
      "raw_message174": "001XqOA2iDZ0",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "received_crc12": 2920,
      "computed_crc12": 2920,
      "frame_type": "FrameHeartbeat",
      "confidence": "high",
      "confidence_score": 6,
      "confidence_reasons": [
        "valid_heartbeat_callsign",
        "valid_heartbeat_grid"
      ],
      "show_in_rx_list": true,
      "candidate_class": "webftr_control_frame_display_ready",
      "release_guard": "step67_source_confirmed_fixed_control_frame_only",
      "sort_index": 0,
      "source": {
        "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
        "json_path": "$.top_candidates[0].info87_bitstring",
        "source_kind": "info87_bitstring",
        "row_index": 214,
        "map_name": "raw",
        "map_source": null
      },
      "status": "HB",
      "from": "004REY/0V4",
      "to": "@HB",
      "grid": "OJ16",
      "message": "HB 004REY/0V4 OJ16",
      "text": "HB 004REY/0V4 OJ16",
      "display_text": "HB 004REY/0V4 OJ16",
      "is_control_frame": true
    },
    {
      "id": "js8-rx67-bd37f68199eb",
      "source_candidate_id": "js8-frame66-66ab29ded46c",
      "source_decode_id": "js8-msg174-9546833a",
      "mode": "JS8",
      "raw_message174": "Q0VsKWqfJ96x",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "received_crc12": 980,
      "computed_crc12": 980,
      "frame_type": "FrameDirected",
      "confidence": "high",
      "confidence_score": 10,
      "confidence_reasons": [
        "valid_directed_from",
        "valid_directed_to",
        "directed_command"
      ],
      "show_in_rx_list": true,
      "candidate_class": "webftr_control_frame_display_ready",
      "release_guard": "step67_source_confirmed_fixed_control_frame_only",
      "sort_index": 1,
      "source": {
        "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
        "json_path": "$.top_candidates[1].info87_bitstring",
        "source_kind": "info87_bitstring",
        "row_index": 215,
        "map_name": "raw",
        "map_source": null
      },
      "status": "INFO",
      "from": "9I2TZR/P",
      "to": "0Z0PMP",
      "command": "INFO",
      "extra": 59,
      "extra_value": {
        "kind": "number",
        "value": 28
      },
      "message": "INFO 28",
      "text": "9I2TZR/P 0Z0PMP INFO 28",
      "display_text": "9I2TZR/P 0Z0PMP INFO 28",
      "is_control_frame": true
    }
  ],
  "per_window_summaries": [
    {
      "window_index": 0,
      "window_id": "step85-window-00",
      "window_wav": "/decoders/js8_decoder/runtime/step85_wide_windows/js8_step85_window_00_0000_0015.wav",
      "start_seconds": 0.0,
      "end_seconds": 15.0,
      "selection_score": -39.0763,
      "exit_codes": {
        "candidate_export": 0,
        "post_ldpc_info87_runtime_export": 0,
        "source_exact_map_probe": 0,
        "source_confirmed_message174_decode": 0,
        "source_varicode_frame_unpack_probe": 0,
        "source_confirmed_control_frame_rx_release": 0
      },
      "runtime_info87_rows_count": 48,
      "source_exact_zero_distance_candidate_count": 16,
      "message174_decode_count": 2,
      "frame_probe_count": 2,
      "frame_type_counts": {
        "FrameHeartbeat": 1,
        "FrameDirected": 1
      },
      "control_frame_release_count": 2,
      "webftr_display_count": 2,
      "webftr_rx_rows_preview": [
        {
          "id": "js8-rx67-de15d3110b0d",
          "source_candidate_id": "js8-frame66-bf1ce62fdb4a",
          "source_decode_id": "js8-msg174-fb81ef2f",
          "mode": "JS8",
          "raw_message174": "001XqOA2iDZ0",
          "valid_message174_crc12": true,
          "crc12_distance": 0,
          "received_crc12": 2920,
          "computed_crc12": 2920,
          "frame_type": "FrameHeartbeat",
          "confidence": "high",
          "confidence_score": 6,
          "confidence_reasons": [
            "valid_heartbeat_callsign",
            "valid_heartbeat_grid"
          ],
          "show_in_rx_list": true,
          "candidate_class": "webftr_control_frame_display_ready",
          "release_guard": "step67_source_confirmed_fixed_control_frame_only",
          "sort_index": 0,
          "source": {
            "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
            "json_path": "$.top_candidates[0].info87_bitstring",
            "source_kind": "info87_bitstring",
            "row_index": 214,
            "map_name": "raw",
            "map_source": null
          },
          "status": "HB",
          "from": "004REY/0V4",
          "to": "@HB",
          "grid": "OJ16",
          "message": "HB 004REY/0V4 OJ16",
          "text": "HB 004REY/0V4 OJ16",
          "display_text": "HB 004REY/0V4 OJ16",
          "is_control_frame": true
        },
        {
          "id": "js8-rx67-bd37f68199eb",
          "source_candidate_id": "js8-frame66-66ab29ded46c",
          "source_decode_id": "js8-msg174-9546833a",
          "mode": "JS8",
          "raw_message174": "Q0VsKWqfJ96x",
          "valid_message174_crc12": true,
          "crc12_distance": 0,
          "received_crc12": 980,
          "computed_crc12": 980,
          "frame_type": "FrameDirected",
          "confidence": "high",
          "confidence_score": 10,
          "confidence_reasons": [
            "valid_directed_from",
            "valid_directed_to",
            "directed_command"
          ],
          "show_in_rx_list": true,
          "candidate_class": "webftr_control_frame_display_ready",
          "release_guard": "step67_source_confirmed_fixed_control_frame_only",
          "sort_index": 1,
          "source": {
            "source_file": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
            "json_path": "$.top_candidates[1].info87_bitstring",
            "source_kind": "info87_bitstring",
            "row_index": 215,
            "map_name": "raw",
            "map_source": null
          },
          "status": "INFO",
          "from": "9I2TZR/P",
          "to": "0Z0PMP",
          "command": "INFO",
          "extra": 59,
          "extra_value": {
            "kind": "number",
            "value": 28
          },
          "message": "INFO 28",
          "text": "9I2TZR/P 0Z0PMP INFO 28",
          "display_text": "9I2TZR/P 0Z0PMP INFO 28",
          "is_control_frame": true
        }
      ],
      "outputs": {
        "candidate_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json",
        "post_ldpc_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json",
        "source_exact_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
        "message174_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json",
        "varicode_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json",
        "rx_release_json": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json"
      }
    }
  ],
  "output_stats_preview": [
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_candidate_export_output.json",
        "exists": true,
        "is_file": true,
        "size": 76395,
        "mtime_utc": "2026-05-28T09:12:36Z"
      }
    },
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_post_ldpc_info87_runtime_export_output.json",
        "exists": true,
        "is_file": true,
        "size": 99742,
        "mtime_utc": "2026-05-28T09:13:41Z"
      }
    },
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_exact_map_probe_output.json",
        "exists": true,
        "is_file": true,
        "size": 158166,
        "mtime_utc": "2026-05-28T09:13:44Z"
      }
    },
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_message174_decode_output.json",
        "exists": true,
        "is_file": true,
        "size": 8022,
        "mtime_utc": "2026-05-28T09:13:44Z"
      }
    },
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_varicode_frame_unpack_probe_output.json",
        "exists": true,
        "is_file": true,
        "size": 60579,
        "mtime_utc": "2026-05-28T09:13:45Z"
      }
    },
    {
      "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json",
      "stat": {
        "path": "/decoders/js8_decoder/logs/20260528T091124Z_step85_window0_source_confirmed_control_frame_rx_release_output.json",
        "exists": true,
        "is_file": true,
        "size": 9856,
        "mtime_utc": "2026-05-28T09:13:45Z"
      }
    }
  ],
  "verdict": "step85_real_wav_wide_search_control_frames_only",
  "warnings": [
    "Step85 searches multiple real-WAV windows for FrameData/FrameDataCompressed candidates; it still does not release free-text chat rows.",
    "Only source-confirmed fixed control frames remain eligible for WebFTR display unless a later external fixture/release gate validates compressed text."
  ],
  "notes": [
    "This step follows the user's observation that fast JSON/source-only passes were no longer exercising the real JS8 WAV enough.",
    "A compressed_data_frame_candidate_count above zero is the desired trigger for the next guarded JSC/text validation step."
  ],
  "next_action": "If compressed_data_frame_candidate_count stays 0, capture or provide a real JS8Call/RF FrameDataCompressed fixture; if it becomes >0, feed those rows into the Step79 release gate without productive WebFTR chat release.",
  "latest_previous_contracts": {
    "step84_real_wav_message174_regeneration": "/decoders/js8_decoder/logs/js8_real_wav_message174_regeneration_latest.json",
    "step79_compressed_text_release_gate": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json"
  }
}
