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.
omarchy-weather-location breaks when wttr.in returns coordinates instead of a city name
Reported by gexavi · filed Sep 16, 2026Closed upstream on 2026-10-12 by the bot omarchybot, as a duplicate of #9706 (R-1077). GitHub close reason: duplicate.
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
What happened
The weather bar widget shows "Weather unavailable" when no location has been explicitly set (i.e. ~/.local/state/omarchy/settings/weather.json doesn't exist and the location falls back to IP-based auto-detection).
Root cause
omarchy-weather-location's auto-detect path calls:
name=$(curl -fsS --max-time 4 "https://wttr.in/?format=%l" 2>/dev/null)
name=${name%%,*}This assumes wttr.in's %l format always returns "City, Country", and truncates at the first comma to extract the city.
For some IPs/locations, wttr.in instead returns raw coordinates for %l, e.g.:
$ curl -fsS "https://wttr.in/?format=%l"
48.855800,2.349400(That IP genuinely geolocates to Paris — confirmed separately via ipinfo.io/city — wttr.in just didn't resolve it to a name this time.)
The ${name%%,*} truncation then chops this coordinate pair at its own comma too, leaving just the bare latitude 48.855800. That's not a valid wttr.in location query:
$ curl -fsS "https://wttr.in/48.855800?format=%t|%w"
curl: (22) The requested URL returned error: 500...which causes omarchy-weather-status to print "Weather unavailable".
Steps to reproduce
- Don't set a weather location (
omarchy-weather-location --clearif one is set). - Run
omarchy-weather-location— if wttr.in's IP geolocation returns coordinates rather than a name for your current IP, it prints a bare latitude instead of a city. - Run
omarchy-weather-status— it prints "Weather unavailable".
This is intermittent/IP-dependent since it depends on whether wttr.in resolves a city name or falls back to coordinates for a given IP.
Expected behavior
The weather widget should show weather even when wttr.in's %l fallback returns coordinates instead of a name — e.g. by detecting the lat,lon pattern and querying wttr.in with the full coordinate pair (which does work: curl "https://wttr.in/48.855800,2.349400?format=%t|%w" returns +20°C|↘12km/h), rather than blindly truncating at the first comma.
Workaround
Set an explicit location to bypass auto-detect:
omarchy-weather-location --set "Paris" 48.8558,2.3494System details
- Omarchy version: 4.0.4-1
- Kernel:
Linux omarchy 7.2.5-3-omarchy #1 SMP PREEMPT_DYNAMIC Mon, 14 Sep 2026 19:55:01 +0000 x86_64 GNU/Linux omarchy debugcommand is not available in this version to attach a full diagnostic log.
🤖 Generated with Claude Code
View raw text
## What happened
The weather bar widget shows "Weather unavailable" when no location has been explicitly set (i.e. `~/.local/state/omarchy/settings/weather.json` doesn't exist and the location falls back to IP-based auto-detection).
## Root cause
`omarchy-weather-location`'s auto-detect path calls:
```bash
name=$(curl -fsS --max-time 4 "https://wttr.in/?format=%l" 2>/dev/null)
name=${name%%,*}
```
This assumes wttr.in's `%l` format always returns `"City, Country"`, and truncates at the first comma to extract the city.
For some IPs/locations, wttr.in instead returns raw coordinates for `%l`, e.g.:
```
$ curl -fsS "https://wttr.in/?format=%l"
48.855800,2.349400
```
(That IP genuinely geolocates to Paris — confirmed separately via `ipinfo.io/city` — wttr.in just didn't resolve it to a name this time.)
The `${name%%,*}` truncation then chops this coordinate pair at its own comma too, leaving just the bare latitude `48.855800`. That's not a valid wttr.in location query:
```
$ curl -fsS "https://wttr.in/48.855800?format=%t|%w"
curl: (22) The requested URL returned error: 500
```
...which causes `omarchy-weather-status` to print "Weather unavailable".
## Steps to reproduce
1. Don't set a weather location (`omarchy-weather-location --clear` if one is set).
2. Run `omarchy-weather-location` — if wttr.in's IP geolocation returns coordinates rather than a name for your current IP, it prints a bare latitude instead of a city.
3. Run `omarchy-weather-status` — it prints "Weather unavailable".
This is intermittent/IP-dependent since it depends on whether wttr.in resolves a city name or falls back to coordinates for a given IP.
## Expected behavior
The weather widget should show weather even when wttr.in's `%l` fallback returns coordinates instead of a name — e.g. by detecting the `lat,lon` pattern and querying wttr.in with the full coordinate pair (which does work: `curl "https://wttr.in/48.855800,2.349400?format=%t|%w"` returns `+20°C|↘12km/h`), rather than blindly truncating at the first comma.
## Workaround
Set an explicit location to bypass auto-detect:
```bash
omarchy-weather-location --set "Paris" 48.8558,2.3494
```
## System details
- Omarchy version: 4.0.4-1
- Kernel: `Linux omarchy 7.2.5-3-omarchy #1 SMP PREEMPT_DYNAMIC Mon, 14 Sep 2026 19:55:01 +0000 x86_64 GNU/Linux`
- `omarchy debug` command is not available in this version to attach a full diagnostic log.
🤖 Generated with [Claude Code](https://claude.com/claude-code)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/12155· 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 14:17 UTC