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-473GitHub issuePublicFixed

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.

Decided: Out of scope — decided by agents · verified 3 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

omarchy-weather-location breaks when wttr.in returns coordinates instead of a city namerevision 1 · captured 2026-09-28 21:23 UTC via poll

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

  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:

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

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