18 KiB
Concepts — Topic Index
Atomic knowledge articles extracted from Claude Code sessions. Each article covers one distinct concept, pattern, or technique.
| Article | Summary | Source | Updated |
|---|---|---|---|
| wiki/concepts/librechat-openid-auth | LibreChat v0.8.4 OpenID/OAuth auth internals — ALLOW_SOCIAL_REGISTRATION, openidId requirement, state mismatch diagnosis | daily/2026-04-15.md | 2026-04-15 |
| wiki/concepts/msal-vanilla-js-pkce | MSAL.js v5 UMD script-tag PKCE for SPAs without bundlers — Azure portal platform type, Node.js JWKS validation | daily/2026-04-15.md | 2026-04-15 |
| wiki/concepts/shell-static-deploy-patterns | Shell deploy scripts for static frontends — cp -r vs glob, Apache reload requirement, setup vs deploy distinction | daily/2026-04-15.md | 2026-04-15 |
| wiki/concepts/fish-shell-path-config | Fish shell PATH configuration — /usr/local/bin not in default PATH, fish_add_path, SSH aliases as Fish functions | daily/2026-04-15.md | 2026-04-15 |
| wiki/concepts/microsoft-graph-api-mailbox-migration | Graph API app-only (client credentials) flow for reading shared mailboxes — Mail.Read.All, EML download, pagination | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/mailcow-maildir-import | Mailcow Maildir volume path, rsync import, chown 5000:5000, mandatory doveadm index — without indexing IMAP shows nothing | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/fastapi-mongodb-role-migration | Adding UserRole enum + MongoDB schema validator migration + idempotent seed in FastAPI lifespan | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/monorepo-deploy-script-pitfall | deploy.sh checking backend/.git / frontend/.git silently skips git pull in monorepos — fix: single git pull at root | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/nextjs-basepath-auth-redirects | Next.js basePath requires all auth redirect strings to include the prefix — middleware and API routes don't auto-prepend | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/python-service-deployment-dotenv | Python service deploy checklist — venv pip install after git pull, .env.example → .env for new config.py requirements | daily/2026-04-16.md | 2026-04-16 |
| wiki/concepts/openai-max-completion-tokens | OpenAI newer models reject max_tokens — must use max_completion_tokens in both raw API calls and internal wrappers |
daily/2026-04-17.md | 2026-04-17 |
| wiki/concepts/fish-abbr-patterns | Fish abbr expands visibly (git/docker/uv), alias for transparent replacements (ls/cat); forgit conflict resolution |
daily/2026-04-17.md | 2026-04-17 |
| wiki/concepts/bitbucket-mcp-atlassian | Bitbucket MCP via aashari/mcp-server-atlassian-bitbucket; GitHub MCP is GitHub-only; Atlassian API tokens replace App Passwords | daily/2026-04-17.md | 2026-04-17 |
| wiki/concepts/proxmox-mcp-server | canvrno/ProxmoxMCP is the best community Proxmox MCP server; install to global Claude Code config for any-project access | daily/2026-04-18.md | 2026-04-18 |
| wiki/concepts/proxmox-vm-management-methods | Proxmox VM creation approaches — SSH+qm (ad-hoc), REST API, Terraform, Ansible, MCP; when to use each | daily/2026-04-18.md | 2026-04-18 |
| wiki/concepts/home-assistant-proxmox-install | HAOS on Proxmox via community-scripts one-liner — Default Settings, VM specs, why VM over LXC | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/homepage-proxmox-widget-quirks | Homepage v0.10.9 proxmox widget quirks — type field required, pnpm start, duplicate env vars, SSL, ARP; replaced by Dashy | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/lxc-arp-cache-api-failures | Stale ARP cache entries in LXC cause silent API failures — ip neigh flush dev eth0 is the fix | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/nodejs-ssl-system-trust-store | Node.js ignores Linux system trust store — NODE_TLS_REJECT_UNAUTHORIZED=0 or NODE_EXTRA_CA_CERTS must be in systemd unit | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/tailscale-dns-homelab | Tailscale Global Nameserver + Override local DNS makes internal domains resolve on mobile via AdGuard | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/remote-server-dotfiles-bootstrap | Full-stack remote dotfiles bootstrap via sshpass r() helper — Fish, Starship, Neovim, CLI tools, fnm, conf.d pattern | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/homarr-proxmox-integration | Homarr Proxmox integration cert trust — PVE root CA in trusted-certificates/, Termix SSH REST API, docker-socket-proxy | daily/2026-04-19.md | 2026-04-19 |
| wiki/concepts/export-endpoint-filter-pattern | PDF/CSV exports must receive variant_ids from frontend — frontend-only selection is invisible to backend renderers | daily/2026-04-20.md | 2026-04-20 |
| wiki/concepts/ollama-lxc-ram-requirements | Ollama in LXC loads Intel oneAPI toolkit (~1.8 GB overhead) even on CPU-only inference — minimum 6 GB RAM for 7B model | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/beszel-monitoring-deployment | Beszel hub + agent deployment across Proxmox host and LXC containers — Ed25519 key auth, port assignment, systemd setup | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/adguard-dns-rewrites-homelab | AdGuard DNS rewrites for *.ai-impress.com wildcard → NPM IP; single entry covers all internal services | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/prometheus-joules-watts-gotcha | rate(joules_total) already returns watts — multiplying by 1000 causes W→kW display bug in Grafana dashboards | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/old-gpu-sysfs-metrics | AMD GCN 1.0 (Oland) and Intel HD 630 don't expose gpu_busy_percent via sysfs — temperatures still available via hwmon | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/chartjs-time-axis-adapter | Chart.js type:time axis requires chartjs-adapter-date-fns registered — without it chart silently fails to render | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/uptime-kuma-socketio-management | Uptime Kuma has no REST API — uses Socket.IO; management done via SQLite directly | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/proxmox-container-502-misdiagnosis | 502 Bad Gateway ≠ dead container — often nginx misconfiguration inside CT; always confirm visually before destructive actions | daily/2026-04-21.md | 2026-04-21 |
| wiki/concepts/git-includeif-per-remote | Git includeIf hasconfig:remote.*.url auto-applies correct email per remote — GitHub vs Bitbucket/work without per-repo config | daily/2026-04-23.md | 2026-04-23 |
| wiki/concepts/dns-youtube-ad-blocking | DNS-based ad blocking cannot block YouTube ads — Google serves ads and content from the same domains; uBlock Origin / ReVanced required | daily/2026-04-23.md | 2026-04-23 |
| wiki/concepts/adguard-blocklist-setup | AdGuard Home blocklist upgrade: default 1 list → 5 lists (AdAway, HaGeZi Multi Pro++, OISD Big, HaGeZi TIF); ~2.2M domains | daily/2026-04-23.md | 2026-04-23 |
| wiki/concepts/claude-code-schedule-skill-account-type | /schedule skill requires claude.ai login account — API-only users need launchd/cron as fallback | daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/memory-compiler-mac-migration | Migrating memory-compiler between Mac users — PROJECTS_ROOT, Python version, Fisher conf.d, cc-collector hyphen bug | daily/2026-04-24.md | 2026-04-25 |
| wiki/concepts/immich-lxc-ram-oom | Immich in LXC needs 8 GB RAM — 6 GB causes OOM; OOMPolicy=continue + MemoryMax=7G for auto-recovery | daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/systemd-memory-oom-policy | systemd MemoryMax + OOMPolicy=continue + RestartSec pattern for auto-recovery of memory-constrained services | daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/proxmox-lxc-autostart | LXC containers don't start after PVE reboot unless "Start at boot" (--onboot 1) is explicitly enabled | daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/fish-fisher-conf-d-conflict | Fisher plugin manager conflict when conf.d/ files are manually copied — delete and run fisher update to reinstall cleanly | daily/2026-04-22.md | 2026-04-22 |
| wiki/concepts/macos-python-version-hooks | macOS system /usr/bin/python3 = 3.9; Path|None syntax requires 3.10+; Claude Code hooks must use /opt/homebrew/bin/python3 | daily/2026-04-22.md | 2026-04-22 |
| wiki/concepts/preflight-record-pattern | preflight(estimate) → AI call → record(actual) — the 3-step AI cost-tracking pattern with budget enforcement | ai-cost-tracker | 2026-04-27 |
| wiki/concepts/lazy-user-mirror | User mirror created on first AI event, not on user creation — minimal integration surface, source project stays owner | ai-cost-tracker | 2026-04-27 |
| wiki/concepts/sync-with-outbox | Sync HTTP + SQLite outbox: record() never blocks the AI pipeline; background flusher retries up to 10x | ai-cost-tracker | 2026-04-27 |
| wiki/concepts/litellm-pricing-source | LiteLLM model_prices JSON as auto-updating LLM price source — why scraping provider sites is fragile | ai-cost-tracker | 2026-04-27 |
| wiki/concepts/authentik-homelab-tradeoffs | Authentik v2026.2.2 migration failure 0056, ~500MB RAM overhead, NPM auth_request removal — when to keep vs remove |
daily/2026-04-27.md | 2026-04-27 |
| wiki/concepts/icloud-git-sync-conflict | iCloud creates main 2 files in .git/refs/heads/ on sync conflict — causes badRefName; fix and prevention |
daily/2026-04-27.md | 2026-04-27 |
| wiki/concepts/homarr-sqlite-integration-cleanup | Homarr upgrade removes widget kinds but leaves stale SQLite rows — crashes integrations page with TypeError | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/docker-lxc-dns-configuration | Docker containers in LXC/Proxmox use router DNS by default — need explicit AdGuard DNS in compose for internal domains | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/mac-address-randomization-dhcp | Apple MAC randomization creates multiple DHCP leases per device — exhausts pool, causes IP conflicts; disable per-network | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/prowlarr-flaresolverr-limitation | Prowlarr bypasses FlareSolverr for some indexers (RuTracker); VPN alternatives: SOCKS5, WireGuard in LXC, router VPN | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/bash-and-or-short-circuit | Bash A && B || C is not if/else — if B fails, C runs even when A was true; deploy scripts must use if/fi |
daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/python-iso-z-suffix | Python < 3.11 fromisoformat() rejects Z suffix from JS toISOString() — replace Z with +00:00 before parsing |
daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/gemini-conversation-cost-scaling | Gemini bills full accumulated conversation history per turn — cost grows quadratically; backfill scripts must account for this | daily/2026-04-24.md | 2026-04-24 |
| wiki/concepts/asyncio-contextvar-task-boundary | Python ContextVar is NOT propagated through asyncio.wait_for / create_task — pass user_id as explicit parameter | daily/2026-04-27.md | 2026-04-27 | | wiki/concepts/pydantic-v2-alias-id-gotcha | Pydantic v2 Field(alias="_id") serializes JSON key as "_id" not "id" — frontend .id is undefined; fix with _from_doc() helper | daily/2026-04-27.md | 2026-04-27 | | wiki/concepts/php-display-errors-json-leak | PHP display_errors=1 prepends HTML warnings to JSON — "Unexpected token '<'" is the diagnostic signal; ini_set order matters | daily/2026-04-27.md | 2026-04-27 |
| wiki/concepts/jellyfin-tmdb-thetvdb-plugin | TMDb plugin silently fails to load images when API date format changes — switch to TheTVDB; Jellyfin S01E01 naming; Prowlarr search-only role | daily/2026-04-28.md | 2026-04-28 | | wiki/concepts/azure-ad-yaml-allowlist-pattern | AuthN via Azure AD (MSAL PKCE), AuthZ via local YAML allowlist — when to use, SPA redirect URI type, Docker volume for config dir, PyYAML requirement | daily/2026-04-28.md | 2026-04-28 | | wiki/concepts/zustand-async-hydration | Zustand persist hydrates localStorage asynchronously — components must gate API calls behind hasHydrated or token will be null on first render | daily/2026-04-28.md | 2026-04-28 | | wiki/concepts/pydantic-model-dict-interface | Pydantic model passed where dict expected — .get() returns None silently instead of raising; use isinstance check or model_dump() at boundary | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/localstorage-key-migration-rebrand | localStorage key migration after renaming storage keys in a rebrand — session loss, Zustand persist name, migration script pattern | daily/2026-04-28.md | 2026-04-28 |
| wiki/concepts/poetry-docker-version-mismatch | Poetry 2.x poetry install fails with readme in pyproject.toml without --no-root; poetry.lock version mismatch between dev and Dockerfile causes silent failures | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/pydantic-default-factory-type-alias | PyObjectId = Annotated[str, ...] used as default_factory=PyObjectId calls str() → "" → DuplicateKeyError on second MongoDB insert; fix: lambda: str(ObjectId()) | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/security-middleware-json-key-regex | Bare XSS regex on raw JSON body matches field names (transcript, subscription) not just values — fix: parse first, validate values only, or use word boundaries | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/multitenant-fail-open-authz | get_accessible_project_ids() returning None instead of [] means fail-open (all projects visible); use 404 not 403 for cross-tenant access to avoid resource existence disclosure | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/gemini-embedding-api-channel | gemini-embedding-001 works with AI Studio key; text-embedding-004 and text-multilingual-embedding-002 require Vertex AI credentials — not available via standard Gemini API key | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/native-track-blob-url | Browsers block data:text/vtt URIs for <track> elements; must use URL.createObjectURL(new Blob([vttString])) and revoke in effect destructor | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/claude-code-plugin-marketplace | /plugin marketplace add <user>/<repo> registers GitHub marketplace; then /plugin install <name>@<marketplace-name>; /plugin add without marketplace doesn't work for GitHub repos | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/docker-compose-cpu-limits-env | cpus: '4.0' fails at docker compose up on a 2-CPU server — fix with per-environment compose override files | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/etag-optimistic-locking | ETag/If-Match pattern for concurrent edit protection — backend hash, frontend state (not ref), 412 conflict handling | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/double-submit-cookie-csrf | CSRF for stateless JWT APIs: csrf_token cookie + X-CSRF-Token header; every login path must set both cookies | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/time-sleep-blocks-asyncio | time.sleep() inside async FastAPI handlers blocks the entire event loop — replace with asyncio.sleep() or run_in_executor | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/apache-proxypass-include-files-ignored | ProxyPass in Apache Include fragment files is silently ignored on optical-dev — always add ProxyPass directly to the main vhost file | daily/2026-04-29.md | 2026-04-29 | | wiki/concepts/cookie-domain-migration-auth-loop | COOKIE_DOMAIN mismatch after domain migration causes silent auth failure — browser drops cookie, manifests as infinite /login redirect loop; Vite bundle must be rebuilt after env var changes | daily/2026-04-29.md | 2026-04-29 |
| wiki/concepts/mongodb-enum-deserialization | MongoDB stores Python Enum fields as plain strings — .value raises AttributeError; hasattr guard or Pydantic mode="before" validator at boundary | daily/2026-04-29.md | 2026-04-30 |
| wiki/concepts/websocket-react-token-guard | React WebSocket useEffect must guard if (!token) return before opening socket, and include token in dep array so socket reconnects after login | daily/2026-04-29.md | 2026-04-30 |
| wiki/concepts/docker-builder-prune-safe | docker builder prune removes only build cache — safe on live servers; running containers, images, and named volumes are untouched | daily/2026-04-29.md | 2026-04-30 |
| wiki/concepts/pydub-ffmpeg-silent-dependency | pydub installs via pip but requires system ffmpeg at runtime — crashes silently in Docker; fix: apt install ffmpeg or switch to lameenc | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/lameenc-bytearray-gcs-upload | lameenc.encode() returns bytearray not bytes — GCS upload_from_string() raises TypeError whose message looks like corrupt data; fix: bytes() cast | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/apache-mod-alias-proxy-priority | Apache mod_alias hooks earlier than mod_proxy — when physical directory exists, Alias wins and ProxyPass for paths under that prefix never fires | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/faster-whisper-startup-memory | faster_whisper loads the full model into RAM at container startup regardless of task routing — memory limits must reflect model size, not routing config | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/celery-redis-queue-flush-on-deterministic-error | Deterministic Celery errors leave task IDs in Redis queue causing retry loops — resetting MongoDB status alone is not enough; must flush Redis + re-enqueue | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/cline-lm-studio-openai-compatible | Cline's native LM Studio provider causes silent retry loop — use OpenAI Compatible provider (/v1/) instead; load model at 32k+ context | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/celery-queue-worker-specialization | Named Celery queues: only the container consuming that queue processes tasks — fix bugs in specialised workers by rebuilding THAT container | daily/2026-04-30.md | 2026-04-30 |
| wiki/concepts/gcs-resumable-upload-pattern | Browser → backend creates GCS Resumable Session URI → browser uploads chunks directly to GCS, bypassing LB/Apache; 8 MB chunks, 308=continue, resume via Range header | daily/2026-04-30.md | 2026-04-30 |