Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
clamshell forces an unreferenced omarchy_monitor_scale onto the panel on every idle-wake
Reported by seth-wood · filed Sep 6, 2026Closed upstream on 2026-09-06 by its own reporter seth-wood. GitHub close reason: completed. Closed by its own reporter — not by itself evidence of a fix.
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- Not yet mapped to any requirement or component.
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
What happens
With an omarchy_monitor_scale local that no hl.monitor rule references, omarchy-hyprland-monitor-clamshell forces that number onto the internal panel on every idle-wake. On a machine where something else owns the monitor layout, the panel snaps to the stale local and the other manager reconciles it back 2-4s later. It reads as the screen zooming on every lock/unlock.
Measured on the lock path, sampling hyprctl monitors -j every ~200ms:
12:39:32.040 scale=1.3333334 pos=4096,576 -> scale=1.6000000 pos=0,0 <- lock screen
12:39:34.844 scale=1.6000000 pos=0,0 -> scale=1.3333334 pos=4096,576
12:39:38.145 scale=1.3333334 pos=4096,576 -> scale=1.6000000 pos=0,0 <- unlock
12:39:39.844 scale=1.6000000 pos=0,0 -> scale=1.3333334 pos=4096,576The mode never changes; it is scale and position only.
Why
The config hands the layout to an external monitor manager by commenting out the catch-all rule, which leaves the local behind with nothing referencing it:
local omarchy_gdk_scale = 2
local omarchy_monitor_scale = 1.6
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
-- hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })configured_monitor_scale reads it anyway via its third fallback:
scale=$(configured_internal_monitor_value scale) # no eDP-1 rule -> empty
[[ -n $scale ]] || scale=$(configured_monitor_value "" scale) # catch-all commented -> empty
[[ -n $scale ]] || scale=$(lua_local_value omarchy_monitor_scale) # -> 1.6monitor_rules() correctly strips comments, so the commented rule is ignored — but the local it referenced is still read as though it were configuration.
That valid number then defeats the guard in sync_internal_scale that would otherwise leave the panel alone:
if ! valid_scale "$configured_scale" && valid_scale "$active_scale"; then
return 0
fiThis is the flap #7265 and #7301 fixed for scale = "auto", reached through a numeric local instead. With "auto" the configured value is non-numeric, the guard fires, and the panel is left alone. With a dead numeric local the guard never fires.
Caller
The lock path, not the monitor watcher (which was correctly stopped in my case):
shell/plugins/lock/Service.qml:406 -> omarchy-system-wake
-> omarchy-hyprland-monitor-clamshellshell/plugins/services/idle/Service.qml:106 reaches it the same way.
Reproduction
Independent of any external manager — run clamshell directly against a config of the shape above:
before: 1.3333334 4096 576
--- stock clamshell, unreferenced local = 1.6 ---
12:54:30.396 1.3333334 4096 576
12:54:31.003 1.6 0 0Environment
- Omarchy on Arch, Hyprland 0.56.2
- Single internal panel (eDP-1, [email protected])
- External manager: hyprmoncfg 1.18.2, profile scale 1.33333 at 4096x576
Workaround is to keep the unreferenced local equal to whatever actually owns the scale.
Fix in #10523
View raw text
### What happens
With an `omarchy_monitor_scale` local that no `hl.monitor` rule references, `omarchy-hyprland-monitor-clamshell` forces that number onto the internal panel on every idle-wake. On a machine where something else owns the monitor layout, the panel snaps to the stale local and the other manager reconciles it back 2-4s later. It reads as the screen zooming on every lock/unlock.
Measured on the lock path, sampling `hyprctl monitors -j` every ~200ms:
```
12:39:32.040 scale=1.3333334 pos=4096,576 -> scale=1.6000000 pos=0,0 <- lock screen
12:39:34.844 scale=1.6000000 pos=0,0 -> scale=1.3333334 pos=4096,576
12:39:38.145 scale=1.3333334 pos=4096,576 -> scale=1.6000000 pos=0,0 <- unlock
12:39:39.844 scale=1.6000000 pos=0,0 -> scale=1.3333334 pos=4096,576
```
The mode never changes; it is scale and position only.
### Why
The config hands the layout to an external monitor manager by commenting out the catch-all rule, which leaves the local behind with nothing referencing it:
```lua
local omarchy_gdk_scale = 2
local omarchy_monitor_scale = 1.6
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
-- hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
```
`configured_monitor_scale` reads it anyway via its third fallback:
```bash
scale=$(configured_internal_monitor_value scale) # no eDP-1 rule -> empty
[[ -n $scale ]] || scale=$(configured_monitor_value "" scale) # catch-all commented -> empty
[[ -n $scale ]] || scale=$(lua_local_value omarchy_monitor_scale) # -> 1.6
```
`monitor_rules()` correctly strips comments, so the commented rule is ignored — but the local it referenced is still read as though it were configuration.
That valid number then defeats the guard in `sync_internal_scale` that would otherwise leave the panel alone:
```bash
if ! valid_scale "$configured_scale" && valid_scale "$active_scale"; then
return 0
fi
```
This is the flap #7265 and #7301 fixed for `scale = "auto"`, reached through a numeric local instead. With `"auto"` the configured value is non-numeric, the guard fires, and the panel is left alone. With a dead numeric local the guard never fires.
### Caller
The lock path, not the monitor watcher (which was correctly stopped in my case):
```
shell/plugins/lock/Service.qml:406 -> omarchy-system-wake
-> omarchy-hyprland-monitor-clamshell
```
`shell/plugins/services/idle/Service.qml:106` reaches it the same way.
### Reproduction
Independent of any external manager — run clamshell directly against a config of the shape above:
```
before: 1.3333334 4096 576
--- stock clamshell, unreferenced local = 1.6 ---
12:54:30.396 1.3333334 4096 576
12:54:31.003 1.6 0 0
```
### Environment
- Omarchy on Arch, Hyprland 0.56.2
- Single internal panel (eDP-1, [email protected])
- External manager: hyprmoncfg 1.18.2, profile scale 1.33333 at 4096x576
Workaround is to keep the unreferenced local equal to whatever actually owns the scale.
Fix in #10523
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
- Related PRpr/8472· confirmed
- Fixed bypr/7146· confirmed
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
No decision has been recorded yet.