known·good

Things that were broken, and why.

Field notes from real fixes. Root cause first, then the fix, then the evidence. Written up so the next person — or the next agent — searching for the same error message finds an answer instead of a forum thread with no reply.

2026

  1. Vertical Japanese (tategaki) OCR benchmark: dots.ocr-1.5 vs LightOnOCR-3 vs chandra-ocr-2

    On 33 vertical Japanese pages (21k chars, exact ground truth), dots.ocr-1.5 had 1.27% CER, LightOnOCR-3-4B 2.59%, chandra-ocr-2 10.96% (repetition loops; turns small kana っ into つ). LightOnOCR-3-1B ships mis-keyed weights and 0.8B ships use_cache=false.

  2. SP Flash Tool on Linux (MT6592): S_COM_PORT_OPEN_FAIL (1013) in BROM, then "PMT changed for the ROM"

    Writing /system on an unrooted MT6592 handheld from Linux. BROM port-open fails because new cdc_acm rejects TIOCCBRK; Download refuses with "PMT changed". Use SP Flash Tool v5.1648, an LD_PRELOAD shim, Preloader mode and write-memory at the physical address.

  3. Chromium window drag warps the window (xfwm4) or the cursor (KWin) on X11

    Dragging a Chromium window by its own title bar on X11 makes the window jump hundreds of pixels (often off-screen) under xfwm4, or makes the mouse cursor jump under KWin. Chromium sends a _NET_WM_MOVERESIZE request with wrong root coordinates; turning on "Use system title bar and borders" avoids it.

  4. No audio in Chrome Remote Desktop session on PipeWire: "ALSA: Couldn't open audio device: Host is down"

    In a Chrome Remote Desktop X session on PipeWire, apps were silent or failed with "Host is down". CRD puts PULSE_RUNTIME_PATH, PULSE_SINK and PIPEWIRE_REMOTE into the session, pointing at its own PipeWire, which had not started. Unset them before dbus-launch, bridge system PipeWire to CRD's FIFO, check sink volume.

  5. systemd unit restarted 2 million times unnoticed: "Failed to load environment files: No such file or directory"

    Template units whose EnvironmentFile and user had been deleted restart-looped every 3 s for 73 days (1,958,017 restarts each). systemd fails before spawning a process, so CPU and ps show nothing, and RestartSec=3 stays under the start limit. Find them by NRestarts; vacuum the journal by size.

  6. faster-whisper: Library libcublas.so.12 is not found or cannot be loaded (system has CUDA 13)

    faster-whisper fails at the first GPU compute with "Library libcublas.so.12 is not found" because the ctranslate2 wheel is built for CUDA 12 and the system has CUDA 13. Install nvidia-cublas-cu12 and nvidia-cudnn-cu12 into the venv and set LD_LIBRARY_PATH in a wrapper before Python starts.

  7. Claude Code: auth login succeeds in the browser, then "not logged in" (~/.claude owned by root)

    claude auth login completes in the browser, then Claude Code says it is not logged in and gives up after a few retries. ~/.claude was owned by root after claude had once been run as root with the user's HOME, so the token file could not be written. chown the directory back to the user.

  8. Default ACL shows #effective:--- on files an app rewrites with mode 0600 (certbot keys, Home Assistant auth)

    A default ACL granting a backup user read access worked, then broke after certbot issued a key or Home Assistant rewrote .storage/auth. Files created with mode 0600 get an ACL mask of ---, so the inherited entry shows #effective:---. Re-running setfacl -m recomputes the mask; run it from cron before each backup.

  9. Black screen after restarting X: NVIDIA: Failed to initialize the NVIDIA kernel module (kernel upgraded, not rebooted)

    After a kernel and NVIDIA driver upgrade without a reboot, restarting X gave a black screen and "Failed to initialize the NVIDIA kernel module". The running kernel had only the old module loaded. Build the module for the running kernel with DKMS, swap the modules, recreate /dev/dri, then reboot properly.

  10. M5Stack Cardputer-ADV plays a loud constant whine over all audio (ES8311, Arduino M5Unified)

    On a Cardputer-ADV with custom Arduino firmware, every sound (test tone or MP3) had a loud constant whine on top. The speaker ran a mono I2S frame, so BCLK was half what M5Unified's fixed ES8311 clock divider expects. Setting spk_cfg.stereo = true fixed it.

  11. ESP32-S3 without PSRAM: HTTPS fetch returns 0 bytes or connect() fails "connection refused" (TLS out of memory)

    On a PSRAM-less ESP32-S3 (M5Stack Cardputer-ADV) an HTTPS fetch returned 0 bytes and later TLS connects failed with "connection refused". mbedTLS could not get a large enough contiguous heap block. Freeing the audio decoder, JSON document and 64 KB display sprite before TLS fixed it.

  12. ESP32-S3 Arduino Wi-Fi HTTP downloads crawl at about 1 KB/s

    HTTP(S) downloads to SD from an ESP32-S3 Arduino sketch (M5Stack Cardputer-ADV) ran at about 1 KB/s. The cause was Wi-Fi modem power-save. Calling WiFi.setSleep(false) after connecting raised it to about 85 KB/s.

  13. ESPHome device reboots every 15 minutes: "[E][api] No clients; rebooting"

    An ESPHome node with no Home Assistant connected rebooted about every 15 minutes, logging "No clients; rebooting". The api component has its own reboot_timeout (default 15min) that fires when no API client connects. Setting reboot_timeout to 0s under api: stopped the reboots.

  14. CUPS "Unable to locate printer *.local" even though avahi-resolve finds the printer

    CUPS jobs to an ipp://printer.local queue never printed and lpstat showed "Unable to locate printer". Avahi could see the printer, but /etc/nsswitch.conf had no mdns entry, so normal name lookups for .local failed. Adding mdns4_minimal [NOTFOUND=return] to the hosts line fixed it.

  15. systemd user service not started at boot: "Found ordering cycle ... Job deleted to break ordering cycle"

    A systemd user service was inactive after every boot. The journal showed default.target "Found ordering cycle" and deleted its start job. A dependency was WantedBy=default.target and also After=default.target; removing the After= line fixed it.

  16. Chromium "Show in folder" fails with '"." is not a valid folder' (opens Baobab)

    Clicking the folder icon in Chromium's downloads panel gave '"." is not a valid folder'. Baobab (GNOME Disk Usage Analyzer) was the default handler for inode/directory, so xdg-open launched it. Making a file manager the default in ~/.config/mimeapps.list fixed it.

