This commit is contained in:
Connor Johnstone committed 2026-11-02 09:58:48 -05:00
1 parent 6b9b1697f2
commit 631987c62d
11 files changed
+116 -442

No files matched your search

+3 -1
View File
@@ -7,7 +7,7 @@
- [Reasoning effort per model](litellm-extra-body-reasoning.md) — GLM-5.3 defaults to reasoning_effort=max and cannot disable thinking; gpt-oss needs chat_template_kwargs via extra_body
- [Reasoning vs completion tokens](reasoning-tokens-vs-completion-tokens.md) — reasoning comes out of max_tokens, and providers disagree about counting it
- [Open WebUI image generation](owui-image-generation.md) — works via LiteLLM; the default 512x512 size is rejected by every image model
- [Local code autocomplete](local-code-autocomplete.md) — FIM via /v1/completions; check rbw first; never tune for decode; ncmoe 22 + 8 s timeout since Viseron took VRAM
- [Local code autocomplete](local-code-autocomplete.md) — retired 2026-10-29; FIM via /v1/completions, never tune for decode, if it comes back
- [NPU setting clamps memory](npu-setting-clamps-memory.md) — MSI NPU/AI BIOS options cost 17% DRAM bandwidth and the NPU is unusable by llama.cpp anyway.
- [mainframe bad core](mainframe-bad-core.md) — APIC 20 (cpu10, an E-core) throws fatal MCEs; offlined by a unit, RMA candidate.
- [crowdsec bans own devices](crowdsec-bans-own-devices.md) — "no external access" is usually crowdsec banning his own phone; http_path includes the query string
@@ -20,3 +20,5 @@
- [Podman NFS binds go blind](podman-nfs-bind-rprivate-blind.md) — a mount landing after container start leaves containers permanently empty; podman ps looks fine
- [dotbot force deletes live dirs](dotbot-force-deletes-live-dirs.md) — install replaces a real dir at a link target; the Claude memory dir is now one of them
- [Discuss before adding content](discuss-before-adding-content.md) — in his notes, record what he said; suggest extras in chat, add only on agreement
- [Container storage on /home](container-storage-on-home.md) — bind mounts since 2026-10-29; overlay origin xattrs and conmon KillMode traps
- [Caddy 2.11.6 cuts HTTP/1.1 streams at 60 s](caddy-2116-http1-stream-cut.md) — OpenCode ECONNRESET; upgraded to 2.11.7; test --http1.1 vs --http2 first
@@ -0,0 +1,23 @@
---
name: caddy-2116-http1-stream-cut
description: Caddy 2.11.6 cut HTTP/1.1 streamed responses to POSTs at exactly 60 s (OpenCode ECONNRESET); fixed by upgrading to 2.11.7 on 2026-10-29
metadata:
type: reference
---
Caddy 2.11.6 added a default 1-minute idle read timeout that cancels an
HTTP/1.1 response still streaming 60 s after the request body was read
(caddyserver/caddy#8103). Through llm.rcjohnstone.com this ended every LLM
stream longer than a minute: OpenCode (HTTP/1.1) reported `ECONNRESET` and
retried, Caddy logged `aborting with incomplete response ... reading: context
canceled`, and Strata logged `disconnect, cancel=True` at 60 s. HTTP/2 clients
were unaffected. Fixed by recreating connor_caddy_1 on 2.11.7.
Ruled out first, all measured: Caddy `write` and `read_header` timeouts (no
change), LiteLLM (177 s stream fine over HTTP/1.1 direct), Strata, the network
(the cut reproduced from mainframe itself with `curl --http1.1`).
**How to apply:** a stream that dies at exactly 60 s through Caddy is this,
not the model. Test with `curl --http1.1` and `--http2` before anything else.
Caddy floats on `caddy:latest` and podman-stack-update refreshes it weekly, so
a regression can arrive the same way.
@@ -0,0 +1,39 @@
---
name: container-storage-on-home
description: Rootful podman and docker storage live on the SATA LVM via fstab bind mounts since 2026-10-29; how the move was done and the two traps it hit
metadata:
type: project
---
Since 2026-10-29, `/var/lib/containers` and `/var/lib/docker` are bind mounts
of `/home/var-lib/containers` and `/home/var-lib/docker` (fstab,
`x-systemd.requires-mounts-for=/home`). The NVMe is kept for models. Paths and
configs are unchanged, so podman, docker and restic see the same paths.
Scripts and logs from the move: `~/podman-move-2026-10-29/` (cutover2.sh,
fixcopy.sh, mounttest.py).
**Why:** Connor wants the only fast SSD free for LLM weights.
**How to apply — two traps, both hit on the first attempt:**
1. Copied overlay layers do not mount on a different filesystem. Overlay
`index` is on by default in this kernel (`/sys/module/overlay/parameters/index`
= Y). Each container's upper `diff` root carries `trusted.overlay.origin`,
and each layer's `work/index` carries `trusted.overlay.upper`; both are file
handles from the old filesystem. Every `podman start` failed with
`overlayfs: failed to verify upper root origin`. Fix: remove that xattr and
delete `work/index` after the final rsync (fixcopy.sh).
2. `podman start` run from a transient systemd unit with default KillMode puts
conmon in that unit's cgroup, and systemd kills every conmon when the unit
ends. This produced the stale-`running` state from CLAUDE.md item 3a for all
51 containers. Always use `systemd-run -p KillMode=process`.
Also: `mount(8)` from util-linux 2.42 fails any overlay with more than 8
lowerdirs, with no kernel message, even on healthy storage. Test overlay mounts
with mount(2) directly (mounttest.py), and run a control against known-good
layers before trusting a failure. And any podman call between the final rsync
and an rsync verify touches `storage.lock` and `db.sql` and fails the verify.
Jellyfin must start before Home Assistant; both bind udp/1900 and whichever
starts second fails.
@@ -13,7 +13,7 @@ The LiteLLM stack serves two profiles with different permitted providers:
formally banned by his office but should be treated as prohibited until the
security office gives written approval. That restriction is about HOSTED
PRC-origin models (Moonshot/Kimi etc.). A PRC-origin model running locally
(qwen3-coder-30b on llama-swap) is fine for work, since nothing leaves the
(a Qwen model on llama-swap) is fine for work, since nothing leaves the
machine. Connor's ruling, 2026-10-22.
- **Personal** — `anthropic/*`, `openai/*`, and local.
- `zen/*` is blocked for both, see [[zen-tos-hold]].
@@ -1,10 +1,15 @@
---
name: local-code-autocomplete
description: "Local code autocomplete (FIM) works on mainframe; qwen3-coder-30b is the best model for it despite being written off for capacity"
description: "RETIRED 2026-10-29. Local FIM autocomplete on mainframe (minuet + qwen3-coder-30b): what was measured, kept in case it comes back"
metadata:
type: reference
---
Retired 2026-10-29: Connor found the completions not worth having. minuet was
removed from nvim and qwen3-coder-30b from llama-swap, LiteLLM and disk. The
full config is archived in `~/guides/llm/archive/local-tier-2026-10.md`. What
follows is the state before removal.
Measured 2026-09-18 (llmbench suite 6b, `fim`).
**Local code autocomplete is viable on this box.** Route: a raw