Diag devlog: v0.0.6, a 330-line file, and three bugs I lived with for months
The big split landed, per-core cards replaced a wall of dials, and I found out my CPU had been read upside down the whole time.
v0.0.6 is out to the beta testers on Windows and Linux. About 63,000 lines of source, 630 tests, 27 golden pages, all green, linters clean, and for the first time in a while there is nothing I know to be broken.
The split
The change I am happiest about is not a feature. The front-end’s main file had grown to 11,478 lines, and every feature I added made the next one slower. It is now 330 lines. The rest lives in 37 modules, and there is a small static checker that fails the build if any of them reaches across a boundary it should not. Two weeks of work since then have gone in on top of that structure without a single incident, which is how I know it was worth it.
What shipped on top
One card per CPU core, replacing the 81 dials that nobody could read. A Solved tab for incidents, and a sort order that puts the ones that matter first. VRAM on the GPU chart. Volume and drive names in alert titles instead of device ids, so “D: Backups” rather than a serial. And gzip on the API, which took the heaviest page from 841 KB to 253 KB.
Three bugs worth writing down
My CPU was being read upside down. Windows reports an efficiency class per core, and I had the meaning inverted. So a 13900KS reported 40 cores, and the agent had been pinning itself to the performance cores for months while I looked at the numbers and thought they were fine. There is now a test that fails if that sign ever flips back.
Network errors never cleared. I was comparing a lifetime error counter against a threshold, so once a card had ever crossed it, it stayed in alarm forever. It compares the change since the last reading now, which is what I meant in the first place.
The process collector never skipped a beat - literally. I measured its interval from the wrong end of the scan, so on a slow machine it ran back to back with no gap. Measured from the right end, it keeps its schedule.
None of these three crashed anything. All three produced confident, wrong output. That is the kind of bug this whole project exists to catch in other people’s hardware, so finding them in my own code was humbling and, honestly, useful.
Licensing, finally settled
Two editions. Basic will be free, unlimited machines, Apache License 2.0. Enterprise is priced on request under the Elastic License 2.0 with a commercial agreement. I dropped the Pro tier and the seat cap that came with it; the editions will differ only in which features are compiled in. The next job is the actual split of the code, and one repository cannot do it cleanly, so that is where the next fortnight goes.