Skip to content

omamobile-omarchy 0.1.36: select 4.0.6 and 4.5 patch families - #471

Open
marselnenaj wants to merge 3 commits into
derekross:mainfrom
marselnenaj:codex/qualified-45-runtime
Open

marselnenaj wants to merge 3 commits into
derekross:mainfrom
marselnenaj:codex/qualified-45-runtime

Conversation

@marselnenaj

@marselnenaj marselnenaj commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Select the mobile patch family from the installed Omarchy version: current 4.0.6 phones use legacy-4.0.6/, while 4.5 uses patches/. AGENTS, README and RELEASES explain that fixes for current phones belong in the legacy family, and also in the 4.5 family when applicable.

All 28 legacy patches retain their original bytes and notices, including jkjoplin's merged #431. Its 4.5 port remains omitted. Omarchy's original copyright and MIT terms are preserved, and the mobile fixture additions are credited to Marsel Nenaj.

The migration holds are already on main through #486; this branch is rebased after that merge and contains no shared #469 commit. The #478 updater, #486 holds and repository package pin remain unchanged.

Tests use only packaged lock sources and repository fixtures. The external private-lock override was local rendering scaffolding, not a missing packaged PIN fix, and is removed. Sleep-lock tests select their patch family from the actual archive version instead of a flat path or a build-machine symlink. Node and QML tools remain optional, with explicit skips when unavailable; new fixtures are formatted for maintenance.

For notification dismissal, a syntactically valid key that is already absent returns ok without mutating state. This makes a repeated swipe/delete idempotent and avoids a false error for an already-gone row. Malformed keys still return none.

Validation:

  • Complete adapter suites against the hash-pinned Omarchy 4.0.6-1 and signed 4.5.0-3 aarch64 packages.
  • Actual-family zero-fuzz apply, verify and byte-identical restoration, plus sleep-lock, notification and available Node/QML checks.
  • Four inert sleep-family cases with a wrong-family negative control.
  • Both actual-package rehearsals without Node discovery, explicitly skipping only optional Node checks.
  • Repeated-forget state preservation, malformed-key rejection, commit-range PR checks and independent source/credit review.

Version 0.1.36 follows the maintainer's allocation. Phones remain pinned to 4.0.6 pending the separate runtime qualification tracked in #434.

@derekross

Copy link
Copy Markdown
Owner

Thank you, @marselnenaj, this is a big piece of work, and the series port is very good. I checked it against the published omarchy-4.5.0-3 aarch64 package: all 27 patches apply with fuzz 0, reversing them gives back the pristine files byte for byte, and every patched script and QML file parses. Two details are better than what I had: 0005 summons 4.5's appearance route, and 0012 sends 4.5's absolute-path omarchy-update-restart call to our stand-in. Keeping the 4.0.6 series byte-identical in its own family is exactly right, too.

Some context first: since 6 November our repository carries Omarchy's own 4.0.6 packages (rootfs/packages.pinned, #454), so phones stay on 4.0.6 until the 4.5 series and its companions are ready. That changes what this PR needs to do, and I'd like to split it:

What I'd merge first (no phone test needed while phones are on 4.0.6, since nothing changes for them): the two series families and their selection, plus the migration holds from #469. Before that:

What needs another approach: the update-flow part.

  • The qualification gate requires the exact Omarchy package to be in pacman's cache already, but nothing downloads it (checkupdates runs without -d, and the gate runs before any download). The test puts the file there by hand. On a phone, every update that brings Omarchy would be refused as a whole, even with an approved record. The record also binds the hashes of the updater, the patch tool and both shims, so any later fix would invalidate it. The repository pin now does the holding, so I'd rather not add an approval file. The fuzz-0 replay of the exact package is a good idea; if you keep it, download the package first and hold only Omarchy when it fails.
  • Omarchy 4.0.6 also calls omarchy-update-system-pkgs by name, so the new stand-in would take over every phone's package transaction the day it merges, pin or not. It also drops Omarchy's LC_ALL=C, which the conflict handler needs to read pacman's messages, and when the plan fails it doesn't print pacman's reason. That part needs a run on a Pixel 7 Pro before it can merge, and I can't do one this week.

For the record, here's what still stands between phones and 4.5 outside this PR. I'll track these on #434:

When those are done I'll move the pin to 4.5.0-3 rather than drop it, since the series selection accepts exact versions.

