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-1522GitHub issuePublicDecided· Out of scope

Copy URL repair (migration 1786643346) is stamped complete on fresh installs, and its Preferences edit does not persist

Reported by PastaJ36 · filed Aug 24, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

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?
AreaOutside the audited area· Decided by agents · verified
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?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Copy URL repair (migration 1786643346) is stamped complete on fresh installs, and its Preferences edit does not persistrevision 1 · captured 2026-09-28 21:24 UTC via poll

System details

AMD Ryzen 7 9700X, NVIDIA RTX 5070 + AMD Granite Ridge iGPU, Omarchy 4.0.0-1, Chromium 151.0.7922.173-1 (Arch)

What's wrong?

Follow-up to #6816 (stale extensions.commands registration pointing at a path-derived extension ID), which shipped migrations/1786643346.sh as the repair. On this machine the repair never applied, and when I ran it by hand it did not persist. Two separate problems, both leaving Alt+Shift+L dead with no indication anything is wrong.

1. Fresh installs stamp the migration complete, so it never runs

install/user/first-run/audio-tuning.sh documents the behavior: "the finalizer marks all shipped migrations complete on a fresh install." That is reasonable for a genuinely new profile, but the Chromium profile is not part of the Omarchy install — it commonly arrives afterwards from sync or a restored ~/.config/chromium, carrying the pre-pinned-ID extensions.commands registration with it.

On this machine:

  • Omarchy installed 2026-08-23; the copy-url extension first loaded 2026-08-23 04:13 (first_install_time in extensions.settings).
  • Both ~/.local/state/omarchy/migrations/1784763917.sh and 1786643346.sh are stamped 2026-08-23 11:10:46 — the same second, i.e. bulk stamping, not two real runs.
  • No Preferences.omarchy-copy-url-repair.bak existed, confirming the repair had never executed.
  • Alt+Shift+L was registered to agnpjekbinplibibdbochbceckhennie while the loaded extension was the pinned bgpiichlckmfanooecilcjemknkcpngb.

So exactly the class of profile the migration exists for is the class that never gets it. A migration whose subject is browser profile state rather than Omarchy's own config can't be satisfied by install-time stamping.

2. The `Preferences` edit did not survive the next browser start

Running the migration by hand, with every Chromium process gone and the profile's Singleton* files removed:

08:50  bash /usr/share/omarchy/migrations/1786643346.sh
       → Preferences.omarchy-copy-url-repair.bak written
       → verified on disk: linux:Alt+Shift+L -> bgpiichlckmfanooecilcjemknkcpngb (pinned)
       → ghost absent from extensions.settings
~08:52 launched the web apps
08:56  Preferences rewritten: linux:Alt+Shift+L -> agnpjekbinplibibdbochbceckhennie

No browser was running during the repair, and I verified the repaired content before any browser started, so this is not the "browser open during repair" case the script already guards against.

What the ghost looks like now in Default/Preferences:

/extensions/settings/agnpjekbinplibibdbochbceckhennie                        = {}
/protection/macs/extensions/settings/agnpjekbinplibibdbochbceckhennie        = 3D7E1BF0...
/protection/macs/extensions/settings_encrypted_hash/agnpjek...               = djEx03I0...

An empty settings dict with live MAC entries looks like Chromium's protected-preference enforcement reasserting a pref that was modified out of band — extensions.settings is MAC'd under protection/macs, and the migration deletes entries there (settings.pop(ghost, None)) without any way to recompute the HMAC. This profile is also signed in with extensions among its sync types, which is a second candidate for the restore. I have not isolated which of the two did it; either way the conclusion is the same: an external edit to Preferences is not a reliable way to release the accelerator, and the script's own verification pass can report success while the change is reverted minutes later.

What actually fixed it

Assigning the shortcut in chrome://extensions/shortcuts from the browser UI. That has held across restarts — Chromium recomputes the MACs itself and the mapping now points at the pinned ID.

