Skip to content

v0.24.1 - the version it was reading was not the collector's

Choose a tag to compare

@AmanSK5 AmanSK5 released this 02 Sep 17:37
· 43 commits to main since this release
994272c

The page said "no device reports a collector at 2.1.0 or newer, so nothing here has looked yet" while the Fleet view beside it showed 2.1.0 on real machines. Two views of one estate disagreeing, and the one making the stronger claim was the wrong one.

What it was actually reading

scheduler_coverage parsed heartbeat version= out of finding evidence. That is the browser extension's paste-guard heartbeat — no collector emits one. Grepping for who writes it returns portal/extension-src/background.js and the paste guard's own docs, and nothing else.

So it read a paste-guard version (1.3.0), compared it against a collector threshold (2.1.0), found nothing at or above it, and reported an absence. Worse than reading nothing: it read something real and confidently wrong.

The collector's version arrives as agent_version on the enrol and report path, is stored on the device row, and is what Fleet shows. It reads that now — which means the portal has to ask the receiver, because a derivation over findings cannot. Pretending otherwise is exactly what produced a plausible number from the wrong field.

devices: 2.1.0, 2.1.0, 2.0.0, ""
  -> devices_reporting 3, capable 2, unknown 1

"12 of 31 devices run a collector that reads schedulers, so for those this
 is an answer rather than a gap. The other 19 report a version older than
 2.1.0, which may never have looked."

Unavailable is now distinct from zero

Classic mode has no receiver to ask, so scheduler_coverage(None) returns None and the page renders nothing — an empty page with no way to check the collectors is still an empty page, and asserting an absence from no data is the same overclaim this view keeps being fixed for. An empty device list still reads as zero, because that is a real answer.

The wrapping

Two paragraphs I added carried max-width in ch, so they broke into short lines beside a lede running the full width. The measure on the headline is deliberate and stays; the ones under it are gone.

Checked

Verified rendered, not just at the data layer: the coverage sentence, the full-width wrap, and scan_coverage: null in classic mode producing no sentence at all.

One test was removed rather than adapted — it asserted the paste-guard heartbeat path, which was the bug, so adapting it would have preserved the mistake in a new shape. Three replace it: the real source, the absent source, and a device row that has never carried a version.

Suites: registry 23, portal 617, scanner 210, receiver 291. Plus collector parity, build.py --check, chart copies and the identifier guard.