Files
serverAppConfigs/serverAppConfigs-docs/Research/Service Research Brief.md
Frank a5fe045b58 docs(vault): one fact, one owner — repair the doubled pages, single-source the facts
Structural repair:
- 13 pages were the same document twice (each exactly 2x its HEAD size),
  a second frontmatter block whose closing fence had been glued onto a body
  line by a frontmatter rewrite that re-read its own output. Un-doubled by
  cutting at the second frontmatter and keeping the copy whose body is a
  superset; the orphan census reports 0 lost tokens against HEAD.
- log.md: one entry per date, bare `## YYYY-MM-DD` headings, newest first —
  66 dated headings merged into 34, titles demoted to bold leads, every
  content line verified present. The file had been descending at the head
  and ascending at the tail.

Ownership moves:
- New `LLM/frank-medium.md` is the locator for the retired Dankserver
  endpoint: era windows quoted from each era page's own banner, no numbers
  restated, and the two unresolved date conflicts recorded instead of
  silently resolved. `frank-archon.md` links to it instead of restating the
  pre-rename window.
- The four Pipeline-Parallelism stubs (frontmatter only, no body) are gone;
  `Multi-Node Runtimes.md` owns runtime construction, launch, mixed-vendor
  verdicts and cross-split spec decode, and the four links that pointed at
  the stubs were repointed at it or at the drafter page.
- Authentik's three stub pages fold into `Authentik.md`, with the process
  detail and the outpost reference split out so the parent stays under the
  length hint.

Verified corrections (host census + live probe, 2026-10-19):
- The MXFP4 checkpoint two pages called the "on-disk rollback" is gone:
  /home/dank/models/ holds StillDeadcode, rad and tpl.jinja. Stated once, on
  the era page that owns that payload; the swap page now links to it.
- frank-medium-radiance-mxfp4: the 4.24/7 accept rate belongs to the DFlash2
  arm measured on the FP8 target, not to the MXFP4 era; the 3-family soak run
  census is kept once (155 requests) instead of twice (~120 and 155).
- Fleet shapes re-confirmed against the live endpoints before touching any
  page: 3x200000 fp8 KV, 2x200704, 2x262144.

Index rows are regenerated, not hand-carved. Net -1,849 vault lines.
2026-10-19 05:00:43 -07:00

4.4 KiB

type, description, tags, timestamp
type description tags timestamp
reference Consolidated upstream research on the fleet's LLM runtimes, dated to when it was gathered.
research
2026-09-03

Service Research Brief

Consolidated research from the frank-zealot research subagents (2026-08-14) plus the pi agent knowledge base. This is the source material behind the per-service docs pages.

Method

Four parallel researchers fetched primary sources: official Docker docs, GitHub READMEs, container source (ComfyUI cli_args.py, OpenWebUI env.py), the Gluetun wiki, and Grafana/Loki/Prometheus docs. The first parallel run failed with 503 Loading model (llama.cpp on Dankserver reloading); the retry completed for three of four, and the infra brief completed solo.

Key Findings

Dankserver stack

  • RomM — ghcr.io/rommapp/romm:latest; FastAPI+React; SQLite data; needs ROMM_USERNAME/ROMM_PASSWORD/ROMM_SECRET_KEY at first boot; volumes /romm/library + /romm/resources.
  • Copyparty — ghcr.io/9001/copyparty:latest; single-file Python server; port 3923; per-folder .cpy auth; --resumable for large uploads.
  • Calibre-Web — lscr.io/linuxserver/calibre-web:latest (matches the live container); PUID=1000 PGID=1000 TZ=Etc/UTC; /config + /books; external binary paths unrar/kepubify/ebook-convert; library path must be set in admin UI; DB path wrong ⇒ login succeeds but library empty.
  • Calibre — host tool, not a container; Calibre-Web points at its library directory.

Dankclaw stack

  • SearXNG — ghcr.io/searxng/searxng:latest; network_mode: service:gluetun (KB Pattern 2); Valkey cache replaces Redis; settings.yml keys: server.secret_key, base_url, limiter: true, valkey.url, outgoing.*, search.formats: [html, json]; JSON API rate-limited (4/h untrusted) — trusted-group the agent IP.
  • Gluetun — qmcgaw/gluetun:latest; NET_ADMIN + /dev/net/tun; port publishing moves to gluetun; VPN_SERVICE_PROVIDER, VPN_TYPE, WIREGUARD_PRIVATE_KEY; DNS: prefer dot upstreams, never DNS_UPSTREAM_PLAIN_ADDRESSES to a LAN address (leaks); verify with podman exec gluetun curl -s ifconfig.me.
  • ComfyUI — CPU backend required: ROCm wheels have no gfx1151 (Strix Halo) kernels; --cpu flag confirmed in cli_args.py ("To use the CPU for everything (slow)"); do NOT use CUDA images; models/input/output persisted.
  • OpenWebUI — ghcr.io/open-webui/open-webui:main (NOT :cuda on AMD); port 8080 in container; OpenAI-compatible endpoint to host.containers.internal:7770/v1; /health.
  • Hermes — Nous Research self-improving agent; MIT; official image docker.io/nousresearch/hermes-agent:latest (verified pullable 2026-08-14); TUI + Telegram/Discord/etc.; points at local llama.cpp :7770/v1; data volume for skills/memory.
  • Gitea — migrate live /opt/gitea/podman-compose.yml (postgres:16-alpine + gitea + caddy); never change SECRET_KEY/INTERNAL_TOKEN after migration; keep bind mounts /opt/gitea/data/*; DB password must move to .env.

Infrastructure

  • Caddy — caddy:2-alpine; directive is basicauth (renamed from basic_auth in v2.8+); hash with caddy hash-password; homepage via root * /srv/http + file_server; admin off recommended.
  • Grafana/Prometheus — grafana/grafana:latest + prom/prometheus:latest; prometheus.yml scrapes node-exporters on both hosts (192.168.0.143/235:9100) + Gitea/Grafana/Loki metrics; Grafana datasource provisioning apiVersion: 1 with access: proxy.
  • Node-Exporter — prom/node-exporter:latest; network_mode: host, pid: host, read-only /proc /sys / mounts.
  • Logs — Promtail is EOL 2026-03-02 ⇒ use Grafana Alloy (grafana/alloy:latest, River config) as the shipper; Loki grafana/loki:latest single-binary mode, TSDB schema v13, filesystem storage, compactor retention 30d; health /ready.

Open Items

  • VPN provider choice for Gluetun (.env on Dankclaw).
  • Calibre library path (user-entered later).
  • Caddy bcrypt hashes at deploy (caddy hash-password).
  • B2 bucket/app key for Backblaze backups (deferred).
  • Public DNS for *.franksdank.cloud domains (pending).

See Also