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.
Clock calendar popup misaligned by one day after DST spring-forward (America/Santiago)
Reported by axelgalea · filed Sep 10, 2026Closed upstream on 2026-10-11 by the merge of PR #10476 (closed by omarchybot, a bot). GitHub close reason: completed.
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
Clock calendar popup misaligned by one day after DST spring-forward (America/Santiago)
System details
- Omarchy: 4.0.3-1
- Quickshell: 0.3.1 (Arch package)
- Kernel: 7.2.3-arch1-3
- Timezone: America/Santiago (DST active, -03)
- Widget:
omarchy.clock(stock bar widget / calendar panel)
What's wrong
In a timezone where DST starts at midnight — Chile's DST began Sunday 2026-09-06 at 24:00, so local midnight of Sep 6 does not exist — the clock panel's month grid is shifted one column to the right for the rest of that month. September 10, 2026 (a Thursday) renders in the FRI column, and the bar simultaneously (and correctly) shows "Thursday".
Screenshot shows the giveaway: the first week row reads 31 1 2 3 4 5 5 — the 5 is duplicated and the 6 is missing. Every subsequent cell is then one weekday off, while the today-highlight (keyed by date, not column) lands on "10 under FRI".
Root cause
plugins/panels/clock/Model.js, monthGrid() steps a day cursor forward with:
var cursor = new Date(year, month, 1 - leading)
...
cursor.setDate(cursor.getDate() + 1)When the cursor sits on the nonexistent local midnight of the DST spring-forward day, Quickshell's JS engine resolves setDate backwards (to the previous day 23:00) instead of forwards to 01:00. getDate() then returns the previous day again, producing the duplicate cell, and every later cell inherits a 23:00-based time that keeps the grid one day late relative to the header row.
Node (V8) handles the same loop correctly (Sat Sep 05 00:00 → Sun Sep 06 01:00 → Mon Sep 07 01:00), which is likely why the shell's clock tests pass — the engine under Quickshell behaves differently.
Expected
The grid should keep days aligned with the weekday headers across DST transitions, i.e. 31 1 2 3 4 5 6 for the first row of September 2026 with a Monday week start, putting the 10 under THU.
Suggested fix
Do date arithmetic in UTC or via explicit field arithmetic instead of local-midnight stepping, e.g. compute cells from Date.UTC day offsets, or guard the step with cursor = new Date(year, month, dayOfCell) per index rather than mutating one cursor across the gap.
Steps to reproduce
- Set system timezone to
America/Santiagoduring September 2026 (after the Sep 6 24:00 DST start). - Click the bar clock to open the calendar popup.
- Observe the first week row: duplicate day number, and today's highlight one weekday to the right of the correct column.
View raw text
# Clock calendar popup misaligned by one day after DST spring-forward (America/Santiago) ## System details - Omarchy: 4.0.3-1 - Quickshell: 0.3.1 (Arch package) - Kernel: 7.2.3-arch1-3 - Timezone: America/Santiago (DST active, -03) - Widget: `omarchy.clock` (stock bar widget / calendar panel) ## What's wrong In a timezone where DST starts at midnight — Chile's DST began **Sunday 2026-09-06 at 24:00**, so local midnight of Sep 6 does not exist — the clock panel's month grid is shifted one column to the right for the rest of that month. September 10, 2026 (a Thursday) renders in the **FRI** column, and the bar simultaneously (and correctly) shows "Thursday". Screenshot shows the giveaway: the first week row reads `31 1 2 3 4 5 5` — the **5 is duplicated and the 6 is missing**. Every subsequent cell is then one weekday off, while the today-highlight (keyed by date, not column) lands on "10 under FRI". ## Root cause `plugins/panels/clock/Model.js`, `monthGrid()` steps a day cursor forward with: ```js var cursor = new Date(year, month, 1 - leading) ... cursor.setDate(cursor.getDate() + 1) ``` When the cursor sits on the nonexistent local midnight of the DST spring-forward day, Quickshell's JS engine resolves `setDate` backwards (to the previous day 23:00) instead of forwards to 01:00. `getDate()` then returns the previous day again, producing the duplicate cell, and every later cell inherits a 23:00-based time that keeps the grid one day late relative to the header row. Node (V8) handles the same loop correctly (`Sat Sep 05 00:00 → Sun Sep 06 01:00 → Mon Sep 07 01:00`), which is likely why the shell's clock tests pass — the engine under Quickshell behaves differently. ## Expected The grid should keep days aligned with the weekday headers across DST transitions, i.e. `31 1 2 3 4 5 6` for the first row of September 2026 with a Monday week start, putting the 10 under THU. ## Suggested fix Do date arithmetic in UTC or via explicit field arithmetic instead of local-midnight stepping, e.g. compute cells from `Date.UTC` day offsets, or guard the step with `cursor = new Date(year, month, dayOfCell)` per index rather than mutating one cursor across the gap. ## Steps to reproduce 1. Set system timezone to `America/Santiago` during September 2026 (after the Sep 6 24:00 DST start). 2. Click the bar clock to open the calendar popup. 3. Observe the first week row: duplicate day number, and today's highlight one weekday to the right of the correct column.
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
- Fixed bypr/12943· confirmed
- Fixed bypr/10476· confirmed
- Fixed bypr/13186· confirmed
- Fixed bypr/13751· confirmed
- Fixed bypr/13096· confirmed
- Fixed bypr/13127· 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.
- Out of scopeDecided by agents · verified · 2026-10-09 11:25 UTC