📦 Looking for what already shipped? The full version history lives in the Changelog →

Upcoming

— targeted for the next release 2 items
Upcoming App

Code signing (OV certificate)

An OV code-signing certificate to remove the “unknown publisher” state on the installer. Skipping the EV tier deliberately — Microsoft removed EV’s instant SmartScreen bypass in 2024, so both tiers now build reputation the same way, through real download history.

Upcoming Distribution

Microsoft Store listing

A Store listing sidesteps SmartScreen entirely: packages published through the Store are signed by Microsoft and carry its reputation, so the “unknown publisher” warning never appears. That free signing applies to packaged (MSIX) builds — an installer submitted as a plain .exe still has to be signed by us — so this means shipping a second, packaged build alongside the direct download, which also hands update delivery to the Store for that channel. The packaging has been proven against a real build: the probe ladder, the Wi-Fi radio read and the local database all work unchanged inside the package. Direct .exe download stays available alongside it, same as our other products.

Planned

— committed, no ETA yet 3 items
Planned Distribution

winget / Chocolatey / Scoop submission

Manifests for all three are already written and verified against the live installer’s SHA-256 — what’s left is the actual PR/publish step against each package manager’s own repo (winget-pkgs review, a Chocolatey publisher account, a Scoop bucket PR), not more building.

Planned Integrations

UniFi integration, take two

Re-adding UniFi WAN/public-IP integration using Ubiquiti’s official Network API key or local admin account — both bypass the unifi.ui.com 2FA/SSO flow that broke the original username/password approach.

Planned Integrations

Home Assistant & ntfy documentation

The webhook alert system already sends generic JSON on every event; documenting the payload against Home Assistant’s webhook trigger and ntfy’s publish API turns every outage into an automation trigger for users already running either.

Under Consideration

— community suggestions being evaluated 6 items
Considering Evidence

Opt-in cross-user outage correlation

An anonymized, opt-in signal (timestamp, event class, ISP, coarse region only) that lets a report say “N other monitored connections on your ISP in your region saw the same failure in this window.” The biggest single differentiator being explored — needs a quorum threshold before any claim appears, same discipline as the existing internet-quorum check.

Considering App UX

Tailscale-aware remote view

The remote status page is intentionally LAN-only with no auth. Detecting a local Tailscale interface and surfacing its address would let users reach their status page from anywhere without ClumsyLinkWatch having to build or secure its own remote-access layer.

Considering Licensing

Pro tier

Unlimited history, PDF report branding, dual-WAN reporting, scheduled auto-reports, and alerting beyond webhooks — the paid tier described in the product plan, priced as a one-time purchase rather than a subscription.

Considering Licensing

Consultant tier

White-label branding, multi-site profiles, and portable/USB mode for IT consultants and MSPs who drop the tool at a client site for a week. Pairs naturally with a CSV/JSON export aimed at PSA/RMM tools like Hudu or ITGlue.

Considering Integrations

MSP tooling export

A structured export of report data aimed at PSA/RMM documentation tools (Hudu, IT Glue) — a lighter lift than a full RMM integration, and the format MSPs actually discover tools through.

Considering Diagnostics

Light passive congestion sampling

Detect congestion-without-loss degradation (bufferbloat-style latency spikes under load) as a distinct signal from packet loss, giving DEGRADED events a clearer “why” than loss/latency thresholds alone. Partly delivered in v0.6.0: jitter and call-quality now appear as their own DEGRADED reasons, so an event can already say more than “loss or latency”. Continuous passive detection outside speed tests is still to come.

Shipped

— already in your hands 70 features
✓ Shipped Evidence v0.9.0

Uptime measured over observed time

The percentage used to divide outage time by the whole calendar period, so every hour the app was not running counted as uptime. Four hours watched of a thirty-day window with six minutes of outage read as 99.99%. It now describes only the time actually observed, and where nothing was observed it prints a dash and says so rather than inventing a figure. A correction, not a feature — for some connections the number will go down, and the lower one is the one that survives an adversarial reader.

