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-5152GitHub issuePublicDecided· Out of scope

Network speed test consistently over-reports upload speed on 2.5GbE / 1 Gbps service

Reported by Redbeard-Coder · filed Oct 5, 2026 · open at source

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

Network speed test consistently over-reports upload speed on 2.5GbE / 1 Gbps servicerevision 1 · captured 2026-10-05 03:29 UTC via poll

System details

AMD Ryzen 9 5900X 2.5 GbE wired Ethernet 1 Gbps symmetric Internet service Omarchy 4.x

What's wrong?

The built-in Omarchy Network Speed Test consistently reports upload throughput
substantially higher than independent browser-based speed tests on the same
machine and connection.

Connection:
- 2.5 GbE Ethernet link
- ISP plan: 1 Gbps symmetric

Repeatable results:

Omarchy Network Speed Test:
- Download: ~1,032 Mbps
- Upload: ~1,298 Mbps

Ookla browser test:
- Download: 1,043 Mbps
- Upload: 1,077 Mbps
- Ping: 2 ms

Fast.com browser test:
- Download: ~1.0 Gbps
- Upload: ~1.0 Gbps
- Unloaded latency: 3 ms
- Loaded latency: 7 ms

The Omarchy download result is close to the browser tests, but the upload result
is consistently around 1.3 Gbps.

This is repeatable across multiple Omarchy runs and is not a one-off spike.

Relevant implementation details
===============================

  1. The panel displays the last throughput sample, not an averaged result.

In:

shell/plugins/panels/speedtest/Panel.qml

each line from omarchy-network-speedtest directly replaces uploadMbps or
downloadMbps:

if (phase === "down") downloadMbps = String(value)
else if (phase === "up") uploadMbps = String(value)

There is no averaging, median, smoothing, or final steady-state calculation.
The last sample received before the phase ends becomes the displayed result.

This means a short burst can become the final reported speed.

  1. The 5-second phase timer starts before measurements begin.

Panel.qml starts the helper process and immediately starts the 5-second timer:

speedTestProc.running = true
phaseTimer.restart()

However, omarchy-network-speedtest must first:

  • fetch Fast.com / Netflix OCA endpoints
  • spawn 8 traffic workers
  • wait for the first sampling interval

This appears related to existing issue #12854, which documents that the helper
can take roughly 3-4.5 seconds to produce its first sample.

As a result, a nominal 5-second phase may contain only a small number of actual
throughput samples.

  1. The helper assumes each sampling interval is exactly one second.

In:

bin/omarchy-network-speedtest

throughput is calculated from interface byte counters after:

sleep 1

using:

(after - before) * 8 / 1000000

The actual elapsed time between counter reads is never measured.

The calculation therefore assumes delta_t = exactly 1.000 seconds, even though
scheduler delay and shell/process overhead make the real interval longer.

The correct formula should use actual elapsed monotonic time:

Mbps = ((after - before) 8) / (elapsed_seconds 1000000)

  1. Upload throughput is measured from the NIC TX byte counter.

The helper reads:

/sys/class/net/$iface/statistics/tx_bytes

This measures all transmitted interface bytes during the interval rather than
application-level payload successfully received by Fast.com.

That can include protocol overhead, retransmissions, and unrelated TX traffic
during the sampling window.

Why this may explain the observed result
========================================

On this connection:

  • Ookla: ~1.08 Gbps upload
  • Fast.com browser: ~1.0 Gbps upload
  • Omarchy: ~1.30 Gbps upload

Because Omarchy uses short interface-level samples and displays the final sample
rather than a sustained average, it appears possible for a transient upload
burst to become the reported result.

Expected
========

The completed Omarchy speed test should report a sustained upload result that is
reasonably comparable to Fast.com / Ookla on the same connection, approximately
1.0-1.1 Gbps in this case.

Actual
======

Omarchy repeatedly reports approximately 1.3 Gbps upload.

Suggested improvements
======================

  1. Start the measurement duration on the first valid sample rather than at

process launch, as discussed in #12854.

  1. Collect multiple steady-state samples and calculate a final result rather

than displaying the last instantaneous sample.

  1. Measure actual monotonic elapsed time between byte-counter reads instead of

assuming exactly one second.

  1. Consider measuring transferred application payload rather than total NIC TX

