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-4799GitHub issuePublicReceived

windows-vm: readiness wait returns ~9s before the guest accepts RDP, so launch connects too early and auto-stops the VM

Reported by Syn-sys · filed Sep 1, 2026Closed upstream on 2026-09-21 by bjarneo via an automated message, as a duplicate of #5202 (R-1986). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

windows-vm: readiness wait returns ~9s before the guest accepts RDP, so launch connects too early and auto-stops the VMrevision 1 · captured 2026-10-04 12:03 UTC via poll

System details

  • CPU: Intel Core i5-6260U
  • GPU: Intel Iris Graphics 540 (Skylake-U GT3)
  • Omarchy: 4.0.1-1, kernel 7.1.9-arch1-2
  • Docker 29.7.2, Docker Compose 5.5.0, freerdp 2:3.30.0-2, dockurr/windows 6.05

What's wrong?

omarchy-windows-vm launch fires xfreerdp3 before the guest's RDP service is
listening. The client exits after ~3s, launch_windows() falls through to
priv down, and the VM is torn down. From the desktop entry the user sees: a
polkit prompt, "Starting Windows VM…", a second polkit prompt to authorize
__priv down, and then nothing — no RDP window, VM stopped.

This is not the stale-log-lines race from #6882 (fixed, and the fix works —
see below). It is the remaining semantic gap: the log line that up_wait waits
on does not mean RDP is available.

__priv_up_wait() treats dockurr/windows' Windows started successfully as the
readiness signal:

if [[ -n $started_at ]] && docker logs --since "$started_at" "$CONTAINER" 2>&1 | grep -qi "windows started successfully"; then
  return 0
fi

That message is emitted by the image when QEMU has booted the guest, not when
the guest's RDP service accepts connections. Windows still has to finish booting
afterwards.

Measurements on this machine

Container created fresh each time (launch ends in down, which removes it), so
the container log is empty at start and the --since "$started_at" anchor from
#6882 is working correctly — stale lines are definitively not a factor here.

EventTime after container start
Windows started successfully appears (→ up_wait returns)T+10s
Guest actually accepts an RDP sessionT+19s

A ~9 second window in which launch connects and cannot succeed.

Measured by polling for the log line, then attempting xfreerdp3 … +auth-only
every 5s and recording the first attempt that reaches NLA_STATE_AUTH_INFO.

Steps to reproduce

  1. Have a Windows VM whose guest takes longer than the image's boot message to

reach RDP (~19s here; slower disks/guests will be worse).
2. Ensure no container exists: docker compose -f /var/lib/omarchy/windows/docker-compose.yml down
3. Launch "Windows" from the app menu (or omarchy-windows-vm launch).
4. Authorize the first polkit prompt.

Observed: xfreerdp3 starts with entirely correct arguments and exits after ~3s;
a second polkit prompt appears for __priv down; the VM is stopped; no window.

Expected: the client connects once the guest is actually reachable.

Connecting to the same VM once it is warm works indefinitely with the exact
same command line, which isolates this to timing rather than configuration.

Why it is easy to miss

  • It is timing-dependent: a guest that boots inside the window works fine, so it

presents as intermittent.
- Every launch ends in down, so every start is a cold start rolling the same
dice.
- #5202 amplifies it: because an xfreerdp3 failure is treated as "user is done",
the failed connection also destroys the VM, so the next attempt is cold again.

Suggested fix

Treat the image's boot message as a precondition, not as readiness, and gate the
client on the guest actually being reachable — e.g. after the log line, poll the
guest RDP port until an RDP-level handshake succeeds (with a timeout) before
invoking xfreerdp3; or retry xfreerdp3 when it fails within a few seconds of
starting, rather than falling straight through to priv down.

Fixing #5202 alongside this would also stop a too-early connection from taking the
VM down with it.

Related

  • #6882 — same symptom, different cause (stale log lines); its --since fix is