✓ Shipped Reporting v0.9.0

Monitoring coverage stated in the report

Every span with no measurements is listed with its exact start, end and duration, next to the share of the period that was covered, in the report body rather than an appendix. A reader who can see the gaps can check the arithmetic; a reader who finds an undisclosed one stops believing the document.

✓ Shipped Interface v0.9.0

Coverage gaps drawn on the timeline

Hatched, at every zoom level, on the strip and the day cells. This has been described as shipped since the first release and never actually worked — nothing recorded gaps in a form the timeline could read. An outage still open when monitoring stopped is now cut off at the gap rather than drawn through it.

✓ Shipped Classification v0.9.0

MONITORING_GAP, separated from HOST_SLEEP

A suspend confirmed by a Windows power event stays HOST_SLEEP. A span where the only evidence is that the clock jumped — app closed, machine off, hibernate that fired no event — is now MONITORING_GAP. Both are excluded from uptime and downtime as before; the difference is what the report is willing to claim about your hardware.

✓ Shipped App v0.9.0

Start with Windows

Off by default, with an option to start straight to the tray. It matters more than it used to: a record with holes in it is now visibly a record with holes in it, rather than one whose gaps quietly counted as working time.

✓ Shipped Core v0.8.0

Simultaneous dual-WAN probing

Watches a standby connection that is carrying no traffic, so a backup link that quietly died weeks ago is visible now rather than at the moment a failover needs it. Every rung is bound to the link it is testing — an unbound probe would measure whichever connection Windows preferred and report it as this one’s, which is evidence that looks valid and is wrong. Standby links are judged by the same ladder and the same classifier as the active one, so an outage on your backup means exactly what it means on your primary.

✓ Shipped Classification v0.8.0

Wi-Fi signal awareness

A weak wireless link produces the same observable as a bad last mile — loss and latency on every rung above the adapter — and the app could not previously tell the two apart. It now reads signal strength, channel and radio type from the Windows Native Wifi API directly, and where the radio was in trouble during a degraded span it says so, with the measured dBm. It does not quietly reclassify the event: the outage stays counted against your ISP and the doubt is printed next to it, because a rule that wrongly excused a real ISP fault as “your Wi-Fi was weak” would be worse than no rule at all. Where signal strength cannot be read by any route, nothing is flagged and nothing is excluded — a missing signal must never become a false claim that the host was wired.

✓ Shipped Core v0.7.1

Primary & secondary connection detection

Identifies the ISP your traffic is actually leaving through — name, ASN, public address — and ranks connections by how much observed time each has carried traffic. Connections are keyed on the operator that owns the address, so a dynamic IP renewing on the same provider is never mistaken for a second link.

✓ Shipped Reporting v0.7.1

Failover timing in the report

Every switch between connections, and how long you were actually offline across each one. The public-address check now also fires the moment a fault clears, so a failover that caused an outage is timed to within seconds of recovery — and a switch with no outage around it is reported as no gap observed rather than as an instant handover.

✓ Shipped Hardware v0.7.1

Starlink alignment lock

Lock the dish’s aim and the app checks once a minute, whether or not the tab is open, whether it has moved off that reference. Wind, snow load and a loosened mount all present as a mysterious rise in obstruction; this turns that into a date and an angle. Readings taken while the dish is re-aiming itself are discarded, and a deviation must hold before it counts.

✓ Shipped Reporting v0.7.1

Dish alignment in the report

Answers “your dish must have shifted” with a measurement instead of a denial. States just as plainly when the dish did move, and on what date — a report that only ever exonerates its author is not evidence.

✓ Shipped Diagnostics v0.7.1

Outage timing, in the app

The recurring-pattern analysis added in v0.6.0 only ever appeared inside a generated report. It is now a panel on Diagnostics, running the same analysis over the same data, so a nightly or weekday-evening cluster is visible without producing a PDF first.

✓ Shipped Evidence v0.7.1

Host clock readout

Every timestamp in every report rests on this machine’s clock. That was checked but only stated inside the report; it is now a standing readout on Diagnostics that warns when the clock is unsynchronised or has drifted — before you build a case on it, rather than after.

