11 KiB
11 KiB
Session Resume
Last updated: 2026-05-23. Update this at the end of every session.
Open items (urgency order)
🔴 Critical — security risk or unrecoverable data loss
- Password rotation:
tapirnase— shared across WiFi PSK, LiteLLM root key (sk-tapirnase), D-Link admin, Backrest repo password. Single sniff = broad blast radius. Rotate per-service. Seeservices/homelab-architecture.md§operational rules. - UNAS personal data off-host — ~820 GB Immich library partially covered by
media-backup-planin Backrest (last OK 2026-05-21 but failing/orphaned).video-projects-plannever completed. Backrest is the right vehicle — fix reliability first (see 🟠 Backrest item), then verify JottaCloud coverage. Seeservices/backrest.mdphase 1a. - Nextcloud Borg passphrase → Vaultwarden — passphrase only in container env; CT 105 loss = unrecoverable backup. Move to Vaultwarden. See
services/backrest.mdblind spot #4b.
🟠 High — known broken / verification needed
- Arcane OIDC secret — rotation done 2026-05-22 but Arcane has known OIDC issues. Verify it still authenticates.
- Backrest media-repo —
video-projects-planhas NEVER completed a successful snapshot.media-backup-planlast OK 2026-05-21; failed 2026-05-22 01:30; orphaned restic run in progress since 19:10 (Backrest restarted 21:23, orphaned it). Both plans next scheduled 2026-05-25 02:00/01:30. Monitor for completion; if they fail again, investigate rclone:jottacloud:media auth. - AdGuard split-horizon DNS — internal clients still resolve to public IPs. Rewrite rules audit. See
services/adguard-dns.md. - WAL-G monitoring — silent stall went undetected for 13 h. Add textfile collector + alert for hung archiver. See
services/homelab-architecture.mdroadmap. - Zoraxy audit — CT 108 routes: WS headers, ACME coverage, decommissioned routes, auth consistency. See
services/zoraxy.md.
🟡 Medium — incomplete migrations / cleanup debt
- Docker disk reclaim — ~17 GB reclaimable on CT 104 (10.3 GB unused images, 6.9 GB build cache).
docker system prune -aafter confirming no needed images. Seeinfra/proxmox-state.md§10c. - Dormant stacks audit — ~10 stacks defined but not running (homepage, dozzle, arr-stack, qdrant, etc.). Document: parked vs. abandoned. See
infra/proxmox-state.md§10c. Config-to-git— deployed 2026-05-23. Scripts + daily 03:00 crons on CT 108, CT 102, PVE. Pushes tofkrebs/zoraxy-conf,fkrebs/adguard-conf,fkrebs/pve-conf(force-push). HA (fkrebs/ha-config) still pending — needs Git Pull addon on HAOS.- D-Link hardening — admin UI open to full LAN, SNMP unverified, HTTP-only. Enable trusted-host allowlist, harden SNMP, add TLS. See
services/homelab-architecture.md. - Vaultwarden OIDC SSO — Pocket-ID client created 2026-05-21, auth flow not wired up. Confirmed no OIDC vars in
/opt/stacks/vaultwarden/.envas of 2026-05-22.
🔵 Planned — requires infrastructure or significant effort
- Second NVMe — needed before rpool mirror + Postgres consolidation (CT 113). Blocks several items.
- Infisical secrets migration — CT 112 deployed (
192.168.1.7:8200, LAN-only). Phase 1 done. Remaining:- Phase 2: create project
homelab/ct104, importai/.env(~55 keys) viainfisical import, add agent sidecars to compose stacks - Phase 3: replace hardcoded env vars in Coder
main.tf(committed to Gitea — security risk) - Phase 4: OIDC SSO via Pocket-ID (low priority — convenience)
See
services/secrets-manager.md.
- Phase 2: create project
Consolidate syncstack → MCP gateway— done 2026-05-23.litellm_sync.pyported from syncstack, mounted into gateway. Gateway runsrun_sync()every 15 min (120s startup delay)./etc/cron.d/syncstackdeleted;Dockerfile.syncstack→.DECOMMISSIONED-2026-05-23;/opt/stacks/CLAUDE.mdupdated.- ZFS ARC tuning — raise
zfs_arc_maxfrom 6.2 GiB → 16 GiB once CT 101 memory right-sized. Seeinfra/proxmox-state.md§3. - Document ingestion n8n workflow — Docling MCP deployed; n8n orchestration not built. Nextcloud/Paperless → Docling → embeddings → LobeChat KB. See
services/doc-ingestion.md. - ComfyUI async queue — MCP tool blocks 90–300 s. Job-queue pattern:
generate_image()returns ID;get_job_status()polls. Seeservices/comfyui.md. - Additional MCP servers — community MCPs exist for Gitea, Paperless, Karakeep, Vaultwarden, Proxmox-VE, Audiobookshelf. Evaluate + wire in.
Arcane + Dozzle → CT 109— done 2026-05-23. Headless agents on all 7 Docker hosts.crawl4ai SSE StreamConsumed— resolved 2026-05-22. Errors were from old code in log history; clean restart confirms no errors. Health: ok (7 tools), lobe-sync: 27/27 servers.
Recently completed (2026-05-23, session continued ×2)
- PVE LXC startup order fixed: CT103/104/105/112/113 had no startup order. Set: CT113=4, CT112=6, CT104=7, CT103=8, CT105=9. Full deterministic boot sequence now in place. Also enabled CT109 onboot=1 (was missing).
- KSM enabled on PVE host: kernel samepage merging active + persisted via
ksm-enable.service. Zero-cost memory deduplication across LXC containers. - 5-minute critical watchdog deployed:
homelab-health-quick.timeron nuc;QUICK=1mode checks LXC status + critical containers every 5 min. Auto-starts stopped LXCs, notifies Gotify for HAOS KVM issues. - PVE backlog issues filed:
fkrebs/docs#2 (NFS v3→v4), #3 (ZFS ARC 16 GiB), #4 (hugepages for KVM).
Recently completed (2026-05-23, session continued)
- HAOS KVM OOM root-caused and fixed: karakeep_chrome on CT 104 triggered host OOM → killed HAOS KVM twice. Applied:
shm_size: '512m'to chrome,oom_score_adj=-300on KVM PID, systemd timerprotect-haos-kvm.timer(every 5 min) for persistence. - Arcane + Dozzle migrated to CT 109: servers on CT 109 (:10002, :10001). Headless agents deployed on CT 101, 104, 105, 110, 111, 112, 113. Zoraxy route updated. docs-server also on CT 109 (:13080).
- Homarr + Grafana OIDC wired: clients created via Pocket-ID API (no manual UI steps). Homarr client
63a94e30, Grafana client92d987d5(PKCE). Both SSO-active. - n8n flows tracked in Gitea: repo
fkrebs/n8n-flowswith daily sync cron (CT 104, 03:30). 10 automation ideas filed as Gitea issues. Interim health check bash/systemd on nuc (issue #1 = migrate to n8n). - CT 104 ai repo cleaned:
lobehub/data/untracked from git,.gitignorefixed, litellm-config + mcp-gateway changes committed. - zoraxy-conf repo: arcane proxy update committed and pushed (CT 108).
Recently completed (2026-05-23)
- Config-to-git crons: scripts + daily 03:00 crons deployed on CT 108 (Zoraxy →
zoraxy-conf), CT 102 (AdGuard →adguard-conf), PVE (rsync/etc/pve→pve-conf). Force-push. All three verified with initial push. - Syncstack → MCP gateway:
litellm_sync.py(ported from syncstack.py) mounted into gateway container._litellm_sync_loop()runs every 15 min in gateway's asyncio loop. Cron/etc/cron.d/syncstackdeleted.Dockerfile.syncstackdecommissioned./opt/stacks/CLAUDE.mdupdated.
Recently completed (session continued ×2, 2026-05-22)
- crawl4ai MCP fixed: was returning 404 on
/mcp(streamable-HTTP). Current 0.8.6 image already has MCP over SSE at/mcp/sse. Added SSE transport support tomcp-gateway/server.py: per-request SSE round-trip with auto-initialize handshake;transport: ssein hardcoded SERVERS + config.json. Gateway health now shows crawl4ai ok; lobe-sync shows 27/27 servers. - syncstack cron fixed: missing
cd /opt/stacks/ai &&prefix caused "no configuration file" every 15 min since ~May 18. Fixed. Manual run confirmed 60 models including 5 Claude models; LobeChat recreated.
Recently completed (session continued, 2026-05-22)
- claude-max-bridge
/v1/responsesendpoint: implemented OpenAI Responses API withprevious_response_idchaining. Root cause of "session already in use": Claude CLI leaves session JSONL files in an un-resumable "dequeued" state after each--printrun. Fix: maintain conversation history server-side as formatted text; inject into system prompt for continuations; always use--no-session-persistence. Also fixed: assistant turns in--input-format stream-jsonrequirecontentas array-of-blocks not string (JS error otherwise). Assistant content array format also fixed in_parse_messages/_parse_responses_input. - LiteLLM pass-through for
/v1/responses: addedpass_through_endpointsentry in/opt/stacks/ai/litellm-config/config.yaml→http://claude-max-bridge:8000/v1/responses. LiteLLM appends its token hash to the responseid, soprevious_response_idchaining only works when calling the bridge directly (not through LiteLLM).
Recently completed (this session, 2026-05-22)
- Pocket-ID backup: pre-hook on CT 103 runs
pocket-id export+ scp keys → UNAS staging;services-backup-plansnapshots → jottacloud. Verified. - Stale NFS vaultwarden dir deleted:
/mnt/pve/unas/services/vaultwarden/removed. - Nextcloud CIFS → NFS: crash-loop fixed; CT 105 mp0 migrated from
/mnt/pve/unas_smbto/mnt/pve/unas; CIFS fstab entry removed. - Vaultwarden → local zfs:
/mnt/pve/unas/services/vaultwarden→/opt/stacks/vaultwarden/data; staledb.sqlite3deleted; DB already on CT 113 postgres. - WAL-G fixed:
immich_postgresandlobe-postgresbackups now succeed. Fixed: missing-u postgres, missing data path,set -eabort, deadshared-postgresreference. - ComfyUI
--async-offloadremoved: caused CPU fallback + pure-noise output on GGUF img2img with XPU. - apps/ decommissioned: dead duplicate compose files in
/opt/stacks/apps/renamed.DECOMMISSIONED-2026-05-22. - Docs consolidated: storage.md, volumes.md, homelab-architecture.md, proxmox-state.md, proxmox-memory-audit.md, ct-inventory.md, README.md all reconciled.
Key system state
| Host | IP | Role |
|---|---|---|
| nuc (PVE) | 192.168.1.20 | Proxmox host — SSH gateway to all CTs |
| CT 104 docker | 192.168.1.40 | Main Docker host — AI/ML, media, ~65 containers |
| CT 113 db | 192.168.1.6 | Shared Postgres 17 + WAL-G → Garage S3 (cron 02:00) |
| CT 110 id | 192.168.1.5 | Pocket-ID OIDC IdP |
| CT 103 backrest | 192.168.1.3 | Backrest — jottacloud via rclone; UNAS at /mnt/pve/unas |
| CT 111 dev | 192.168.1.42 | Coder + Gitea |
| CT 108 zoraxy | 192.168.1.4 | Reverse proxy + ACME — always confirm before changes |
Constraints to remember
- Zoraxy (CT 108): always get explicit user confirmation before any config change.
- Infisical (CT 112): LAN-only, no Zoraxy route — must not be internet-exposed.
- CT 104 has a separate agent reconciling compose files — rename decommissioned files (don't just stop), update
/opt/stacks/CLAUDE.md. - ComfyUI container limit: 24 G. Do not raise without measuring host impact.
- Pocket-ID is SQLite-only — no Postgres migration possible.