{ "release": "2026.09.26.1", "base_release": "2026.09.24.4", "base_archive": "hockey(9).zip", "base_archive_sha256": "32907eb9353ed961090f03cb1637cf63ce1b06bf755c3fc2413a33c2262bccb3", "package_type": "changed-files update; extract into existing project root", "delete_files": [], "files": [ { "path": "app.py", "action": "replace", "base_sha256": "f3f06139e4a92eac1386616c834dd4a0965e815e9f2f284337b22ff51e81c195", "updated_sha256": "c9ae453b347624ade097e1023efa2a1c91a30cf44a155723a2c25e254f1504ec", "bytes": 19719 }, { "path": "broadcast_settings/expressions.py", "action": "add", "base_sha256": null, "updated_sha256": "83e84e1943e763ba08db11fd885dea4147309fff87e61a205763c3bc26ed82de", "bytes": 9364 }, { "path": "broadcast_settings/transform.py", "action": "replace", "base_sha256": "20c04429d90165946127945938be1a8822addebe5a286dba47539d140e35bc5b", "updated_sha256": "276abb72aa02335f566f9e041f81f60f6d8aefeb1b06ee3a271a4a264bb9a3bb", "bytes": 84253 }, { "path": "hockey_data/agent_bridge.py", "action": "replace", "base_sha256": "4daa00ed80a929bc8ab9cac50525fc983ff7bae4e5abbed5f4fa3598f5078f0f", "updated_sha256": "7cf3d8dd3e0af7e0f9f3c11a58d018b1c3a88060f1d89a9e6338c0f98a7cba08", "bytes": 261432 }, { "path": "hockey_data/database.py", "action": "replace", "base_sha256": "1c298f8bb85bc6a52b3fc6e7e58e215e48d36e94c8861edbe0392003a3bc5c25", "updated_sha256": "5b058cab427269ed223b99122816b19938c2338e70025fb88eec0b481ba0b1fa", "bytes": 15387 }, { "path": "hockey_data/mapping_context.py", "action": "replace", "base_sha256": "6db8e9aee7164a85f6494f88ad854d2602371de1b8639a22bc670fe23ddeb161", "updated_sha256": "99553e31f00d65190310666bfac178616f8c37dfbb182510990d02de762ff348", "bytes": 87308 }, { "path": "hockey_data/match_access.py", "action": "add", "base_sha256": null, "updated_sha256": "a44f2aa8de9a347e3b452e0c9e2c173b079444dd89b9d3f40707bf55407d9011", "bytes": 26835 }, { "path": "hockey_data/models.py", "action": "replace", "base_sha256": "4ff5b2378ab972c991e16ac600b554bf67169a87808777e57ca9b79a05eadf4f", "updated_sha256": "bff59fc541974dc3c71458d51d5772e4f7d9cac1fc0d03c0ff4c63588aa17991", "bytes": 73057 }, { "path": "hockey_data/router.py", "action": "replace", "base_sha256": "e5c2b94ab83c5a9bde48ca5c500e80e0ae737e22098d31fd392ee6277a000b29", "updated_sha256": "f80d296fb4e204378f79cb39cb8d5774f4cceb2d3833bb5b8d83c6c030a71ac8", "bytes": 66588 }, { "path": "hockey_data/service.py", "action": "replace", "base_sha256": "df1c7e19777dd3a40b1204d3e335eed05cd9586510b9a7db871d47caf4e17284", "updated_sha256": "37443444da11c10df6d1f29dbfe736b1b17acc007f2dc0cb1238618cad03d1b2", "bytes": 383219 }, { "path": "hockey_data/static/admin-directories.js", "action": "replace", "base_sha256": "5b9c5a91448c2c524afdb8e64c22fec30438b68a41e4e34445e0c62645927dd8", "updated_sha256": "efdb1eae5a738250084f4fd9f164f5d569088c91c1d3279daab2b625189cb876", "bytes": 276359 }, { "path": "hockey_data/static/agent-devices.js", "action": "replace", "base_sha256": "fd1b1a833e712ade1295d872958d8e9b616c62d69659dc3e082254bd2b09652a", "updated_sha256": "c13fb0efd12debb06e4ac53ffb511bd94515639bfb4320e5f1dbe0abc5e379cb", "bytes": 22668 }, { "path": "hockey_data/static/agent-diagnostics.js", "action": "replace", "base_sha256": "c9e4e8b975af1b0ae01208bb181f281213a28ae7b527d1d66ed1cf28183d3c98", "updated_sha256": "89b2ffe30bf961090b4299ee55060697a0753142fd52b101e26d17a4eda87ae8", "bytes": 12633 }, { "path": "hockey_data/static/match-access.css", "action": "add", "base_sha256": null, "updated_sha256": "cc858443000e8b03b460797c4c71696dd668f53d6baba9269eed3ee7a71c9568", "bytes": 1163 }, { "path": "hockey_data/static/match-access.js", "action": "add", "base_sha256": null, "updated_sha256": "14ed9cbd8239dd60b8e2cc19ec2fe0452b3a0cf701e1b6829730a5592dfafc3f", "bytes": 19175 }, { "path": "hockey_data/static/match-status-header.js", "action": "replace", "base_sha256": "7745dbf87b4cc091de9ea9baeda8e56d09aa83a03059a61638c5023dfc2b4b73", "updated_sha256": "1c615b1b388c597cde8abc5de641807a468cf6a73681333b580e2544ca5a92a6", "bytes": 18217 }, { "path": "hockey_data/static/tournament-menu.js", "action": "replace", "base_sha256": "7bc4986a216a562354306ae73d417cedd0b08d88141b9a18bede2a0a73f7c0a5", "updated_sha256": "4e962321212c1b23bce98c1077d26e959ae1550cdbf5b48d88d1225eeec65833", "bytes": 128426 }, { "path": "requirements.txt", "action": "replace", "base_sha256": "3fe363a0de01e463e27395cfdb08d93d02100887c9640c7f396a5e0e414c8988", "updated_sha256": "1407ef85d9e64bf831eb2956a66948f410125decabca0f22bf0e22d624fcb7fb", "bytes": 227 }, { "path": "tests/support.py", "action": "replace", "base_sha256": "0731ba50f0f05b267e63f8202f133c53a207b16b8385013077941e9db36bba1f", "updated_sha256": "61d45059086316cf356650b89dd12541a94041ca7cfe844716fa2e41bbf046b2", "bytes": 1086 }, { "path": "tests/test_build47_team_state_scoreboard_overlays.py", "action": "replace", "base_sha256": "f359d352f9b3cb8190bef96b7fdd54dfc1fb0d048a7757b48852ccd93ba5911e", "updated_sha256": "c25c1df2670def6e1e9bb2683143d6ffacd3791214cfd551da924f31b0b5440b", "bytes": 2677 }, { "path": "tests/test_build65_nonadmin_match_selection.py", "action": "replace", "base_sha256": "31afe69d86947181a5914fe9a997b4af841e6649ec5a000203148462b4131fc5", "updated_sha256": "6ac2cc2aa37dfdf229ed501a256bab4220ea6d0c27f56806382de9b753f26a61", "bytes": 1108 }, { "path": "tests/test_build84_penalty_selection_persistence_prepared_titles.py", "action": "replace", "base_sha256": "5fa19a0af5bcb643d4370e747791163051fca189846735b97ab845fdb8a22a1c", "updated_sha256": "4c3cdac2e32e022201c2418ad41acd05a5453b3db1c561dd1ef3276d926fa7ed", "bytes": 8624 }, { "path": "tests/test_build86_penalty_context_prepared_titles.py", "action": "replace", "base_sha256": "591b0fe0b3327c4a6b8b42636cd08110ab7bedb376f8fcc22a9f60f1aff717ff", "updated_sha256": "7dcac6c12740cb08a123f155665784f4a9474294d88b12046b65396e01b1abd3", "bytes": 4756 }, { "path": "tests/test_stage1_expressions.py", "action": "add", "base_sha256": null, "updated_sha256": "d11e26fdfd759f4aa1c62ffb08ff4762b652ccdb9ef7ab6efc796c1e32883113", "bytes": 2116 }, { "path": "tests/test_stage1_match_access.py", "action": "add", "base_sha256": null, "updated_sha256": "f998ae041bd6951f75ca403ca0af9da1c86bd02586e809aa0bdb05653c101907", "bytes": 16208 }, { "path": "ui_builder/integration.py", "action": "replace", "base_sha256": "d5379c5a63003e805a5e37f6585c1271952edd87b310bc7ce716c138420a89a9", "updated_sha256": "024a49a82032d18acc85d51a2bcd00296ae8ce008347477e62881a8ef9a15da1", "bytes": 6043 }, { "path": "ui_builder/static/app.js", "action": "replace", "base_sha256": "3baaf37c406702355c7576c92971191c7ffb576a56a0865b040046a6c741a06a", "updated_sha256": "83a744e90d7f8de87bfa3b697fe0b83cadf3490657509488fdac4376a7bbf636", "bytes": 892684 }, { "path": "ui_builder/static/index.html", "action": "replace", "base_sha256": "3bf6ec196fe469796edc97c04dd163bc13537cc771048106f0b765aaf2b047a4", "updated_sha256": "36cf899859d278d98283d4898f42d670c113c038b71f72b007b92c63c2abd5ae", "bytes": 10717 }, { "path": "ui_builder/static/runtime.html", "action": "replace", "base_sha256": "3047e75e7799d4e2bcf3e54916214c0c3159461b31c3ab000fb2dd80ee8bb4f9", "updated_sha256": "37b8272650ccf88e7f9504b7d04f13294f59abf431c107e0603cfbd86df2580b", "bytes": 3316 }, { "path": "UPDATE_STAGE1_RU.md", "action": "add", "base_sha256": null, "updated_sha256": "12dbc2e8419fb81dc93788d806f1257c6804263b71731abaa2dddda6c3201218", "bytes": 14856 } ], "validation": { "stage1_tests_passed": 64, "full_suite_passed": 381, "full_suite_failed": 40, "new_failures_vs_base": [], "remaining_baseline_failures": [ "tests/test_build101_simple_timer_runtime.py::test_timer_start_stop_protocol_is_minimal", "tests/test_build103_space_timer_fast_transport.py::test_space_edge_is_single_fire_and_local_timer_changes_before_transport", "tests/test_build103_space_timer_fast_transport.py::test_timer_fast_contract_and_build_version", "tests/test_build104_timer_stop_no_rollback.py::test_explicit_edit_still_can_seed_stopped_clock", "tests/test_build104_timer_stop_no_rollback.py::test_pause_stop_sends_only_pause_only_command", "tests/test_build104_timer_stop_no_rollback.py::test_penalty_pause_preserves_native_vmix_frozen_value", "tests/test_build105_suspend_countdown_pause.py::test_explicit_reset_set_path_keeps_stop_then_set", "tests/test_build105_suspend_countdown_pause.py::test_penalty_normal_pause_uses_suspend", "tests/test_build105_suspend_countdown_pause.py::test_space_pause_uses_suspend_not_stop_reset", "tests/test_build106_runtime_authoritative_timer.py::test_build106_version", "tests/test_build106_runtime_authoritative_timer.py::test_countdown_start_hard_reseeds_before_start", "tests/test_build106_runtime_authoritative_timer.py::test_pause_is_reseeded_from_runtime_not_native_clock", "tests/test_build106_runtime_authoritative_timer.py::test_scoreboard_show_syncs_timer_before_overlay_steps", "tests/test_build107_pause_change_countdown.py::test_runtime_version", "tests/test_build107_pause_change_countdown.py::test_start_uses_change_then_start_without_stop_or_set_duration", "tests/test_build108_native_pause_no_resync.py::test_explicit_time_change_seeds_even_before_first_space", "tests/test_build108_native_pause_no_resync.py::test_game_clock_helper_only_seeds_on_set", "tests/test_build110_match_roster_atomic_switch.py::test_first_time_match_waits_for_core_roster_before_polling", "tests/test_build110_match_roster_atomic_switch.py::test_selected_game_cache_is_match_scoped_and_local", "tests/test_build111_agent_match_handoff.py::test_mapping_is_refreshed_only_after_roster_enrichment", "tests/test_build44_strength_vmix_sync.py::test_runtime_refreshes_only_changed_mapping_when_strength_changes", "tests/test_build56_trigger_save_onair.py::test_quick_panel_on_air_tracking_has_ack_confirmed_fallback", "tests/test_build59_toasts_and_adaptive_runtime.py::test_runtime_can_grow_in_f11_and_large_viewports", "tests/test_build62_quick_panel_onair_reconcile.py::test_overlay_parser_accepts_legacy_function_strings", "tests/test_build86_penalty_context_prepared_titles.py::test_prepared_titles_is_forced_to_last_runtime_tab_and_uses_hockey_api_directly", "tests/test_build93_countdown_reseed_on_start.py::test_game_countdown_resume_is_reseeded_before_start", "tests/test_build93_countdown_reseed_on_start.py::test_hockey_timer_shortcut_reseeds_game_and_penalty_on_resume", "tests/test_build93_countdown_reseed_on_start.py::test_native_mode_still_has_no_per_second_countdown_transport", "tests/test_build95_countdown_explicit_start_stop_sync.py::test_combined_shortcut_changes_web_first_then_synchronizes_vmix", "tests/test_build95_countdown_explicit_start_stop_sync.py::test_main_countdown_start_pause_stop_all_hard_sync_web_value", "tests/test_build97_mapping_chunked_transport.py::test_build97_runtime_version_and_mapping_diagnostics", "tests/test_build97_mapping_chunked_transport.py::test_mapping_chunk_transport_sends_300_plus_links_in_small_batches", "tests/test_build97_mapping_chunked_transport.py::test_mapping_transport_retries_isolated_failed_command", "tests/test_build97_mapping_chunked_transport.py::test_mapping_transport_splits_timeout_batch_and_keeps_going", "tests/test_build98_timer_countdown_sync_fixed_pin.py::test_countdown_start_is_simple_set_start", "tests/test_build98_timer_countdown_sync_fixed_pin.py::test_pause_and_stop_freeze_without_reseed", "tests/test_mapping_admin_visibility.py::test_mapping_has_series_autolink_and_visible_sql_table_grid", "tests/test_shortcut_sequences.py::test_build90_native_countdown_avoids_per_second_transport", "tests/test_shortcut_sequences.py::test_hockey_timer_shortcut_supports_native_countdown_and_legacy_text_mirror", "tests/test_shortcut_sequences.py::test_overlay_group_repeat_uses_transition_out_not_all_off" ], "javascript_dom": [ "default viewer", "explicit claim", "native web timer start", "viewer controls disabled", "no viewer mutation requests", "viewer unload", "viewer reload", "explicit handoff", "old owner fenced", "new owner pause persisted", "controller period selector enabled", "removed Agent not restored from legacy storage", "initialization without crypto.randomUUID" ], "javascript_runtime_errors": [], "changed_python_syntax_checked": 18, "changed_javascript_syntax_checked": 7, "native_countdown_helpers_byte_identical": true, "native_countdown_transition_cases": 6, "postgresql_ddl_compilation": "passed; no PostgreSQL connection", "not_executed": [ "real PostgreSQL integration", "real Windows browser and Agent.exe", "end-to-end vMix", "production load test" ] } }