✓ Shipped Classification v0.7.1

Equipment-restart detection, working

Announced in v0.6.0, but it could not fire: the check needs corroborating evidence beyond the outage being a plausible length, and nothing was gathering any. It now reads the gateway’s address entry on the local network across each outage — a rebooting device keeps its hardware address but must be re-learned, while an address that genuinely changes means the equipment was replaced, which rules a restart out rather than supporting it.

✓ Shipped Interface v0.7.1

Event filtering

Filter the event list by attribution, classification and date range, and hide events already acknowledged. “Just the ISP’s faults from last month” used to be a scrolling exercise.

✓ Shipped Interface v0.6.1

Uptime on the dashboard

The figure the tool exists to produce used to live only inside a generated report. It is now the headline reading on the main screen, large enough to read across a room, and it shows a dash rather than a reassuring percentage until monitoring has genuinely covered the full window.

✓ Shipped Interface v0.6.1

Live latency trace

The last five minutes of round-trip time, drawn under the status reading and updating every cycle, with your link’s own normal latency marked. Scales to your connection rather than a fixed range, so it reads the same on 8ms fibre as on a 600ms satellite link. Failed probes leave a gap rather than plotting as zero.

✓ Shipped Interface v0.6.1

Probe ladder drawn as a ladder

Five rungs stacked from your own machine at the bottom to the open internet at the top, with a probe climbing the spine each cycle. A failure stops the climb at that rung, so the picture shows where the fault is before you read anything — including, when your equipment answered, that it begins upstream of your property.

✓ Shipped Evidence v0.6.1

Attribution stated in words

The event list carries a severity stripe and a literal ISP / LOCAL / EXCLUDED tag on every row rather than relying on text colour. That reads correctly for a colour-blind reader and survives being screenshotted into a support ticket.

✓ Shipped Interface v0.6.1

Settings reorganised

One long scrolling pane that shifted position on every tab switch became a sidebar of seven focused sections at a fixed size. It only scrolls now if the window is genuinely too short for a section.

✓ Shipped Distribution v0.6.1

One-command releases

Building, verifying, backing up, uploading in a safe order, tagging, and pushing are now a single command. The update feed is never armed until the uploaded installer has been re-hashed on the server and matched, so a half-finished upload can never point existing users at a broken download.

✓ Shipped Diagnostics v0.6.0

ISP DNS resolver comparison

Finds your own configured resolver — usually your router, forwarding to your ISP — and asks it the same question at the same moment as Cloudflare and Google, over the same connection. Reports typical response time, failure rate, and the query count behind each. Stays silent below 200 queries rather than guessing.

✓ Shipped Diagnostics v0.6.0

NXDOMAIN hijack detection

Asks every resolver for a hostname that cannot exist. A resolver returning an address instead of “no such name” is hijacking the response — that breaks far more than web browsing, and it is the operator’s doing, not yours.

✓ Shipped Evidence v0.6.0

Case notes on outages

Attach the ticket number, who you spoke to, what was promised, and a follow-up date to any outage. Shown in the event list and carried into the report as a Case notes column, so a complaint can set broken promises against measured downtime. Never influences how an event is classified.

✓ Shipped Evidence v0.6.0

Outage timing analysis

The report looks for recurring patterns — same time each day, same day each week. Deliberately conservative: no claim below 8 outages, a cluster must clearly beat chance, and day-of-week patterns are withheld until the window is long enough to tell “always on a Tuesday” from “monitoring only ran on a Tuesday”.

✓ Shipped Evidence v0.6.0

Report provenance block

Every report states the tool version, the exact period, how many samples it drew on, and whether the host clock was synchronised to an internet time source, with the measured offset. Includes an integrity checksum so two copies can be confirmed to describe the same measurements. Not a signature, and it does not establish who produced a file.

✓ Shipped Classification v0.6.0

Possible ISP-pushed equipment restarts

