Prettier-format monitor/focus evidence JSON
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (mypy, mypy) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (pylint, pylint) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (rest, ) (push) Waiting to run
Pre-commit checks / pre-commit (${{ matrix.group }}) (shellcheck, shellcheck) (push) Waiting to run
Python tests / test (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / lib-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WzxdWXa4ytX9adN7qpMAop
This commit is contained in:
Krzysztof Rudnicki 2026-11-11 15:42:31 +01:00
parent 53da9b5a12
commit c409ebb3eb
3 changed files with 63 additions and 16 deletions

View File

@ -6,6 +6,9 @@
"The watcher handles one burst of output events with one apply, survives a failed xrandr, and waits for late EDID modes",
"setup_monitor_autoconfig.sh leaves monitor-autoconfig.service enabled and active"
],
"out_of_scope": ["Undoing deliberate mode changes by games or manual xrandr", "Wayland"],
"out_of_scope": [
"Undoing deliberate mode changes by games or manual xrandr",
"Wayland"
],
"verifier": "python3 -m pytest linux_configuration/tests/test_monitor_layout.py linux_configuration/tests/test_monitor_autoconfig.py; pre-commit run --files <changed-files>"
}

View File

@ -1,11 +1,30 @@
{
"intent": "Turn main's Shell tests CI green again: the focus_project i3blocks block used a Font Awesome private-use codepoint (U+F0F2) for the interview-trip suitcase, which the i3blocks config checks forbid.",
"scope": ["linux_configuration/i3blocks/focus_project.sh", "linux_configuration/tests/test_i3blocks_focus_project.sh", "Non-goal: any other change to the focus block"],
"changes": ["SUITCASE is now the luggage emoji U+1F9F3 (rendered by Noto Color Emoji, like the block's existing target emoji) in the block and its test"],
"verification": [
{"command": "bash linux_configuration/tests/test_i3blocks_efficiency.sh", "result": "pass", "evidence": "exit 0; was the failing check on CI run 43017516672"},
{"command": "bash linux_configuration/tests/test_i3blocks_focus_project.sh", "result": "pass", "evidence": "exit 0, suitcase assertions use the emoji"}
"scope": [
"linux_configuration/i3blocks/focus_project.sh",
"linux_configuration/tests/test_i3blocks_focus_project.sh",
"Non-goal: any other change to the focus block"
],
"risks": ["The suitcase now renders as a colour emoji instead of a monochrome Font Awesome glyph"],
"rollback": ["git revert this commit", "Shell tests CI goes red again on the private-use check"]
"changes": [
"SUITCASE is now the luggage emoji U+1F9F3 (rendered by Noto Color Emoji, like the block's existing target emoji) in the block and its test"
],
"verification": [
{
"command": "bash linux_configuration/tests/test_i3blocks_efficiency.sh",
"result": "pass",
"evidence": "exit 0; was the failing check on CI run 43017516672"
},
{
"command": "bash linux_configuration/tests/test_i3blocks_focus_project.sh",
"result": "pass",
"evidence": "exit 0, suitcase assertions use the emoji"
}
],
"risks": [
"The suitcase now renders as a colour emoji instead of a monochrome Font Awesome glyph"
],
"rollback": [
"git revert this commit",
"Shell tests CI goes red again on the private-use check"
]
}

View File

@ -1,12 +1,37 @@
{
"intent": "Every monitor kuhy connects runs at its native resolution and highest refresh rate automatically, with DP-0 primary on the left, without running xrandr by hand.",
"scope": ["linux_configuration/features/monitor_layout.py, monitor_autoconfig.py, setup_monitor_autoconfig.sh, systemd/monitor-autoconfig.service", "linux_configuration/tests/test_monitor_layout.py, test_monitor_autoconfig.py, conftest.py; meta/pyproject.toml pylint init-hook path", "Non-goal: reverting deliberate mode changes (games, manual xrandr); only connect/disconnect triggers a re-layout"],
"changes": ["monitor_layout.py: parses xrandr --query and plans one row: native size at max refresh, preferred primary leftmost, disconnected outputs holding a CRTC switched off; returns [] when already there", "monitor_autoconfig.py: systemd user service; RandR version handshake, listens for RROutputChangeNotify, settles 1 s, retries while a connected monitor lists no modes, logs and survives a failed xrandr", "setup_monitor_autoconfig.sh installs deps, the user unit (WantedBy graphical-session.target) and starts it"],
"verification": [
{"command": "python3 -m pytest linux_configuration/tests/test_monitor_layout.py linux_configuration/tests/test_monitor_autoconfig.py --cov=monitor_layout --cov=monitor_autoconfig --cov-branch", "result": "pass", "evidence": "23 passed, 100% line+branch coverage on both modules"},
{"command": "linux_configuration/features/setup_monitor_autoconfig.sh", "result": "pass", "evidence": "unit enabled and active; layout DP-0 3840x2160@144 + HDMI-0 2560x1440@143.98 left unchanged (dry-run plan empty)"},
{"command": "RandR probe with/without xrandr_query_version", "result": "pass", "evidence": "no events before the handshake, CrtcChange/ScreenChange events after it"}
"scope": [
"linux_configuration/features/monitor_layout.py, monitor_autoconfig.py, setup_monitor_autoconfig.sh, systemd/monitor-autoconfig.service",
"linux_configuration/tests/test_monitor_layout.py, test_monitor_autoconfig.py, conftest.py; meta/pyproject.toml pylint init-hook path",
"Non-goal: reverting deliberate mode changes (games, manual xrandr); only connect/disconnect triggers a re-layout"
],
"risks": ["Physical hotplug not exercised on the real machine (kuhy declined the replug check); relies on the NVIDIA driver emitting RROutputChangeNotify on connect"],
"rollback": ["systemctl --user disable --now monitor-autoconfig.service; git revert", "xrandr layout stays as last applied"]
"changes": [
"monitor_layout.py: parses xrandr --query and plans one row: native size at max refresh, preferred primary leftmost, disconnected outputs holding a CRTC switched off; returns [] when already there",
"monitor_autoconfig.py: systemd user service; RandR version handshake, listens for RROutputChangeNotify, settles 1 s, retries while a connected monitor lists no modes, logs and survives a failed xrandr",
"setup_monitor_autoconfig.sh installs deps, the user unit (WantedBy graphical-session.target) and starts it"
],
"verification": [
{
"command": "python3 -m pytest linux_configuration/tests/test_monitor_layout.py linux_configuration/tests/test_monitor_autoconfig.py --cov=monitor_layout --cov=monitor_autoconfig --cov-branch",
"result": "pass",
"evidence": "23 passed, 100% line+branch coverage on both modules"
},
{
"command": "linux_configuration/features/setup_monitor_autoconfig.sh",
"result": "pass",
"evidence": "unit enabled and active; layout DP-0 3840x2160@144 + HDMI-0 2560x1440@143.98 left unchanged (dry-run plan empty)"
},
{
"command": "RandR probe with/without xrandr_query_version",
"result": "pass",
"evidence": "no events before the handshake, CrtcChange/ScreenChange events after it"
}
],
"risks": [
"Physical hotplug not exercised on the real machine (kuhy declined the replug check); relies on the NVIDIA driver emitting RROutputChangeNotify on connect"
],
"rollback": [
"systemctl --user disable --now monitor-autoconfig.service; git revert",
"xrandr layout stays as last applied"
]
}