{
  "ok": true,
  "tool": "webftr-js8-real-wav-corpus-intake-status-slim",
  "tool_version": "step88-real-wav-corpus-intake-status-slim",
  "schema": "webftr-js8-real-wav-corpus-intake-status-v1",
  "created_utc": "2026-05-28T05:48:38Z",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false
  },
  "root": "/decoders/js8_decoder",
  "purpose": "Make the next required external input explicit: a real JS8 WAV containing free-text/Data/Compressed frames. Also keep browser status/report/log pages lightweight.",
  "wav_was_read": false,
  "planned_wav_count": 1,
  "discovered_wav_count": 1,
  "tested_wav_count": 0,
  "planned_wavs": [
    {
      "path": "/decoders/js8_test.wav",
      "source": "primary",
      "stat": {
        "path": "/decoders/js8_test.wav",
        "exists": true,
        "is_file": true,
        "size": 4608442,
        "mtime_utc": "2026-05-26T06:05:27Z"
      }
    }
  ],
  "extra_wav_count": 0,
  "latest_step87_summary": {
    "path": "/decoders/js8_decoder/logs/js8_real_wav_corpus_data_frame_hunt_latest.json",
    "stat": {
      "path": "/decoders/js8_decoder/logs/js8_real_wav_corpus_data_frame_hunt_latest.json",
      "exists": true,
      "is_file": true,
      "size": 7303,
      "mtime_utc": "2026-05-28T05:20:57Z"
    },
    "available": true,
    "tool_version": "step87-real-wav-corpus-data-frame-hunt",
    "created_utc": "2026-05-28T05:20:57Z",
    "verdict": "step87_corpus_control_frames_only_no_data_frames",
    "tested_wav_count": 1,
    "planned_wav_count": 1,
    "data_frame_candidate_count": 0,
    "compressed_data_frame_candidate_count": 0,
    "unique_control_frame_total_across_wavs": 2
  },
  "data_frame_candidate_count": 0,
  "compressed_data_frame_candidate_count": 0,
  "operator_files": {
    "input_wavs_dir": "/decoders/js8_decoder/runtime/input_wavs",
    "fixtures_wavs_dir": "/decoders/js8_decoder/runtime/fixtures/wavs",
    "readme": "/decoders/js8_decoder/runtime/input_wavs/README_STEP88_WAV_CORPUS_INTAKE.md",
    "helper": "/decoders/js8_decoder/runtime/input_wavs/add_wav_to_corpus_step88.sh",
    "readme_stat": {
      "path": "/decoders/js8_decoder/runtime/input_wavs/README_STEP88_WAV_CORPUS_INTAKE.md",
      "exists": true,
      "is_file": true,
      "size": 427,
      "mtime_utc": "2026-05-28T05:48:38Z"
    },
    "helper_stat": {
      "path": "/decoders/js8_decoder/runtime/input_wavs/add_wav_to_corpus_step88.sh",
      "exists": true,
      "is_file": true,
      "size": 446,
      "mtime_utc": "2026-05-28T05:48:38Z"
    }
  },
  "verdict": "step88_waiting_for_additional_real_js8_freetext_wav",
  "warnings": [
    "Step88 is intentionally lightweight and does not re-run the full WAV decoder chain.",
    "Use Step87/./start.sh after adding a WAV to run the real corpus hunt again.",
    "No JS8 free text is released without a real Data/Compressed candidate and release-gate validation."
  ],
  "next_action": "Add a real JS8 WAV with free-text/Data/Compressed transmission under runtime/input_wavs or set JS8LAB_WAV_CORPUS_DIRS, then rerun ./start.sh. If only /decoders/js8_test.wav is present, the known result remains two unique control frames and zero Data/Compressed frames."
}
