{
  "ok": true,
  "mode": "JS8",
  "decoder": "webftr-js8-decoder-lab",
  "decoder_version": "step48-source-decoder-path-audit-2026-05-27",
  "timestamp_utc": "2026-05-27T08:43:08Z",
  "rx_only": true,
  "safety": {
    "tx": false,
    "ptt": false,
    "tune": false,
    "send": false,
    "rig_control": false,
    "js8call_api_control": false
  },
  "capabilities": {
    "wav_validate": true,
    "audio_metrics": true,
    "spectrum_candidates": true,
    "sync_candidates": true,
    "soft_symbol_metrics": true,
    "fec_input_packager": true,
    "bit_pipeline_mapper": true,
    "ldpc_probe_harness": true,
    "message_parse": true,
    "real_js8_demod": false,
    "real_js8_fec_decode": false,
    "real_js8_unpack": false
  },
  "warnings": [
    "Step 48 adds an RX-only LDPC probe harness around the 174-bit candidates. It still does not perform final real JS8 LDPC/FEC or message unpack."
  ],
  "decodes": [],
  "input_wav": "/decoders/js8_decoder/runtime/selftest_1500hz.wav",
  "wav": {
    "path": "/decoders/js8_decoder/runtime/selftest_1500hz.wav",
    "channels": 1,
    "sample_rate": 12000,
    "sample_width_bytes": 2,
    "frames": 24000,
    "duration_seconds": 2.0,
    "rms_dbfs": -15.05,
    "peak_dbfs": -12.04,
    "clipped": false
  },
  "spectrum_probe": {
    "ok": true,
    "method": "goertzel_300_3000hz_25hz_step",
    "note": "Audio plumbing probe only, not JS8 sync or demodulation.",
    "candidates": [
      {
        "freq_hz": 1500.0,
        "relative_db": 0.0,
        "power": 374.91417208
      },
      {
        "freq_hz": 1475.0,
        "relative_db": -277.94,
        "power": 0.0
      },
      {
        "freq_hz": 1525.0,
        "relative_db": -283.93,
        "power": 0.0
      },
      {
        "freq_hz": 1400.0,
        "relative_db": -289.05,
        "power": 0.0
      },
      {
        "freq_hz": 1550.0,
        "relative_db": -293.96,
        "power": 0.0
      },
      {
        "freq_hz": 1650.0,
        "relative_db": -295.18,
        "power": 0.0
      },
      {
        "freq_hz": 1575.0,
        "relative_db": -296.53,
        "power": 0.0
      },
      {
        "freq_hz": 1175.0,
        "relative_db": -298.26,
        "power": 0.0
      }
    ]
  },
  "implementation_stage": "step48_message91_crc_distance_ranking_no_text_unpack",
  "next_steps": [
    "audit JS8Call/JS8Call-Improved source to locate minimal RX decoder path",
    "run sync-probe, soft-symbols, bit-pipeline and ldpc-probe on real JS8 WAV captures",
    "extract/connect the real JS8 LDPC matrix/decoder using the Step9 174-bit soft candidates",
    "implement JS8 message unpack and map to stable decodes[] JSON"
  ]
}
