{
  "ok": true,
  "tool": "webftr-js8-real-wav-unique-frame-census",
  "tool_version": "step86-real-wav-unique-frame-census",
  "schema": "webftr-js8-real-wav-unique-frame-census-v1",
  "created_utc": "2026-05-28T08:28:29Z",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "purpose": "Deduplicate Step85 real-WAV multi-window results and separate repeated control-frame evidence from true Data/FrameDataCompressed discoveries.",
  "input_wav": "/decoders/js8_decoder/runtime/input_wavs/A_1_4.wav",
  "source_step85_json": "/decoders/js8_decoder/logs/js8_real_wav_wide_data_frame_search_latest.json",
  "source_step85_stat": {
    "path": "/decoders/js8_decoder/logs/js8_real_wav_wide_data_frame_search_latest.json",
    "exists": true,
    "is_file": true,
    "size": 12676,
    "mtime_utc": "2026-05-28T08:28:28Z"
  },
  "source_step85_verdict": "step85_real_wav_wide_search_control_frames_only",
  "wav_was_read": true,
  "planned_window_count": 1,
  "tested_window_count": 1,
  "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
  },
  "data_frame_candidate_count": 0,
  "compressed_data_frame_candidate_count": 0,
  "webftr_display_count": 2,
  "unique_webftr_display_count": 2,
  "duplicate_control_frame_group_count": 2,
  "unique_frame_rows": [
    {
      "key": "message174:001XqOA2iDZ0",
      "raw_message174": "001XqOA2iDZ0",
      "frame_type": "FrameHeartbeat",
      "status": "HB",
      "from": "004REY/0V4",
      "to": "@HB",
      "text": "HB 004REY/0V4 OJ16",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "seen_count": 2,
      "windows_seen": [
        0
      ],
      "example_row": {
        "id": "js8-rx67-de15d3110b0d",
        "source_candidate_id": "js8-frame66-bf1ce62fdb4a",
        "source_decode_id": "js8-msg174-40d98f4a",
        "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/20260528T082602Z_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
      }
    },
    {
      "key": "message174:Q0VsKWqfJ96x",
      "raw_message174": "Q0VsKWqfJ96x",
      "frame_type": "FrameDirected",
      "status": "INFO",
      "from": "9I2TZR/P",
      "to": "0Z0PMP",
      "text": "9I2TZR/P 0Z0PMP INFO 28",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "seen_count": 2,
      "windows_seen": [
        0
      ],
      "example_row": {
        "id": "js8-rx67-bd37f68199eb",
        "source_candidate_id": "js8-frame66-66ab29ded46c",
        "source_decode_id": "js8-msg174-53fd0ab3",
        "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/20260528T082602Z_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
      }
    }
  ],
  "duplicate_frame_rows": [
    {
      "key": "message174:001XqOA2iDZ0",
      "raw_message174": "001XqOA2iDZ0",
      "frame_type": "FrameHeartbeat",
      "status": "HB",
      "from": "004REY/0V4",
      "to": "@HB",
      "text": "HB 004REY/0V4 OJ16",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "seen_count": 2,
      "windows_seen": [
        0
      ],
      "example_row": {
        "id": "js8-rx67-de15d3110b0d",
        "source_candidate_id": "js8-frame66-bf1ce62fdb4a",
        "source_decode_id": "js8-msg174-40d98f4a",
        "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/20260528T082602Z_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
      }
    },
    {
      "key": "message174:Q0VsKWqfJ96x",
      "raw_message174": "Q0VsKWqfJ96x",
      "frame_type": "FrameDirected",
      "status": "INFO",
      "from": "9I2TZR/P",
      "to": "0Z0PMP",
      "text": "9I2TZR/P 0Z0PMP INFO 28",
      "valid_message174_crc12": true,
      "crc12_distance": 0,
      "seen_count": 2,
      "windows_seen": [
        0
      ],
      "example_row": {
        "id": "js8-rx67-bd37f68199eb",
        "source_candidate_id": "js8-frame66-66ab29ded46c",
        "source_decode_id": "js8-msg174-53fd0ab3",
        "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/20260528T082602Z_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_preview": [
    {
      "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-40d98f4a",
          "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/20260528T082602Z_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-53fd0ab3",
          "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/20260528T082602Z_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/20260528T082602Z_step85_window0_candidate_export_output.json",
        "post_ldpc_json": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_post_ldpc_info87_runtime_export_output.json",
        "source_exact_json": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_exact_map_probe_output.json",
        "message174_json": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_message174_decode_output.json",
        "varicode_json": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_varicode_frame_unpack_probe_output.json",
        "rx_release_json": "/decoders/js8_decoder/logs/20260528T082602Z_step85_window0_source_confirmed_control_frame_rx_release_output.json"
      }
    }
  ],
  "verdict": "step86_real_wav_unique_control_frames_only_no_data_frames",
  "warnings": [
    "Step86 is a census/dedup gate; it does not release JS8 free text.",
    "Repeated Heartbeat/Directed rows across nearby windows are counted as duplicate evidence, not separate new messages.",
    "FrameData and FrameDataCompressed remain blocked until a real externally confirmed fixture or real-WAV data candidate exists."
  ],
  "notes": [
    "This step was added after Step85 confirmed the real WAV path but repeated the same two control frames across multiple windows.",
    "If data_frame_candidate_count and compressed_data_frame_candidate_count remain 0, the current js8_test.wav appears to contain only the two confirmed control frames for this chain."
  ],
  "next_action": "Use a WAV containing a real JS8 free-text/Data/Compressed frame or import an externally confirmed fixture; otherwise continue decoder work with the two unique control frames as the confirmed audio-to-message174 regression baseline."
}
