From 16df051318e0a94e62d1dd9cf1ca91d5a20cb863 Mon Sep 17 00:00:00 2001 From: Haylan Date: Wed, 9 Sep 2026 08:22:31 +0200 Subject: [PATCH] docs(research): add ponytail audit report highlighting over-engineering and complexity issues --- docs/research/ponytail-audit-2026-09-09.md | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/research/ponytail-audit-2026-09-09.md diff --git a/docs/research/ponytail-audit-2026-09-09.md b/docs/research/ponytail-audit-2026-09-09.md new file mode 100644 index 0000000..ba1477c --- /dev/null +++ b/docs/research/ponytail-audit-2026-09-09.md @@ -0,0 +1,64 @@ +# Ponytail audit — repo-wide over-engineering scan, 2026-09-09 + +Whole-tree audit (ponytail-audit skill), not a diff review. The only real +code in this repo is `scripts/update.sh` (253L) and `scripts/switch-model.sh` +(50L), plus `docker-compose.yml` and `.env.example`; the rest is docs. +`switch-model.sh` and the compose comments (ROCm GID workarounds, +`GPU_MAX_HW_QUEUES` rationale, lazytainer label placement) are load-bearing +and lean — left alone. Scope: over-engineering and complexity only; +correctness/security/performance out of scope. Findings ranked biggest cut +first. One-shot report — nothing was applied. + +## Findings + +1. **`delete:` the `downloader-fast` line — it references a service removed + in `5d6a17f` ("feat: remove llama-server-fast") and no longer exists in + `docker-compose.yml`.** Under `set -euo pipefail`, + `docker compose run downloader-fast` errors on the unknown service and + **aborts every `update.sh` run** right after config sync, before omniroute + comes up. Dead code that also breaks the mandatory deploy flow. + *Remove the line.* [scripts/update.sh:235] + +2. **`delete:` the entire gum path — `ensure_gum()` (~27L, L59–85), the + `GUM_VERSION`/`GUM_DIR`/`GUM_BIN` vars (L56–58), the vendored + `scripts/vendor/gum_0.14.5_Linux_x86_64.tar.gz` (4.4MB checked into git), + the download fallback, and the `if [ -n "$gum_bin" ]` branch (L123, + L127–130).** The plain-bash fallback (L131–148) already makes the + *identical* decision (which keys take the new value) whenever gum is + absent; the gum TUI is a speculative nicer prompt on top of a working + path. ~4.4MB in git + arch detection + a `.cache/gum` layer, all to + prettify a rare interactive conflict. *Replacement: nothing — always use + the plain-bash one-screen prompt.* [scripts/update.sh, scripts/vendor/] + +3. **`delete:` stale `llama-server-fast` / `fastModel` references — the fast + model was removed but the docs still describe a two-model Qwen Code + setup.** `.env.example:98` comment still lists it; + `docs/coding-cli-setup/index.md:32` says "2 models: chat + `fastModel`"; + and `docs/coding-cli-setup/qwen-code.md` carries a whole fast-model + section (11 refs: the `fastModel` config block, `LLAMA_FAST_CTX_SIZE` + notes, Qwen3-4B). *Rewrite to single-model.* [docs/coding-cli-setup/ + qwen-code.md, index.md, .env.example:98] + +4. **`shrink:` the 3× repeated `test -f … || curl …` blocks in + `downloader-comfyui` (YAML L85–99, ~15 lines) → a `for` loop over the 3 + model files (~5 lines).** *Low confidence:* the env var names are + non-uniform (`COMFYUI_DIFFUSION_MODEL_FILE` / `TEXT_ENCODER_FILE` / + `VAE_FILE`), so the loop needs a small `case` — marginal win, and it + matches the house "one-off downloader" style. [docker-compose.yml] + +5. **`yagni:` (verify-first) qdrant + neo4j run with no consumer in the + stack yet** — added ahead of the RAG app via the `feat-rag-databases` + merge; nothing writes to them. Two always-on DBs for a feature that + isn't wired. *Confirm the RAG consumer is still on the roadmap before + keeping both; the compose comment already concedes neo4j "can absorb + qdrant's job later."* Low confidence — deliberate tracked decision, and + cheap to leave running. [docker-compose.yml] + +## Net + +`net: -45 lines script/compose (+~15 stale doc lines), -1 dep (gum, 4.4MB +vendored binary) possible.` + +No out-of-scope (correctness/security/performance) findings. #1 is the one +to fix first — it's not just bloat, it's the deploy script halting on every +run.