Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-4932GitHub issuePublicFixed

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.

Received and recorded verbatim. Nothing has been checked yet.

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

clamshell forces an unreferenced omarchy_monitor_scale onto the panel on every idle-wakerevision 1 · captured 2026-10-04 12:10 UTC via poll

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:

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.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:

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

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.