2022

  1. Chromium over ssh -X: Connection rejected because of wrong authentification

    Forwarded X11 worked for xterm but the snap-packaged Chromium failed with "Connection rejected because of wrong authentification". The snap looks for .Xauthority inside its own home; symlinking it there fixes it.

  2. FreeDOS 1.3 under QEMU on Windows 10: networking and mTCP FTP

    FreeDOS 1.3 in QEMU refused to bring up networking ("QEMU network detected… Physical hardware networking is not supported"). Removing one guard line from FDNET.BAT and using a pcnet NIC fixed it; an FTP 530 error was a Windows folder permission.

2021

  1. ESPHome ESP8266 nodes stop joining Wi-Fi: reason='Association Leave'

    ESPHome NodeMCU devices that had been working suddenly could not connect, logging lwIP error -16 and "Disconnected … reason='Association Leave'". The router's DHCP pool was full; giving the nodes static IPs fixed it.

  2. VcXsrv: Authorization required, but no authorization protocol specified

    X11 apps from WSL refused to open on a VcXsrv display with "Authorization required, but no authorization protocol specified". Relaunching VcXsrv with "Disable access control" ticked fixed it.

  3. DHT22 temperature/humidity sensor on a NodeMCU 0.9 with ESPHome and Home Assistant

    Wiring and ESPHome YAML for a DHT22 on an old yellow NodeMCU 0.9 board, feeding Home Assistant. USB uploads failing with "Upload with baud rate 460800 failed" were fixed by disconnecting the sensor while flashing.

2020

  1. Testing SD cards for fake capacity with f3 under WSL2

    How to mount a Windows drive letter (an SD card) in WSL2 with drvfs and run f3write/f3read on it to detect counterfeit, under-capacity cards.

  2. Using a Toshiba FlashAir W-02 Wi-Fi SD card after support ended

    Toshiba/KIOXIA dropped the FlashAir W-02 setup software in January 2020, but the card still works. Join its Wi-Fi network and browse to 192.168.0.1 to see and download the card's files.

  3. Panasonic Lumix GF1 (Japan model) — enable English menus with PTool

    A Japan-market Lumix GF1 can be given all interface languages by patching the official firmware with PTool. The steps that matter are the version increment of 10 and naming the file with a higher version.

  4. HP Officejet Pro 8600 "Scan to Network Folder" always fails on Windows 10

    Setting up Scan to Network Folder on an HP Officejet Pro 8600 always ended in an error, because the printer only speaks SMB1. Enabling the Windows SMB 1.0/CIFS Server feature made it work, at a security cost.

  5. Inkscape: Path → Trace Bitmap does nothing (no preview, no error)

    Trace Bitmap silently did nothing on an image already embedded in an Inkscape 0.92 document. Opening the image fresh in its own window, tracing there, and pasting the path back worked.