Steps to reproduce

  1. Have a Chromium profile that registered Alt+Shift+L under a path-derived copy-url ID (see #6816), signed in with sync enabled.
  2. Install Omarchy fresh, then sign into Chromium so the profile is restored. Migration 1786643346 is already stamped complete, so it never runs and Alt+Shift+L does nothing.
  3. Run bash /usr/share/omarchy/migrations/1786643346.sh by hand with all browsers closed. It reports success and writes the .bak.
  4. Start Chromium, use it for a few minutes, then re-read Default/Preferences: the accelerator points at the ghost ID again.

Expected

Alt+Shift+L copies the current URL on a machine where Omarchy loaded the extension and registered the native-messaging host — including when the Chromium profile predates or postdates the Omarchy install.

Suggested direction

  • Don't settle this from outside the browser. Chromium owns extensions.commands and MACs the surrounding prefs; an unpacked extension whose suggested key is taken could surface the conflict in-product (e.g. the extension notices chrome.commands.getAll() returns no shortcut for copy-url and points the user at chrome://extensions/shortcuts), which needs no privileged file editing and can't be silently reverted.
  • If the file-level repair stays, it should verify after a browser restart rather than immediately after writing, and it should not be eligible for install-time stamping — browser-profile state isn't established at install time.
  • Relatedly, #7019's "browser window is open" with no browser running reproduced here: profile_open() treats a dangling SingletonLock symlink as an attached browser, and a Chromium killed with SIGTERM leaves that symlink behind pointing at a dead PID. Resolving the symlink target's PID (or checking the socket) would tell a stale lock from a live one.

Diagnostics available on request — happy to test a patch on an affected profile.

View raw text
### System details

AMD Ryzen 7 9700X, NVIDIA RTX 5070 + AMD Granite Ridge iGPU, Omarchy 4.0.0-1, Chromium 151.0.7922.173-1 (Arch)

### What's wrong?

Follow-up to #6816 (stale `extensions.commands` registration pointing at a path-derived extension ID), which shipped `migrations/1786643346.sh` as the repair. On this machine the repair never applied, and when I ran it by hand it did not persist. Two separate problems, both leaving `Alt+Shift+L` dead with no indication anything is wrong.

**1. Fresh installs stamp the migration complete, so it never runs**

`install/user/first-run/audio-tuning.sh` documents the behavior: *"the finalizer marks all shipped migrations complete on a fresh install."* That is reasonable for a genuinely new profile, but the Chromium profile is not part of the Omarchy install — it commonly arrives afterwards from sync or a restored `~/.config/chromium`, carrying the pre-pinned-ID `extensions.commands` registration with it.

On this machine:

- Omarchy installed 2026-08-23; the copy-url extension first loaded 2026-08-23 04:13 (`first_install_time` in `extensions.settings`).
- Both `~/.local/state/omarchy/migrations/1784763917.sh` and `1786643346.sh` are stamped `2026-08-23 11:10:46` — the same second, i.e. bulk stamping, not two real runs.
- No `Preferences.omarchy-copy-url-repair.bak` existed, confirming the repair had never executed.
- `Alt+Shift+L` was registered to `agnpjekbinplibibdbochbceckhennie` while the loaded extension was the pinned `bgpiichlckmfanooecilcjemknkcpngb`.

So exactly the class of profile the migration exists for is the class that never gets it. A migration whose subject is browser profile state rather than Omarchy's own config can't be satisfied by install-time stamping.

**2. The `Preferences` edit did not survive the next browser start**

Running the migration by hand, with every Chromium process gone and the profile's `Singleton*` files removed:

```
08:50  bash /usr/share/omarchy/migrations/1786643346.sh
       → Preferences.omarchy-copy-url-repair.bak written
       → verified on disk: linux:Alt+Shift+L -> bgpiichlckmfanooecilcjemknkcpngb (pinned)
       → ghost absent from extensions.settings
~08:52 launched the web apps
08:56  Preferences rewritten: linux:Alt+Shift+L -> agnpjekbinplibibdbochbceckhennie
```

No browser was running during the repair, and I verified the repaired content before any browser started, so this is not the "browser open during repair" case the script already guards against.

What the ghost looks like now in `Default/Preferences`:

```
/extensions/settings/agnpjekbinplibibdbochbceckhennie                        = {}
/protection/macs/extensions/settings/agnpjekbinplibibdbochbceckhennie        = 3D7E1BF0...
/protection/macs/extensions/settings_encrypted_hash/agnpjek...               = djEx03I0...
```

An empty settings dict with live MAC entries looks like Chromium's protected-preference enforcement reasserting a pref that was modified out of band — `extensions.settings` is MAC'd under `protection/macs`, and the migration deletes entries there (`settings.pop(ghost, None)`) without any way to recompute the HMAC. This profile is also signed in with `extensions` among its sync types, which is a second candidate for the restore. I have not isolated which of the two did it; either way the conclusion is the same: an external edit to `Preferences` is not a reliable way to release the accelerator, and the script's own verification pass can report success while the change is reverted minutes later.

**What actually fixed it**

Assigning the shortcut in `chrome://extensions/shortcuts` from the browser UI. That has held across restarts — Chromium recomputes the MACs itself and the mapping now points at the pinned ID.

### Steps to reproduce

1. Have a Chromium profile that registered `Alt+Shift+L` under a path-derived copy-url ID (see #6816), signed in with sync enabled.
2. Install Omarchy fresh, then sign into Chromium so the profile is restored. Migration `1786643346` is already stamped complete, so it never runs and `Alt+Shift+L` does nothing.
3. Run `bash /usr/share/omarchy/migrations/1786643346.sh` by hand with all browsers closed. It reports success and writes the `.bak`.
4. Start Chromium, use it for a few minutes, then re-read `Default/Preferences`: the accelerator points at the ghost ID again.

### Expected

`Alt+Shift+L` copies the current URL on a machine where Omarchy loaded the extension and registered the native-messaging host — including when the Chromium profile predates or postdates the Omarchy install.

### Suggested direction

- Don't settle this from outside the browser. Chromium owns `extensions.commands` and MACs the surrounding prefs; an unpacked extension whose suggested key is taken could surface the conflict in-product (e.g. the extension notices `chrome.commands.getAll()` returns no shortcut for `copy-url` and points the user at `chrome://extensions/shortcuts`), which needs no privileged file editing and can't be silently reverted.
- If the file-level repair stays, it should verify after a browser restart rather than immediately after writing, and it should not be eligible for install-time stamping — browser-profile state isn't established at install time.
- Relatedly, #7019's "browser window is open" with no browser running reproduced here: `profile_open()` treats a dangling `SingletonLock` symlink as an attached browser, and a Chromium killed with SIGTERM leaves that symlink behind pointing at a dead PID. Resolving the symlink target's PID (or checking the socket) would tell a stale lock from a live one.

Diagnostics available on request — happy to test a patch on an affected profile.

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

Not linked to any known issue, other report or change yet.

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 08:36 UTC