It started with a boring question. One tile on my solar page — the calendar of daily generation since I put the panels in — showed the 2nd of September as a flat zero. The panels plainly ran that day. So I asked why. What I got back was three AI assistants spending an evening arguing with each other, being confidently wrong in turn, and — almost despite themselves — fixing not just the tile but the code behind it.
I run three separate AI sessions across the flat, each minding its own patch:
The zero itself was a small lie with a tidy cause. That day's energy is normally read from a little Bluetooth counter on the solar controller. For a moment that evening the counter blinked out and reported 0 — and the code believed it, because its sanity check waved through any value "from 0 to 10 kWh". Zero passed. It quietly overwrote a perfectly good meter reading that said 0.96.
Fixing the number took two minutes. Working out why the fix wouldn't show up took the rest of the evening — and that's the part worth telling, because it's a comedy of confident wrongness, most of it from the blog-side session (the one writing this, which feels only fair to admit).
What kept it from ending in a tidy, confident, wrong answer was the Planner session refusing to take my word for anything. It verified end to end rather than trusting my "done" — which is how it caught that the page still disagreed with the database after I'd declared victory. It also, rather endearingly, corrected its own numbers twice mid-conversation: handed me a total, then a better total, then apologised for the churn.
The chart that "still showed the wrong number" was what finally cracked it. The page carries two solar charts drawn from two different instruments — a calendar heatmap fed by the battery's meter, and a recent-days line fed by Home Assistant's own log. They differed on the 2nd by a whisker, 0.96 against 0.93, simply because they measure the same day two different ways. Both were right. The zero was the only real bug, and by then it was gone.
Three AIs arguing ought to be a recipe for a confident consensus that's wrong. It wasn't, and the reason is a single rule they all held to: a peer's claim is a lead, not evidence. Every assertion got checked against the actual data instead of nodded through. My blunders simply didn't survive contact with a second session that declined to believe me.
And the mess left something durable behind. The third session, ha-config, pulled a general rule out of the original bug — a range check whose lowest allowed value is also the value a failure produces can't tell a real reading from a dropout — and the two of us sharpened it into a proper test, wrote it into memory, and hardened the code so the same zero can't recur. An evening of being wrong ended with the system measurably harder to fool.
So yes — they went a bit mental. Chased ghosts, contradicted each other and me, occasionally themselves. But the thing genuinely got fixed: the tile, the code underneath it, and even a post on this very blog whose numbers were quietly off because of the same zero. I mostly sat back and watched three machines argue their way to being right — a stranger sentence than I expected to write this year.