Providers reboot customer equipment on their own schedule, which used to read as purely your fault. Where you have said the gateway is ISP-supplied, the appendix flags outages matching a restart signature and shows the reasoning. The classification never changes on its own — it stays a local fault and stays out of your ISP-attributable downtime.

✓ Shipped Measurement v0.6.0

Latency-under-load measurement reworked

Bufferbloat grading now discards samples taken between transfers instead of averaging them in, grades on both typical and worst-case latency rise, and takes its idle baseline from a low percentile so household traffic cannot flatter your router. Low-confidence runs say so. Existing grades may shift as a result.

✓ Shipped Privacy v0.5.1

Anonymous product telemetry

App startup, version/OS/architecture, that a report was generated (and its format), and that Starlink detection was turned on — matches ClumsyFileMover and ClumsyNetWatch. No probe results, events, IP addresses, ISP name, account number, or location is ever sent. On by default; turn it off any time from Settings → General → Privacy. Disclosed on the Privacy Policy before it shipped, not after.

✓ Shipped Hardware v0.5.0

Starlink event log & history charts

The Starlink page now pulls the dish’s own internal diagnostics log directly — every outage and packet-loss event it has recorded since its last reboot, independent of ClumsyLinkWatch’s own monitoring — plus real-time downlink/uplink throughput and loss/latency charts from the dish’s own last-15-minutes history, with pop ping latency compared against Starlink’s own published 20ms median-latency target.

✓ Shipped Hardware v0.5.0

Live Starlink signal view

A satellite/dish beam animation and lit signal bars on the Starlink page, derived from real latency, loss, obstruction, and alert state — reads at a glance instead of requiring a second look at the numbers.

✓ Shipped Hardware v0.4.0

Starlink dish telemetry

Turn on “I use Starlink” and get real telemetry pulled directly from your dish over its own local diagnostics service — no separate account, no scraping the web UI. Connection state, uptime, pop ping latency/loss, software version, active alerts, live Rotation/Tilt alignment gauges, and a real-time Obstruction Map rendered from the dish’s own sky-obstruction data. Off by default, and the dish’s LAN address is configurable for nonstandard network layouts.

✓ Shipped Core v0.4.0

DEGRADED sensitivity control

Strict/Default/Relaxed presets plus custom latency multiplier, latency floor, and loss threshold values, with a Reset to Defaults button. Fixes DEGRADED firing on ordinary jitter for low-baseline rungs, and Relaxed specifically suits satellite links like Starlink, which see more routing/handoff jitter than wired connections.

✓ Shipped App UX v0.4.0

Tabbed Settings

Settings is now split into General, Alerts & Remote, Speed Test, and Sensitivity tabs instead of one long scroll.

✓ Shipped History v0.4.0

Clear All for Events and Speed Test History

A Clear All button on both the Events list and Speed Test History, with a confirmation showing exactly how many records will be permanently deleted.

✓ Shipped Diagnostics v0.4.0

Speed Test History startup fix

Fixed a startup race where Speed Test History could stay empty until a new test ran, instead of loading on launch — the same class of race that previously affected the Settings window before it was fixed.

✓ Shipped Site v0.3.3

Remote status page: full app parity

The Remote LAN Status page previously only showed status, the probe ladder, and recent events. It now also shows an ISP/WAN panel, the 14-day latency trend chart, and a full Speed Test section (latest result, day/hour pattern heatmap, recent run history) — everything the desktop Dashboard shows, from your phone.

✓ Shipped Site v0.3.3

Remote event detail popup

Tap any event in the Remote Status page's Recent Events list to open the same evidence popup the desktop Event Detail view shows — full probe-ladder/DNS/quorum results, the "why" for DEGRADED, and a "what to do" suggestion, without needing to be at the monitoring host.

✓ Shipped Diagnostics v0.3.2

Speed test reliability fix

The speed test previously required a single 100MB+ request to complete without a hitch or it aborted the entire run — failing disproportionately on exactly the slower, flakier connections this app exists to diagnose. Chunk sizes are now capped at 25MB and total transfer per run cut from over 1GB to roughly 200MB, matching the estimate already shown in Settings. A mid-test hiccup now keeps whatever numbers were already measured instead of discarding the whole result, and History updates immediately after a run finishes instead of waiting on a background poll.

