{
  "ok": true,
  "tool": "webftr-js8-real-compressed-fixture-capture-request",
  "tool_version": "step75-real-compressed-fixture-capture-request",
  "schema": "webftr-js8-real-compressed-fixture-capture-request-v1",
  "rx_only_guard": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "js8call_runtime_control": false,
    "webftr_productive_integration": false
  },
  "no_gui_runtime_started": true,
  "root": "/decoders/js8_decoder",
  "log_dir": "/decoders/js8_decoder/logs",
  "state": "waiting_for_real_compressed_framedata_fixture",
  "step74_gate_summary": {
    "tool_version": "step75-real-compressed-fixture-capture-request",
    "verdict": "fixture_gate_selftest_ready_waiting_for_real_compressed_frame_fixture",
    "next_action": "Add a real fixture JSON under runtime/fixtures/js8_compressed_frame_fixtures.json or pass it as argument to Step74.",
    "source_found": true,
    "jsc_entry_count": 200000,
    "external_fixture_count": 0,
    "external_fixture_pass_count": 0,
    "external_source_comparison_pass_count": 0,
    "synthetic_selftest_fixture_count": 8,
    "synthetic_selftest_pass_count": 8,
    "synthetic_selftest_all_passed": true,
    "webftr_display_count": 0
  },
  "fixture_paths": [
    {
      "path": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json",
      "exists": false
    },
    {
      "path": "/decoders/js8_decoder/runtime/js8_compressed_frame_fixtures.json",
      "exists": false
    },
    {
      "path": "/decoders/js8_decoder/logs/js8_compressed_frame_fixtures.json",
      "exists": false
    },
    {
      "path": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_import.json",
      "exists": false
    }
  ],
  "written_template": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.template.json",
  "target_fixture_file": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json",
  "operator_short_checklist": [
    "Keep JS8Lab RX-only; do not start any TX/PTT/Tune/Send action from this package.",
    "Use JS8Call/JS8Call-Improved or a trusted external decoder to identify one exact compressed JS8 data frame and its decoded text.",
    "Copy the exact 12-character message174 payload and exact JS8Call-decoded text into runtime/fixtures/js8_compressed_frame_fixtures.json.",
    "Include reference metadata: WAV filename, UTC timestamp, JS8Call version/source, frequency/audio offset if known, and a short note.",
    "Rerun ./start.sh; Step75 will call the Step74 gate and report whether the external comparison passes."
  ],
  "fixture_template_preview": {
    "schema": "webftr-js8-compressed-frame-fixture-file-v1",
    "purpose": "Real JS8Call/RF comparison fixtures for FrameDataCompressed/JSC text validation. Do not use synthetic rows for release decisions.",
    "how_to_fill": [
      "Capture or otherwise obtain one exact 12-character message174 payload for a FrameDataCompressed JS8 data frame.",
      "Decode the same frame with JS8Call/JS8Call-Improved and copy the exact expected text into expected_text.",
      "Add reference metadata that explains how the expected text was obtained, for example JS8Call log line, WAV name, UTC timestamp, frequency and SNR.",
      "Place the filled file at runtime/fixtures/js8_compressed_frame_fixtures.json and rerun ./start.sh or RUN_JS8_STEP75_REAL_COMPRESSED_FIXTURE_REQUEST.sh."
    ],
    "fixtures": [
      {
        "message174_text_12chars": "REPLACE_ME12",
        "expected_text": "HELLO",
        "js8call_reference": "Exact JS8Call/JS8Call-Improved reference for this same frame; include log line, version, or screenshot note.",
        "rf_reference": {
          "wav": "/decoders/js8_test.wav",
          "utc": "2026-05-27T00:00:00Z",
          "dial_hz": null,
          "audio_offset_hz": null,
          "snr_db": null,
          "notes": "Replace with real capture metadata."
        },
        "external_comparison": true,
        "note": "Template row only. Remove or replace before using as evidence."
      }
    ]
  },
  "webftr_rx_rows": [],
  "webftr_display_count": 0,
  "webftr_adapter_hint": {
    "safe_to_poll_read_only": true,
    "productive_integration": false,
    "do_not_merge_as_chat_text_yet": true,
    "step68_contract_remains_current_ui_source": true,
    "step74_gate_latest": "/logs/js8_compressed_frame_fixture_gate_latest.json",
    "step75_request_latest": "/logs/js8_real_compressed_fixture_request_latest.json"
  },
  "warnings": [
    "Step75 does not decode new RF data and does not release compressed free text to WebFTR.",
    "Synthetic JSC fixtures are only selftests; a release gate needs a real JS8Call/RF comparison fixture.",
    "The generated template contains placeholder values and must not be counted as evidence until edited with real data."
  ],
  "next_action": "Fill runtime/fixtures/js8_compressed_frame_fixtures.json from the generated template, then rerun Step75.",
  "stable_latest_written": "/decoders/js8_decoder/logs/js8_real_compressed_fixture_request_latest.json"
}
