[webftr-js8-lab] command=real-compressed-text-release-gate [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260528T024854Z_real-compressed-text-release-gate.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260528T024854Z_real-compressed-text-release-gate_manifest.json [webftr-js8-lab] utc=20260528T024854Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] Step79 real compressed JS8 text release gate [webftr-js8-lab] fixture JSON or source-dir argument: auto-detect runtime/fixtures + source + JS8LAB_FIXTURE_* env [webftr-js8-lab] lab display flag: 0 [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260528T024854Z_compressed_text_release_gate_output.json [webftr-js8-lab] JSON timeout guard: 180s { "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" } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260528T024854Z_real-compressed-text-release-gate.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260528T024854Z_real-compressed-text-release-gate_manifest.json