✓ Shipped Diagnostics v0.3.1

Event detail view

Click any event in the Events list to see the full evidence behind it — every probe-ladder rung, DNS resolver, and quorum anchor result, plus a plain-English "why" for DEGRADED — with a Copy Summary button to paste it into a ticket or message.

✓ Shipped Alerting v0.3.1

Actionable webhook alerts

Discord/Slack webhook notifications now include the specific DEGRADED reason(s) instead of just the bare class name, plus a plain-English "What to do" suggestion once the event resolves — tailored to the fault class and, for DEGRADED, which rung tripped it.

✓ Shipped App UX v0.3.0

Multi-screen redesign

Rebuilt around four screens — Dashboard, Diagnostics, Speed Test, Events — instead of one long scrolling page, so the status you care about most reads at a glance without hunting through everything else.

✓ Shipped Diagnostics v0.3.0

Scheduled speed tests

Run automatically every 30 min / 1h / 4h / 12h / 24h (off by default), with a live data-cost estimate shown before you commit to an interval and an option to skip a run while a fault is already active.

✓ Shipped Diagnostics v0.3.0

Speed test history & pattern detection

Every run (manual or scheduled) is saved and sortable by worst download/upload/latency, plus a day-of-week × hour-of-day heatmap that automatically flags recurring slow windows — consistent with peak-hour congestion rather than a one-off.

✓ Shipped Core v0.3.0

Speed test self-interference guard

A running speed test saturates the link enough to cause transient latency spikes on the probe ladder's own pings — DEGRADED classification is now suppressed for the duration of any speed test so it can't trigger a false event against itself. Hard rung failures still classify normally.

✓ Shipped Diagnostics v0.2.2

Why DEGRADED was triggered

Every DEGRADED event now records exactly which rung, whether it was loss or latency, and the measured value against the threshold it crossed — shown live on the status card while it's happening, in event history, in evidence reports, and on the remote status page.

✓ Shipped App UX v0.2.1

Remote LAN status page redesign

Was just a bare classification and timestamp — now shows the full probe ladder with live per-rung latency, rolling loss, a captive-portal warning banner, and color-coded recent events, styled to match the app itself.

✓ Shipped Reporting v0.2.0

SLA credit dollar calculation

An optional monthly bill amount field in the report generator converts measured ISP-attributable downtime into a straight-line prorated credit figure — turning “here’s what happened” into “here’s what it’s worth,” the number small-claims filings and billing disputes actually need.

✓ Shipped Diagnostics v0.2.0

Per-rung baseline auto-tuning

Baselines are now computed independently for the gateway, ISP-hop, and DNS rungs, not just quorum — a rung that’s quietly gotten slower now trips DEGRADED against its own normal, even while the quorum rung still looks perfectly healthy.

✓ Shipped Distribution v0.2.0

Package manager manifests

winget, Chocolatey, and Scoop manifests are written and verified against the live installer’s SHA-256, staged and ready for submission to each package manager’s own repository.

✓ Shipped App v0.1.4

Settings window fix

Fixed a startup race where the Settings window could silently fail to open if it was requested before the local database finished starting up, with no retry — it now polls until settings are actually ready.

✓ Shipped App v0.1.3

Check for updates from About

A refresh button in the About screen checks for a new version on demand, with inline status (checking / up to date / update available) and Download/Restart actions right there — no need to wait for the automatic background check.

✓ Shipped Diagnostics v0.1.2

Working speed test

Built-in download/upload/latency/jitter speed test using Cloudflare’s speed-test engine, served over a registered app scheme so the browser timing APIs it depends on report real numbers instead of collapsing to near-zero.

✓ Shipped App v0.1.0

Five-rung probe ladder

Adapter, gateway, ISP first hop, DNS, and a quorum of independent internet anchors — every rung checked every cycle, cheapest and closest first, with confirmation retries before anything is declared down.