present and working here.
- #2599 — same user-visible symptom reported on 3.10.
- #5202 — RDP client failure silently stops the VM, which compounds this.

View raw text
### System details

- CPU: Intel Core i5-6260U
- GPU: Intel Iris Graphics 540 (Skylake-U GT3)
- Omarchy: 4.0.1-1, kernel 7.1.9-arch1-2
- Docker 29.7.2, Docker Compose 5.5.0, freerdp 2:3.30.0-2, dockurr/windows 6.05

### What's wrong?

`omarchy-windows-vm launch` fires `xfreerdp3` before the guest's RDP service is
listening. The client exits after ~3s, `launch_windows()` falls through to
`priv down`, and the VM is torn down. From the desktop entry the user sees: a
polkit prompt, "Starting Windows VM…", a second polkit prompt to authorize
`__priv down`, and then nothing — no RDP window, VM stopped.

This is **not** the stale-log-lines race from #6882 (fixed, and the fix works —
see below). It is the remaining semantic gap: the log line that `up_wait` waits
on does not mean RDP is available.

`__priv_up_wait()` treats dockurr/windows' `Windows started successfully` as the
readiness signal:

```bash
if [[ -n $started_at ]] && docker logs --since "$started_at" "$CONTAINER" 2>&1 | grep -qi "windows started successfully"; then
  return 0
fi
```

That message is emitted by the image when **QEMU has booted the guest**, not when
the guest's RDP service accepts connections. Windows still has to finish booting
afterwards.

### Measurements on this machine

Container created fresh each time (`launch` ends in `down`, which removes it), so
the container log is empty at start and the `--since "$started_at"` anchor from
#6882 is working correctly — stale lines are definitively not a factor here.

| Event | Time after container start |
| --- | --- |
| `Windows started successfully` appears (→ `up_wait` returns) | **T+10s** |
| Guest actually accepts an RDP session | **T+19s** |

A ~9 second window in which `launch` connects and cannot succeed.

Measured by polling for the log line, then attempting `xfreerdp3 … +auth-only`
every 5s and recording the first attempt that reaches `NLA_STATE_AUTH_INFO`.

### Steps to reproduce

1. Have a Windows VM whose guest takes longer than the image's boot message to
   reach RDP (~19s here; slower disks/guests will be worse).
2. Ensure no container exists: `docker compose -f /var/lib/omarchy/windows/docker-compose.yml down`
3. Launch "Windows" from the app menu (or `omarchy-windows-vm launch`).
4. Authorize the first polkit prompt.

Observed: `xfreerdp3` starts with entirely correct arguments and exits after ~3s;
a second polkit prompt appears for `__priv down`; the VM is stopped; no window.

Expected: the client connects once the guest is actually reachable.

Connecting to the *same* VM once it is warm works indefinitely with the exact
same command line, which isolates this to timing rather than configuration.

### Why it is easy to miss

- It is timing-dependent: a guest that boots inside the window works fine, so it
  presents as intermittent.
- Every `launch` ends in `down`, so every start is a cold start rolling the same
  dice.
- #5202 amplifies it: because an `xfreerdp3` failure is treated as "user is done",
  the failed connection also destroys the VM, so the next attempt is cold again.

### Suggested fix

Treat the image's boot message as a precondition, not as readiness, and gate the
client on the guest actually being reachable — e.g. after the log line, poll the
guest RDP port until an RDP-level handshake succeeds (with a timeout) before
invoking `xfreerdp3`; or retry `xfreerdp3` when it fails within a few seconds of
starting, rather than falling straight through to `priv down`.

Fixing #5202 alongside this would also stop a too-early connection from taking the
VM down with it.

### Related

- #6882 — same symptom, different cause (stale log lines); its `--since` fix is
  present and working here.
- #2599 — same user-visible symptom reported on 3.10.
- #5202 — RDP client failure silently stops the VM, which compounds this.

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.

No decision has been recorded yet.