Thanks again; the port itself is most of the work, and it's in good shape.

@marselnenaj
marselnenaj force-pushed the codex/qualified-45-runtime branch from 500585f to 19fb6b1 Compare November 7, 2026 14:20
@marselnenaj marselnenaj changed the title omamobile-omarchy: support the Omarchy 4.5 runtime omamobile-omarchy 0.1.35: select 4.0.6 and 4.5 patch families Nov 7, 2026
@marselnenaj
marselnenaj marked this pull request as ready for review November 7, 2026 14:21
@derekross

Copy link
Copy Markdown
Owner

Thank you, @marselnenaj. This is the split I hoped for. The update-flow pieces are all gone and omamobile-update is untouched. The 4.0.6 family is main's series byte for byte (I checked every blob), 0030 stays with jkjoplin, and the Omarchy fixtures are the real v4.5.0 files with the MIT notice shipped. On a 4.0.6 phone the selector picks the same series it runs today, so the hook will just report it as already applied. Thanks also for fixing the sleep-lock extraction: in both 4.0.6 and 4.5 that path is a link to /usr/bin, so the old test was reading the build machine's copy.

Two things before I merge:

  1. The docs that say where the series lives. After this, phones run legacy-4.0.6/, but AGENTS.md (the "Omarchy upgrades overwrite our Omarchy patches" gotcha), README.md (the patches/omarchy/ row) and docs/RELEASES.md §5.x (the "patches survive upgrades" paragraph) still say to edit packages/omamobile-omarchy/patches and make it apply to the Omarchy the phone runs. The next lock or shade fix would then land only in the 4.5 family. A sentence in each would do: two families, picked by the installed Omarchy version, and a fix for today's phones goes in legacy-4.0.6/ (and in patches/ too when it applies to 4.5).
  2. test/lock-glance still has a PRIVATE_LOCK_DIR hook that copies lock files from outside the project, NenajMatrix.qml among them. Please remove it. If there's a lock fix behind it that the series is missing, tell me what it is and we'll bring it in as a patch.

Smaller ones, if you're in there anyway:

  • logic.cjs now names only Omarchy's author, but the reply and forget cases at the end are yours. A line crediting your additions would keep both right.
  • test/sleep-lock.sh applies patches/0021 (now the 4.5 one) to whichever Omarchy package is cached, and on my build machine that's 4.0.6-1. It passes because the two versions differ only by an offset. Choosing the family from the package version, as test/patches.py now does, would make it test what phones run.
  • If the node and QML tests only run when a 4.5 package is present, could nodejs and qt6-declarative stay out of checkdepends? Otherwise a build on a phone pulls in nodejs.
  • The new test files are written as long one-liners. A plainer layout, like the other tests, would help the next person.

Merge order: #469 first, then this rebased onto it, which drops the shared commit. I'll set the versions (0.1.35 and 0.1.36, since #478 took 0.1.34 earlier today) and write the squash message. No phone test is needed while phones stay on 4.0.6. I'll check the patch status on my 7 Pro after installing it, before it's published.

@marselnenaj
marselnenaj force-pushed the codex/qualified-45-runtime branch from 19fb6b1 to f0973e2 Compare November 7, 2026 16:59
@marselnenaj marselnenaj changed the title omamobile-omarchy 0.1.35: select 4.0.6 and 4.5 patch families omamobile-omarchy 0.1.36: select 4.0.6 and 4.5 patch families Nov 7, 2026
angelrenefm added a commit to angelrenefm/omarchy-mobile that referenced this pull request Nov 7, 2026
The case derekross#420's review left open: Hyprland sends a touch to the window
under it whatever the screen's state, so on a dark unlocked phone a tap,
or a double tap, landed in an app no one could see. omamobile-doubletap
now looks at the screen four times a second and, when it goes dark while
unlocked (an idle blank, the panel powered off by hand), runs
omamobile-keys dark-unlocked, which locks behind the dark panel; the
lock's surface then takes the touches. Only where the screen's state can
be told (a DSI connector). The proximity claim's release moves into the
same one-second wait.

