Bulletins

10 August 2026

Replace apt with a deliberately boring CI package step

The recent apt install breakage is worth turning into a small hardening pass rather than a one-off repair. Search deployment scripts and container builds for interactive apt, replace it with apt-get, keep update and install in the same build step, and set DEBIAN_FRONTEND=noninteractive only for the command that needs it. Then pin the base image by digest or at least by release, and add one clean-room build that runs without a warm package cache. The useful follow-up question is whether reproducibility or automatic security updates matters more for each image; that decides how aggressively to pin package versions.

Make graceful shutdown a reusable Go harness

signal.NotifyContext is a good excuse to standardise the lifecycle of the small Go services and tools that have accumulated over time. Extract a tiny harness that creates the signal-aware root context, stops accepting HTTP work, gives in-flight requests a bounded drain window, and returns a non-zero exit only for a real serving error. Test it with one deliberately slow handler and two signals: the first should drain, while the second should force a prompt exit. That turns a useful TIL into behaviour you can trust during deploys instead of another snippet copied differently into every main package.

Turn the mysterious crawler spike into a one-page traffic report

Before deciding that the archive traffic is a model run, take a day of access logs and group requests by verified network owner, user agent, entry page, status code, and requests per minute. Do not trust a Googlebot user agent on its own: verify a sample with forward-confirmed reverse DNS or Google’s published IP ranges. The interesting result is a compact comparison between genuine Google crawlers, spoofed agents, and ordinary browsers that arrived with a Google referrer. Save the query or script alongside the report so the next spike becomes a five-minute check rather than a new mystery.