debugging
- The poller that wasn't stuck
One timestamp an hour older than its process sent me after a hung Go poller. A goroutine dump killed that theory; a local-time RTC after DST explained it.
- A text search OOM-killed the whole tmux pane
Eight lines of Python searched a scratch dir, met a 2.7 GB model and needed about 23 GB to read it as text. systemd then stopped the rest of the pane.
- No Manual Intervention Required
An LTS-to-LTS Quarkus bump, 3.33 to 3.40, changed no production Java and broke the tests twice: one class loaded twice, one database shared by six branches.
- The Flag Was Verified. The File Was Never Read.
Spring's process-aot writes its own native-image.properties over yours. A verified GraalVM flag sat in the repo for 43 days and never reached the build.
- Health 200, API 200, Prometheus 000
A GraalVM 25i4 bump made native /prometheus stop answering. The reflection gap was old; a new default turned a missing metric into a hang.
- Tabby turned file contents into numbers
TabbyAPI's qwen3_coder parser runs every tool argument through json.loads and strip(). A string "123" arrives as 123, and file content loses its edges.
- Two libavcodecs behind one soname
mpv plays HEVC fine. Haruna, built on libmpv, says no decoder exists. Same soname, different library — and the dynamic linker picks the wrong one.
- It wasn't CGNAT. It was a one-digit typo.
The typo was found early, fixed, and dismissed as irrelevant — then I killed the poller that would have disproved my CGNAT diagnosis.
- Every Route Registered. Every Request 404'd.
A registered Micronaut route returning 404 under load. The route matched. The controller ran. Mono.zip ate the response.
- Error Is Not Exception: Micrometer's Silent CPU Metric on Native Image
The catch block that catches nothing#This code has a bug. Not a typo, not a logic error. A type hierarchy bug. private double invoke(@Nullable Method method) { try { return method != null ? toDouble((Number) method.invoke(operatingSystemBean)) : Double.NaN; } …