utils/gatelock/gatelock
Krzysztof kuhy Rudnicki f5f9db21dc gatelock: split _arbiter.py and _escape.py — package now fully under the cap
_arbiter.py 397 -> 246 + _claims 241
  _escape.py  300 -> 230 + _escape_types 82

_claims holds the claim document and everything that decides whether one is
still owned: taking the advisory lock IS the liveness proof, so reading a
claim and reaping a dead one are the same operation and belong together.
_arbiter keeps the policy — who outranks whom, and whether this app may arm.

An AST pass over every module in the package (names loaded vs. names defined
or imported) caught two things a green suite would not have:
  - _try_lock and fcntl moved with the locking code, so the tests' patch
    targets had to move too;
  - OutputSource was left behind by the earlier _outputs split and only
    resolved because of `from __future__ import annotations` — a latent
    NameError the moment anything evaluated that annotation.

gatelock is now at 0 files over 250 lines: 389 passed, 100% branch coverage,
the same 58 public names, and palette_check still at 0 failing checks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CFSGeWxHPY5rHUGrPqhcmG
2026-08-22 15:21:46 +02:00
..
tests gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
__init__.py gatelock: split _outputs.py 401 -> 137 across four modules 2026-08-22 15:15:55 +02:00
_arbiter.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_arming.py gatelock: split _window.py 571 -> 243 lines across four modules 2026-08-22 14:20:11 +02:00
_claims.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_config.py gatelock: split _window.py 571 -> 243 lines across four modules 2026-08-22 14:20:11 +02:00
_density.py gatelock 0.4.0: the viewport moves for the user and nobody else 2026-08-03 15:50:51 +02:00
_detect.py gatelock v0.2.0: per-output locking, monotonic recovery, N-app arbitration 2026-07-25 14:30:03 +02:00
_escape_types.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_escape.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_fitcheck.py gatelock: make fit/scroll geometry tests immune to a real WM 2026-08-21 13:00:20 +02:00
_grabwatch.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_guards.py gatelock v0.2.0: per-output locking, monotonic recovery, N-app arbitration 2026-07-25 14:30:03 +02:00
_hooks.py gatelock: split _window.py 571 -> 243 lines across four modules 2026-08-22 14:20:11 +02:00
_keyboard.py Make lock surfaces keyboard-operable and safe on a 768px screen 2026-07-30 16:01:15 +02:00
_output_types.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_outputs.py gatelock: split _arbiter.py and _escape.py — package now fully under the cap 2026-08-22 15:21:46 +02:00
_placement.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_preempt.py gatelock: split _window.py 571 -> 243 lines across four modules 2026-08-22 14:20:11 +02:00
_queue.py gatelock: promote the priority queue from leetcode_guard 2026-08-21 12:33:43 +02:00
_randr.py gatelock: split _outputs.py 401 -> 137 across four modules 2026-08-22 15:15:55 +02:00
_recovery_types.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_recovery.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_root.py Initial gatelock: shared lock-window + HMAC log-integrity backend 2026-06-19 17:39:44 +02:00
_scrollable.py gatelock: split _scrollable.py 495 -> 243 lines across four modules 2026-08-22 14:28:21 +02:00
_scrollfit.py gatelock: split _scrollable.py 495 -> 243 lines across four modules 2026-08-22 14:28:21 +02:00
_scrollkeys.py gatelock: split _scrollable.py 495 -> 243 lines across four modules 2026-08-22 14:28:21 +02:00
_surface_types.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_surfaces.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_textmirror.py gatelock: split _recovery.py and _surfaces.py, and fix two fail-open guards 2026-08-22 15:08:50 +02:00
_userintent.py gatelock: split _scrollable.py 495 -> 243 lines across four modules 2026-08-22 14:28:21 +02:00
_vt.py Initial gatelock: shared lock-window + HMAC log-integrity backend 2026-06-19 17:39:44 +02:00
_window.py gatelock: split _window.py 571 -> 243 lines across four modules 2026-08-22 14:20:11 +02:00
_xrandr.py gatelock: split _outputs.py 401 -> 137 across four modules 2026-08-22 15:15:55 +02:00
log_integrity.py Initial gatelock: shared lock-window + HMAC log-integrity backend 2026-06-19 17:39:44 +02:00
widget_group.py gatelock: add shared button, heading/row and WidgetGroup 2026-08-14 23:54:52 +02:00
widgets.py gatelock: add shared button, heading/row and WidgetGroup 2026-08-14 23:54:52 +02:00