{
  "ok": true,
  "tool": "webftr-js8-compressed-frame-fixture-validation-gate",
  "tool_version": "step74-compressed-frame-fixture-validation-gate",
  "schema": "webftr-js8-compressed-frame-fixture-validation-gate-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",
  "source_resolution": {
    "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved",
    "source_found": true,
    "checked": [
      {
        "path": "/decoders/js8_decoder/runtime/src/JS8Call-improved",
        "exists": true,
        "is_dir": true
      }
    ]
  },
  "jsc_map_summary": {
    "ok": true,
    "source_file": "JS8_JSC/JSC_map.cpp",
    "entry_count": 200000,
    "declared_size": 262144,
    "declared_size_matches": false,
    "map_fingerprint_sha256": "edbc4c529a809c0e900f2ad443aefe6cca271f1f6df52f6e651b4997b3d4d949",
    "sample_entries": [
      "E",
      "T",
      "A",
      "O",
      "I",
      "N",
      "S",
      "H",
      "R",
      "D",
      "L",
      "C",
      "U",
      "M",
      "W",
      "F",
      "G",
      "Y",
      "P",
      "B"
    ],
    "attempts": [
      {
        "path": "JS8_JSC/JSC_map.cpp",
        "bytes": 7082880,
        "sha256": "ab2bd62ef594f4629a2c93b6de43f5469b1fd6fe67ebf4d24f915bd11ccef813",
        "declared_size": 262144,
        "parsed_entry_count": 200000,
        "sample": [
          "E",
          "T",
          "A",
          "O",
          "I",
          "N",
          "S",
          "H",
          "R",
          "D",
          "L",
          "C"
        ]
      }
    ]
  },
  "fixture_input_reports": [
    {
      "path": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json",
      "exists": false,
      "default_fixture_path": true
    },
    {
      "path": "/decoders/js8_decoder/runtime/js8_compressed_frame_fixtures.json",
      "exists": false,
      "default_fixture_path": true
    },
    {
      "path": "/decoders/js8_decoder/logs/js8_compressed_frame_fixtures.json",
      "exists": false,
      "default_fixture_path": true
    },
    {
      "path": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_import.json",
      "exists": false,
      "default_fixture_path": true
    }
  ],
  "external_fixture_count": 0,
  "external_fixture_pass_count": 0,
  "external_source_comparison_pass_count": 0,
  "external_fixture_rows": [],
  "synthetic_selftest_fixture_count": 8,
  "synthetic_selftest_pass_count": 8,
  "synthetic_selftest_all_passed": true,
  "synthetic_selftest_rows": [
    {
      "id": "js8-fixture74-2c0f622faffef7",
      "source_label": "synthetic:CQ",
      "source_index": 0,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tuZ+++++++++",
      "payload_bitvec": "0111111000100",
      "expected_text": "CQ",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tuZ+++++++++",
        "expected_text": "CQ",
        "payload_bitvec": "0111111000100",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tuZ+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "CQ",
        "decoded_text_preview": "CQ",
        "expected_text": "CQ",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tuZ+++++++++",
        "bridge": {
          "message_text_12chars": "tuZ+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111111000100011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "0111111000100",
          "payload_preview_bits": "0111111000100",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 121,
              "word": "CQ",
              "start": 0,
              "k": 2
            }
          ],
          "text": "CQ",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "CQ",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "CQ"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-44a4267d6a021d",
      "source_label": "synthetic:CQ:sep",
      "source_index": 1,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tuh+++++++++",
      "payload_bitvec": "0111111000101",
      "expected_text": "CQ ",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tuh+++++++++",
        "expected_text": "CQ ",
        "payload_bitvec": "0111111000101",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tuh+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "CQ ",
        "decoded_text_preview": "CQ ",
        "expected_text": "CQ ",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tuh+++++++++",
        "bridge": {
          "message_text_12chars": "tuh+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111111000101011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "0111111000101",
          "payload_preview_bits": "0111111000101",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 121,
              "word": "CQ",
              "start": 0,
              "k": 2
            }
          ],
          "text": "CQ ",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "CQ ",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "CQ"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-daad55339cfd4b",
      "source_label": "synthetic:TEST",
      "source_index": 2,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "vqZ+++++++++",
      "payload_bitvec": "1001110100100",
      "expected_text": "TEST",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "vqZ+++++++++",
        "expected_text": "TEST",
        "payload_bitvec": "1001110100100",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "vqZ+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "TEST",
        "decoded_text_preview": "TEST",
        "expected_text": "TEST",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "vqZ+++++++++",
        "bridge": {
          "message_text_12chars": "vqZ+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "111001110100100011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "1001110100100",
          "payload_preview_bits": "1001110100100",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 240,
              "word": "TEST",
              "start": 0,
              "k": 2
            }
          ],
          "text": "TEST",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "TEST",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "TEST"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-ced618f95b1e25",
      "source_label": "synthetic:TEST:sep",
      "source_index": 3,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "vqh+++++++++",
      "payload_bitvec": "1001110100101",
      "expected_text": "TEST ",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "vqh+++++++++",
        "expected_text": "TEST ",
        "payload_bitvec": "1001110100101",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "vqh+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "TEST ",
        "decoded_text_preview": "TEST ",
        "expected_text": "TEST ",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "vqh+++++++++",
        "bridge": {
          "message_text_12chars": "vqh+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "111001110100101011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "1001110100101",
          "payload_preview_bits": "1001110100101",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 240,
              "word": "TEST",
              "start": 0,
              "k": 2
            }
          ],
          "text": "TEST ",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "TEST ",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "TEST"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-1e784547ba0737",
      "source_label": "synthetic:HELLO",
      "source_index": 4,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tYuK++++++++",
      "payload_bitvec": "011110001011100001010",
      "expected_text": "HELLO",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tYuK++++++++",
        "expected_text": "HELLO",
        "payload_bitvec": "011110001011100001010",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tYuK++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "HELLO",
        "decoded_text_preview": "HELLO",
        "expected_text": "HELLO",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tYuK++++++++",
        "bridge": {
          "message_text_12chars": "tYuK++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111100010111000010100111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 23,
          "payload_bit_count": 21,
          "payload_bitvec": "011110001011100001010",
          "payload_preview_bits": "011110001011100001010",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 21,
          "nibble_count": 5,
          "consumed_nibbles": 5,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 6571,
              "word": "HELLO",
              "start": 0,
              "k": 4
            }
          ],
          "text": "HELLO",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "HELLO",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "HELLO"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-5edc31f5f5617a",
      "source_label": "synthetic:HELLO:sep",
      "source_index": 5,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tYuM++++++++",
      "payload_bitvec": "011110001011100001011",
      "expected_text": "HELLO ",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tYuM++++++++",
        "expected_text": "HELLO ",
        "payload_bitvec": "011110001011100001011",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tYuM++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "HELLO ",
        "decoded_text_preview": "HELLO ",
        "expected_text": "HELLO ",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tYuM++++++++",
        "bridge": {
          "message_text_12chars": "tYuM++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111100010111000010110111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 23,
          "payload_bit_count": 21,
          "payload_bitvec": "011110001011100001011",
          "payload_preview_bits": "011110001011100001011",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 21,
          "nibble_count": 5,
          "consumed_nibbles": 5,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 6571,
              "word": "HELLO",
              "start": 0,
              "k": 4
            }
          ],
          "text": "HELLO ",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "HELLO ",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "HELLO"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-56f8032b9e4466",
      "source_label": "synthetic:DE",
      "source_index": 6,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tvZ+++++++++",
      "payload_bitvec": "0111111001100",
      "expected_text": "DE",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tvZ+++++++++",
        "expected_text": "DE",
        "payload_bitvec": "0111111001100",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tvZ+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "DE",
        "decoded_text_preview": "DE",
        "expected_text": "DE",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tvZ+++++++++",
        "bridge": {
          "message_text_12chars": "tvZ+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111111001100011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "0111111001100",
          "payload_preview_bits": "0111111001100",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 125,
              "word": "DE",
              "start": 0,
              "k": 2
            }
          ],
          "text": "DE",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "DE",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "DE"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    },
    {
      "id": "js8-fixture74-19ac88ade1546e",
      "source_label": "synthetic:DE:sep",
      "source_index": 7,
      "origin_kind": "synthetic_selftest",
      "message174_text_12chars": "tvh+++++++++",
      "payload_bitvec": "0111111001101",
      "expected_text": "DE ",
      "fixture_note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture.",
      "js8call_reference": null,
      "rf_reference": null,
      "external_comparison": false,
      "built_from_payload_bitvec": null,
      "raw_fixture": {
        "message174_text_12chars": "tvh+++++++++",
        "expected_text": "DE ",
        "payload_bitvec": "0111111001101",
        "note": "Step74 internal synthetic gate selftest; not an RF/JS8Call comparison fixture."
      },
      "compressed_fixture_gate": {
        "attempted": true,
        "message174_text_12chars": "tvh+++++++++",
        "bridge_status": "compressed_payload_bitvec_ready",
        "jsc_complete": true,
        "decoded_text": "DE ",
        "decoded_text_preview": "DE ",
        "expected_text": "DE ",
        "expected_text_present": true,
        "expected_text_match": true,
        "diagnostic_text_plausible": true,
        "has_external_reference": false,
        "source_comparison_passed": false,
        "passes_fixture_gate": true,
        "release_decision": "diagnostic_only_synthetic_or_unreferenced_fixture"
      },
      "raw_decode": {
        "message_text_12chars": "tvh+++++++++",
        "bridge": {
          "message_text_12chars": "tvh+++++++++",
          "ok": true,
          "is_data": true,
          "compressed": true,
          "release_allowed": false,
          "release_guard": "step73_diagnostics_only_no_chat_release",
          "bits72_preview": "110111111001101011111111111111111111111111111111111111111111111111111111",
          "top2_bits": "11",
          "last_zero_index": 15,
          "payload_bit_count": 13,
          "payload_bitvec": "0111111001101",
          "payload_preview_bits": "0111111001101",
          "source_bridge_contract": "unpack72bits -> bits72; require bit0=data and bit1=compressed; pass bits[2:last_zero] to JSC::decompress",
          "bridge_status": "compressed_payload_bitvec_ready"
        },
        "attempted_jsc_decompress": true,
        "webftr_display_release_allowed": false,
        "release_decision": "blocked_step73_diagnostics_only",
        "decompress_result": {
          "input_bit_count": 13,
          "nibble_count": 3,
          "consumed_nibbles": 3,
          "decoded_word_count": 1,
          "decoded_words": [
            {
              "index": 125,
              "word": "DE",
              "start": 0,
              "k": 2
            }
          ],
          "text": "DE ",
          "complete": true,
          "break_reason": null
        },
        "decoded_text_preview": "DE ",
        "diagnostic_text_plausible": true,
        "display_text_if_later_released": "DE"
      },
      "show_in_webftr_rx": false,
      "webftr_chat_release_allowed": false
    }
  ],
  "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,
    "candidate_latest_file": "/logs/js8_compressed_frame_fixture_gate_latest.json"
  },
  "fixture_format_hint": {
    "path": "runtime/fixtures/js8_compressed_frame_fixtures.json",
    "example": {
      "fixtures": [
        {
          "message174_text_12chars": "tYuK++++++++",
          "expected_text": "HELLO",
          "js8call_reference": "JS8Call decoded this exact fixture as HELLO",
          "note": "Example format only; provide real RF/JS8Call comparison metadata for release-gate work."
        }
      ]
    }
  },
  "warnings": [
    "Step74 validates compressed single-frame fixtures, but still blocks WebFTR chat release.",
    "Synthetic fixtures prove the port harness only; they are not RF/JS8Call comparison evidence.",
    "Multi-frame assembly and final display-release plausibility remain future steps."
  ],
  "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.",
  "stable_latest_written": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_gate_latest.json"
}