✓ Shipped Core v0.1.0

Fault classification

Every event is tagged ADAPTER_DOWN, GATEWAY_DOWN, LAST_MILE_DOWN, DNS_FAILURE, UPSTREAM_DOWN, DEGRADED, or HOST_SLEEP — and only the ISP-attributable classes count against your ISP in a report.

✓ Shipped Core v0.1.0

TTL-limited ISP-hop probing

Probes the ISP’s first hop at the depth discovered by traceroute rather than pinging it directly — avoids false last-mile-down readings on routers that answer TTL-expired traceroute probes but not direct ICMP echo.

✓ Shipped Core v0.1.0

Monotonic-time duration tracking

Outage durations are computed from a monotonic clock, not wall-clock time — so NTP corrections and DST shifts never produce negative or impossible durations in a report.

✓ Shipped Core v0.1.0

Sleep & hibernate detection

Subscribes to Windows power events and detects wall-clock gaps far larger than the sample interval, marking those spans HOST_SLEEP — rendered as hatched timeline gaps, never counted as uptime or downtime.

✓ Shipped Core v0.1.0

Adaptive probe scheduler

5-second interval while healthy, 2 seconds during an active event for resolution, backing off to 30 seconds after 10 minutes down — staggered and rate-limited so the tool never looks like a DoS source to the ISP.

✓ Shipped History v0.1.0

SQLite history with configurable retention

Raw samples and events persist locally with a configurable retention window, so a year of 5-second samples doesn’t need to live in a JSON file or vanish after a week.

✓ Shipped Reporting v0.1.0

HTML & PDF evidence reports

A plain-English methodology paragraph, an ISP-attributable outage table, uptime percentage shown as “nines,” and an appendix listing every excluded event and why — nothing hidden.

✓ Shipped App UX v0.1.0

Time-proportional timeline strip

Segment width proportional to real elapsed time rather than sample count, with Live/24h/7d/30d zoom and hover detail per segment — a 2-minute blip and a 2-hour outage no longer look the same width.

✓ Shipped Reporting v0.1.0

SLA calculator

Uptime percentage and total outage minutes for the period, shown in the same “nines” language SLAs use (99.5%, 99.9%).

✓ Shipped Diagnostics v0.1.0

Full-path hop table & 14-day latency trend

Every hop of the last full traceroute (not just the rung-2 ISP-hop depth), plus a rolling 14-day latency chart with baseline overlay, so degradation is visible as a trend, not just a single bad sample.

✓ Shipped Diagnostics v0.1.0

Captive-portal & DNS-hijack detection

A separate check against a known-good endpoint catches networks that intercept DNS or inject a captive-portal page — the false-healthy gap that could otherwise make the internet quorum check read as fine when the real connection is unusable.

✓ Shipped Hardware v0.1.0

Hardware panel & Starlink detection

Lists network adapters for dual-WAN visibility and detects a Starlink dish on the LAN, laying the groundwork for dish-specific obstruction/telemetry data.

✓ Shipped Alerts v0.1.0

Native, taskbar & webhook alerts

Desktop notifications and taskbar flash on real faults only (not DEGRADED or sleep), plus Discord/Slack-compatible webhook alerts and a color-coded system tray status.

✓ Shipped App UX v0.1.0

LAN remote status page

A small unauthenticated status page reachable from any device on the same LAN — check current status and recent events from your phone without remoting into the desktop.

✓ Shipped App v0.1.0

Auto-update

Built-in updater checks for new versions on launch and installs them with one click — no manual reinstalls for future releases.

✓ Shipped Site v0.1.0

Full product site

Product page, downloads with SHA-256 checksums, in-app-matching Help documentation, changelog, and legal pages (EULA, Privacy, Terms) — the complete public presence, not just an installer link.

Have a feature idea?

ClumsyLinkWatch is actively being shaped by early users. If there’s something missing that would make your evidence report stronger or your monitoring more useful, send it over — good suggestions land on this page and eventually in the app.

Bug reports: bugs@clumsyslab.tech