README: the dark-unlocked lock, that it works while the phone is awake
(a double tap can't wake it from sleep), and that it times a double tap
from lift to touch while the lock times touch to touch.

omamobile-omarchy 0.1.37, omamobile-shell 0.2.103 (0.1.36 and 0.2.102
are claimed by derekross#471 and derekross#482).

I used AI help (Claude) to work on this.
@derekross

Copy link
Copy Markdown
Owner

Thank you, @marselnenaj. Everything from my last two comments is in. The docs in all three places say where a fix goes now, the private lock hook is gone from test/lock-glance, the sleep test picks the family from the package version (and has a negative control), the credit lines are right, and Node and Qt stay out of checkdepends. I checked the legacy family against main again: all 28 files are the same blobs. I also ran the upgrade on a fake root built from the real omarchy-4.0.6-1 aarch64 package: 0.1.35's tool applies main's series, then 0.1.36's tool, with no --series, picks legacy-4.0.6/ and reports it as already applied. A root that claims 4.0.7 is refused, as intended. Making forget return ok for a key that's already gone also matches what the 4.0.6 patch does, which keeps the shell's handling in #468 the same on both.

One thing before I merge, and it's in the 4.5 patch headers. Eight of them (0015, 0016, 0017, 0018, 0019, 0022, 0023 and 0025) have replaced the original header, which says what the patch does and why, with a few lines whose spaces have gone missing, for example in 0023:

# Port mobileglance to4.5auth/wake fields without changing authcapabilities.
# Retain licensed4.0.6 standaloneNotificationCard/NotificationLogic API for
# privatepixel.lock too; parse4.5compactlive/history arrays into legacyreadrows,

The same thing shows in the 4.5 notes of 0017, 0020, 0021, 0024 and 0026 ("Omarchy4.5:"). These headers are the series' documentation, and the text we send upstream, so could you keep each original header and add a short, normally spaced "Omarchy 4.5:" paragraph on what the port changed, as you did well in 0001 and 0012? Please also drop "for private pixel.lock too" from 0023. If the two notification files 0023 brings back (NotificationLogic.js and components/NotificationCard.qml) are only needed by a lock outside this project, please tell me. If the glance needs them itself, a sentence saying so is enough. I should have caught this last time; it was already in the previous push.

Two notes on my side, so you know what happens after the merge. The 4.5 family will start running on phones that already took Omarchy 4.5 before we pinned it, so I'll arrange a first run on one of those before it's published. And #420 adds a lock patch to patches/, which after this PR is the 4.5 family, so whichever of the two is ready first lands first, and the other moves that patch into legacy-4.0.6/. If #420 lands first, please move its 0029 there when you rebase.

I'll write the squash message myself, keeping your Codex co-author line. Thanks again; this is a careful piece of work.

marselnenaj and others added 3 commits November 8, 2026 09:29
Keep the 4.0.6 series byte-identical while porting runtime contexts to
4.5.0. Select only supported source families and include mobile migration
holds. Preserve the repository pin and production updater behavior.

Do not ship the new updater gate, transaction shim or approval records.
Keep the merged PR431 in the legacy archive byte for byte and leave its
4.5 port to jkjoplin. Preserve upstream
copyright and MIT notices; remove false fixture-extension attribution.

Run the full adapter suite against the signed 4.5.0-3 package, including
fuzz-zero apply/reverse, idempotence, source selection, notification
functions, 16 QML parses and native lock fixtures. No device update or
physical smoke result is claimed.

Co-Authored-By: Codex <codex@openai.com>
Document the version-selected patch families so fixes for current 4.0.6
phones reach the legacy family. Remove the external private-lock fixture
hook; the suite uses only packaged lock sources and repository fixtures.
Credit the mobile fixture additions to their confirmed human author while
retaining Omarchy's original notice.

Choose the sleep patch from the actual package version, keep Node and QML
test tools optional, and format the new fixtures for maintenance. Make
forget-by-key idempotent for valid missing keys and assert a repeated
delete leaves state unchanged; malformed keys still fail.

Run full adapter suites against the hash-pinned 4.0.6-1 and signed 4.5.0-3
packages, plus four inert family-selection and negative-control cases.
Both suites pass. No external lock assets, phone actions or authentication
policy changes are involved.

Co-Authored-By: Codex <codex@openai.com>
Restore the original explanatory headers and retain their notices. Describe
4.5-specific changes in normally spaced paragraphs so the series remains
useful documentation when fixes are maintained or sent upstream.

Remove the private-lock wording from 0023. The restored NotificationLogic
and NotificationCard APIs are used by the project mobile glance itself.
Every functional patch payload and the entire legacy family remain identical.
Header checks and the full actual-package 4.5 adapter suite pass.

Co-Authored-By: Codex <codex@openai.com>
@marselnenaj
marselnenaj force-pushed the codex/qualified-45-runtime branch from f0973e2 to 66b9c17 Compare November 8, 2026 08:30
@marselnenaj

Copy link
Copy Markdown
Contributor Author

Updated in 66b9c17 and rebased onto current main.

Restored the original explanatory headers, preserving their notices, and added short, normally spaced Omarchy 4.5: paragraphs. The remaining 4.5 notes are spaced normally too, and the private-lock wording is removed from 0023.

Both restored notification files are used by the project's own mobile glance: LockGlance.js imports ../notifications/NotificationLogic.js, and LockGlance.qml imports ../notifications/components and instantiates NotificationCard. They are not only dependencies of an external lock.

All functional patch payloads and the entire legacy family remain byte-identical to the previous PR head. The rebase preserves main's new remote-testing documentation alongside the patch-family guidance. Header invariance checks, tools/pr-check and tests/packages omamobile-omarchy against the actual Omarchy 4.5.0-3 aarch64 package pass.

#420 is still open, so no 0029 move was needed. If it lands first, its family placement will need to be handled when rebasing, as you described. Human authorship and the Codex co-author trailers are retained.

derekross added a commit that referenced this pull request Nov 8, 2026
Thirty-one lessons from round 44's reviews, confirmed by the maintainer, plus a second instance of L-454 from #493. #420's and #471's reviews found the same patch-series lesson from either side; it is one entry (L-550).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derekross

Copy link
Copy Markdown
Owner

Thank you, @marselnenaj. The headers read well now. Each of the eight has its original explanation back, word for word, with a short "Omarchy 4.5:" paragraph under it, and the private-lock wording is gone. Thanks also for the answer about NotificationLogic.js and NotificationCard; 0023's note now says the glance uses them. I checked that the patch bodies didn't change: from the first diff line on, all 26 files are byte for byte what I reviewed last time, and the 28 files in legacy-4.0.6/ are still main's series, blob for blob.

This time I also ran the package's test/all against the signed omarchy-4.5.0-3 aarch64 package from Omarchy's stable repository, and against 4.0.6-1. Both pass with nothing skipped. On 4.5 all 26 patches apply at fuzz 0, the patched QML parses, the re-apply is idempotent, and 4.6.0 is refused. On 4.0.6, 28 patches apply.

A few small things. I can fix them at merge if you'd rather not push again:

  • 0027 and 0028 still have the squashed spacing in their last line: # Omarchy4.5: local transport-only media controls. and # Omarchy4.5: mobile narrowterminal logo sizing. My list last time missed those two, sorry.
  • test/mobile-pam-preserve.py isn't called by anything, so it never runs. I ran it by hand against 4.5.0-3's omarchy-apply-lock with 0022 applied, and it passes. Calling it from port45.actual() after the apply would make it count.
  • The default_series docstring still says "never apply4.5 contexts", and the README's patches/omarchy/ row still mentions the bridge-* stopgaps, which now live only in legacy-4.0.6/.

Before I can merge, one run on a phone. The development channel is published from main every morning, so once this merges, a phone that is already on Omarchy 4.5.0-3 gets the 4.5 family at its next update. That has never run on a phone. Could you do that run on your phone, if it's on 4.5.0-3, with this head's package installed and no private changes to Omarchy's files? If there are some, list them. The tool refuses to patch over a changed file, and that's worth knowing too. Then please post:

  1. omamobile-omarchy-patches status: I'd expect 26 applied and the series /usr/share/omamobile/omarchy/patches.
  2. Lock the phone, then unlock it with the PIN pad. Open the notification shade.
  3. omamobile-update check --json (read-only, no update).
  4. The tools/phone-smoke report.

If you can't, I'll ask someone with a 4.5 phone, or do it myself when I'm back. On my 7 Pro, which stays on 4.0.6, I'll check the patch status after installing it.

On #420: I tried its 0029 inside your 4.5 family on the real package, and it applies cleanly there too. So the order doesn't break anything at apply time. Whichever lands second still moves 0029 into legacy-4.0.6/, so that 4.0.6 phones keep it.

I'll write the squash message myself and keep your Codex co-author line. Thanks again for the patience on this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants