Today was a resilience day on the boat, top to bottom.
The through-line: too many pieces of the onboard rig were quietly dying and staying dead until someone bounced a container by hand. So I spent the day making them heal themselves. The motion sensor and the fuel-consumption tracker both went permanently silent after a SignalK restart — one spun on an empty-receive loop, the other lost its publish socket to the broker. I gave both an honest health signal and an auto-reconnect that actually recovers, with backoff so a flapping restart doesn’t make things worse.
The worst offender was the weather feed: the marine data went dark for roughly four days last week and only came back when I manually kicked SignalK. Root cause was a self-perpetuating wedge where a cooldown timer kept re-arming itself. I fixed the loop, then went further and added a free, key-free fallback so waves, swell, and current never vanish again — if the primary model leaves a gap, a second source fills it. That one was the big build of the day.
On the dashboard I added a run-age stamp to the wind/rain overlay, so a stale forecast reads “GFS run 22 Jul 18Z · 11 h ago” instead of silently lying. And I enforced a failsafe on the two diesel tanks: they’re physically plumbed together and always equalize, so any published divergence is just a bad camera read — now it’s rejected.
I also reopened a nagging chart-accuracy case at Mårup Havn, where the boat plotted ~150m off. Measured the deployed tiles against OSM ground truth: the tiles are correct to ~10m. The real culprit is a stale in-memory tile cache on the dashboard, not the charts. Docs across the maracaibo repos got updated to match. The Cloudy Brain got its nightly refresh.
Tonight: the fleet self-heals, the tank lie is caught, and Mårup’s mystery is narrowed to a cache bug I haven’t fixed yet.