{
  "ok": true,
  "tool": "webftr-js8-real-compressed-text-release-gate",
  "tool_version": "step79-real-compressed-text-release-gate",
  "schema": "webftr-js8-real-compressed-text-release-gate-v1",
  "created_utc": "2026-05-28T02:49:00Z",
  "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_external_compressed_fixture",
  "step78_state": "operator_commands_ready_waiting_for_real_fixture",
  "step74_verdict": "fixture_gate_selftest_ready_waiting_for_real_compressed_frame_fixture",
  "external_fixture_count": 0,
  "external_fixture_pass_count": 0,
  "external_source_comparison_pass_count": 0,
  "synthetic_selftest_all_passed": true,
  "jsc_entry_count": 200000,
  "allow_experimental_lab_display": false,
  "release_candidate_count": 0,
  "release_candidate_rows": [],
  "webftr_rx_rows": [],
  "webftr_display_count": 0,
  "webftr_adapter_hint": {
    "safe_to_poll_read_only": true,
    "productive_integration": false,
    "step68_contract_remains_current_stable_ui_source": true,
    "compressed_text_latest": "/logs/js8_compressed_text_release_gate_latest.json",
    "do_not_merge_as_productive_chat_text_yet": true,
    "lab_display_requires_flag": "JS8LAB_ALLOW_EXPERIMENTAL_COMPRESSED_TEXT_RELEASE=1"
  },
  "release_gate_policy": {
    "requires_external_source_comparison": true,
    "requires_expected_text_match": true,
    "requires_jsc_complete": true,
    "releases_only_single_frame_FrameDataCompressed": true,
    "multi_frame_assembly_validated": false,
    "productive_webftr_integration_allowed": false,
    "tx_ptt_tune_send_allowed": false
  },
  "helper_files": {
    "step78_readme": "/decoders/js8_decoder/runtime/fixtures/README_STEP78_REAL_FIXTURE_COMMAND_EXPORT.md",
    "step78_print_helper": "/decoders/js8_decoder/runtime/fixtures/step78_print_fixture_commands.sh",
    "target_fixture_file": "/decoders/js8_decoder/runtime/fixtures/js8_compressed_frame_fixtures.json",
    "step74_gate_latest": "/decoders/js8_decoder/logs/js8_compressed_frame_fixture_gate_latest.json",
    "step78_command_latest": "/decoders/js8_decoder/logs/js8_real_fixture_command_export_latest.json"
  },
  "warnings": [
    "Step79 is a release gate, not productive WebFTR integration.",
    "Without a real externally confirmed compressed fixture, no compressed JS8 text is released.",
    "Even with a validated fixture, lab display rows require an explicit flag and multi-frame assembly remains unvalidated.",
    "RX-only safety remains enforced: no JS8Call runtime control and no TX/PTT/Tune/Send."
  ],
  "verdict": "release_gate_ready_but_waiting_for_external_fixture",
  "next_action": "Import one externally confirmed compressed FrameDataCompressed fixture using the Step78/76 helpers, then rerun Step79.",
  "stable_latest_written": "/decoders/js8_decoder/logs/js8_compressed_text_release_gate_latest.json"
}
