{
  "schema": "webftr-js8-decoder-lab-browser-report-v1-slim-step88",
  "version": "step88-real-wav-corpus-intake-status-slim",
  "created_utc": "2026-05-28T06:02:25Z",
  "project": "WebFTR JS8 Decoder Lab",
  "root": "/decoders/js8_decoder",
  "expected_root": "/decoders/js8_decoder",
  "logs_dir": "/decoders/js8_decoder/logs",
  "runtime_dir": "/decoders/js8_decoder/runtime",
  "report_mode": "step88_slim_timeout_guard",
  "daemon_status": {
    "schema": "webftr-js8lab-daemon-status-v2",
    "version": "step88-real-wav-corpus-intake-status-slim",
    "created_utc": "2026-05-26T07:46:12Z",
    "updated_utc": "2026-05-28T05:48:39Z",
    "state": "diagnostics_ok",
    "detail": "Diagnose fertig",
    "exit_code": 0,
    "root": "/decoders/js8_decoder",
    "expected_root": "/decoders/js8_decoder",
    "wav": "/decoders/js8_test.wav",
    "mode": "real-wav-corpus-intake-status-slim",
    "start_guard": {
      "start_stops_existing_instance": true,
      "stale_pid_cleanup": true,
      "root_orphan_cleanup": true,
      "port_guard": true,
      "foreign_port_owner_not_killed": true
    },
    "server": {
      "host": "0.0.0.0",
      "port": 8000,
      "pid": 112430,
      "running": true,
      "log": "/decoders/js8_decoder/logs/js8_browser_server.log"
    },
    "diagnostics": {
      "pid": 112446,
      "running": false,
      "log": "/decoders/js8_decoder/logs/js8_start_diagnostics_latest.log",
      "last_command": "./run_js8_decoder_lab.sh real-wav-corpus-intake-status-slim /decoders/js8_test.wav"
    },
    "latest_chain_summary": {
      "available": true,
      "path": "/decoders/js8_decoder/logs/js8_real_wav_corpus_intake_status_latest.json",
      "stat": {
        "exists": true,
        "size": 3273,
        "mtime_utc": "2026-05-28T05:48:38Z"
      },
      "tool_version": "step88-real-wav-corpus-intake-status-slim",
      "created_utc": "2026-05-28T05:48:38Z",
      "verdict": "step88_waiting_for_additional_real_js8_freetext_wav",
      "wav_was_read": false,
      "planned_wav_count": 1,
      "tested_wav_count": 0,
      "data_frame_candidate_count": 0,
      "compressed_data_frame_candidate_count": 0,
      "extra_wav_count": 0,
      "discovered_wav_count": 1,
      "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
      },
      "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"
        }
      },
      "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."
    },
    "links": {
      "home": "/",
      "api_report": "/api/report",
      "api_status": "/api/status",
      "logs": "/logs/",
      "latest_log": "/logs/latest.log",
      "start_diagnostics_log": "/logs/js8_start_diagnostics_latest.log",
      "server_log": "/logs/js8_browser_server.log"
    },
    "rx_only_guard": {
      "tx": false,
      "ptt": false,
      "tune": false,
      "send": false,
      "js8call_runtime_control": false
    },
    "history": [
      {
        "utc": "2026-05-28T02:57:05Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T02:57:13Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:07:25Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:07:26Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:07:27Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:07:27Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: jsc-cpp-reference-map-transport-fix ",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:07:28Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:07:40Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:18:38Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:18:38Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:18:39Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:18:39Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-full-chain-regression /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:18:40Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:19:11Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:38:58Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:38:58Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:38:59Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:38:59Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-message174-regeneration /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:39:01Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:41:40Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:53:37Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:53:37Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:53:39Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T03:53:39Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-status-surface-regression /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:53:40Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T03:56:11Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T04:10:53Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:10:53Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:10:54Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T04:10:54Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-wide-data-frame-search /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:10:55Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:18:43Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T04:36:38Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:36:38Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:36:39Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T04:36:40Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-unique-frame-census /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:36:41Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T04:44:08Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T05:11:47Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:11:47Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:11:48Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T05:11:48Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-corpus-data-frame-hunt /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:11:50Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:21:01Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T05:48:36Z",
        "state": "restarting",
        "detail": "Start-Guard: bestehende JS8Lab-Instanz wird geprüft und beendet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:48:37Z",
        "state": "server_starting",
        "detail": "Browser-Logserver startet auf 0.0.0.0:8000",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:48:38Z",
        "state": "server_running",
        "detail": "Browser-Logserver läuft auf 0.0.0.0:8000",
        "exit_code": 0
      },
      {
        "utc": "2026-05-28T05:48:38Z",
        "state": "diagnostics_running",
        "detail": "Diagnose läuft: real-wav-corpus-intake-status-slim /decoders/js8_test.wav",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:48:39Z",
        "state": "diagnostics_running",
        "detail": "Diagnosejob im Hintergrund gestartet",
        "exit_code": null
      },
      {
        "utc": "2026-05-28T05:48:39Z",
        "state": "diagnostics_ok",
        "detail": "Diagnose fertig",
        "exit_code": 0
      }
    ],
    "status_file": "/decoders/js8_decoder/runtime/js8lab_status.json"
  },
  "latest_chain_summary": {
    "available": true,
    "path": "/decoders/js8_decoder/logs/js8_real_wav_corpus_intake_status_latest.json",
    "stat": {
      "exists": true,
      "is_file": true,
      "is_dir": false,
      "size": 3273,
      "mtime_utc": "2026-05-28T05:48:38Z"
    },
    "tool_version": "step88-real-wav-corpus-intake-status-slim",
    "created_utc": "2026-05-28T05:48:38Z",
    "verdict": "step88_waiting_for_additional_real_js8_freetext_wav",
    "wav_was_read": false,
    "planned_wav_count": 1,
    "tested_wav_count": 0,
    "data_frame_candidate_count": 0,
    "compressed_data_frame_candidate_count": 0,
    "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."
  },
  "wav_candidates": [
    {
      "path": "/decoders/js8_test.wav",
      "exists": true,
      "is_file": true,
      "is_dir": false,
      "size": 4608442,
      "mtime_utc": "2026-05-26T06:05:27Z"
    },
    {
      "path": "/home/webftr/decoders/js8_test.wav",
      "exists": false,
      "error": "[Errno 2] No such file or directory: '/home/webftr/decoders/js8_test.wav'"
    },
    {
      "path": "/decoders/js8_decoder/runtime/input_wavs",
      "exists": true,
      "is_file": false,
      "is_dir": true,
      "size": 4096,
      "mtime_utc": "2026-05-28T05:48:38Z"
    },
    {
      "path": "/decoders/js8_decoder/runtime/fixtures/wavs",
      "exists": true,
      "is_file": false,
      "is_dir": true,
      "size": 4096,
      "mtime_utc": "2026-05-28T05:48:38Z"
    }
  ],
  "selected_wav_hint": {
    "path": "/decoders/js8_test.wav",
    "exists": true,
    "is_file": true,
    "is_dir": false,
    "size": 4608442,
    "mtime_utc": "2026-05-26T06:05:27Z"
  },
  "latest_manifest": {
    "name": "20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json",
    "url": "/logs/20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json",
    "stat": {
      "exists": true,
      "is_file": true,
      "is_dir": false,
      "size": 1460,
      "mtime_utc": "2026-05-28T05:48:39Z"
    },
    "json": {
      "schema": "webftr-js8-decoder-lab-log-manifest-v2",
      "outputs": {
        "real_wav_corpus_intake_status_json": "/decoders/js8_decoder/logs/20260528T054838Z_real_wav_corpus_intake_status_output.json",
        "real_wav_corpus_intake_status_latest_json": "/decoders/js8_decoder/logs/js8_real_wav_corpus_intake_status_latest.json",
        "latest_step87_json": "/decoders/js8_decoder/logs/js8_real_wav_corpus_data_frame_hunt_latest.json"
      }
    }
  },
  "latest_log": {
    "url": "/logs/latest.log",
    "stat": {
      "exists": true,
      "is_file": true,
      "is_dir": false,
      "size": 4561,
      "mtime_utc": "2026-05-28T05:48:39Z"
    },
    "tail": "[webftr-js8-lab] command=real-wav-corpus-intake-status-slim\n[webftr-js8-lab] root=/decoders/js8_decoder\n[webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T054838Z_real-wav-corpus-intake-status-slim.log\n[webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json\n[webftr-js8-lab] utc=20260528T054838Z\n[webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send\n\n[webftr-js8-lab] Step88 real WAV corpus intake/status slim\n[webftr-js8-lab] requested primary WAV: /decoders/js8_test.wav\n[webftr-js8-lab] This run is intentionally lightweight: it creates WAV intake helpers and surfaces the latest Step87 result without rerunning the full decoder chain.\n[webftr-js8-lab] RX-only guard: no TX / no PTT / no Tune / no Send / no JS8Call runtime control.\n[webftr-js8-lab] resolved primary WAV: /decoders/js8_test.wav\n[webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T054838Z_real_wav_corpus_intake_status_output.json\n[webftr-js8-lab] JSON timeout guard: 30s\n{\n  \"ok\": true,\n  \"tool\": \"webftr-js8-real-wav-corpus-intake-status-slim\",\n  \"tool_version\": \"step88-real-wav-corpus-intake-status-slim\",\n  \"schema\": \"webftr-js8-real-wav-corpus-intake-status-v1\",\n  \"created_utc\": \"2026-05-28T05:48:38Z\",\n  \"rx_only\": true,\n  \"safety\": {\n    \"tx\": false,\n    \"ptt\": false,\n    \"tune\": false,\n    \"send\": false,\n    \"js8call_runtime_control\": false\n  },\n  \"root\": \"/decoders/js8_decoder\",\n  \"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.\",\n  \"wav_was_read\": false,\n  \"planned_wav_count\": 1,\n  \"discovered_wav_count\": 1,\n  \"tested_wav_count\": 0,\n  \"planned_wavs\": [\n    {\n      \"path\": \"/decoders/js8_test.wav\",\n      \"source\": \"primary\",\n      \"stat\": {\n        \"path\": \"/decoders/js8_test.wav\",\n        \"exists\": true,\n        \"is_file\": true,\n        \"size\": 4608442,\n        \"mtime_utc\": \"2026-05-26T06:05:27Z\"\n      }\n    }\n  ],\n  \"extra_wav_count\": 0,\n  \"latest_step87_summary\": {\n    \"path\": \"/decoders/js8_decoder/logs/js8_real_wav_corpus_data_frame_hunt_latest.json\",\n    \"stat\": {\n      \"path\": \"/decoders/js8_decoder/logs/js8_real_wav_corpus_data_frame_hunt_latest.json\",\n      \"exists\": true,\n      \"is_file\": true,\n      \"size\": 7303,\n      \"mtime_utc\": \"2026-05-28T05:20:57Z\"\n    },\n    \"available\": true,\n    \"tool_version\": \"step87-real-wav-corpus-data-frame-hunt\",\n    \"created_utc\": \"2026-05-28T05:20:57Z\",\n    \"verdict\": \"step87_corpus_control_frames_only_no_data_frames\",\n    \"tested_wav_count\": 1,\n    \"planned_wav_count\": 1,\n    \"data_frame_candidate_count\": 0,\n    \"compressed_data_frame_candidate_count\": 0,\n    \"unique_control_frame_total_across_wavs\": 2\n  },\n  \"data_frame_candidate_count\": 0,\n  \"compressed_data_frame_candidate_count\": 0,\n  \"operator_files\": {\n    \"input_wavs_dir\": \"/decoders/js8_decoder/runtime/input_wavs\",\n    \"fixtures_wavs_dir\": \"/decoders/js8_decoder/runtime/fixtures/wavs\",\n    \"readme\": \"/decoders/js8_decoder/runtime/input_wavs/README_STEP88_WAV_CORPUS_INTAKE.md\",\n    \"helper\": \"/decoders/js8_decoder/runtime/input_wavs/add_wav_to_corpus_step88.sh\",\n    \"readme_stat\": {\n      \"path\": \"/decoders/js8_decoder/runtime/input_wavs/README_STEP88_WAV_CORPUS_INTAKE.md\",\n      \"exists\": true,\n      \"is_file\": true,\n      \"size\": 427,\n      \"mtime_utc\": \"2026-05-28T05:48:38Z\"\n    },\n    \"helper_stat\": {\n      \"path\": \"/decoders/js8_decoder/runtime/input_wavs/add_wav_to_corpus_step88.sh\",\n      \"exists\": true,\n      \"is_file\": true,\n      \"size\": 446,\n      \"mtime_utc\": \"2026-05-28T05:48:38Z\"\n    }\n  },\n  \"verdict\": \"step88_waiting_for_additional_real_js8_freetext_wav\",\n  \"warnings\": [\n    \"Step88 is intentionally lightweight and does not re-run the full WAV decoder chain.\",\n    \"Use Step87/./start.sh after adding a WAV to run the real corpus hunt again.\",\n    \"No JS8 free text is released without a real Data/Compressed candidate and release-gate validation.\"\n  ],\n  \"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.\"\n}\n\n[webftr-js8-lab] OK\n[webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T054838Z_real-wav-corpus-intake-status-slim.log\n[webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json\n"
  },
  "recent_files": [
    {
      "name": "js8_browser_server.log",
      "size": 676,
      "mtime_utc": "2026-05-28T05:54:50Z",
      "url": "/logs/js8_browser_server.log"
    },
    {
      "name": "js8_browser_report_latest.json",
      "size": 31964,
      "mtime_utc": "2026-05-28T05:54:50Z",
      "url": "/logs/js8_browser_report_latest.json"
    },
    {
      "name": "js8_start_diagnostics_latest.log",
      "size": 4920,
      "mtime_utc": "2026-05-28T05:48:39Z",
      "url": "/logs/js8_start_diagnostics_latest.log"
    },
    {
      "name": "latest.log",
      "size": 4561,
      "mtime_utc": "2026-05-28T05:48:39Z",
      "url": "/logs/latest.log"
    },
    {
      "name": "20260528T054838Z_real-wav-corpus-intake-status-slim.log",
      "size": 4561,
      "mtime_utc": "2026-05-28T05:48:39Z",
      "url": "/logs/20260528T054838Z_real-wav-corpus-intake-status-slim.log"
    },
    {
      "name": "20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json",
      "size": 1460,
      "mtime_utc": "2026-05-28T05:48:39Z",
      "url": "/logs/20260528T054838Z_real-wav-corpus-intake-status-slim_manifest.json"
    },
    {
      "name": "js8_real_wav_corpus_intake_status_latest.json",
      "size": 3273,
      "mtime_utc": "2026-05-28T05:48:38Z",
      "url": "/logs/js8_real_wav_corpus_intake_status_latest.json"
    },
    {
      "name": "20260528T054838Z_real_wav_corpus_intake_status_output.json",
      "size": 3273,
      "mtime_utc": "2026-05-28T05:48:38Z",
      "url": "/logs/20260528T054838Z_real_wav_corpus_intake_status_output.json"
    },
    {
      "name": "20260528T054838Z_real_wav_corpus_intake_status_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:48:38Z",
      "url": "/logs/20260528T054838Z_real_wav_corpus_intake_status_output.stderr.log"
    },
    {
      "name": "20260528T051148Z_real-wav-corpus-data-frame-hunt.log",
      "size": 1372528,
      "mtime_utc": "2026-05-28T05:21:01Z",
      "url": "/logs/20260528T051148Z_real-wav-corpus-data-frame-hunt.log"
    },
    {
      "name": "20260528T051148Z_real-wav-corpus-data-frame-hunt_manifest.json",
      "size": 1740,
      "mtime_utc": "2026-05-28T05:20:59Z",
      "url": "/logs/20260528T051148Z_real-wav-corpus-data-frame-hunt_manifest.json"
    },
    {
      "name": "js8_real_wav_corpus_data_frame_hunt_latest.json",
      "size": 7303,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/js8_real_wav_corpus_data_frame_hunt_latest.json"
    },
    {
      "name": "20260528T051148Z_real_wav_corpus_data_frame_hunt_output.json",
      "size": 7303,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/20260528T051148Z_real_wav_corpus_data_frame_hunt_output.json"
    },
    {
      "name": "20260528T051148Z_real_wav_corpus_data_frame_hunt_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/20260528T051148Z_real_wav_corpus_data_frame_hunt_output.stderr.log"
    },
    {
      "name": "20260528T051148Z_step87_result_jsons.txt",
      "size": 88,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/20260528T051148Z_step87_result_jsons.txt"
    },
    {
      "name": "20260528T051148Z_step87_wav0_unique_frame_census_output.json",
      "size": 24463,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/20260528T051148Z_step87_wav0_unique_frame_census_output.json"
    },
    {
      "name": "20260528T051149Z_real-wav-unique-frame-census.log",
      "size": 1361350,
      "mtime_utc": "2026-05-28T05:20:57Z",
      "url": "/logs/20260528T051149Z_real-wav-unique-frame-census.log"
    },
    {
      "name": "20260528T051149Z_real-wav-unique-frame-census_manifest.json",
      "size": 1522,
      "mtime_utc": "2026-05-28T05:20:55Z",
      "url": "/logs/20260528T051149Z_real-wav-unique-frame-census_manifest.json"
    },
    {
      "name": "js8_real_wav_unique_frame_census_latest.json",
      "size": 24463,
      "mtime_utc": "2026-05-28T05:20:53Z",
      "url": "/logs/js8_real_wav_unique_frame_census_latest.json"
    },
    {
      "name": "20260528T051149Z_real_wav_unique_frame_census_output.json",
      "size": 24463,
      "mtime_utc": "2026-05-28T05:20:53Z",
      "url": "/logs/20260528T051149Z_real_wav_unique_frame_census_output.json"
    },
    {
      "name": "20260528T051149Z_real_wav_unique_frame_census_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:53Z",
      "url": "/logs/20260528T051149Z_real_wav_unique_frame_census_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_real-wav-wide-data-frame-search.log",
      "size": 1335427,
      "mtime_utc": "2026-05-28T05:20:53Z",
      "url": "/logs/20260528T051150Z_real-wav-wide-data-frame-search.log"
    },
    {
      "name": "20260528T051150Z_real-wav-wide-data-frame-search_manifest.json",
      "size": 1778,
      "mtime_utc": "2026-05-28T05:20:52Z",
      "url": "/logs/20260528T051150Z_real-wav-wide-data-frame-search_manifest.json"
    },
    {
      "name": "js8_step85_window_results_manifest_latest.json",
      "size": 4220,
      "mtime_utc": "2026-05-28T05:20:50Z",
      "url": "/logs/js8_step85_window_results_manifest_latest.json"
    },
    {
      "name": "js8_real_wav_wide_window_plan_latest.json",
      "size": 11377,
      "mtime_utc": "2026-05-28T05:20:50Z",
      "url": "/logs/js8_real_wav_wide_window_plan_latest.json"
    },
    {
      "name": "js8_real_wav_wide_data_frame_search_latest.json",
      "size": 32464,
      "mtime_utc": "2026-05-28T05:20:50Z",
      "url": "/logs/js8_real_wav_wide_data_frame_search_latest.json"
    },
    {
      "name": "20260528T051150Z_real_wav_wide_data_frame_search_output.json",
      "size": 32464,
      "mtime_utc": "2026-05-28T05:20:50Z",
      "url": "/logs/20260528T051150Z_real_wav_wide_data_frame_search_output.json"
    },
    {
      "name": "20260528T051150Z_real_wav_wide_data_frame_search_output.stderr.log",
      "size": 182,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_real_wav_wide_data_frame_search_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_step85_window_results_manifest.json",
      "size": 4220,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_step85_window_results_manifest.json"
    },
    {
      "name": "20260528T051150Z_step85_window_results.jsonl",
      "size": 3609,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_step85_window_results.jsonl"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_confirmed_control_frame_rx_release_output.json",
      "size": 9856,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_confirmed_control_frame_rx_release_output.json"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_confirmed_control_frame_rx_release_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_confirmed_control_frame_rx_release_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_varicode_frame_unpack_probe_output.json",
      "size": 60579,
      "mtime_utc": "2026-05-28T05:20:49Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_varicode_frame_unpack_probe_output.json"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_varicode_frame_unpack_probe_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:48Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_varicode_frame_unpack_probe_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_confirmed_message174_decode_output.json",
      "size": 8022,
      "mtime_utc": "2026-05-28T05:20:48Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_confirmed_message174_decode_output.json"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_confirmed_message174_decode_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:48Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_confirmed_message174_decode_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_exact_map_probe_output.json",
      "size": 150400,
      "mtime_utc": "2026-05-28T05:20:48Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_exact_map_probe_output.json"
    },
    {
      "name": "20260528T051150Z_step85_window2_source_exact_map_probe_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:20:45Z",
      "url": "/logs/20260528T051150Z_step85_window2_source_exact_map_probe_output.stderr.log"
    },
    {
      "name": "20260528T051150Z_step85_window2_post_ldpc_info87_runtime_export_output.json",
      "size": 102055,
      "mtime_utc": "2026-05-28T05:20:45Z",
      "url": "/logs/20260528T051150Z_step85_window2_post_ldpc_info87_runtime_export_output.json"
    },
    {
      "name": "20260528T051150Z_step85_window2_post_ldpc_info87_runtime_export_output.stderr.log",
      "size": 0,
      "mtime_utc": "2026-05-28T05:19:24Z",
      "url": "/logs/20260528T051150Z_step85_window2_post_ldpc_info87_runtime_export_output.stderr.log"
    }
  ],
  "stable_latest_links": {
    "browser_report": "/logs/js8_browser_report_latest.json",
    "real_wav_corpus_intake_status_latest": "/logs/js8_real_wav_corpus_intake_status_latest.json",
    "real_wav_corpus_data_frame_hunt_latest": "/logs/js8_real_wav_corpus_data_frame_hunt_latest.json",
    "real_wav_corpus_plan_latest": "/logs/js8_real_wav_corpus_plan_latest.json",
    "real_wav_unique_frame_census_latest": "/logs/js8_real_wav_unique_frame_census_latest.json",
    "latest_log": "/logs/latest.log"
  },
  "browser_links": {
    "home": "/",
    "api_report": "/api/report",
    "api_status": "/api/status",
    "logs": "/logs/"
  },
  "rx_only_guard": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false,
    "webftr_productive_integration": false
  },
  "note": "Step88 slim report avoids heavy historical JSON previews so /api/report and /logs stay responsive. Full files remain directly downloadable under /logs/<filename>."
}