bytes.

Related issue:
#12854 - Speed test panel reads 0 on both dials: 5s phase timer starts at
process launch, ahead of the helper's warm-up

View raw text
### System details

AMD Ryzen 9 5900X 2.5 GbE wired Ethernet 1 Gbps symmetric Internet service Omarchy 4.x

### What's wrong?

The built-in Omarchy Network Speed Test consistently reports upload throughput
substantially higher than independent browser-based speed tests on the same
machine and connection.

Connection:
- 2.5 GbE Ethernet link
- ISP plan: 1 Gbps symmetric

Repeatable results:

Omarchy Network Speed Test:
- Download: ~1,032 Mbps
- Upload: ~1,298 Mbps

Ookla browser test:
- Download: 1,043 Mbps
- Upload: 1,077 Mbps
- Ping: 2 ms

Fast.com browser test:
- Download: ~1.0 Gbps
- Upload: ~1.0 Gbps
- Unloaded latency: 3 ms
- Loaded latency: 7 ms

The Omarchy download result is close to the browser tests, but the upload result
is consistently around 1.3 Gbps.

This is repeatable across multiple Omarchy runs and is not a one-off spike.

Relevant implementation details
===============================

1. The panel displays the last throughput sample, not an averaged result.

In:

shell/plugins/panels/speedtest/Panel.qml

each line from omarchy-network-speedtest directly replaces uploadMbps or
downloadMbps:

    if (phase === "down") downloadMbps = String(value)
    else if (phase === "up") uploadMbps = String(value)

There is no averaging, median, smoothing, or final steady-state calculation.
The last sample received before the phase ends becomes the displayed result.

This means a short burst can become the final reported speed.

2. The 5-second phase timer starts before measurements begin.

Panel.qml starts the helper process and immediately starts the 5-second timer:

    speedTestProc.running = true
    phaseTimer.restart()

However, omarchy-network-speedtest must first:

- fetch Fast.com / Netflix OCA endpoints
- spawn 8 traffic workers
- wait for the first sampling interval

This appears related to existing issue #12854, which documents that the helper
can take roughly 3-4.5 seconds to produce its first sample.

As a result, a nominal 5-second phase may contain only a small number of actual
throughput samples.

3. The helper assumes each sampling interval is exactly one second.

In:

bin/omarchy-network-speedtest

throughput is calculated from interface byte counters after:

    sleep 1

using:

    (after - before) * 8 / 1000000

The actual elapsed time between counter reads is never measured.

The calculation therefore assumes delta_t = exactly 1.000 seconds, even though
scheduler delay and shell/process overhead make the real interval longer.

The correct formula should use actual elapsed monotonic time:

    Mbps = ((after - before) * 8) / (elapsed_seconds * 1000000)

4. Upload throughput is measured from the NIC TX byte counter.

The helper reads:

    /sys/class/net/$iface/statistics/tx_bytes

This measures all transmitted interface bytes during the interval rather than
application-level payload successfully received by Fast.com.

That can include protocol overhead, retransmissions, and unrelated TX traffic
during the sampling window.

Why this may explain the observed result
========================================

On this connection:

- Ookla: ~1.08 Gbps upload
- Fast.com browser: ~1.0 Gbps upload
- Omarchy: ~1.30 Gbps upload

Because Omarchy uses short interface-level samples and displays the final sample
rather than a sustained average, it appears possible for a transient upload
burst to become the reported result.

Expected
========

The completed Omarchy speed test should report a sustained upload result that is
reasonably comparable to Fast.com / Ookla on the same connection, approximately
1.0-1.1 Gbps in this case.

Actual
======

Omarchy repeatedly reports approximately 1.3 Gbps upload.

Suggested improvements
======================

1. Start the measurement duration on the first valid sample rather than at
   process launch, as discussed in #12854.

2. Collect multiple steady-state samples and calculate a final result rather
   than displaying the last instantaneous sample.

3. Measure actual monotonic elapsed time between byte-counter reads instead of
   assuming exactly one second.

4. Consider measuring transferred application payload rather than total NIC TX
   bytes.

Related issue:
#12854 - Speed test panel reads 0 on both dials: 5s phase timer starts at
process launch, ahead of the helper's warm-up

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 21:27 UTC