Current state rewritten to session-end: secrets-broker LIVE (secret CLI + 25-item backfill + rm/warn), stonehenge-park /park service repo stood up (vor-plan+vor-ui), dots-tts extracted to tts-stack; NEXT PROJECT = wgtunnel (WireGuard over a plane's wifi). Two detail files added; 2 oldest T&A entries archived. Handoff written to /tmp/infra-ops-handoff.md for the post-clear pickup.
139 KiB
Archival memory — eshpfi-management
Entries moved out of persistent-memory.md to keep the active file scannable. Read this when researching historical decisions or revisiting past foot-guns.
Recent decisions (archived)
-
[2026-05-12]corviduo-dev (Worldtree-team dev VM, 10.250.50.152, CT 106 on pfi-pve) added toservers/inventory. Treat like SF client hosts: PFI hosts + provides emergency-ops backstop; Worldtree team owns OS config + deploys + backup decisions. Archived 2026-05-27. -
[2026-05-12]Worldtree:latesttag drift bug — fixed by health-gated:latestadvance in vh/worldtree's deploy workflow (architect commit8ef3801): only tag:latestAFTER the new container's/healthprobe passes. Build-on-host stacks here don't have this problem because the playbook always builds the SHA-tagged image from agit reset --hard <ref>checkout. Archived 2026-05-27. -
[2026-05-12]asset-engine stack scaffolded LAN-direct athttp://10.250.50.70:8200. Initially included Traefik labels for public hostname; user pulled them out (internal tool, no public TLS surface needed). Pattern: internal tools default LAN-direct; Traefik wiring only when external/TLS required. Archived 2026-05-27. -
[2026-05-12]asset-engine catalog gainslifecycle: { stack, vram_gb, gpu_device_id }per irv-ml1 service for the orchestrator feature. SSH keypair scaffolded atana-docker:/opt/docker/conf/asset-engine/ssh/for asset-engine container → irv-ml1 orchestration via dedicated ed25519 key. Archived 2026-05-27. -
[2026-05-13]pull-hf-repo.yamlis the canonical HF-fetch playbook on ana-ml2. Supports--var repo_type=model|dataset|space. Replaces ad-hochuggingface_hub.snapshot_downloadcalls. Archived 2026-05-27. -
[2026-05-13]Selene-1-Mini-Llama-3.1-8B added to llama-swap as judge model. mradermacheri1-Q6_Kimatrix quant (~6.5GB). AtlaAI reward/eval model — temp 0.01, ctx 32K, q8_0 KV cache. New JUDGE / EVAL MODELS section instacks/llama-swap/conf/config.yaml. Archived 2026-05-27. -
[2026-05-13]vllm-qwen3→vllmstack rename. Addedvllm-rewardservice (Skywork-Reward-V2-Llama-3.1-8B-AWQ classifier). Three vLLM services share GPU 1 (embed 0.20, rerank 0.20, reward 0.30 utilization; 30% headroom). All use--runner pooling; classification drives via model'sarchitectures: [LlamaForSequenceClassification]in config.json, NOT--task classify(deprecated in vLLM 0.19.1). Archived 2026-05-27. -
[2026-05-13]/tend-docs first pass deletions:stacks/infinity/removed (retired by vllm). Archiveddocs/asset-engine/design-brief.md→docs/archive/asset-engine/with archival header. Fixedpfi-pveVM list to fullqm listenumeration. Dropped stale weak-password section frompfi-postgres(rotation done 2026-04-23). Archived 2026-05-27. -
[2026-05-14]althing-chamber stack scaffolded: chamber + forseti. Internal LAN-only at port 7881 (chamber default 7878 collides with task-board). Two-service compose, shared SQLite bind-mount, build-on-host pattern via vh/althing's gitea-workflow. Forseti is the canonical dev for this stack (galdrabok is on a different project). Archived 2026-05-31. -
[2026-05-16]althing-chamber Phase 2: addedalthing-agent-runneras third compose service (worldtree-driver agent dispatcher). All three althing services use the same image;command:selects entrypoint. Safe to enable preemptively (sleeps when no driver=worldtree handles declared). Archived 2026-05-31. -
[2026-05-17]Phase 3.1 cross-process streaming uses Valkey 8 alpine as a sibling compose service instacks/althing-chamber/, redis-protocol pub/sub for high-volumemsg_delta/msg_thinking/msg_start/msg_completeevent kinds. DB bridge keepsmsg_curated+floor_grant(structured / canonical). Two-channel architecture, no overlap. chamber + agent-runnerdepends_on: valkey: service_healthy. Archived 2026-05-31. -
[2026-05-17]Worldtree admin workflow shift (per vh): infra-ops gets its own permanent admin-tier key (61419c92, stored atana-docker:/opt/docker/conf/.secrets/worldtree-infra-ops-admin). Future admin ops route through this key, not the bootstrap admin via docker-as-root. Archived 2026-05-31. -
[2026-05-17]Worldtree env-var addition checklist: anytime introducingos.environ.get("FOO")in worldtree code, update BOTH.env.exampleANDcompose.yaml's&worldtree-envanchor in the same PR. Same Z_AI_API_KEY-shape footgun bitBIFROST_CLIENT_ALLOWED_HOSTS(#170) until worldtree-dev added the passthrough line in08f02b2. Archived 2026-05-31. -
[2026-05-18]Volva systemd install complete after three-stage debug. Final unit at/etc/systemd/system/volva.serviceruns asUser=lkravenwithProtectHome=read-only+ReadWritePaths=/home/lkraven/.althing /home/lkraven/.codexcarve-outs for state writes.VOLVA_ALTHING_CLI=/home/lkraven/ .local/bin/althing-cli+ALTHING_HANDLE=volvaboth pinned in env.sh. Archived 2026-05-31. -
[2026-05-19]Worldtree CD disk-hygiene strategy: watermark gate (env-tunable threshold + window, fail-loud on still-low post-prune)- eager post-deploy prune (only after
:latestadvance succeeds, usesdocker image prune -a --filter "until=24h"which respects in-use semantic — protects pinned + personal images automatically). Combined: demo VM holds ~24h of deploy history instead of unbounded accumulation. Shipped in vh/Worldtree PR #184 (306cd61+613dac2+bd91df5). Archived 2026-05-31.
- eager post-deploy prune (only after
-
[2026-05-19]Skaldsong CD shape: shape (1) of three operator options — container + Gitea registry + pull-restart, matching Worldtree's pattern. Target host ana-docker (NOT nh3-dev where skaldsong-dev runs for iteration). SHA-pin only for now; health-gated:latestadvance is a follow-up once/healthexercises Worldtree- Kokoro reachability. Archived 2026-05-31.
-
[2026-05-19]Skaldsong prod (ana-docker) switched from demo Worldtree (:8080) to personal (:8081). Sameuser_id=skaldsongas the nh3-dev hand-launch key — shared Heimdall agent slot (skaldsong:wizard-v2), differentkey_ids for independent rotation. Demo Worldtree stays for isolation; personal becomes the multi-consumer dev iteration instance. Archived 2026-05-31. -
[2026-05-19]mead-hall Bifrost v0.3 end-to-end smoke green. Closed task #32 (althing thread01KRV1M2KW6N6HBEXGTH72QXCA). Wire layer (handshake + binding + dispatch) + data-flow (per-dispatch JWT claims →ctx.session_idpopulated → real session-scoped data) + agent-loop (LLM reads + quotes back) all proven. Resolves the "stalled mid-Worldtree" state from the 2026-05-17 snapshot. Archived 2026-05-31. -
[2026-05-25]v0.25.3 lofn tuning:temperature 0.6 → 1.0+repetition_penalty 1.0 → 1.15on default+fast profiles. Heretic-abliterated qwen3.6 was locking into degenerate attractors at the model's thinking-mode floor (0.6). Pattern: abliterated/uncensored Qwen variants need higher temp + non-trivial rep-penalty than base, NOT the model-card's documented floors. Archived 2026-05-31. -
[2026-05-25]Worldtree #205 v0.25.2 ships/app/config/as bind-mount + root-then-drop entrypoint shim (gosu). Operators get persistent per-instance config without container-rebuild. Same bind-mount pattern hit twice subsequently in v0.27.0 (selene) and v0.29.9 (echo) — bind-mount shadows image-baked defaults, so every new required key surfaces as a crash-loop on existing deployments. The v0.29.12 canonical example files close this loop. Archived 2026-05-31. -
[2026-05-26]Worldtree v0.27.0/v0.27.1 fixes Tier 3 GET visibility.available_agents()helper was over-applied toGET /agents/<id>, masking ALL Tier 3 agents regardless of row state. Bug only visible as "agent not found" via GET; storage was fine (silent-2xx PATCHes had persisted correctly). v0.27.1 added fail-fast hardening for the startup pre-resolve fragility class. Archived 2026-05-31. -
[2026-05-26]Skaldsong v0.30.7 defensive 409→PATCH fallback. v0.30.6's GET-then-define-or-patch path crash-looped against pre-v0.27.0 Worldtree's GET-visibility bug (GET 404 phantom → define 409 conflict). v0.30.7 catches the 409 and falls through to PATCH (which silently 2xx'd on the pre-fix Worldtree). Archived 2026-05-31. -
[2026-05-27]Worldtree v0.29.x landed full saga→echo refactor + config-validator hardening (v0.29.10 create_provider family-before-regex; v0.29.11 collect-then-raise echo startup validators; v0.29.12 ships providers.yaml.example/defaults.yaml.example canonical configs; v0.29.13 reasoning_content extraction + catalog family lookup). Operator-asked, worldtree-dev-shipped, CI-deployed. Archived 2026-06-01. -
[2026-05-27]artemis-31b-v1i added to llama-swap + worldtree personal. BeaverAI Gemma 4 31B Q6_K (~28.6GB), 128K ctx,--reasoning-format deepseek(gemma format unsupported in deployed llama.cpp). Worldtree catalogfamily: gemmaso GemmaProvider routes reasoning tokens. Archived 2026-06-01. -
[2026-05-27]Skaldsong streaming TTS v0.32.0→v0.32.2: chunked-batch SSE (one Kokoro POST per paragraph); defensive event_stream catch-all; NDJSON parsing for Kokoro /dev/captioned_speech multi-line responses. Archived 2026-06-01. -
[2026-05-31]Dia2 deployed as two fixed-model instances (dia2-2b:8200,dia2-1b:8202) fromlocal/dia:v2, retiring legacy Dia 1.6B; catalogdiaentry removed → dia2-2b + dia2-1b (breaking for asset-engine). Rationale: the devnen wrapper is single-model and IGNORES the OpenAImodelfield (verified on its live OpenAPI), so the only way to offer both Dia2 models as real per-request asset-engine choices is one fixed endpoint per model.3139e81(deploy),db15638(catalog swap). Archived 2026-06-03. -
[2026-05-31]Both dia2 catalog entries route to the wrapper's richer/ttsendpoint (not/v1/audio/speech) to expose the full control surface (cfg_scale/temperature/top_p/cfg_filter_top_k/voice_mode/clone); all defaults sourced from the wrapper'sCustomTTSRequestPydantic blessed values. Voice default isvoice_mode: clone+clone_reference_filename: Abigail.wavso a stable (non-random-gender) voice is the out-of-box behavior.55602b7,5c47843. Archived 2026-06-03. -
[2026-05-31]Zonos REST adapter (stacks/zonos/adapter/,local/zonos-api) — thin OpenAI-ish/v1/audio/speechFastAPI in front of the Gradio-only Zonos SDK; JSON-envelope{audio, audio_format, seed}(Zonos is the fleet's first seedable TTS). Port 8203 (moved off 8201 — collided with csm). Built; NOT deployed (stack down for VRAM). Also fixed the upstream image's missing CMD (71df6f7).81efa8d. Archived 2026-06-03. -
[2026-05-31]Catalog schema regenerated: addedCatalogLifecycle+reproducibility.seed_field(b7b2130). Resolves the stale-schema hand-off; catalog now validates clean. (asset_enginecatalog.pyPydantic already supported both — schema file was just behind.) Archived 2026-06-03. -
[2026-05-31]TTS bench expanded withstacks/{dia,zonos,csm}(666f7f3dia+zonos,a4b8c2acsm). The bench already had Fish S2-Pro / Chatterbox-Turbo / IndexTTS-2 / CosyVoice3 / Kokoro / VibeVoice / Qwen3-TTS / Kyutai. (csm since removed 2026-06-01.) Archived 2026-06-03. -
[2026-05-31]Remote browser/iPad/Vision-Pro driver seat for the agent-fleet zellij sessionClaudestood up on nh3-dev (ttyd behind Caddy, network-gated). Out of this repo — full architecture + the HTTP2/OSC52/Safari-auth gotchas in auto-memoryreference_ttyd_fleet_seat. Archived 2026-06-03. -
[2026-05-30]esh-docker-vm NFS boot-ordering fix:playbooks/fix-esh-nfs-boot-ordering.yaml(c0458d9, +53157b1drop-in filename-collision fix) adds_netdev,nofailto the four 10.0.50.50 NFS mounts + a dockerAfter=remote-fs.targetdrop-in — resolves paperlessExited(255)on reboot. traefik also gainedrestart: unless-stopped. Full incident → auto-memoryincident_esh_docker_nfs_boot_race. Archived 2026-06-03. -
[2026-06-01]Fish cloning VERIFIED competent (ECAPA-TDNN) — retracting the earlier "weak cloner" call. Isolated test: Imogen-referenced clone ~0.79 cosine to the realImogen.wavvs ~0.10 for the no-reference default; transcript condition (correct 0.787 / bogus 0.778 / empty 0.738) barely moves identity (affects pronunciation, not timbre). Root cause of "Imogen sounds nothing like British" = the"undefined"select bug feeding Fish its default voice, NOT Fish. So the entire Fish-Imogen saga was the undefined bug; no Fish-side fix needed. (Methodology lessons → Tried and abandoned.) Archived 2026-06-04. -
[2026-06-01]CSM (Sesame csm-1b) torn down entirely — removed from catalog,stacks/csm/,playbooks/deploy-csm.yaml, and host (c54ab13). Two reasons: (1) deep-research verdict — the acclaimed Maya/Miles demo is a fine-tuned, larger variant Sesame never open-sourced; the open 1B base ships no usable voices, can't generate text, English-only, no real-time streaming, absent from leaderboards, dominated by Kokoro/Dia2/Fish/IndexTTS. (2) The upstream image is rotted (see Tried and abandoned). asset-engine re-synced (306aae9). Archived 2026-06-04. -
[2026-06-01]Chatterbox catalog v1→v2 (93cedd6) — re-point to the devnen wrapper's/tts(was the thin OpenAI/v1/audio/speechexposing none of the emotion knobs → poor output). Defaultexaggeration: 0.5per Resemble's README ("works well for most"); the server SHIPS demo-tuned 1.3 which over-acts — deliberately NOT adopted. 28 predefined voices via/get_predefined_voices(default Emily.wav). Corrected seedable false→true. Archived 2026-06-04. -
[2026-06-01]Fish-S2 catalog v1→v6 (f3c260e..38d9e3b) — was a blank 2-field form; now exposes the full fish-speech ServeTTSRequest surface- a 32-voice
reference_id"Voice" dropdown (STATIC list — Fish has no /voices API).reference_id-by-name works ONLY when each voice is staged as areferences/<name>/dir with<name>.wav+<name>.lab— was silently a no-op until that layout fix on 2026-06-01 (see the two-root-causes entry above); the inline-path-as-filesystem-pathreferencesshape 500s (see Tried and abandoned). Corrected vram 4→24 GB, cold_start 8→240s, seedable false→true. Added 3 consenting British-female VCTK voices (Imogen=p225/Eleanor=p228/Beatrice=p229). Archived 2026-06-04.
- a 32-voice
-
[2026-06-01]blendable: falsecatalog flag — DEFERRED, pending asset-engine-dev honoring it in the form template. Clone-voice selects (chatterbox/fish/dia2) must render as plain dropdowns, not the Kokoro blend widget (blending reference clones is nonsensical). I ship the catalog flag + schema field once they read it. Tracked: althing msg01KT2K2SY9N7AY69R9V0B4RXSWto asset-engine-dev. Archived 2026-06-04. -
[2026-06-01]Fish reference_id empty-dir fix shipped (c5bbb90) — Populatedreferences/<name>/<name>.wav+.labfor all 32 voices; playbook gained normalize-step + A/B smoke gate. glados got a real transcript (ASR'd via Parakeet): the Portal "Welcome to test chamber 4" lines. Archived 2026-06-11. -
[2026-06-02]Chatterbox → main TTS engine; build customchatterbox-faststreaming container. Workload = single-stream interactive. GPU placement: 3090 (device 0) if it fits else A6000 (device 1). Cutover: parallel catalog entry, burn in beside livechatterbox, then flip. Streaming = adaptive buffer-ratchet chunking (native frame-streaming abandoned). Since extracted to its own repovh/chatterbox-fast(auto-memoryreference_chatterbox_fast_repo). Archived 2026-06-11. -
[2026-06-02]Sentence-splitting loses quality (operator-corrected). Claimed naive sentence-level streaming has "zero quality loss" — WRONG. The T3 AR backbone conditions prosody on the WHOLE text; splitting loses cross-sentence prosodic context even though voice timbre stays (reference-conditioned). No artifacts ≠ no quality loss. Hence adaptive-chunk design (maximize context per chunk subject to latency budget), not fixed per-sentence splits. Archived 2026-06-11. -
[2026-06-03]Declined worldtree v0.30.4 staging deploy — that's worldtree-team's CI/CD lane (a developerstaging/vX.Y.Zgit-tag promote), not infra-ops. They self-corrected to the same conclusion independently. Archived 2026-06-13. -
[2026-06-03]R14 scope = (a) provision-only. infra-ops provides box + CUDA env + engines + weights + NFS; brokkr/dev wiresarms.py+ runs — keeps infra-ops OFF the VIVAE-processing path (VIVAE = Variably Intense Vocalizations of Affect/Emotion, CHARTER §4 highest-liability; operator authorized R&D-eval-only, quarantined). Box = irv-ml1 (A6000 free; ana-ml2 GPU-saturated). Per-engine venvs (divergent torch stacks); A6000 =cuda:0NATIVE (≠ docker=1). Archived 2026-06-13. -
[2026-06-03]yt-voice-clipper push-to-deploy via gitea webhook (operator-directed, after 6 manual rebuilds in ~40 min). Webhook (not poll) — gitea CAN reach the WG IP per the operator. The proxy env + Homepage labels live in the host-specific override (untracked → survive the auto-deploy'sgit reset --hard), NOT yt-voice-clipper-dev's image. Runbookd4f180d. Archived 2026-06-13. -
[2026-06-03]yt-voice-clipper bot-gate fix = route yt-dlp through NH3 residential egress, NOT cookies/PO-token. YouTube hard-flags the Irvine colo IP (LOGIN_REQUIRED on a public video even with no cookies). Cookies + the bgutil PO-token + deno JS-runtime all loaded fine — the gate is pure IP reputation. Operator chose proxy-via-nh3-dev → durable dante proxy → proven. The egress proxy is a reusable fleet lever for any datacenter-IP-gated service. Archived 2026-06-13. -
[2026-06-04]brokkruser (no-sudo) on irv-ml1; R14/R15/R16 substrate moved to /home/brokkr. Persistent box services there need SYSTEM systemd units (see Tried). Archived 2026-06-14. -
[2026-06-04]ollama upgraded 0.9.0→0.30.4 on irv-ml1 (Ministral-3 is a Dec-2025 model the old engine refused); A6000 pinned by UUID not index (native fastest-first ≠ nvidia-smi PCI). Archived 2026-06-14. -
[2026-06-04]Worldtree demo/pinned/personal deploys are ALL CI/CD, not infra-ops — a "deploy vX.Y.Z" request to infra-ops is MISROUTED → point them back to their pipeline. (d8d776c, auto-memoryreference_worldtree_deploys_cicd) Archived 2026-06-14. -
[2026-06-04]infra-ops NOPASSWD-sudo identity commissioned, scoped to PFI boxes (+esh-docker-vm by operator override) — so infra-ops completes DevOps end-to-end vs handing the operator sudo steps. Dedicated key, sudo log_output, key-gated. (8c32a05, auto-memoryreference_infra_ops_sudo_identity) Archived 2026-06-14. -
[2026-06-04]phi4 ships the CANONICAL/official Phi-4 chat template, NOT Ollama's (Ollama's omits the system<|end|>). Applied an Ollama-matching override then reverted — ship correct, not the benchmark quirk. (90e08f0→27eb537; "headgun" lesson in Tried.) Archived 2026-06-14. -
[2026-06-04]phi4-mini FP8 on ana-ml2 vLLM is the nevermore summarizer; granite-4-small retired from llama-swap. 50K ctx + FP8 KV. (40a374b) [superseded by the 2026-06-05 granite-4.1-8b decision] Archived 2026-06-14. -
[2026-06-08]volva.service + heid.service removed from nh3-dev — vestigial systemd daemons; Heid/Volva re-architected from Python pollers to Claude Code session orchestrators (heid12aa5a9); volva.service was crash-looping 203/EXEC. (6e2f80e) Archived 2026-06-16. -
[2026-06-05]Granite 4.1 8B FP8 replaced phi4-mini as the production summarizer. Beat phi4 on precision in brokkr's R15 P03. Staying FP8, not Q4/AWQ — primary workload is high-concurrency, where FP8 scales ~linearly (2010 tok/s @ C=32). vLLMvllm-granite:8004 GPU 1, official IBM compressed-tensors FP8. (Then on Ada; box has since gone Blackwell.) (34a43a0, auto-memoryreference_ana_ml2_vllm_granite) Archived 2026-06-16. -
[2026-06-05]Langfuse v3 on ana-docker (:3001) as the gateway trace UI; LiteLLMsuccess_callback:[langfuse]live. Pretty traces + tok/s dashboard. NOT a prerequisite (spend_logs already capture tokens+latency). (9171e6a) Archived 2026-06-16. -
[2026-06-05]Ollama BANNED fleet-wide (operator directive) — never stand one up; tear down any found; serve via llama-swap or vLLM. (auto-memoryfeedback_avoid_ollama) Archived 2026-06-16. -
[2026-06-05]ComfyUI / FLUX.2 work split to~/development/comfy-dev(dedicated repo + agent). eshpfi keeps thecomfyui/arbostack compose; comfy-dev owns the model/workflow knowledge. (auto-memoryreference_irv_ml1_ampere_quant) Archived 2026-06-16. -
[2026-06-05]Worldtree summarizer config refresh DEFERRED to Worldtree #254 (granite-4.1-8b is the structured-output profile, ON HOLD, no live consumer). Bind-mount CONFIGS (providers.yaml, vh-owned) ARE infra-ops's to apply directly — only the app/image DEPLOY is CICD; the.envis deploy-owned. (auto-memoryreference_worldtree_deploys_cicd) Archived 2026-06-16. -
[2026-06-13]Arbo prod bearer auth turned OFF — WireGuard is the access boundary (operator decision; reverses ADR-0001's "closed the open-auth hole"). ENGINE_TOKEN must be ABSENT, not empty (empty-string still gates) — removed from BOTH the host.envAND the composeenvironment:injection line. Original token backed up atirv-ml1:/opt/docker/compose/arbo/.env.pre-auth-off.bak; comfy-dev updated their ADR-0001. Tracking:db97899+playbooks/arbo-disable-engine-token.yaml. Archived 2026-06-16. -
[2026-06-13]Storetank image-models archive DECOMMISSIONED; arbo is the single live ComfyUI model tree (502 G). Curated/storetank/image-models/comfy(was 919 G, the native/opt/ComfyUI/modelssymlink target) → killed everything superseded by arbo's current gen (Hunyuan, WAN2.1, FLUX.1, Chroma, SD3.5, orphaned umt5+llava ≈ 739 G) + migrated the keepers (gen-agnostic utilities + the SDXL/Pony stack, 177 G) into/storetank/arbo/models(same-fs move, skip-existing protects prod). Tracking:docs/storetank-image-models-archive.md+docs/arbo-comfyui-model-catalog.md(1902425→5007ec1). Archived 2026-06-16. -
[2026-06-13]GRANITE_KEY provisioned to comfy-dev's nh3-dev dev env at~/.arbo_granite_key(0600) for the hero gen+judge script — verbatim copy of the prodarbo-prompt-enhancevkey (now extended to reach BOTHgranite-4.1-8bANDqwen3.5-9b-fp8); nothing minted. The vkey README's "granite-only" wording was stale → corrected (f32c6dd). Archived 2026-06-16. -
[2026-06-13]ana-ml2 upgraded Ada → dual RTX PRO 6000 Blackwell Max-Q (96 GB each, cc 12.0 / sm_120; was dual RTX 6000 Ada 48 GB / cc 8.9 — confirmed live vianvidia-smi). Unlocks NVFP4 (FP4 tensor cores) and doubles VRAM headroom. CLAUDE.md GPU-spec doc-fix LANDED355a240(operator). Tracking:19a07b9/1e2a3a1("Blackwell 96GB"). Archived 2026-06-16. -
[2026-06-13]NVFP4-W4A4 is infeasible for Granite — FP8 stays the Granite-on-Blackwell format. W4A4 collapses at 30k context, proven producer-independent (modelopt AND llm-compressor both clean-NONE from the same BF16 base + wikitext-2k calib). No 4-bit wins both axes: W4A4 = quality collapse; W4A16-NVFP4/AWQ = weight-only dequant → bf16 (no FP4-core speedup). 30B retired. (auto-memoryreference_nvfp4_w4a4_granite_infeasible) Archived 2026-06-16. -
[2026-06-13]Qwen3.5-9B VL (FP8) deployed on ana-ml2 GPU 1 —qwen35-vlstack, :8007, gateway aliasqwen3.5-9b-fp8. Pinned nightly digest, not:latest: the stable release quantizes the VL vision tower under--quantization fp8→ garbage vision (LM fine); the nightly correctly excludes it. Re-pin + drop the pin once that exclusion lands stable. (2e3dcc2) Archived 2026-06-16. -
[2026-06-13]comfyui 325 G model tree migrated worktank →/storetank/arbo(worktank 97% → 26%).arbois the consuming app; overlay bind-mount viaCOMFYUI_MODELS_DIR. (38186be) (See the 2026-06-13 archive-decommission decision above — this tree later absorbed the storetank-archive keepers, reaching 502 G.) Archived 2026-06-16. -
[2026-06-13]GPU layout settled on the Blackwell box. GPU 0 held free for large-model hot-loads (llama-swap pinned,edf0f91); GPU 1 steady-tenant — granite 131k ctx, qwen 65k, embed/rerank/reward trio, ~3.5 GB free (1e2a3a1,19a07b9; trio re-floored for 96 GB, 20×-parallel-stable). embed/rerank left at floor — long docs chunked BEFORE embedding. max-model-len is a ceiling not a reservation. Archived 2026-06-16. -
[2026-06-13]Prefix caching pinned explicit on granite + qwen — benched ~6.5× faster TTFT on a shared ~4.5k-token summarizer template; soft/evictable, neutral when prefixes don't repeat. vLLM v1 defaults it ON (granite) but the qwen nightly defaults OFF — pin both. (a9a2be7) Archived 2026-06-16. -
[2026-06-13]granite-4.1-8b listed as the always-available summarizer/classifier + a shared all-agents key minted (operator-directed). Global~/.claude/CLAUDE.mdGlobal-tools entry; key aliasall-agents-local, scoped to the FREE local models only (granite + qwen-vision + embed/rerank, NOT paid GLM), internal-gateway-only, rotatable. (auto-memoryreference_litellm_gateway) Archived 2026-06-16. -
[2026-06-13]arbo engine + frontend stack stood up (ADR-0001) — irv-ml1 co-located inference engine (ee57e69), python-based healthcheck (slim image, no curl/wget,bdb3312), frontend ro-mounted from the checkout (922e8ad, ADR-0001 D2). Archived 2026-06-16. -
[2026-06-11]GLM thinking inverted at the LiteLLM gateway (operator call):glm-5.1defaults thinking-OFF;glm-5.1-reasoning= same z.ai upstream, thinking ON. Mechanism:litellm_params.extra_body:{thinking:{type:disabled}}—drop_paramsstrips a top-levelthinking/reasoning_effortbut forwardsextra_bodyverbatim to z.ai. Shared-gateway change. (95b2701, auto-memoryreference_litellm_gateway) Archived 2026-06-16. -
[2026-06-11]pi coding agent installed on nh3-dev as a GLM 5.1 harness —@earendil-works/pi-coding-agentvia bun (npm's global prefix is/usr→ needs sudo, bun avoids it). Config~/.pi/agent/models.json, launcher~/.local/bin/glm. Archived 2026-06-16. -
[2026-06-11]z.ai web-tools (regin) = z.ai hosted MCP path, NOT the/paas/v4Tool API. WORKS: MCP streamable-HTTP athttps://api.z.ai/api/mcp/{web_search_prime,web_reader}/mcp,Authorization: Bearer $ZAI_API_KEY(the MCP key, distinct fromZ_AI_API_KEYthe LLM key). Reference impl = Worldtree's Leif agent. Archived 2026-06-16. -
[2026-06-10]Mac Pro migration framed: workstation-only (M2 Ultra ARM, racked NH3 on-subnet); sidecars stay Linux.migration-plan.md. (See in-flight.) Archived 2026-06-16. -
[2026-06-10]Worldtree deployed-config propagation is infra-ops's OWNED lane (operator ruling). worldtree-dev pings the config delta pre-merge; infra-ops syncsconfig/*.yamlfrom MERGED canonical to the/opt/worldtree*/configbind-mounts on demo+personal. The v0.33.8 9-HOUR demo outage (amodel_roles.yamlstartup-dep that never reached the VM) is the failure mode this prevents. providers.yaml stays hand-tuned. corviduo emergency-ops =ssh vh@10.250.50.152, docker no-sudo. (auto-memoryreference_worldtree_deploys_cicd,reference_corviduo_dev_emergency_ops) Archived 2026-06-16. -
[2026-06-09]LiteLLM scoped virtual keys issued to consumers (operator-authorized):brokkr-smithy(all-proxy-models),arbo-prompt-enhance(comfy-dev — granite, later extended to qwen-vision). Mint via/key/generate(mastersk-corvid), scope-restricted + rotatable, value → 600 file never the bus. (auto-memoryreference_litellm_gateway) Archived 2026-06-16. -
[2026-06-14]ana-ml2 GPU-1 vision upgraded: Qwen3.5-9B → Qwen3.6-35B-A3B (official FP8), served under its TRUE name only.qwen36-vlreplacesqwen35-vlon :8007 (a0fed13). The staleqwen3.5-9b-fp8name is KILLED at vLLM AND the litellm gateway (404/400) — a model is NEVER aliased under a prior model's name (silent substitution = downstream footgun; operator directive). Consumer comfy-dev/arbo migrated; arbo vkeys → all-proxy-models; sharedall-agents-localkey repointed qwen3.5-9b-fp8 → qwen3.6-35b-a3b. GPU-1 rebalanced for the ~34 GB FP8 weights (granite 0.35→0.24/64K; embed/rerank 0.05→0.03, reclaimed ~4 GB util-waste). Validated: vision correct, 20-concurrent = no OOM. (auto-memoryfeedback_no_false_model_aliases) Archived 2026-06-18. -
[2026-06-14]NVFP4 was the lighter fit (~21 GB) but is BLOCKED on vLLM — FP8 is the working vision path.nvidia/Qwen3.6-35B-A3B-NVFP4won't load: the ModelOpt-NVFP4-MoE loader errors on expert/lm_head scale keys across 0.19.1 (w2_input_scale) AND 0.22.0 (lm_head.input_scale, vllm #44081) — a pattern across modelopt NVFP4 MoEs. Revisit NVFP4 (frees ~13 GB on GPU 1) once fixed; the 21 GB checkpoint stays cached on ana-ml2. (SUPERSEDED 2026-06-16 — it loads on vLLM 0.23.0; qwen36 swapped to NVFP4. See the top of this section.) Archived 2026-06-18. -
[2026-06-14]llama-swap qwen3.5-9b GPU-0 pin DROPPED; GPU 0 reserved for a creative-writing model (pick DEFERRED by operator). Deep-research (this session) on big-fast-uncensored creative for a 96 GB Blackwell: GLM-Steam-106B-A12B (already in the llama-swap config — balanced default) vs TheDrummer/Behemoth-X-123B-v2 (prose-tier, tops UGI writing+willingness) vs XORTRON-123B (max willingness, weak prose); GGUF-on-llama-swap is the serving path. Tracking: this session + llama-swap config (GLM-Steam present,untracked by operator choice). Archived 2026-06-18. -
[2026-06-14]R16 splice-pivot yield probe executed (infra-ops ran the irv-ml1 inference for brokkr; brokkr owns design + analysis). See Current state. Tracking: althing thread01KV010WGS…,gen_yield_probe.pyinirv-ml1:~/r16-vmoan-harness. Archived 2026-06-18. -
[2026-06-14]R16 vmoan inline-generation arc CLOSED — v1 at default decode (rep1.2/temp0.8) is the final Chatterbox-tag inline artifact. Operator's ear rejected every alternative: v2/v3 windowing (omission vs coherence-loss), v4 multi-tag (cohesion held but lost to capacity-competition), emergent inline-token modulation (degenerates, not modulates), and the gen-time decode-polish sweep (soft tamers cut the NVV itself — same omission family as v2; p0 baseline beat p1). All adapters v1–v4 +tokenizer.json.v3bakpreserved onirv-ml1:~/r16-vmoan-harness. Likely-next direction (deferred, NOT formalized): generate→bin→splice + one-shot-clone NVV pipeline routing around the inline-coherence wall. Tracking: brokkr R16 journal + althing thread01KV010WGSSMPWRNCPAGSPK15Y. Archived 2026-06-18. -
[2026-06-14]Arbo deploy pipeline fixed, hardened, and version-controlled. Prod rebuilt v0.11.1 → v0.11.6 backend; the webhook machinery (arbo-deploy.sh+arbo-webhook.py, :9009 HMAC listener) is now repo-tracked atstacks/arbo/(was host-only = recoverability foot-gun). Deploy reaches gitea via the INTERNAL route (10.250.50.70:222) and restarts the engine ONLY oncatalog/changes (graphs/frontend per-request; warn onsrc/|Dockerfileonly — pyproject/uv.lock churn every commit). Operator kept arbo stack ownership in eshpfi (not migrated to comfy-dev's repo). Secret +.envstay host-only. Tracking:6d66bc2,6e58e57,stacks/arbo/READMEQ5. Archived 2026-06-18. -
[2026-06-15]qwen36 thinking-split at the gateway (operator) — baseqwen3.6-35b-a3b= thinking-OFF default (the vision judge needs it),…-a3b-thinking= opt-in reasoning. One hybrid checkpoint +--reasoning-parser qwen3; mirrors the glm-5.1 split. The judge's enable_thinking=false is what makes the NVFP4 swap transparent. (6de0844) Archived 2026-06-19. -
[2026-06-15]arbo engine rebuilt v0.11.6 → v0.11.22 from main; catalog re-applied (v0.11.23) — curated/workflowsfooter live. src/ schema changes (Model/Lora.summary, Workflow.blurb/keywords + the /workflows endpoint) need a MANUAL image rebuild (the webhook warns-only onsrc//Dockerfile). Built from/worktank/arbo/repo, bumpedARBO_IMAGEin the host .env, recreated + verified healthy (auto-rollback armed, unneeded). comfy-dev's v0.11.20 catalog push had first crash-looped prod (old baked schemaextra=forbidvs new git-mounted catalog fields → ValidationError); they reverted the catalog, so rebuild-from-main loaded clean, then they re-applied (v0.11.23). comfyui is a SEPARATE compose project — the rebuild didn't touch it. Archived 2026-06-19. -
[2026-06-15]althing-core refreshed to v0.14.1 box-wide on nh3-dev (forseti + heid both routed it; central-sequenced per DevOps-delegation sinceuv tool install --forceswaps the shared binary all handles use). Fixes the monitor non-truncating-lock bug sostop-monitor/--stopreliably recovers orphans. The editable install (uv tool install --force --editable .) covers every nh3-dev handle;--versiontrued up 0.14.0→0.14.1; verified--stopworks against a real orphan. Archived 2026-06-19. -
[2026-06-15]ratatoskr Tier-3 affect live smoke GREEN (consumer-confirmed). Brokered/minted consumer_id="ratatoskr" Heimdall HS256 key on personal Worldtree (the key IS BOTH the create-session Bearer AND ratatoskr's JWT verifier secret — plain utf-8 string, NOT base64/raw); injected ENV-ONLY to~/.config/ratatoskr/provider.env(mode 600) on nh3-dev; added10.100.10.50:8390to personal'sBIFROST_CLIENT_ALLOWED_HOSTS; drove define→session (handshake 200)→turn→affect.emit (200, snapshot persisted). Worldtree signs Bifrost with the caller's raw Bearer verbatim. Drive commands + claims contract in althing thread01KV4ZYSE3…. Archived 2026-06-19. -
[2026-06-15]Dense Qwen3-VL-32B-NVFP4 A/B'd as arbo's anatomy hero-judge vs the qwen3.6-35b-a3b MoE → dense LOST, pilot torn down, GPU 0 reclaimed. Dense NVFP4 loads clean on vLLM where the MoE NVFP4 doesn't (no expert-scale keys); ~44 tok/s on Blackwell GPU 0; vision tower stays high-precision. But comfy-dev's ground-truth A/B: MoE wins (faster + dual-use as general LLM + slight fine-detail edge), and the subtle-proportion tier is below ALL VLs. Don't re-propose a dense-VL judge swap. (auto-memoryproject-qwen3vl-dense-pilot) Archived 2026-06-19. -
[2026-06-15]MastMed prototype containerized + exposed publicly via cloudflared. Self-contained static SPA (bun→caddy multi-stage build), basic-auth gated (operator's gating call), ana-docker:8089, cloudflared quick tunnel. See in-flight for the ephemeral-URL caveat + named-tunnel upgrade path. Archived 2026-06-19. -
[2026-06-15]infra-ops bootstrapped onto corviduo-dev (operator-directed) — infra-ops now has SSH + NOPASSWD sudo there, OVERRIDING the fleet bootstrap script's deliberate partner-box exclusion (explicit host arg). corviduo config edits no longer needvh+ a sudo password. (auto-memoryreference_corviduo_dev_emergency_ops) Archived 2026-06-19. -
[2026-06-15]R18 clip+caption placement = ana-ml2 (operator: "ana-docker… ana-ml2 unless irv-ml1 has room"; irv-ml1 lacked free VRAM for the 30B-A3B captioner). Models staged + stub deployed; see in-flight + the hard real-voice gate. Archived 2026-06-19. -
[2026-06-14]LiteLLM infra-ops admin key provisioned (operator) — resolves the LiteLLM half of the credential-migration directive; use it for ALL gateway ops (NOTsk-corvid). Value at~/.config/litellm/infra-ops-key(mode 600); gateway reachable directly from nh3-dev at 10.250.50.70:4000. (auto-memoryreference_litellm_infra_ops_key) Archived 2026-06-19. -
[2026-06-16]litellmstrip_empty_toolspre-call hook shipped (d1bea13) — an emptytools:[]500s vLLM ("tools must not be an empty array"); a globallitellm_settings.callbacksCustomLogger pops it (+ orphanedtool_choice) before forwarding, so it covers EVERY vLLM model, not one.drop_paramsonly drops unsupported PARAMS, not empty VALUES. Mounts beside config.yaml (litellm resolves callbacks relative to the config dir). Verified live across granite/mistral/stream. (stacks/litellm/conf/strip_empty_tools.py) Archived 2026-06-20. -
[2026-06-16]single-filegateway-chat.htmlplayground shipped (984ca3d,tools/) — zero-dep browser chat straight to the gateway (:4000, CORS open), system-prompt box, streaming SSE, rendersreasoning_content, NEVER sendstools. Built because the LiteLLM admin-UI playground can't test vLLM-backed models (see Tried-and-abandoned). Serve on-request viapython3 -m http.server -d tools. Archived 2026-06-20. -
[2026-06-16]claude-bot granted ADMIN on vh/arbo (operator) — arbo CI/CD gitea ops now route through the service account, not the operator's personalvh(the credential-migration directive). Operator added claude-bot as Administrator collaborator; claude-bot self-serves via itsgitea-password(basic-auth = FULL perms; its stored token is package-write-only, can't change repo settings). (auto-memoryreference_claude_bot_gitea_creds) Archived 2026-06-20. -
[2026-06-16]ratatoskr Tier-3 MEMORY plane wired + live-smoke driven. The missing server-side step was the per-PORTBIFROST_CLIENT_ALLOWED_HOSTSallowlist (:8391; consumer key reused, plane-agnostic — my earlier "reachability is the whole wiring" was incomplete). Persist + dispatch proven end-to-end against personal v0.35.3; cross-session recall-INJECTION root-caused to thescore_breakdownshape seam and handed to worldtree-dev (#295 recall leg open). Driving a real memory-call needs a consumer agent defined WITH amemoryblock (ctx.memory_config≠None), notagent_self_enabled. (tracking:c99aa49+ auto-memoryreference_bifrost_plane_wiring) — [2026-06-16] FLIPPED: thescore_breakdown-shape root-cause was disproven; real cause = cold-recallscope_filteradds anagent_selfaxis → ratatoskr's conjunctive INV-005 match drops the{end_user}-only chunks → 0 hits. Now Worldtree #297. (auto-memoryproject_worldtree_295_recall_rootcause) Archived 2026-06-20. -
[2026-06-16]infra-ops = the DURABLE admin path on corviduo-dev (operator granted standing admin; extends the 2026-06-15 bootstrap) — added aHost corviduo-dev → User infra-ops~/.ssh/configalias + repointedservers/corviduo-dev/ssh-targettoinfra-ops@;ssh corviduo-dev/elway corviduo-devnow land as infra-ops w/ NOPASSWD (vh = explicit-only human path). elway resolves via ssh-config, NOT the ssh-target file. (tracking:c99aa49+ auto-memoryreference_corviduo_dev_emergency_ops) Archived 2026-06-20. -
[2026-06-16]demo + personalcharactermodel flipped qwen3.6-35-a3b → mistral-small-4 (operator) — inmodel_roles.yamlthe FIRSTcatalog_idin a role'sbinds:is the default; reordered mistral-first (qwen retained in the switch-allowlist, non-destructive), applied via the PIN-SAFE api recreate (deriveWORLDTREE_IMAGEfrom the matrix sibling — never a barecompose up, which falls to the crash-blocking stale:latest), verified a fresh character agent resolves model=mistral-small-4. (auto-memoryreference_corviduo_dev_emergency_ops) Archived 2026-06-20. -
[2026-06-16]NVFP4 ModelOpt MoE now LOADS on vLLM 0.23.0 — SUPERSEDES the 2026-06-14 "blocked" finding (#44081 fixed). Confirmed the cachednvidia/Qwen3.6-35B-A3B-NVFP4loads clean + generates on 0.23.0; swapped prod qwen36 FP8→NVFP4 (~13 GB reclaimed on GPU 1, fp16 KV). Validated by brokkr (speed: faster single-stream, ≥parity batched) + comfy-dev (vision anatomy-judge A/B: PASS). One W4A4 tell: minor multi-step chained-reasoning slip — doesn't bite the vision judge. Mistral's NVFP4 is a SEPARATE compressed-tensors path (day-0), distinct from the ModelOpt one. (auto-memoryreference_nvfp4_moe_loads_on_vllm_023) Archived 2026-06-20. -
[2026-06-16]Mistral Small 4 = the GPU-0 tenant (operator) — fills the slot the deferred creative-writing pick held, and supersedes llama-swap (now down). NVFP4 119B MoE, pinned vLLM v0.22.0 for working vision (0.23.0 breaks it), 256K context. Operator's creative-writing model; abliteration planned → then it becomes the uncensored-creative model the persona substrate needs. Reasoning viareasoning_effort(BINARY none|high — no medium). (tracking:c77a9aa/9a49963) Archived 2026-06-20. -
[2026-06-16]Selene judge restored on vLLM FP8, NOT NVFP4 — W4A4 is too aggressive for a precision judge validated at Q6_K; FP8 ≥ Q6_K fidelity, and Selene is text-only Llama-3.1 so dynamic--quantization fp8has no vision tower to noise.selene-1-mini-8bon GPU 1 :8011. Worldtree's Domari role repointed to it. (c985ede) Archived 2026-06-20. -
[2026-06-16]GPU-1 buffer put to work: selene 0.13→0.17 + qwen36 0.32→0.34 — the two KV-bound generative models that gained Worldtree consumers; granite + the pooling models under-use their util, so growing THEM is wasted. (e124a2f) Archived 2026-06-20. -
[2026-06-16]claude-bot Gitea service account stood up; corviduo-ORG conversion TABLED (operator). claude-bot is the credential-migration foundation. The proper fix for scoped agent package-write is converting vh (a USER) → acorviduoORG — blast radius assessed (org creation = free; arbo-first migration = cheap, no registry images; full fleet = incremental, ~8 active vh images / 50 repos) — but tabled for later. Registry-push deferred until then. (auto-memoryproject_migrate_infra_access_to_claude_credentials) Archived 2026-06-20. -
[2026-06-16]arbo engine builds → comfy-dev OWNERSHIP (operator approved) + Gitea Actions runner stood up on irv-ml1 (host-executor as lkraven). infra-ops keeps box-level escalation (runner, package:write PAT pending corviduo-org, webhook). See the runner entry in Current state. (tracking: this snapshot + arbo thread01KV70AB2B4B…) Archived 2026-06-20. -
[2026-06-16]Worldtree persona substrate migrated qwen→Mistral via capability- named profiles (v0.35.8→v0.35.10; demo + personal). PRE-SYNC-FIRST is now the standing pattern for any providers.yaml/profile change: sync config to the bind-mount BEFORE the deploy image-swap restart, so new agents + new config land together (the v0.35.9 merge-first attempt race'd → 14 crash-loops). (tracking: worldtree thread01KV6X0M…) Archived 2026-06-20. -
[2026-06-19]litellm task-aliases:classifier→granite-4.1-8b,summarizer-large→gen/qwopus (summarizer→granite already existed). Also added then REMOVEDgen-nt/gen-reasoning-nt(redundant with the globalstrip_empty_toolshook). (ef45f6d,2e5ab72,75bd4c3) Archived 2026-06-21. -
[2026-06-19]gateway-chat: model-smoking web chat → PERSISTENT container./v1/modelsauto-discovery + image-upload;stacks/gateway-chat/(nginx:alpine, ana-docker:8091, homepage tile). (4c40b9f,740bcae) Archived 2026-06-21. -
[2026-06-19]pi on nh3-dev wired togen—~/.pi/agent/models.json+ agenlauncher mirroringglm. Local box config, not a repo artifact. (untracked by operator choice) Archived 2026-06-21. -
[2026-06-19]genmodel → Qwopus3.5-122B-A10B (vision-intact NVFP4), full 256K @ fp8. ana-ml2 GPU 0, served-nameqwen3.5-122-a10b. STABLE vLLM + fp8 KV reaches 262144 — nightly+turboquant-4bit-KV was UNNECESSARY. 92.7 tok/s warm. (20e796c,5b06514) Archived 2026-06-21. -
[2026-06-19]TP=2 across the two ana-ml2 Blackwells REJECTED —PIX(PCIe, NO NVLink) → all-reduce-bound → SLOWER. One-model-per-card is optimal; PP=2 only if a >96 GB model is ever wanted. (untracked by operator choice) Archived 2026-06-21. -
[2026-06-19]qwen-image-bench (T2I judge, NVFP4) replaced qwen3.6-35b-a3b on GPU 1, aliasedimage-judge. (bfae924,5dfce04) Archived 2026-06-21. -
[2026-06-18]heretic abliterated Mistral Small 4 NVFP4 built + LIVE asmistral-small-4(in-house NVFP4, drop-in stack, A/B'd vs official, "heretic stays"). DISPLACED from GPU 0 on 2026-06-19 for the gen/Qwopus swap. (dd3a5c9,f566f61,tools/mistral-small4-nvfp4/) Archived 2026-06-21. -
[2026-06-18]irv-ml1 VRAM consolidation + comfy-dev torch-pin — ComfyUI pinned to the A6000 (48 GB), audio zoo → 3090;DISABLE_UPGRADES=true@ torch 2.12.1. (a8550ad) Archived 2026-06-21. -
[2026-06-18]ComfyUI acceleration set (9 nodes) installed for comfy-dev on irv-ml1. Archived 2026-06-21. -
[2026-06-17]ana-ml2vm.overcommit_memory=1made durable (sysctl drop-in) — overcommit=0 + zero swap caps CommitLimit; large model-file mmap ENOMEM'd despite ~393 GB free. (fc88eff) Archived 2026-06-21. -
[2026-06-17]GLM 5.2 wired into litellm (glm-5.2+-reasoning, z.ai passthrough,extra_body.thinking.typetoggle). (fe77a35) Archived 2026-06-21. -
[2026-06-17]nh3-extdev stood up as a sudo-LESS infra-ops manager box (successor to nh3-ansible); hosts/opt/externspi-on-GLM-5.2 client workspaces. (a841eab) Archived 2026-06-21. -
[2026-06-20]Worldtree capability-gateway aliases stood up; NOwt-prefix (operator) — reuse the existing capability convention. gen/gen-reasoning/classifier/summarizer/chat-judge/reranker/scalar-judge (passthrough)/gen-frontier/-reasoning. The swap-transparency rule: embedding stays model-named (qwen3-embedding) because vectors aren't swap-transparent; everything else can swap behind a stable alias. (d372103,7819f96) Archived 2026-06-25. -
[2026-06-20]Removed the litellm*wildcard → llama-swap (operator; llama-swap decommissioned, :9292 confirmed down). Unknown/typo'd models now 404 cleanly instead of a misleading "Connection error" — closes the long-standing footgun. (d0eb09c) Archived 2026-06-25. -
[2026-06-20]Langfuse retired (operator) — redundant with LiteLLM native spend_logs + a 6-container crash-prone surface (the 94 GB clickhouse spew). Callbacks dropped, stack torn down. (f8eda1c) Archived 2026-06-25. -
[2026-06-20]OmniVoice streaming/tts— vendor chatterbox-fast's scheduler, not its whole package (operator-approved vendor-copy). Diffusion TTFA floor finding → tuned 16-step streaming + aggressive packing; chatterbox-fast remains the lowest-latency front-end. (288d085,cd92b85) Archived 2026-06-25. -
[2026-06-20]Daily image+buildx prune cron on ana-docker (the missing automation behind the recurring image bloat) —lkravencrontab, prune unused images >48 h + per-builder buildx cache. The real systemic fix (daemon log cap) is deferred to clean context. Archived 2026-06-25. -
[2026-06-25]althing re-architected to the lean multi-machine bus; nh3-extdev stood up as a MODEL B mesh peer (dedicatedalthing-svc+ group-shared/srv/althing).reference_nh3_extdev_althing_mesh. Archived 2026-07-08. -
[2026-06-23]zellij native web client piloted on nh3-dev (zellij-web.service:8443) alongside ttyd.reference_zellij_web_seat. Archived 2026-07-08. -
[2026-06-22]Worldtree persona-render config arc (#314/#322/#317) pre-synced + deployed green on demo+personal — #317 a boot-blocking config REMOVAL.reference_corviduo_dev_emergency_ops. Archived 2026-07-08. -
[2026-06-20]R22 (brokkr/dwarves) stood down to gateway-only; full-access R22 key minted; Phase B CANCELLED (Worldtree model-agnostic → no deploy path). Key at/home/lkraven/.r22-gateway-key(persistent mode-600, carries paid GLM, don't delete). MUT = freeqwen3.5-122-a10b(gen). Operator steer: R22 research is gated on a pragmatic/deployable outcome, not advancing-the-art. Archived 2026-07-08. -
[2026-06-20]claude-bot issue-scope token minted for worldtree-dev self-serve (id 16,write:repository+write:issue); old token revoked. Advances the credential-migration directive. Archived 2026-07-08. -
[2026-06-20]rest-server-ana recovered + backup prevention shipped + worldtree-dev admin keys provisioned (demo d113207c / personal f4f75adb). Cred rotation (5 rest-server pw) BELAYED. Archived 2026-07-08. -
[2026-06-20]claude-bot → ADMIN on vh/Worldtree (operator-authorized) — self-serves WT deploys/tokens henceforth. Archived 2026-07-08. -
[2026-06-14]STANDING DIRECTIVE: migrate ALL infra access to Claude-specific credentials. (auto-memoryproject_migrate_infra_access_to_claude_credentials) Archived 2026-07-13. -
[2026-07-01]Worldtree #332 embed-recall diagnosed + scoped-log view/tunnel provisioned + fix verified (15×→1.01× re-embed).reference_wt_gateway_scoped_log_view. Archived 2026-07-13. -
[2026-07-01]qwopus native MTP speculative-decode tested ongen→ NOT kept (+12% single-stream, −15–20% aggregate at concurrency, silently drops min_p/logit_bias). Banked for T1.reference_gen_qwopus_122b. Archived 2026-07-13. -
[2026-07-01]Deckard trial → reverted to qwopus (gen) (won writing "in every way" but ~36 vs ~90 tok/s; spec-decode rescue ruled out). gitb63c48b→681eb70. Deckard kept staged as T1's writing benchmark. Archived 2026-07-13. -
[2026-07-02]mtf-dev granite harness-spike ran GREEN — MECHANICAL only, efficacy DEFERRED to the T1 run. Trainer TRL SFT→DPO→eval seam proven end-to-end on a synthetic fixture (not the E-RP corpus); operator DECIDED no intermediate real-efficacy granite spike (uninterpretable proxy — arch gap + abliteration axis).reference_gen_qwopus_122b. Archived 2026-07-13. -
[2026-07-03]ratatoskr-dev DEMO Heimdall key provisioned (R30 φ0). Minted a tier-user key on the demo viaPOST /admin/keys(bootstrap admin key), mirroring their personal base consumer (no character-binding); base-agent affect reads work ungated.reference_worldtree_demo_key_mint. Archived 2026-07-13. -
[2026-07-04]character-rp: gateway-forwarding proven + role pre-staged + #344 shipped. Empirically confirmed per-requestextra_body(top_k/repetition_penalty) forwards through thegen-reasoningLiteLLM alias to vLLM + standard params override the alias defaults — no gateway cap needed (I over-built a dedicated alias, operator corrected, reverted with zero fleet impact). Pre-staged thecharacter-rprole into demo+personal bind-mountmodel_roles.yaml(byte-verified on b18; caught the cached-registry ordering). worldtree-dev shipped #344 (v1.0.0b19) for the durable-agent override-drop. spend_logs spot-check queued (ratatoskr's timestamp ping). Archived 2026-07-13. -
[2026-07-04]althing v2 herald+receiver formalized as systemd on nh3-dev.althing-herald.service(Restart=always, Environment=PATH incl ~/.cargo/bin — the pane-dispatch fix) +althing-receiver.service(v2 → pillar-3/owner/*live); stale forseti unit removed; both on v2.0.0b2, canonicalized by forseti.reference_nh3_dev_althing_herald. Archived 2026-07-13. -
[2026-07-04]LitBench-RM respun (irv-ml1 A6000, comfyui displaced) for T1's reward ensemble; operator sole comfyui consumer, holding image-gen until LitBench done.reference_litbench_rm_irv_ml1. Archived 2026-07-13. -
[2026-07-05]T1 training venue: CLOUD recommended; operator chose smoke-first on ana-ml2. On-prem ruled out (ana-ml2 full — both 96G GPUs ~93G used): keep-serving = NVMe offload ~6-8 DAYS; full ana-ml2 shutdown = CPU offload ~1 DAY but a whole-fleet outage. Cloud Vast.ai 8×80GB (no offload → ~3-6h, ~$60-500, zero fleet impact) is the clean alt (mtf-dev + infra-ops both rec; Vast for its no-content-AUP marketplace + likely-existing VastBlue account). Operator's next step = the ana-ml2 CPU-offload SMOKE (~60 steps) to get real samples/sec before the full-outage-vs-cloud call. HF base verified public (zero-auth pull). Runbook + gotchas inreference_t1_cloud_train_plan. Archived 2026-07-13. -
[2026-07-05]glm-5.2 canonical limits recorded (probed live vs z.ai): 1,048,576 (1M) input context / 131,072 (128K) max output; NO gateway-side cap (pure passthrough → z.ai's limits are effective). Written to the config comment (commit624a07e) +reference_litellm_gateway. Archived 2026-07-13. -
[2026-07-06]infra-ops NOPASSWD sudo confirmed on irv-ml1 + ana-ml2 (the arbo memory's "NOT infra-ops on irv-ml1" was stale) — enabled the worker deploy + every ana-ml2 hot-swap smoke. Archived 2026-07-13. -
[2026-07-07]SGLang zc hot-swap: 2-line patch RAN → PARTIAL. Cleared startup + self-attn E2E, GDN in_proj hit 2 MORE name-routing gaps → MERGE recommended. Root cause was a NAME-routing gap (not the feared shape-assert):lora/utils.py:235hardcodedparams_mappinglackedin_proj_qkv/in_proj_z → in_proj_qkvz. Patched those 2 lines (overlay bind-mount) →init_lora_shapespassed, server up, self-attn loaded end-to-end. But the SAME missing GDN mapping bit 2 MORE resolvers: adapter-load skipped 192 in_proj weights, and inferenceutils.py:300 get_target_module_name(substring match) RAISED → 500 + scheduler died. So GDN LoRA name-routing is incomplete in ≥3 SGLang paths (fixed 1). NOT shape-intractable (self-attn proves the separate-key→fused-buffer machinery works), but NOT "one targeted fix" either → per operator's LAST-shot rule → MERGE. mtf-dev looped + closed (thread 01KWZDZFYN…); B/A shard-math never reached. Supersedes the "SGLang wants a THIRD format" framing — no new adapter format needed. Archived 2026-07-13. -
[2026-07-07]T1 (retargeted qwopus-122B→AEON-27B) SFT COMPLETE on ana-ml2 — all-TRL torch-GDN, batch1/accum8/GC-off, 1 epoch ~9h @ 0.25 s/s, loss 2.445, adapter banked. Supersedes the 2026-07-05 cloud-vs-smoke venue decision: AEON-27B's 52G bf16 fits one Blackwell → ran on-prem in ~9h (no cloud, no full-fleet outage). GC is NOT the throughput lever (batch1-no-GC == batch4+GC at 0.25; dvalin's 0.565 was warmup-noise from a 30-sample smoke); ~0.25 s/s is the torch-GDN floor (only FLA beats it, sm_120- blocked #913).reference_t1_cloud_train_plan. Archived 2026-07-13. -
[2026-07-07]T1 hot-swap on vLLM NVFP4 is DEAD — vLLM 0.24.0 qwen3_5 LoRA-application silent no-op (#47639 open / fix PR #47640 open / regression from #37912). Proven quant-agnostic (NVFP4+FP8) AND adapter-format-agnostic (separatezcloads-but-inert; fused rejected); #47640 guard-patch overlay didn't fix. Root-caused by a 3-peer dwarf panel (eitri/regin/dvalin); their vLLM issue refs verified real via GitHub API. Engine mirror-image: vLLM wants SEPARATE keys, SGLang wants FUSED. Archived 2026-07-13. -
[2026-07-07]HARD REQUIREMENT restated: hot-swappable LoRA or ABANDON. Merge is NOT a solution for this requirement (static; reserved for a later RP-quant track). SGLang is the last hot-swap shot; if it can't apply, park the adapter + file upstream repros.reference_lora_training_worker(adjacent). Archived 2026-07-13. -
[2026-07-07]comfy-dev in-arbo LoRA-training worker DONE — built/deployed/validated Phases 1+2 (first Sindra train succeeded, publish-step +train_id), Phase 2.5 GC contract (shape A) confirmed + impl deferred.services/lora-training-worker/, commits 888ba6a→b617a8b.reference_lora_training_worker. Archived 2026-07-13.
Tried and abandoned (archived)
-
[2026-04-30]task-board workflow withcontainer: image: debian:bookworm-slim— fails:actions/checkout@v4needsnodeat runtime, slim image lacks it. Switched tonode:20-bookworm-slim(has node + apt) or runner-label default. (Pattern revisited 2026-05-17 for skaldsong-dev: container override needsnodejsapt-installed unless it IS the default.) Archived 2026-05-27. -
[2026-04-30]Dropping thecontainer:directive before runner re-registration with docker-schema labels — runner silently falls back to host mode (jobs run inside the alpineact_runnercontainer itself, no apt). The:hostsuffix in startup logs (labels updated to: [pfi-fleet:host ana-docker:host]) is the giveaway. Fix: register withpfi-fleet:docker://<image>schema labels. Archived 2026-05-27. -
[2026-04-30]Updating runner labels by editing.envand bouncing — doesn't take. The.runnerregistration cache pins labels at first registration; env-var updates are read each start but the stored token + UUID are tied to the original label set on the gitea side. Fix: stop runner, delete.runner, generate new admin registration token, redeploy. Archived 2026-05-27. -
[2026-04-30]git reset --hard origin/<sha>indeploy-task-board.yaml(and the in-repo nevermore playbook before fix) — invalid syntax:origin/prefix only works for branch refs. SHAs needgit reset --hard <sha>directly. Resolved withgit rev-parse --verify --quiet "origin/{{ ref }}^{commit}"first, then bare"{{ ref }}^{commit}"fallback. Archived 2026-05-27. -
[2026-04-30]AssumingDEPLOY_SSH_KEYwas at user scope after task-board wiring — it was actually only repo-scope onvh/task-board. vor's first CI run failed with empty SSH key (printf '%s\n' "" > ~/.ssh/id_ed25519). Fix: copy secret to user scope atgitea.phasefinal.com/user/settings/actions/secrets. Archived 2026-05-27. -
[2026-04-30]grep -vE "^(#|$)"to inspect.envfor sanity — leaked the fullMINIFLUX_PASSWORDline into the transcript. Then a follow-up redaction attempt withsed -E "s/=(.{4}).*$/=\1<redacted>/"still leaked the first 4 chars. Lesson: when probing secret-bearing files, use field-by-field SELECTIVE inspection (grep -E "^(KEY1|KEY2)=") rather than negative filters; for any password line,grep -c(existence) ortest -n "$(...)"(non-empty), nevercator value-printing. Archived 2026-05-27. -
[2026-05-08]Filtering Traefik's UTC access log by Gitea-local-PDT timestamp substrings (grep "2026/05/08 15:1[2-7]") returned zero matches and led to a wrong "no /v2/ traffic in 12 days" conclusion. Gitea logs in PDT, Traefik logs in UTC — same host, different timezones. Always normalize timezones (UTC) when correlating logs across services on the same box. Cost: ~30 min in the wrong direction. Archived 2026-05-27. -
[2026-05-08]Bumping GiteaPER_WRITE_TIMEOUT/PER_WRITE_PER_KB_TIMEOUTto addressunexpected EOFon/v2/.../blobs/uploads/PATCH — wrong direction. Both govern response writes, not request body reads.unexpected EOFfrom Go's HTTP server means the client closed mid-body-upload; not a knob Gitea exposes server-side. Archived 2026-05-27. -
[2026-05-12]Defaulting asset-engine to Traefik-routed (asset-engine.phasefinal.comwithanaprodcert resolver) on first scaffold — user pulled it back to LAN-direct. Internal tools default LAN-direct; only add Traefik when an external/TLS surface is actually needed. Archived 2026-05-31. -
[2026-05-12]Routing althing thread replies throughgaldrabokwhen the actual dev handle isforseti— bus rejectedto=forsetiinitially because thread participants list was[galdrabok, infra]. Solved by starting a new thread withforsetias the direct recipient. Lesson: when the bus auto-resolves a sender handle that doesn't match the actual dev role, start a fresh thread rather than fighting the participant list. Archived 2026-05-31. -
[2026-05-13]Initial Voxtral default voicealloy(OpenAI-compat naming) — vLLM-Omni serving Voxtral does NOT translate aliases. Native presets are<register>_<gender>shape (neutral_female,casual_male, etc.). Always live-probe/v1/audio/voicesfor the exact wrapper-deployed preset names before setting a catalog default. Same caveat for Qwen3-TTS (wrapper exposes 15 voices: 9 Qwen presets + 6 OpenAI aliases) and Kyutai-TTS (NillPointer wrapper has NO voice-listing endpoint at all; voices are filesystem paths under thekyutai/tts-voicesHF repo). Archived 2026-05-31. -
[2026-05-17]--task classifyfor Skywork in vLLM 0.19.1 — flag was deprecated. Use--runner pooling; the model'sarchitectures: [LlamaForSequenceClassification]in config.json drives the classification head. Surfaced asvllm: error: unrecognized arguments: --task classifyin container logs. Archived 2026-05-31. -
[2026-05-17]Trusting that.envedit alone propagates a new env var into a worldtree container —compose.yaml's&worldtree-envanchor must explicitly declare the passthrough or the value silently doesn't land. Same footgun bitZ_AI_API_KEY(2026-05-12) ANDBIFROST_CLIENT_ALLOWED_HOSTS(2026-05-17). Cost ~10 min of "why is env empty?" diagnosis each time. Worldtree-side fix invh/worldtree@08f02b2. Archived 2026-05-31. -
[2026-05-17]--force-recreate --pull neverfrom the docker:cli sandbox without explicit-e WORLDTREE_IMAGE=<sha>re-pins the container to:latest, even when a newer SHA-tagged image is on disk. Symptom: container "recreated" but actually reverted to a stale image. Pass-e WORLDTREE_IMAGE=...:<sha>to the docker run invocation. Worldtree-dev's8ef3801health-gated:latestadvance is the long-term fix. Archived 2026-05-31. -
[2026-05-18]Volva env.sh.template$HOMEin commented examples — systemd'sEnvironmentFile=parser doesn't expand$HOME; uncommenting lands the literal$HOME/...string. Volva-dev'sf4dda73swapped to/home/<svc-user>/...placeholders. Archived 2026-05-31. -
[2026-05-18]Initial Volva systemd unit'sProtectHome=read-onlywithoutReadWritePaths=— althing-cli's SQLite (~/.althing/ althing.db) and codex's session state (~/.codex/) both need to write. Container started but every poll failed with "db path not writable". Surgical fix:ReadWritePaths=/home/lkraven/.althing /home/lkraven/.codex(preserves the hardening intent, only carves out the specific dirs). Archived 2026-05-31. -
[2026-05-18]Trusting that env.sh'sexport VOLVA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"template line works under systemd —EnvironmentFile=parser aborts on the first unparseable line (command substitution), andVOLVA_ALTHING_CLIdeclared below silently never lands. Symptom:Environment=property empty, daemon error "althing-cli not found at 'althing-cli'". Fix: replace command-substitution with literal path. Volva-dev'sd436c3cdropped VOLVA_ROOT entirely upstream. Archived 2026-05-31. -
[2026-05-19]Naivedocker rmi worldtree:<old-sha> --forcefor CD SHA cleanup — would untag pinned/personal worldtree images since all three deployments share corviduo-dev. Usedocker image prune -a --filter "until=Xh"instead — respects in-use semantic (Docker won't remove an image referenced by any container on the host), so pinned/personal protected automatically. Archived 2026-05-31. -
[2026-05-19]Skaldsong CD first attempt:docker pullstep failed with 401 unauthorized. ana-docker had nodocker loginforgitea.phasefinal.com. My playbook prereq note ("docker login has been done at least once") was an unverified assumption. One-time manual login persists in~/.docker/config.json; architectural fix (workflow-sidessh ana-docker 'docker login ...'step usingREGISTRY_USER/REGISTRY_TOKENsecrets) flagged as v2. Archived 2026-05-31. -
[2026-05-19]SKALDSONG_HOST_CORS_ORIGINS=http://10.250.50.70:8300as a bare URL — pydantic-settings parses complex env vars viajson.loads(); first-boot crashloop withSettingsError: error parsing value for field "cors_origins". Must be JSON array literal:SKALDSONG_HOST_CORS_ORIGINS=["http://..."]. Archived 2026-05-31. -
[2026-05-19]SKALDSONG_HOST_STATIC_ASSETS_PATH=/app/web/distin compose — mismatched Dockerfile reality. The Dockerfile COPYs SvelteKit build output flat into/app/spa(not/app/spa/dist). Lifted the path from skaldsong-dev's CD-ask message ("/app/web/dist") rather than verifying against the actual Dockerfile they shipped. Lesson: when encoding container-internal paths in compose, verify against the Dockerfile, not the design-doc. Archived 2026-05-31. -
[2026-05-19]Playbook verify stepdocker ps | grep healthyracing the container'sstart_period(30s in compose's healthcheck). Verify ran 0.09s aftercompose up -d --force-recreate— well before docker's healthcheck could flip the status from(health: starting)to(healthy). False-negative; container was operationally up (the earlier/healthpoll verify already confirmed). Fix: grep^Upnothealthy. /health-200 IS the liveness check; docker's(healthy)is just a delayed echo. Archived 2026-05-31. -
[2026-05-20]SKALDSONG_DB_PATH+SKALDSONG_RUNS_DIRin compose env block — names skaldsong's app doesn't read. App readsSKALDSONG_HOST_SQLITE_PATH+SKALDSONG_HOST_RUNS_ROOT(per Dockerfile ENV defaults). Wrong names = silently no-op; app fell back to Dockerfile defaults pointing at/app/data/...which the compose's bind mount did NOT cover (target was/app/state/...). Result: every--force-recreatewiped the SQLite DB. Caught by skaldsong-dev (althing thread01KS4DPF6SXTBP4Q360JZVWPNT). Fix in52e98fa. Lesson: verify env var NAMES against the Dockerfile/app, not against design-doc shorthand. Archived 2026-05-31. -
[2026-05-25]First selene-block patch put the block undersaga_allowed_models:instead of top-levelmodels:— usedtext.replace("models:\n", ...)which substring-matched thesaga_allowed_models:\nline first. Caused YAML parse error. Fix: anchored regexre.compile(r"^models:\n", re.MULTILINE). Pattern: substring replace on YAML top-level keys WILL match suffix-containing keys. Archived 2026-05-31. -
[2026-05-27]docker compose up -dinside thedocker:clisandbox:${VAR:-./config}defaults resolve./configto the sandbox CWD, but the Docker daemon interprets the path against the HOST filesystem → auto-creates an empty dir → entrypoint reseeded image-baked defaults (lost host-side providers.yaml patches). Fix: pass-e WORLDTREE_CONFIG_DIR=/abs/path. Folded into the docker-as-root convention note. Archived 2026-06-01. -
[2026-05-27]:latest-pinned compose + private gitea registry + sandboxed pull = recreate on ancient cached:latest(deploy pulls by SHA so the tag never advances; sandbox can't pull). Fix: retag SHA→:lateston host, then--pull never. Better: pin SHA in.env, advance in CI. Archived 2026-06-01. -
[2026-05-27]Container recreate during in-flight skaldsong gen kills the runner. With deploys every ~10min and stories >5min, structural not incidental. Roadmap (skaldsong-dev): pre-shutdown signal handler, per-scene resume-from-checkpoint, /api/admin/quiesce. None shipped. Archived 2026-06-01. -
[2026-05-27]--reasoning-format gemmaon artemis-31b-v1i — unsupported in the deployed llama.cpp (accepts none|deepseek|deepseek-legacy).deepseekpopulates thereasoning_contentSSE delta Worldtree GemmaProvider checks. Archived 2026-06-01. -
[2026-05-27]head -c Npiped after a streaming curl SIGPIPEs the curl, killing the request early. Use file-write + separate read. Archived 2026-06-01. -
[2026-05-31]Building the dia2-capable image surfaced THREE upstream packaging quirks: (1)pip install -e nari-labs/dia2fails — no PEP 660build_editablehook; (2) plainpip installbuilds an emptyUNKNOWN-0.0.0wheel (base setuptools 59.6 < dia2's required ≥70); (3)--no-depsleavestransformers/sphn/whisper-timestampedmissing. Fix (local/dia:v2): copy the pure-pythondia2/package into site-packages + install ONLY those 3 deps; base torch/numpy already satisfy Dia2. Archived 2026-06-03. -
[2026-05-31]Dia2 predefined voices (43, baked at/app/voices) are NOT reachable from the/ttsclone path — it resolvesclone_reference_filenameagainst the reference_audio dir ONLY. The OpenAI/v1/audio/speechvoiceparam auto-resolves them (separate code path), which masked the gap. Fix: stage/app/voices/*into/worktank/dia/reference_audio. Lesson: verify on the endpoint the catalog ACTUALLY targets. Archived 2026-06-03. -
[2026-05-31]voice_mode=clonewith an emptyclone_reference_filename→ asset-engine serializes it as the literal string"undefined"→/tts404. First observed on dia2; worked around in the catalog (default the field to a real voice). [2026-06-01] root cause found — the Kokoro voice-blend widget reading Shoelace.valuebefore hydration (see Current state); the real fix is asset-engine-side and is escalated. Archived 2026-06-03. -
[2026-05-31]asset-engineservices.schema.jsonis DERIVED (regen from the Pydantic model viadump_schema.py) and had DRIFTED — rejected thelifecyclefield 12/14 services use. RESOLVED: regenerated withCatalogLifecycle+reproducibility.seed_field(b7b2130). Lesson: hand-editingservices.yamlshape without regenerating re-introduces drift. Archived 2026-06-03. -
[2026-05-31]ttyd-over-TLS forces HTTP/2 (kills ttyd's terminal WebSocket → blank screen); Safari/WebKit never sends HTTP basic-auth on WS upgrades. Both solved for the fleet seat (Caddy forces HTTP/1.1; auth → network-gating) — detail in auto-memoryreference_ttyd_fleet_seat. Archived 2026-06-03. -
[2026-05-30]esh-docker-vm:hardNFS mounts from 10.0.50.50 froze a container worker in UNKILLABLE D-state when the NAS stalled — only a host reboot clears it. Separately,fstab defaults(no_netdev) made NFS-bind containersExited(255)on reboot. → auto-memoryincident_esh_docker_nfs_boot_race. Archived 2026-06-03. -
[2026-06-02]Naive cumulative re-decode for streaming — decode the growing token prefix each chunk + emit the delta, assuming the causal flow gives a stable prefix. It does NOT (full-context attention, see above); maxdiff 0.30. Also the high-levels3gen.inferencere-appliestrim_fadeat the start every call. Don't go this way. Archived 2026-06-04. -
[2026-06-01]CSM bring-up — upstreamphildougherty/sesame_csm_openaiDockerfile pins NOhuggingface_hubversion, so it now resolves to 1.17.0 wherehuggingface-cliis fully removed (replaced byhf) → the build dies athuggingface-cli login/download. Passing the HF token as a build-arg got the token in (the model downloads at BUILD time, not runtime — our compose only wired it as runtime env, the original failure) but then hit the rotted CLI. Fixing would need vendoring + patching the Dockerfile; not worth it for a weak model → CSM removed. Archived 2026-06-04. -
[2026-06-01]Fish path-form references ({audio:"/app/references/x.wav"}) → HTTP 500 on this build, despite the stack README showing that shape. The working clone paths arereference_id(by name → resolves the DIRECTORYreferences/<name>/containing<name>.wav+<name>.lab; the flatreferences/<name>.wavis ignored — see the two-root-causes entry above) or inline base64references. The catalog usesreference_id. Archived 2026-06-04. -
[2026-06-01]Reference transcript barely affects Fish clone IDENTITY (disproving my mid-session theory). I'd blamed a bogus provenance-note.txtfor poor cloning, but the ECAPA re-test showed correct (0.787) / bogus (0.778) / empty (0.738) transcripts all clone Imogen about equally — the transcript affects PRONUNCIATION (phoneme disambiguation per the docs), not who it sounds like. The real culprit for "not British" was the"undefined"select bug, not the transcript. (A correct transcript still marginally helps pronunciation — cheap to stage, not load-bearing.) Archived 2026-06-04. -
[2026-06-01]Pitch-shift register control (rubberband, to deepen Imogen to contralto/mezzo) — Fish ignores small reference shifts and overshoots large ones;-3stWITHOUT formant preservation → "baritone through a tuba" (formants collapsed);-2/-3stWITH--formant→ too subtle / still bad. Abandoned at every depth; all variants deleted. Finer independent pitch/formant control needs praat (not installed). Future clones = operator's. Archived 2026-06-04. -
[2026-06-01]resemblyzer is too weak for cloning-fidelity scoring — its dated 2019 LSTM encoder + a synthetic-vs-natural domain gap scored the Imogen clone CLOSER to the default than to real-Imogen, which led me to a WRONG "Fish is a weak cloner" call. ECAPA-TDNN (speechbrainspkrec-ecapa-voxceleb) on the same clips gave the correct answer (clone 0.79 to real Imogen, 0.10 to default). Use ECAPA, not resemblyzer, for speaker-verification. Archived 2026-06-04. -
[2026-06-02]Fish (fish-s2 / OpenAudio S1-mini) progressive streaming — SHELVED (sub-realtime). Benched RTF on A6000: 0.72x/0.82x/0.86x, mean 0.80x = sub-realtime, so client-side chunking starves. Root cause: Fish only chunks on<|speaker:X|>tags; plain text → batches=[whole text] → all semantic tokens generate before any audio (chunk_length inert). Plus kui/ASGI StreamResponse doesn't flush (fix = anti-buffering headers, kept on file). STANDING REVISIT TRIGGER: when an RTX Blackwell Pro lands → bench fp4-quantized Fish; if RTF > ~1.5x give it the chatterbox-fast treatment. For now Fish is a buffered catalog entry (great for SAVED gens, not live-audition). Archived 2026-06-11. -
[2026-06-02]Context-priming at chunk joins (chatterbox-fast §1.6) — ABANDONED (discard-cut leaks the prefix). Prepend prior sentence, generateprefix+content, discard prefix audio. Built + shipped (d707439), live-A/B'd, reverted (090e70a). Kill:generate()returns one waveform with NO marker where the prefix ends, and the model renders the same prefix with different timing solo vs followed-by-content — so locating the cut is a guess that left a whole clause in the output (operator caught "...without a trace of sarcasm" spoken twice). Reliable cut needs token-level boundaries or per-chunk forced-alignment (heavy). Coherence loss at joins = ACCEPTED limitation. Archived 2026-06-11. -
[2026-06-02]Native frame-level streaming on Chatterbox-TURBO — ABANDONED (turbo isn't built for streaming). (1)S3GenStreameris docstring-only (unimplemented). (2)flow_inference(finalize=False)is buggy (lookahead trim removes frames fromhnoth_masks/conds → shape mismatch); a 1-line patch makes it RUN. (3) BUT the flow encoder uses full-context attention (static_chunk_size=0) → incremental decode is prefix-unstable (adding tokens re-attends, shifts earlier mel ~0.30-0.39 vs one-shot). (4) Forcingstatic_chunk_size>0didn't stabilize it. True sub-second frame-streaming needs deep attention surgery with quality risk — not worth it. → adaptive-chunking instead. Archived 2026-06-11. -
[2026-06-03]uv pip install .fails on SmoothKen/knn-svc (and similar script-repos) — it's analysis scripts + a poetry pyproject, no buildable package (setuptools package-discovery error). Install the pyproject deps directly, don't build the "package". Archived 2026-06-13. -
[2026-06-03]Backgroundingalthing-cli monitorwith an inline shell&(instead of the Bash-toolrun_in_background) orphans it — it survives the shell exit, holds the per-handle flock UNTRACKED (won't notify the session), andstop-monitordoesn't detect it. Fix: find + kill the orphan PID (verify cwd=this repo / handle first — nh3-dev is shared, other agents' monitors run there too), then re-arm via run_in_background. Always re-arm tracked. Archived 2026-06-13. -
[2026-06-03]torch-2.12 venvs needuv pip install torchcodec— torchaudio 2.12 defaults to the TorchCodec backend for.load; without it, real audio I/O throws "TorchCodec is required" — and it ONLY surfaces at actual conversion, NOT at import/model-load. Lesson: validate real I/O, not just import, when provisioning ML engine envs. (seed-vc on torch 2.4 uses the legacy backend, exempt.) Archived 2026-06-13. -
[2026-06-03]gitea webhook to a private IP is denied bywebhook.ALLOWED_HOST_LIST(anti-SSRF; defaultexternalblocks private/loopback). Symptom: delivery showsdial tcp ...: webhook can only call allowed HTTP servers. Fix = APPEND the target net to ALLOWED_HOST_LIST in gitea's app.ini (keepexternal; scope tight, never*/private) + restart gitea (act_runner job containers survive a restart). gitea runs as a container on ana-docker (gitea_gitea_datavolume,/data/gitea/conf/app.ini). Archived 2026-06-13. -
[2026-06-04]homepage "crash" ≠ always NFS — a wedged container in unkillable D-state can come from deadsiteMonitorwidget targets (retired ESH firewall IPs) hanging the node event loop intoexit_mmap, needing a host reboot. Check homepage's siteMonitors against retired hosts. (incident_esh_docker_nfs_boot_race) Archived 2026-06-14. -
[2026-06-04]pyworld needssetuptools<81(imports the removedpkg_resources); and R/soundgen-lgfortranfails on irv-ml1 (default gcc is gcc-11 but only gfortran-12 present) → installlibgfortran-11-dev. Archived 2026-06-14. -
[2026-06-04]Persistent services on irv-ml1 need SYSTEM systemd units — the box reaps user-session processes on ssh disconnect, and--usersystemd isn't reachable over non-login ssh, so nohup/setsid/screen -dmS/systemd-run --userall die (even with enable-linger). Use/etc/systemd/system/. Archived 2026-06-14. -
[2026-06-04]GPU pin by INDEX is ambiguous on irv-ml1 — native CUDA orders fastest-first (A6000=0) but nvidia-smi/docker use PCI order (A6000=1). Pin by UUID (CUDA_VISIBLE_DEVICES=GPU-…); verify via nvidia-smi compute-apps. Archived 2026-06-14. -
[2026-06-04]Ollama/llama.cpp-BUNDLED chat templates silently diverge from canonical HF — the "headgun" lesson. Serve each model's canonicaltokenizer.apply_chat_template, not the bundled template (bundled ones corrupt baselines). Verify via vLLM/tokenize→/detokenize. (90e08f0/27eb537) Archived 2026-06-14. -
[2026-06-08]Demucsuv pip install demucspulls torch 2.12/torchaudio 2.11 →ta.save()requires torchcodec → dies AFTER separating (0 stems, rc=1). Fix = pintorch==torchaudio==2.4.1+UV_LINK_MODE=copy. Validate the SAVE path, not just import + GPU inference, on a bleeding-edge torch. Archived 2026-06-16. -
[2026-06-05]vLLM 0.19 CUDA-graph-capture OOMs on a SHARED GPU — fills KV to the--gpu-memory-utilizationbudget WITHOUT reserving graph-capture memory, socapture_modelOOMs AFTER weights+KV load (crash-loops). Fix: free co-tenant room OR--enforce-eager. FP8 single-stream is batch-1 GEMV (memory-bound) → Q4 wins single-stream by physics; FP8 wins under concurrency. (reference_ana_ml2_vllm_granite) Archived 2026-06-16. -
[2026-06-05]Langfuse has NO public dashboard-creation API — dashboards/widgets are postgres rows; clone a default + swap the measure. tok/s is theoutputTokensPerSecondMEASURE (metrics-API/dashboard query time), not a per-generation field. langfuse-web needsHOSTNAME=0.0.0.0. Host 3000 is gitea's → langfuse on 3001. Archived 2026-06-16. -
[2026-06-05]sudoover non-interactive ssh FAILS SILENTLY where the user lacks NOPASSWD (esh + corviduo are OUTSIDE the infra-ops identity) → empty output misread as "empty file." Read world-readable files WITHOUT sudo. corviduo ssh =vh@10.250.50.152; bind-mount configs are vh-owned, the.envis deploy-owned 600. Archived 2026-06-16. -
[2026-06-05]Worldtree summarizer-model is NOT an env var — noWORLDTREE_SUMMARIZER_MODEL; defaults to claude-haiku in code, opt-in via config not.env. Inspect the live container env + vh-owned config files first. Archived 2026-06-16. -
[2026-06-13]Loading an old LoRA adapter after a vocab bump fails on embedding size. The harness config +tokenizer.jsonare now atnew_vocab_size=50279(v4 multi-tag); the v1/v2/v3 adapters are 50277. To load v1 (the accepted artifact), setcfg.new_vocab_size=50277beforeload_finetuned_engine_lora(else PeftModel state_dict size mismatch).tokenizer.json.v3bakis the 50277 tokenizer for a clean restore. Archived 2026-06-16. -
[2026-06-13]Heavy from-source compile (MAX_JOBS=128) on the shared PROD GPU box PINS it — load hit 187, prod vLLM restarted, killed an in-flight quant. ana-ml2 hosts live inference; never run a big build there at full parallelism. CapMAX_JOBS≤32, build off-box, or cgroup-constrain. Archived 2026-06-16. -
[2026-06-13]--quantization fp8on a VL model can quantize the VISION TOWER → garbage vision (Qwen3.5-VL on stable vLLM: gray-grid output; LM answers text fine, so it "looks" healthy). The nightly excludes the vision tower. Validate the VISION path on a quantized VLM, not just text — and pin the engine digest with the exclusion. Archived 2026-06-16. -
[2026-06-13]vLLM's--gpu-memory-utilizationis checked against FREE VRAM at startup, not total — on a shared card, growing one service before trimming a co-tenant OOMs. Trim the shrinking service FIRST, then grow. Size to the FREE budget. Archived 2026-06-16. -
[2026-06-13]Thevllm/vllm-openaientrypoint is already["vllm","serve"]— composecommand:supplies the model as the first POSITIONAL arg + flags; a secondserve/--model X→ "unrecognized arguments". Same-class:teemasks the real exit code (use>); HFdatasetsrejects barewikitext(needsSalesforce/wikitext). Archived 2026-06-16. -
[2026-06-13]Chatterbox-Turbo LoRA finetune: the repo'ssetup.pyloads the WRONG tokenizer — pulls gpt2-medium + a grapheme merge file instead of the chatterbox-turbo GPT2 tokenizer (vocab.json+merges.txt, len 50276). Fix = override + delete the graphemetokenizer.json;[vmoan]→ new_vocab_size 50277 (1-row resize), lora_r 64 / alpha 128, modules_to_save=[text_emb,text_head]. Unique-stem corpus collision needs{index}_{stem}IDs. (irv-ml1:~/r16-vmoan-harness) Archived 2026-06-16. -
[2026-06-11]A completion-pollwhile pgrep -f <scriptname>SELF-MATCHES its own remote shell argv — its ownpgrep -falways finds itself → the loop never exits. Use a match pattern ABSENT from the poll command (the python stage, or a sentinel file), not the driver's own name. Archived 2026-06-16. -
[2026-06-14]vLLM ModelOpt-NVFP4-MoE loader is broken for current multimodal MoEs.nvidia/Qwen3.6-35B-A3B-NVFP4fails weight-load:KeyError: layers.0.mlp.experts.w2_input_scaleon 0.19.1,lm_head.input_scale not registeredon 0.22.0 (vllm #44081); same class hits Gemma-4 MoE / Qwen3-30B-A3B NVFP4. The arch + quant ARE recognized (gets past arch resolution + vision-processor load) — it's the per-expert/lm_head scale-key mapping. Don't chase nightlies; use official FP8 until fixed. Archived 2026-06-18. -
[2026-06-14]vLLM sampler-warmup OOMs on a shared GPU even when weights fit — it warms the sampler withmax_num_seqs(default 1024) dummy requests, and a big vocab (Qwen3.6 = 248K) makes that a huge transient logits tensor. A vision endpoint doesn't need 1024-way concurrency: set--max-num-seqs 32. Separately, post-loadValueError: No available memory for the cache blocksmeans util is too thin (weights+activation+graph ate it) — for 34 GB FP8 weights, util ≥ ~0.45 to leave KV room. Archived 2026-06-18. -
[2026-06-14]Recreating multiple vLLM services concurrently races the memory-profiling assertion —AssertionError: Error in memory profiling. Initial free memory X / current Y … other processes … release GPU memory while vLLM is profiling. Recreate co-tenant vLLM services ONE AT A TIME (force-recreate one, wait healthy, next). Archived 2026-06-18. -
[2026-06-14]embed/rerank (0.6B) at util 0.05 reserve ~5.5 GB each — mostly util-reservation WASTE, not need. A 0.6B model needs ~1.2 GB weights + ~2.5 GB CUDA/torch context; util 0.03 (~3.6 GB) fits with room, reclaiming ~4 GB (vLLM reserves the util fraction regardless of actual KV; embedding models barely use KV). Real-need floor ~3 GB — don't go to 0.02. Archived 2026-06-18. -
[2026-06-14]Chatterbox-Turbo decode-knob foot-guns (R16 v1-polish + emergent probes): the turbo length cap ismax_gen_len(default 1000) ont3.inference_turbo, NOTmax_new_tokens— andtts_turbo.generatedoes NOT forward it (wrap inference_turbo to cap).rep_pen 2.0 / temp 0.5BACKFIRES (degenerate 24 s run-on). Soft decode tamers cut the NVV ITSELF, not just the run-on tail (operator: "p1 trims the moaning too") — gen-time polish can't beat v1's defaults. Inline base-NVV tokens DEGENERATE (moan-cascade + gibberish), they don't modulate the surrounding words. Archived 2026-06-18. -
[2026-06-15]A comfyui restart-loop withexit 0+OOMKilled=falseis NOT OOM — suspect a native SEGFAULT.docker inspectshows only the LAST exit code; a GPU OOM is a catchableRuntimeError: CUDA out of memory, NEVERFatal Python error: Segmentation fault. Diagnostic:RestartCount>0= same container restarted in-place → the docker json-log ACCUMULATES across all cycles, so grep the fulldocker logsfor the crash signature + the lines right before each restart banner. comfyui's was at VAE decode (sampling completes, then segfault loadingAutoencodingEngine) — gen-triggered but native, not VRAM. Suspects logged: torch/cu130 mismatch, an injectedaimdocuda-funchooks lib, the VAE. Archived 2026-06-19. -
[2026-06-15]NEVER blanket-killalthing-light-monitorby PID — they're per-handle and MANY agents run their own on the shared nh3-dev box (heid / ratatoskr-dev / worldtree-dev / bifrost-dev each have one). Akill $(pgrep -f light-monitor)downs four peers' monitors (near-miss caught by checking/proc/<pid>/environALTHING_HANDLE+ cwd first). Recover your OWN viaalthing-cli stop-monitor(v0.14.1+); a raw&-backgrounded monitor is untracked (no harness fire-notification) — always arm viarun_in_background. (extends the pkill-self-match lesson below) Archived 2026-06-19. -
[2026-06-15]Manualdocker compose upon corviduo Worldtree DOWNGRADES to a stale local:latest→ crash-loop (config/image mismatch). Composeimage:is…/worldtree:latest, but local:latestlagged ~2wk (21c90d5eeb2d); CI/CD deploys NEWER SHA images, and a real pull 401s (daemon has no gitea-registry creds — that's CI/CD's).--pull neverthen used the stale latest → personal crash-looped onConfigurationError: echo.default_model missing→ ~2-3 min personal outage. RECOVER: retag:latestto the image a HEALTHY SIBLING runs (docker inspect worldtree-worldtree-api-1 --format '{{.Image}}'→docker tag …), thenup -d --pull never; verifyApplication startup complete. Don't manually recreate Worldtree on corviduo without pinning the correct image — image+config are CI/CD-coupled. (auto-memoryreference_corviduo_dev_emergency_ops) Archived 2026-06-19. -
[2026-06-15].claude.json(Claude Code config) truncates on ENOSPC → invalid JSON → CC resets to defaults on next start. nh3-dev hit 100% disk (a peer's R19 dataset pull staged ~147G to local /home instead of the 7TB NAS); the in-flight.claude.jsonwrite was cut mid-key. Repair = strip the dangling token + close the open braces, validatejson.load. CC keeps its OWN rolling backups at~/.claude/backups/+ writes a.claude.json.corrupted.*snapshot when it self-detects. After ANY ENOSPC on a box running CC/agents: integrity-check.claude.json(json.load) AND the althing bus DB (PRAGMA integrity_check). Archived 2026-06-19. -
[2026-06-15]pkill -f althing-light-monitorSELF-MATCHES the killing shell (the pattern is in the command's own argv) → kills itself mid-run (exit 144/truncated output). Stop the light-monitor viaalthing-cli stop-monitoror a captured PID — neverpkill -f <string-present-in-this-command>. The singleton lock can also RACE to 2 live monitors during re-arm churn; keep exactly one tracked (run_in_background) monitor, and a raw&monitor is untracked (no harness fire-notification — don't use it). Archived 2026-06-19. -
[2026-06-14]Fleet/colo hosts must reach gitea over the INTERNAL route, NOT the public IP.gitea.phasefinal.com= public38.120.12.44(ana-srv1); gitea is a container on ana-docker, git-SSH10.250.50.70:222+ HTTP:3000. A fleet host egressing to public:22gets fail2ban-banned after any retrying git loop → silently wedges webhook auto-deploys (git fetchtimes out underset -euo pipefail, aborts before reset). Bit irv-ml1's arbo deploy.:22on10.250.50.70is ana-docker's HOST sshd (deploy key → Permission denied), NOT gitea. Documenteddocs/orientation.md(6e58e57). Archived 2026-06-19. -
[2026-06-16]litellm 500Router.acompletion()/aembedding() missing 'messages'/'input'= a request missingContent-Type: application/json, NOT a gateway outage. curl-ddefaults to form-encoding → litellm can't parse the JSON body →datareaches the router withoutmessages/input→ 500 (should be a 400; litellm #16993). My own diagnostic calls dropped the header → I misread it as a gateway outage and needlessly bounced the gateway ~4× chasing a phantom (image/version/config were fine throughout; a malformed UI-added "Mistral Story Eval" model in the DB was a red herring I deleted). ALWAYS send-H "Content-Type: application/json"testing litellm; reproduce with a header'd call before declaring a litellm incident. Archived 2026-06-20. -
[2026-06-16]LiteLLM admin-UI playground can't test vLLM-backed models — it auto-sends emptytools:[], vLLM 400s (litellm #6228); the gatewaystrip_empty_toolshook is a PROXY hook and structurally can't reach the UI's in-processlitellm.completion()call. Off-ramp =tools/gateway-chat.html. (Langfuse playground also out: its SSRF guard blocks internal-IP LLM connections, wontfix Langfuse #13097.) (auto-memoryreference_litellm_ui_playground_vllm_deadend) Archived 2026-06-20. -
[2026-06-16]A gitea Actions run that "looks like it never fired" (no image, untouched build dir) usually DID fire then skipped or failed-fast. Bit arbo TWICE: run #3 looked-never-fired but SKIPPED (change-detectionengine=0); run #4 looked-never-fired but FAILED in ~7s (early-step). Check the run LIST + status via claude-bot (GET /repos/{o}/{r}/actions/tasks) BEFORE a runner-connection/dispatch theory. CORRECTION (2026-06-16, proven): action logs ARE readable via API at the per-JOB endpoint —GET /api/v1/repos/{o}/{r}/actions/runs/{run}/jobs→ take a job.id→GET /api/v1/repos/{o}/{r}/actions/jobs/{job_id}/logsreturns the full plain-text log (claude-bot basic-auth, internal route10.250.50.70:3000). Only the RUN-level/runs/{id}/logs404s; the per-job one works, so no UI needed. Gotcha when reading: gitea marks every stepconclusion:failureonce any step fails — the per-step conclusions mislead; trust the log body + step timestamps (the step with real duration is the culprit) not the conclusions. (Used 2026-06-16 to diagnose arbo run #5/task 1175 = test-gateuv run pytest→Failed to spawn: pytest= pytest absent from the fresh-checkout venv sync, NOT the SSH-clone comfy-dev suspected.) Archived 2026-06-20. -
[2026-06-16]vLLM 0.23.0 breaks Mistral MULTIMODAL at startup (MistralCommonImageProcessor has no attribute fetch_images, #44911 regression ~0.22.1+; same class hit Mistral-3.1/ Devstral). The dummy-image profiling crashes. Workarounds:--limit-mm-per-prompt '{"image":0,"video":0}'loads text-only; for VISION, pin v0.22.0 (last pre-regression). Tradeoff: v0.22.0 buffers reasoning (doesn't stream reasoning_content cleanly); a newer build streams it but breaks vision — vision won (Mistral is the abliteration-baseline). Archived 2026-06-20. -
[2026-06-16]Mistral-reasoningTTFT variance = Triton kernel JIT-compile-during- inference, NOT reasoning time.jit_monitorlogs the spike (_compute_slot_mapping_kernel,apply_token_bitmask_inplace_kernel← the tool-call/structured-output path). vLLM's startup warmup covers only SOME shapes; a first-hit uncovered shape JITs a kernel (seconds), then CACHES it — warm until container recreate (the Triton cache is IN-container, no volume, so recreate = cold again). Secondary: GPU idle-down to P8/180 MHz between requests. Also: Mistralreasoning_effortis BINARY (none|high only — medium/low → HTTP 400). Archived 2026-06-20. -
[2026-06-16]Worldtree old-baseline instances need the FULL config set synced, not the changeset delta. Personal (a PRE-mistral baseline) crash-looped (41 restarts) onDanglingBindingError: role 'echo' binds missing catalog entry 'qwen3.6-35-a3b-heretic'— itsmodel_roles.yaml(2026-06-10, never migrated) still bound the retired heretic that the synced v0.35.10 providers removed. The "model_roles unchanged — skip" was correct only for demo (already at the v0.35.9 baseline). Old-baseline → sync providers + model_roles + defaults. Archived 2026-06-20. -
[2026-06-16]vh is a Gitea USER, not an org → no scoped package-write for a service account. Gitea user-namespace packages are owner/admin-only, so claude-bot can't push tovh/arbowithout being admin. The fix is converting vh → acorviduoORG (tabled). Also: vh'steatoken lackswrite:admin— create gitea users via the server-sidegitea admin user createCLI (docker exec -u git gitea …), not the admin API. Archived 2026-06-20. -
[2026-06-16]docker compose up -don a multi-service vLLM stack recreates ALL its services (shared.env→ all configs re-hash) → concurrent memory-profiling race ("No available memory for the cache blocks"). Target one:docker compose up -d <service>. (auto-memoryfeedback_compose_up_recreates_whole_stack)
76 older entries archived to archival-memory.md. Archived 2026-06-20.
-
[2026-06-19]litellm CONFIG-loaded models can't be hot-removed —/model/deleteis DB-only. Only a process restart drops a config model. The INVERSE works:/model/newlive-ADDS (no bounce) but dups with config on restart. Clean no-bounce-add: live-add via API, delete the DB copy before the eventual bounce. Archived 2026-06-21. -
[2026-06-19]the litellm*wildcard routed to DECOMMISSIONED llama-swap → a stale/typo'd model name returned a misleadingConnection error, notmodel not found. Bit a brokkr call to the renamedqwen-image-judge. → RESOLVED 2026-06-20: wildcard removed (d0eb09c) — unknown models now 404 cleanly. Archived 2026-06-21. -
[2026-06-19]A MoE card can't be filled to 0 bytes free — the FusedMoE transient workspace (~3.09 GB) is the floor, allocated OUTSIDEgpu-memory-utilization. FIX:PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True+ leave ~3.2 GB free (util <= ~0.95 on a tight MoE). Archived 2026-06-21. -
[2026-06-19]vLLM decode tok/s: ALWAYS discard the first generation (cold warmup). Cold ~ 24.8 tok/s vs warm 92.7 — a cold read undersells decode ~3-4x. Measure run 2+ over a >=256-token output. Archived 2026-06-21. -
[2026-06-19]For full native 256K on one 96 GB card, nightly+turboquant-4bit-KV was unnecessary for the Qwopus MoE. Stable fp8 KV already fits 262144 (hybrid SSM+attn caches KV only on attn layers → small pool). Reach for fp8 first. Archived 2026-06-21. -
[2026-06-18]mmartialcomfyui-nvidia-docker: root pip installs CRASH-LOOP the container.docker exec -u 0 pip installleaves root-owned files in the uid-1000 venv → the boot script (uid 1000) fails its torch step → crash loop. FIX:chown -R 1000:1000 /comfy/mnt/venv; pin withDISABLE_UPGRADES=true. (auto-memoryreference_irv_ml1_comfyui_mmartial) Archived 2026-06-21. -
[2026-06-18]ComfyUI custom nodes break on version-assumption drift — box runs 0.24.1; TeaCache importsprecompute_freqs_cisat MODULE level (guard the LTX-only import).pip install tensorrtdefaults to cu13 → usetensorrt-cu12. Archived 2026-06-21. -
[2026-06-17]Mistral HF→NVFP4 quant: the placement knob is the whole game.device_map="cpu"(CPU-resident, sequential onload) works;"auto"OOMs,max_memoryoffloads to meta. Read shards with plainread()+safetensors.torch.load(bytes), NOTsafe_open(mmaps the 50 GB shard → ENOMEM on/tankZFS). Archived 2026-06-21. -
[2026-06-17]HF-format Mistral Small 4 is UNSERVEABLE on vLLM — no HFMistral4backbone; serves ONLY via the native loader. A HF-format quant MUST be converted to native first. Archived 2026-06-21. -
[2026-06-20]A full disk wedges gitea's Actions notifier SILENTLY — and it STAYS wedged after disk recovers; only adocker restart giteaclears it. After the 94 GB clickhouse disk-full event, gitea stopped CREATING workflow runs on push (push succeeds, ref lands, but NO run spawns — newest run stale, queue empty), while the act_runner stayed registered. NOT run-pickup, NOT disk-now (52% free), NO gitea errors/panics — a silent notifier stall. Hit BOTH vh/arbo (comfy-dev) and vh/Worldtree (worldtree-dev's deploys) → it's global, not repo-specific. Fix:docker restart giteaon ana-docker (it had been up 2 weeks, never bounced). A restart does NOT retroactively fire pushes made during the outage — re-push/re-trigger after. Reinforces the deferred docker-daemon-default log-cap fix (the disk-full that started it can't be allowed to recur). Archived 2026-06-25. -
[2026-06-20]Mistral-Medium-3.5-128B NVFP4 (RecViking) on ana-ml2 GPU 0 — ABANDONED, too slow (operator confirmed). Stood up as a temporary speed-check displacing mistral-small-4; measured base ~19.2 tok/s decode on one Blackwell (vsgen/Qwopus3.5-122B ~92.7 tok/s warm) → confirmed the operator's "too slow" suspicion. KEEP these serving findings: (1) vLLM nightly loads the HF-format NVFP4 weights DIRECTLY — no Mistral native-convert (unlike Small 4, samemistral3arch) — via the FlashInfer Cutlass NVFP4 kernel +turboquant_4bit_ncKV; TP=1 fits the ~70 GB NVFP4 on one 96 GB Blackwell. (2) EAGLE was a dead end: the official native FP8 head (mistralai/Mistral-Medium-3.5-128B-EAGLE) crashes in CUDA-graph replay with graphs on, and nets NO speedup with--enforce-eager(~18.5 vs ~19.2 base) — likely low draft acceptance against the NVFP4 (non-official-FP8) base. Untracked workspace files (stacks/mistral-medium-3.5/+playbooks/serve-mistral-medium-3.5.yaml) removed. ⚠️ Weights still staged on ana-ml2/tank/aimodels/mistral-medium-3.5-{nvfp4,eagle}(~70 GB+) — pending operator OK to free. Archived 2026-06-25. -
[2026-06-20]A 94 GB unrotatedlangfuse-clickhousejson.log was the REAL disk-filler (not image bloat) — there was NO log rotation anywhere. No per-stacklogging:limit and no docker-daemon default → ClickHouse's verbose stdout grew unbounded to ~94 GB and filled ana-docker's/(healthchecks then failed fleet-wide onrunc /tmp: no space left). Lesson: on a full disk, the symptom (all-unhealthy) is the FORK-can't-write healthcheck, not the containers; find the runaway via per-container-dirdu, notdocker system df. The systemic fix is a daemon-defaultlog-opts(max-size/max-file) — NOT just per-service patching. Archived 2026-06-25. -
[2026-06-20]OmniVoice's upstream "RTF 0.025 / 40×" does NOT hold — diffusion has a ~fixed per-call overhead → TTFA floor + multi-chunk streaming is a net loss. Measured ~2.8× (32-step) / 5.6× (16-step) on the 3090; every chunk costs ~the same regardless of length, so naive per-sentence streaming triples total gen time + starves. Use few/aggressive chunks; chatterbox-fast (autoregressive) stays the low-TTFA front-end. Archived 2026-06-25. -
[2026-06-20]Named buildx builders accumulate cache the standard prunes MISS.docker image prune -a+docker builder prunedon't touchbuildx_buildkit_<name>-builder0_statevolumes (per-builder buildkit state). Prune them withdocker buildx prune --builder <name> -af, ordocker volume rmorphaned ones (builder already removed). Archived 2026-06-25. -
[2026-06-25]althing "unreachable: " can MASK an app-level 500. Raw network was clean; root cause = receiver DB agents-table not synced with the config roster → delivery 500'd "unknown to: ", MAPPED to "unreachable". Diagnose: raw curl to :8087 + connect-probe ⇒ NOT network. Fixed in althing v0.17.1.reference_nh3_extdev_althing_mesh. Archived 2026-07-08. -
[2026-06-20]rest-server.htpasswd: permission denied= the ana-nas NFS mount FAILED (ghost file on the local mount point), NOT a decommission.mnt-backup.mountstuckfailed(fstab baredefaults) → rest-server serves an empty local dir. Recovery in disaster-recovery.md. Archived 2026-07-08. -
[2026-06-20]The DEFAULTssh ana-dockerislkraven(no NOPASSWD) — butssh infra-ops@ana-dockerHAS NOPASSWD root. Asudo cpas lkraven silently failed → nearly punted the rest-server recovery. Reach forinfra-ops@ana-dockerfor sudo ops. Archived 2026-07-08.
Archived 2026-08-02 — Recent decisions (archived)
2026-07-08-worldtree-mimir-deploy-blocker-resolved-mid-session
[2026-07-08]worldtree Mimir deploy-blocker resolved (mid-session): syncedpersona.envelopes.assistant+envelope_grants:[]verbatim from the baked canonical into BOTH corviduo-dev instances (demo+personal), YAML-validated via each container's own parser; worldtree-dev cleared to push the Mimir-bound image. (Was my parked R32 1C envelope-mirror come due — see reference_corviduo_dev_emergency_ops config-sync recipe.)
Archived 2026-08-02.
2026-07-09-two-parked-items-closed-phantom-qwen3-6-35b
[2026-07-09]Two parked items closed: phantomqwen3.6-35b-a3balias VERIFIED already-gone; ana-docker docker log-cap SOLVED no-bounce. (1) Phantom: absent from/v1/models+/model/info(config+DB registry), zero litellm log refs — the parked "400s in /v1/models" note was STALE (already cleaned in the 2026-07-08 gen repoint to-heretic); bare token survives only in 2 config COMMENTS (lines 76/80). Nothing to remove. (2) Log-cap: running containers were UNCAPPED (182M json-logs, top offender 59M) because daemon.json'smax-size 10m/max-file 3only applies to containers CREATED AFTER a daemon restart — it never reaches already-running ones. No-bounce fix =/etc/logrotate.d/docker-containers(copytruncate — dockerd opens json-logsO_APPENDso truncate-in-place resets cleanly, no sparse-file corruption;size 10M,rotate 3,compress,su root root), auto-picked-up by the dailylogrotate.timer. Force-ran + gzipped the frozen.1archives → 182M → ~55M (44M active + 11M gz), every container kept its multi-week uptime (zero bounce, verified). LATENT FOOTGUN FLAGGED (not yet fixed, operator's call): daemon.json declareslive-restore:truebut the RUNNING daemon has it FALSE (daemon.json was edited after the last daemon start, never reloaded) → the NEXTsystemctl restart docker/ crash / pkg-upgrade bounces ALL ana-docker containers once. Fix WITHOUT a bounce =systemctl reload docker(SIGHUP loads live-restore into the running daemon; log-opts are NOT SIGHUP-reloadable, which is why logrotate — not the daemon cap — is the enforcer for running containers).
Archived 2026-08-02.
2026-07-09-morpheus-tts-off-the-shelf-voice-pipeline-shipped
[2026-07-09]mOrpheus TTS off-the-shelf voice pipeline SHIPPED end-to-end (irv-ml1) + wired into gateway-chat. Full arc (commits): gen served-name honesty rename aeon→qwen3.6-35b-a3b-heretic (99a4a17, vLLM served-name + litellm refs, so /v1/models + spend-logs name the real model); permanent 2-container stack (01eedd8); gateway-chat auto-voice quoted dialogue (c948013); streaming decode TTFA 4.5s→0.8s (da76829); max_tokens 1200→2400→3500 with a context-clamp (f363fe6,0655a37— long lines were clipping at 14.6s, andrepetition_penalty1.1 is LOAD-BEARING: at 1.0 the model never stops); AudioContext resume-on-gesture no-sound fix (033f368); pre-chunk by QUOTED SECTION not sentence for prosody (a1f3023→f295cc1); staged clone voices baddy/beatrice/whisper (0655a37+ runtime .wav/.txt in the voices dir); agent voicing prompt (a573514). Load-bearing config, all encoded in stacks/mOrpheus/: bf16 not FP8, image v0.23.0 not latest, GPU=3090 not A6000, rep_penalty 1.1. Serving-viability confirmed: vLLM concurrency near-linear to 8× (707 tok/s).
Archived 2026-08-02.
2026-07-09-granite-gen-memory-extractor-bind-host-synced-on
[2026-07-09]granite→genmemory_extractorbind host-synced on demo+personal Worldtree (Vuong-directed, #335 Slice-4). Changedmodel_roles.yamlmemory_extractorbinds.catalog_idsummarizer→gen(overrides intact: thinking:false/temp0/8192) on BOTH/opt/worldtree{,-personal}/config;memory_distillerleft onsummarizer(range-scoped sed/memory_extractor:/,/memory_distiller:/— the naive global replace would've hit both); backups*.bak-preqgen-20260709; validated via each container's OWN yaml parser. DEMO LIVE on gen (b43d501e516732dauto-deployed mid-edit + its restart RACED my edit by ~2min → I restartedworldtree-worldtree-api-1to activate; healthy, live process resolves memory_extractor=gen). PERSONAL NOW LIVE on gen too — Vuong authorized the restart (via wt-dev); restartedworldtree-personal-worldtree-api-1after a PRE-FLIGHT that ran the app's OWNload_model_roles()(core/llm/roles.py:121) against the synced config INSIDE the runningc9986cdcontainer:genin catalog, all 9 roles resolve, noDanglingBindingError→ proven safe on the OLDER image BEFORE touching it (model_roles-delta-alone clean; no full-config-set sync needed). StartedAt 20:50:55Z, healthy, resolves gen. BOTH instances live on gen. LESSON: the bind-mount/opt/worldtree*/configSHADOWS the baked/app/config-defaults/→ the deploy alone never updates the ACTIVE config; the host edit is required AND a restart activates it (role registry cached at boot) — pre-stage BEFORE the deploy's restart or you race it. FOLLOW-UPS (non-blocking): (a)memory.extractor.user_passparity block → self-serve from the b43 bakeddefaults.yaml(pydantic-default no-op); (b) stalegenprovider description (Mistral-Small-4 → qwen3.6-35b-a3b-heretic) → wt-dev owns the REPO-sideproviders.yamlfix (operator's call — NOT purely cosmetic: the gen/dialogue + classifier entries carry Mistral-Small-4 SAMPLING defaults that drive mask/lofn/forseti/mimir dialogue, so wt-dev re-validates for qwen), host cosmetic sync pairs when it deploys. Gave wt-dev the VERIFIED canonical 4-alias set (backends+samplers read from the LIVE gateway config, not the doc); correcteddocs/pfi/model-sampler-defaults.mdseat 4 (had lagged QwQ-RpR-v4 → Deckard-PKD; live gateway was always Deckard). Operator SCOPED IN the character-RP re-point (2026-07-09): character→char-rp / thoughtful-character→char-rp-reasoning (character-rp per wt-dev's role semantics), moving character RP off the GENERAL qwen onto the dedicated Magidonia/Deckard seats. Relayed to wt-dev w/ the mapping principle + a SAMPLER-OVERRIDE warning (DROP character-rp's old temp0.75/top_p0.85 overrides — carried onto the dedicated seats they'd clobber the canonical RP tuning DOWNWARD) + ratatoskr-reach note (role call is transparent but Magidonia/Deckard quality/latency differs from gen). DONE 2026-07-09: wt-dev committed 5d4fa4a (v1.0.0b44, UNPUSHED — operator drives push); operator directed host-ahead-of-push, so I sourced BOTH config files directly from that unpushed commit (local~/development/Worldtreecheckout — capital W;git show 5d4fa4a:config/…) + mirrored VERBATIM to/opt/worldtree{,-personal}/configon demo+personal, paired-pre-flighted via the app'sload_model_roles()(no DanglingBinding), restarted both → LIVE: character→char-rp, thoughtful-character + character-rp→char-rp-reasoning, memory_extractor→gen preserved. Backups*.bak-prerp-20260709. context_window VERIFIED (llama.cpp /props + char-rp-gguf.env): char-rp 131072, char-rp-reasoning 262144 (gave wt-dev to patch the repo from its interim 32768). HOST AHEAD of repo-remote until the operator pushes 5d4fa4a (baked config converges with the bind-mount on push+deploy). GOTCHA: demo≠personal — PERSONAL was already partly re-pointed (2026-07-06 AEON-era character→char-rp) so its delta was mostly stale-AEON-descriptions→Magidonia/Deckard- character-rp + stripping personal's char-rp
default_paramstemp0.7/top_p0.8 that CLOBBERED the gateway RP tuning downward; DEMO had no char-rp catalog entries at all (b44 adds them). Diffed each instance vs b44 before applying (both deltas = expected changeset only, nothing instance-specific clobbered). wt-dev PATCHED the context_window in b45/3384a37 (char-rp 131072, char-rp-reasoning 262144). BUMPED HOST-AHEAD on both instances (operator-directed 2026-07-09): mirrored b45's providers.yaml →/opt/worldtree{,-personal}/config, restarted, verified LIVE (char-rp ctx 131072, char-rp-reasoning 262144, bindings intact); backups.bak-b44interim-20260709. HOST now = b45 canonical (providers.yaml) + b44 (model_roles unchanged b44→b45). STILL PENDING: (1) operator's batched push of b44+b45 (5d4fa4a+3384a37) to converge the repo-remote — host is ahead, no fork; (2) user_pass parity block (defaults.yaml — NOT in either, separate). Threads01KX3SGH/01KX48QP(worldtree-dev), monitor armed. See reference_corviduo_dev_emergency_ops.
- character-rp + stripping personal's char-rp
Archived 2026-08-02.
2026-07-09-granite-gen-memory-extractor-bind-green-lit-for
[2026-07-09]granite→gen memory_extractor bind GREEN-lit for worldtree-dev (Worldtree #335 Slice 4). Answered their VRAM/concurrency headroom check: gen (qwen 35B-A3B heretic) has ample headroom for ~2 bursty idle-triggered extractor calls (fixed 0.37 util; KV pool runs 0-2%; --max-num-seqs 16, near-linear batching). Corrected their stale "gen = Mistral Small 4 / 119B-6B" belief (gen IS the qwen 35B-A3B heretic since 2026-07-08). This bind is INDEPENDENT of the full granite RETIRE (reclaim ~32GB on ana-ml2 GPU1) — that stays the operator's call, pending brokkr R33 portfolio + production-concurrency due-diligence. Tracked: althing thread 01KX3SGH… (worldtree-dev) + brokkr's gen-absorbs-granite consult (thread 01KX2V32…) + reference_litellm_gateway.
Archived 2026-08-02.
Archived 2026-08-02 — Tried and abandoned (archived)
2026-07-01-a-personal-worldtree-ci-deploy-that-fails-85s
[2026-07-01]A personal-Worldtree CI deploy that fails ~85s in with "not found / unauthorized" is usually the pull-only-vs-build RACE, not registry-auth.deploy-personal.ymlis PULL-ONLY but fires on thestaging/vXtag simultaneously withdeploy.yml's build → pulls before the push finishes. FIX: re-run once built, or gate onworkflow_run: completed.
Archived 2026-08-02.
2026-07-04-on-prem-t1-train-that-keeps-any-ana
[2026-07-04]On-prem T1 train that keeps ANY ana-ml2 serving up = ~6-8 DAYS (1-GPU + NVMe ZeRO-Infinity offload; MoE ~10B-active cuts FLOPs but NOT the 244G base's param I/O). The only fast on-prem path is a FULL ana-ml2 shutdown (both GPUs + the ~421G vLLM RAM freed → base fits in the 566G CPU RAM) → CPU offload → ~1-day full-fleet outage. Cloud (no offload) = hours.reference_t1_cloud_train_plan.
Archived 2026-08-02.
2026-07-04-a-systemd-user-daemon-that-shells-out-to
[2026-07-04]A systemd--userdaemon that shells out to~/.cargo/bin/~/.local/bintools needs an explicitEnvironment=PATH— the minimal--userdefault silently drops them. The althing herald lostzellij→ silentpane-missfor ALL config-backed TUI/pane agents; CC + FIFO routes were unaffected, so it was invisible from a CC session.reference_nh3_dev_althing_herald.
Archived 2026-08-02.
2026-07-09-fp8-breaks-morpheus-audio-token-generation
[2026-07-09]FP8 breaks mOrpheus audio-token generation.--quantization fp8on the 3B → 0 valid SNAC frames even at GREEDY (degenerate audio+text mix, no start-of-speech); bf16 is clean (28/28 frames). Quant-breaks- TTS, same class as the Angel-NVFP4 lesson below. bf16 is REQUIRED (so the operator's "util 0.1" wish is moot — the bf16 weights alone are 6.6GB). NB the raw-token benchmark RTF 0.50 was fp8+graphs = never real.
Archived 2026-08-02.
2026-07-09-sentence-chunking-tts-loses-prosody
[2026-07-09]Sentence-chunking TTS loses prosody — generating each sentence cold flattens the intonation that spans a line. Chunk by QUOTED SECTION (whole quote = one gen call). Also:repetition_penalty>1.1 BREAKS cloning (penalizes the ~1100 in-context reference audio tokens; keep ≤1.1 on the clone path).
Archived 2026-08-02.
2026-07-09-hf-whisper-datasets-aren-t-actually-whispered
[2026-07-09]HF whisper datasets aren't actually whispered. Claris-Whispered-English measures voiced 0.8 (not a whisper) + IPA transcripts;datasetsaudio decode needs torchcodec (wants CUDA-13, incompatible w/ the cu124 venv). LPC DSP-whisperize went unstable (NaN). kokoroaf_nicoleIS a genuine whisper (voiced 0.24) — that (operator's pointer) is the working whisper reference source, not TTS-voice screening or dataset-hunting.
Archived 2026-08-02.
Recent decisions (archived 2026-08-03 batch)
2026-07-14-nvfp4-mtp-fast-char-rp-reasoning-seat-landed
[2026-07-14]NVFP4+MTP fast char-rp-reasoning seat LANDED + LIVE + gateway-repointed + VRAM-tuned. Modelopt-format re-quant made MTP work. The load-crash root cause = vLLM 0.24 does NOT propagate modeloptexclude_modulesto the spec-decode DRAFT model → the bf16 mtp head gets quantized → shape crash; NO checkpoint config fixes it (is_layer_skippedis exact-membership, and the drafter never sees the mtp excludes) → workaround = a mountedsitecustomizethat force-skipsmtp.*inis_layer_skipped(upstream vLLM bug to file). Productionized as compose stackheretic2-charrp-reasoning(:8018, workaround baked in). Gatewaychar-rp-reasoningalias fixed: repointed off the stale GGUF served-namedeckard-pkd-27b, addedenable_thinking:true, droppedmin_p(MTP-incompatible), canonical samplers temp1.0/top_p0.95/top_k20. Rebalanced GPU0 (gen 0.37→0.30/16-seq/256K + reasoning 0.39/16-seq/192K+MTP + char-rp 128K, 2.7GB free). All 4 gateway roles verified; vLLM reasoning-parser confirmed leak-free (unlike the GGUF budget-forcing). Full record + the 4 quant landmines indocs/runbooks/heretic2-nvfp4-mtp-seat.md; committed982c319. Open (non-blocking): brokkr P00 (seat is live ahead of it), retire the stopped GGUF reasoning seat, file the vLLM bug.
Archived 2026-08-03.
2026-07-14-nvfp4-quant-chase-resolved-gibberish-pivoted-to-modelopt
[2026-07-14]NVFP4 quant chase RESOLVED (gibberish) + PIVOTED to modelopt for MTP. One ~40-min GPU0 window. Root-caused the!!!!to the quant NAMESPACE (text-onlyAutoModelForCausalLM→model.layers.*keys; vLLM serves onlyQwen3_5ForConditionalGeneration, which needsmodel.language_model.*) — found from config diffs + vLLM source with ZERO GPU time; fixed by loading asAutoModelForImageTextToText. NVFP4 now serves COHERENT (validated greedy). BUT base NVFP4 ≈53 tok/s ≈ GGUF's 59.5 at batch-1 (no single-stream win) AND MTP = 0% acceptance on compressed-tensors (bf16 mtp head only loads on the modelopt format). Operator chose to pursue a modelopt-format re-quant (the only path to the 2-4× MTP goal; AEON-proven on this exact Qwen3.6-27B arch). Scoped + de-risked: AEON/tank/aimodels/qwen36-27b-aeon-nvfp4= the modelopt reference (quant_method modelopt, 1967 tensors, 15 bf16 mtp keys identical to graft); nvidia-modelopt 0.45.0 installs +mtq.quantize/NVFP4_DEFAULT_CFG/export_hf_checkpointAPI confirmed; pipeline unchanged except swap llm-compressor→modelopt. Seats restored; char-rp-reasoning stays GGUF. Full plan in Current state ★ section.
Archived 2026-08-03.
2026-07-14-pursue-the-nvfp4-mtp-fast-char-rp-reasoning
[2026-07-14]Pursue the NVFP4+MTP fast char-rp-reasoning seat to completion (Vuong-directed via /snapshot: "chase the nvfp4 quant, we know it works, write down the recipe"). Full recipe + diagnostic ladder in Current state / in-flight above. Artifacts on ana-ml2/tank/aimodels/heretic2-nvfp4-work/+ scripts committed in eshpfiservices/heretic2-nvfp4-quant/.
Archived 2026-08-03.
2026-07-14-char-rp-reasoning-seat-deckard-pkd-neo-code
[2026-07-14]char-rp-reasoning seat: Deckard-PKD → NEO-CODE = Heretic2-Thinking (Qwen3.6-27B) — R36 gate PASSED (tools 0.967, #355 runaway ELIMINATED). #355 was MODEL-level (Deckard emitted qwen3_coder XML malformed → mangled args → retry-runaway), NOT the reasoning-budget bug; NEO-CODE emits it clean. Custom llama.cpp KEPT (qwen3_coder parse — stock b8840 predates it — + PR#25544). Committed f960a73; full record auto-memory charrp-custom-llamacpp-pr25544.
Archived 2026-08-03.
2026-07-14-soong-lab-webhook-auto-deploy-real-root-cause
[2026-07-14]soong-lab webhook auto-deploy real root cause = giteawebhook.ALLOWED_HOST_LIST(wasexternal, 10.100.0.0/16= NH3-only; blocked corviduo-dev's Anaheim10.250.x→ gitea refused to deliver, never opened the connection). Fixed to fleet-wide10.0.0.0/8(app.ini[webhook]) + gitea restart; listener now logs every delivery. The ufw10/8open (also this session) was a real-but-secondary gap. Committed462d528.
Archived 2026-08-03.
2026-07-13-355-residual-root-cause-supersedes-the-litellm-gateway
[2026-07-13]#355-residual ROOT CAUSE (supersedes the "LiteLLM gateway holds while seat idles" entry below — that was DISPROVEN). char-rp-reasoning enters a non-terminating REASONING loop (tool-call-retry planning) and runs tomax_tokens=32768(~22 min @ 24.7 tok/s, ~13% of requests); the seat GENERATES all 32768 tokens (not idle), and--reasoning-budget 400is NOT enforced. 3-source-confirmed (spend_logs completion_tokens=32768 ×4; seat eval-time log; pcap 100%-reasoning_contentdeltas). Server-side fix wanted (operator: no max_tokens ceiling) → routed to brokkr (accepted, pulled dvalin). Lesson (again): confirm before concluding — the seat-idle claim came from reading only the ≤73s requests + missing the concurrent 32768-token slots. See ACTIVE 1.
Archived 2026-08-03.
2026-07-13-deploy-speed-real-bottleneck-uv-sync-memory-s
[2026-07-13]Deploy-speed real bottleneck ≠ uv sync (memory's assumption was wrong). Buildx step log:chown -R /app= 251s (copy-up of the root-owned venv into a fresh layer), uv sync only 35.6s, registry layer cache already wired. Fix = drop/appfrom the chown (validated safe: zero /app runtime writes on both live instances) + uv cache-mount. Shipped as PR #359 (branch off origin/main@b60), worldtree-dev green-lit. Expected ~5min off (~11→~6min). Runner-side BuildKit cache task (b) was already done → moot.
Archived 2026-08-03.
2026-07-13-wt-355-residual-300s-hang-localized-to-our
[2026-07-13]WT #355 residual 300s hang localized to OUR LiteLLM gateway (holds 2 char-rp-reasoning requests ~21 min while the seat idles), NOT the seat — Deckard seat EXONERATED (completes ≤72s;--reasoning-budget 400forecloses a mid-thinking hang). Corrects worldtree-dev's "seat wedging" diagnosis. Decisive next = the FIN-check (pcap on corviuo). See in-flight ACTIVE 1. [SUPERSEDED 2026-07-13 — see the ROOT CAUSE entry above; the gateway-hold/slot-leak theory was disproven, the seat was generating 32768 tokens.]
Archived 2026-08-03.
2026-07-13-wt-355-turn-lifecycle-fix-validated-on-worldtree
[2026-07-13]WT #355 turn-lifecycle fix VALIDATED on worldtree b60 — wedged turns self-terminate cancelled/stalled at the 300s stall-watchdog (turns 2064/2065 vs pre-b60 2061's 16-min no-terminal). worldtree-dev filed follow-ons #356 (rehydrate Tier-3 ctx on resume — the recreate-durability gap), #357 (reclaim orphaned active-turn locks), #358 (LLM-provider read-timeout audit); surfacing to Vuong to prioritize.
Archived 2026-08-03.
2026-07-13-worldtree-deploy-bottleneck-the-image-build-11-min
[2026-07-13]Worldtree deploy bottleneck = the image build (~11 min of a ~12 min deploy), root cause the Dockerfileuv sync ... --no-cache+ no BuildKit cache-mount (re-downloads all deps cold every build). Fix split: worldtree-dev Dockerfile cache-mount diff + infra-ops runner-side persistent BuildKit cache. Config-only changes skip the build entirely (pinned recreate).
Archived 2026-08-03.
2026-07-13-ledger-tier-3-consumer-ledger-miranda-provisioned-on
[2026-07-13]Ledger tier-3 consumerledger:mirandaprovisioned on personal :8081 (key b38932f5, GPG-delivered+shredded, allowlist 10.100.10.50:8770 live);assistant+thoughtful-assistantcapability roles added (gen/gen-reasoning) on personal+demo, canonical d8bd497. Chosen instance = personal (the tier-3-consumer instance, ratatoskr+soong-lab colocated).
Archived 2026-08-03.
2026-07-10-heimdall-grant-ratatoskr-affect-full-on-personal-worldtree
[2026-07-10]Heimdall grant: ratatoskraffect.fullon PERSONAL Worldtree (operator-approved, worldtree-dev R34-v1 request). Added allow-ruleratatoskr-affect-full-allowto/opt/worldtree-personal/config/policies.yaml(principal.user_ids:["ratatoskr"], actionaffect.full, resource*, effect allow), mirroring the #347session-history-write-ratatoskrrule exactly + placed right after it. WHY user_ids-based (not tier): ratatoskr's personal key is the minimal readonly-admin observability tier, which is NOT in the tier-basedaffect-render-baseline-allow(anonymous/user/free/pro/admin) → needs an explicit user_id grant, same as #347. R34-v1 (b46, committed UNPUSHED) gatesaffect.emitdominant_emotionegress by exposure ceiling (affect.full|safe → present; neither → null); this grant keeps ratatoskr's view alive across the b46 deploy. Surgical exact-string insert (preserves comments), backuppolicies.yaml.bak-pre-affectfull-20260710, validated via the CONTAINER's own yaml parser (35 rules, +1, payload confirmed). NOT restarted — deliberate: rule is on the bind-mount (shadows baked), INERT until b46 gating ships, so the b46 CI/CD deploy restart activates it (no live-session blip now). Demo untouched (personal-only per key scope). Replied to wt-dev (thread 01KX6DB3…) offering an immediate restart if they want it live for pre-b46 testing. See reference_corviduo_dev_emergency_ops.
Archived 2026-08-03.
2026-07-10-comfyui-v0-27-1-success-on-irv-ml1
[2026-07-10]ComfyUI v0.27.1 SUCCESS on irv-ml1 (operator-confirmed execute-now) — landed on torch 2.12.1, SageAttention preserved, crash-loop AVOIDED. The prior attempt (entry below) crash-looped because a torch 2.12.1→2.13 bump broke SageAttention's ABI. This time I checkedgit diff v0.24.1 v0.27.1 -- requirements.txtFIRST and found core v0.27.1 leavestorchUNPINNED → the version bump does NOT require torch 2.13 (that came only from the mmartial boot-upgrade). So:git checkout v0.27.1(clean tree) →pip install -r requirements.txtas uid 1000 with a torch-pin constraint file (torch/vision/audio pinned to current +cu129) to block any transitive bump → torch stayed 2.12.1, SageAttention 2.2.0 untouched. Added decord 0.6.0 (fixed SAM3Segment).docker restart comfyui→ healthy,/system_statscomfyui_version=0.27.1, "Using sage attention", HTTP 200, DB migrated 0003→0004. Reported the divergence to comfy-dev (thread 01KX6D3C…, reply pending) + asked whether LTXV 2.3 needs a separate torch-2.13 follow-up (their domain; Krea-2's ≥0.25 need is met by 0.27.1). LESSON: before a mmartial ComfyUI version bump,git diff <old> <new> -- requirements.txt— if torch is unpinned, bump the CODE without touching torch (constraint-pin it) and compiled exts (SageAttention) survive.docker execlands as uid 1025(comfytoo), not 1000 — use-u 1000+ the venv python/comfy/mnt/venv/bin/python. See reference_irv_ml1_comfyui_mmartial.
Archived 2026-08-03.
2026-07-10-comfyui-0-25-x-bump-on-irv-ml1
[2026-07-10]ComfyUI 0.25.x bump on irv-ml1 ATTEMPTED → FAILED → ROLLED BACK (snapshot saved it). comfy-dev requested (Vuong-authorized) bumping the irv-ml1comfyuistack (mmartial image,/opt/docker/compose/comfyui/, 0.24.1) to 0.25.x for Krea-2 + LTXV 2.3. TWO FINDINGS: (1)DISABLE_UPGRADES=false/USE_PIPUPGRADE bumps the VENV (torch 2.12.1→2.13.0 + deps) but does NOT advance the ComfyUI CODE checkout (/comfy/mnt/ComfyUI=/worktank/comfyui/run/ComfyUIstayed 0.24.1 — pinned/detached git, comfy-dev's domain). (2) the torch bump broke SageAttention (2.2.0_fused.soundefined-symbolc10::impl::cow::materialize_cow_storagevs torch 2.13.0) →--use-sage-attention(REQUIRED launch flag in COMFY_CMDLINE_EXTRA) crash-looped ComfyUI. Net: broke the working state, zero 0.25.x payoff. ROLLBACK WORKED: pre-bump 16G venv snapshot/worktank/comfyui/venv-snapshot-comfyui-0.24.1-20260710.tarrestored (torch 2.12.1 + working SageAttention), re-pinned DISABLE_UPGRADES=true, recreated → healthy on 0.24.1, serving :8188. Broken venv parked at/worktank/comfyui/run/venv.broken-torch213-20260710. CORRECTED PATH (sent comfy-dev, thread 01KX655V): comfy-dev git-advances the ComfyUI checkout to 0.25.x + reqs → I handle the torch bump + SageAttention rebuild-against-2.13.0 + re-pin (snapshot stays as the net). LESSON: mmartialDISABLE_UPGRADESgates ONLY the venv pip-upgrades, NOT the ComfyUI git checkout; a torch bump breaks compiled exts (SageAttention) → rebuild-after is mandatory. Bump BLOCKED pending comfy-dev's git-advance. Stack: A6000 (NVIDIA_VISIBLE_DEVICES=1), lkraven-owned compose+venv (uid 1000, no sudo needed), COMFY_CMDLINE_EXTRA OOM flags preserved.
Archived 2026-08-03.
2026-07-10-biweekly-open-weight-releases-scan-cron-set-up
[2026-07-10]Biweekly open-weight-releases scan cron set up for brokkr-smithy (Vuong-authorized). Durable systemd --user timer on nh3-dev (brokkr-landscape-scan.timer, OnCalendar*-*-01,15 09:00:00America/Los_Angeles, Persistent=true; linger on) →.service→ wrapper~/.local/bin/brokkr-landscape-scan.shruns headlessclaude -p "$(cat ~/.config/brokkr-landscape-scan/prompt.txt)" --dangerously-skip-permissionsin~/development/brokkr-smithy(ALTHING_HANDLE=brokkr-smithy-dev; explicit PATH — the --user minimal-PATH footgun; per-run logs~/.local/state/brokkr-landscape-scan/). Prompt = brokkr's payload verbatim (LLM/image/TTS new-release sweep → ranked synthesis → commit+push+notify). VALIDATED: git-push non-interactive (BatchMode ls-remote to gitea, passphraseless key — no agent), headless claude auth (READY smoke). VALIDATED END-TO-END 2026-07-10 (manual run, exit 0): web-sweep→synthesis→commit2ed2f29→PUSH of scan #2 (open-weight-releases-2026-07-24.md); triaged dwarf input + caught baseline errors, quality strong. HANDLE-COLLISION caught+FIXED — the headless scan shared handle brokkr-smithy-dev with the LIVE session + raced its inbox (eitri's dwarf-reply got stolen by the live monitor); registered a dedicated brokkr-scan-dev handle (add-handle, driver=none) + repointed the wrapper + rewired step-5 notify →althing-cli post --to brokkr-smithy-dev(NO vuong althing handle exists — confirmed). model=default--max-turns 80. First run under the new handle = 7/15. Off-cycle 07-24 doc is a validation artifact (scheduled 1st/15th runs date to their own run-date, no collision) — operator naming-convention call pending. NEXT AUTO-RUN 2026-07-15 09:00 PDT. Manual validation/first run =systemctl --user start brokkr-landscape-scan.service. Open w/ brokkr (thread 01KX63G6): confirm notify-Vuong handle/mechanism + session handle + model/turn-cap. NEXT brokkr task (operator-sequenced after this): TTS audition env — Higgs-TTS-3 + ZONOS2 + Chatterbox baseline, TTFA/RTF + blind-A/B web-listen (thread 01KX6371; needs GPU-placement + HF-token feasibility pass first; brokkr delivers the prompt set after the env's up; protocol doc in brokkr-smithy repo).
Archived 2026-08-03.
2026-07-08-rp-seat-campaign-closed-char-rp-magidonia-24b
[2026-07-08]RP-SEAT CAMPAIGN CLOSED — char-rp = Magidonia-24B-v4.3 (128K), char-rp-reasoning = Deckard-PKD Qwen3.5-27B (256K); both GGUF/llama.cpp on ana-ml2 GPU0 alongside gen (35B-A3B, util 0.37), ~4G GPU0 margin. Arc: (1) replaced broken Angel NVFP4 with Magidonia prose + QwQ-RpR-v4 reasoning (b268f93); (2) max-context via q8_0 KV (f570604); (3) canonical samplers for all 4 gateway seats, dvalin-derived + char-rp A/B-tuned (aac4bcf); (4) rebalanced gen 0.40→0.37 to fund char-rp 128K (f49c4e4); (5) RE-A/B'd the reasoning seat (operator wanted a DRY-tolerant model): Deckard WON on brokkr's frozen scorer (composite 2.176, 0/30 loops, 0/30 refusals) over RpR-v4 (3.716, 1/30 loop), Pantheon-Reasoning (1.383 but 7/30 refusals), Snowdrop+Gembrain (llama.cpp template-incompat) — deployed (5f79b40); (6) Deckard→256K (41305bf); (7) dvalin CONFIRMED Deckard samplers = the live A/B set is canonical (4954ca0). GATE LESSON: a llama.cpp reasoning seat needs a STOCK template that natively opens<think>/enable_thinking(Qwen3.x/QwQ pass; ChatML + Gemma-4 fail) — no monkeypatching. INFRA: llama-swap b8840 can't load Qwen3.6/Gemma-4 archs →ghcr.io/ggml-org/llama.cpp:server-cuda(pulled on ana-ml2).
Archived 2026-08-03.
2026-07-08-off-the-shelf-inference-pivot-executed-serve-curated
[2026-07-08]OFF-THE-SHELF INFERENCE PIVOT executed — serve curated abliterated models, stop home-training. Final topology: gen =llmfan46/Qwen3.6-35B-A3B-uncensored-heretic-NVFP4-Experts-Only(LIVE, modelopt, vision, util 0.40), char-rp = an RP unicorn to be found on fresh context (see Current state). Intermediate steps ABANDONED: Pantheon-Reasoning-27B (served briefly as gen — refuses dark fiction via DeepSeek-distilled refusal-reasoning, see Tried); Pantheon-27B-with-MTP for RP (bf16 MTP won't load on the compressed-tensors path); Angel MS3.2-24B (my NVFP4 quant = garbage). Prefer EXISTING community NVFP4/GGUF quants over self-quanting ("don't quant unless you have to" — operator). GGUF serving is now on the table for RP (NEVER Ollama). Gateway sampling-defaults wiring still PENDING.
Archived 2026-08-03.
2026-07-08-dpo-was-silently-running-3-epochs-harness-gap
[2026-07-08]DPO was silently running 3 epochs (harness gap) → KILLED at epoch 1.2, retargeted to 0.3 epochs (operator call). Root cause:DpoConfighad NOepochsfield +_dpo_config_kwargsdidn't passnum_train_epochs→ DPO fell through to trl DPOConfig's default 3.0 (SFT correctly pins 1 via SftConfig.epochs- _sft_config_kwargs). Objective SATURATED by
epoch 0.27 (loss0, grad0, acc 1.0, margins27 flat — the off-policy qwopus rejected pairs are trivially separable), so epochs ~0.3→3 were pure over-optimization + a ~6.5h outage. No mid-run checkpoint (save_steps 500 > total steps; save only at end) → killing lost the run. FIX (3 edits to deployed harness, mtf-dev to canonicalize):DpoConfig.epochs: float = 1(mirrors SftConfig, float for fractions);_dpo_config_kwargsnow passes"num_train_epochs": cfg.epochs; recipedpo.epochs: 0.3. GPU-free verified (dpo.epochs=0.3 → num_train_epochs=0.3). Relaunched at 0.3 epoch (~30min precompute + ~12min train = ~45min). DONE + SANITY-CHECKED (exit 0, ~70min wall: ~30min fixed precompute + 45 steps @ ~51s/step; train_loss 1.4e-5 @ epoch 0.301). Freshdata/spike/dpo_adapter/adapter_model.safetensors(123MB) + checkpoint-45 banked. 3-way greedy sanity (base vs SFT vs DPO, via peft load + disable_adapter/set_adapter on GPU0): ALL THREE DISTINCT (base≠sft≠dpo) → full SFT→DPO pipeline applies end-to-end at inference. DPO 0.3ep is COHERENT, fluent, NOT degenerate (early-stop avoided over-optimization) but the quality delta on a neutral literary prompt is SUBTLE (DPO shares SFT's structure — it continues from it — with minor stylistic drift, arguably slightly MORE genre-clichéd). Verdict: mechanics proven, quality gain modest as predicted for 0.3ep on off-policy pairs; the real unlock remains on-policy rejected regen + on-domain (explicit E-RP) eval + the LitBench/holdout run. gen+rp RESTORED healthy. Next: serve fork (SGLang-finish vs merge) on the DPO adapter — same rekey_lora_for_vllm.py (zero-z) applies unchanged (mtf-dev confirmed).
- _sft_config_kwargs). Objective SATURATED by
Archived 2026-08-03.
2026-07-08-t1-dpo-leg-is-running-unblocked-2-fixes
[2026-07-08]T1 DPO leg is RUNNING (unblocked) — 2 fixes applied to deployed backend.py. Blocker resolved: (1) mtf-dev's v0.0.42 stub_stub_missing_optional_integrations(last-resort sys.meta_path finder → missing mergekit/llm_blender/weave resolve to MagicMock, never called → zero numerics risk; applied VERBATIM to deployedsrc/model_training_forge/train/backend.pyafter_unsloth_available()+ call-site beforefrom trl import DPOTrainer); (2) my cosmeticwarnings_issuedshim (trl-0.24 DPOTrainer.init:405 doesmodel.warnings_issued["estimate_tokens"]=Truefor warning-suppression; custom Qwen3_5 class under transformers 5.5.0 lacks the attr →if not hasattr(model,"warnings_issued"): model.warnings_issued={}before the DPOTrainer(...).train() at backend.py:305 — cosmetic, zero training impact). Both edits are on the DEPLOYED un-git'd copy only → mtf-dev must canonicalize the warnings_issued shim into their repo (told them). DPO confirmed training: model loaded (851 shards), full 1196 pairs processed, in precompute_ref_log_probs (GPU0 93% util, 54.8GB). Completion watcher armed (bg task) → restore gen+rp + verify dpo_adapter + ping mtf-dev on exit. gen+rp STOPPED for the run (authorized window). Output → data/spike/dpo_adapter.
Archived 2026-08-03.
2026-07-08-t1-dpo-leg-launch-prior-block-now-resolved
[2026-07-08]T1 DPO leg launch — prior BLOCK (now resolved above), kept for the launch recipe. Operator authorized the full DPO stage (via mtf-dev) + went AFK 2h. PROVEN LAUNCH RECIPE (replicates the SFT containeraeon-t1-sftexactly, only--stage sft→dpo):sudo docker run -d --name aeon-t1-dpo --entrypoint python3 --gpus all -e CUDA_VISIBLE_DEVICES=0 -e MTF_FORCE_TRL=1 -e PYTHONPATH=/mtf/src -e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True -v /home/lkraven/model-training-forge:/mtf -v /tank:/tank -w /mtf aeon-trainer:latest -u scripts/train.py --recipe recipes/training/qwen-3.5-122b-erp-lora/train.aeon-27b.yaml --stage dpo. CRITICAL:--entrypoint python3is REQUIRED — aeon-trainer's default entrypoint is["vllm","serve"](FROM vllm/vllm-openai) → without the override it runs vllm + hits a torch-ABI crash. Dataset verified (pairs_dataset=train.flat.json=1196 pairs). THE BLOCK:from trl import DPOTrainer(backend.py:256) eagerly pulls TRL 0.24.0's WHOLE optional-integration set — cascade: mergekit(missing)→ immutables→mergekit-0.1.4↔pydantic-2.13 HARD incompat (needs pydantic==2.10.6)→llm_blender→dataclasses_json→ llm_blender-0.0.2↔transformers-5.5.0 HARD incompat (TRANSFORMERS_CACHE removed, needs source patch)→weave→ (more). NONE used by our pair-based DPO.pip install mergekitw/deps is UNSAFE (downgrades accelerate 1.14→1.6). Safe partial recipe derived (core libs held: torch2.10/tf5.5.0/trl0.24.0/peft0.19.1/accel1.14.0) but non-convergent → TRULY BLOCKING per operator's carve-out. Did NOT force-hack the proven training image. Handed full diagnosis + recommended fix (lazy-import TRL patch, opt b) to mtf-dev (thread 01KWZG8GJX, expects-reply, monitor armed). gen+rp RESTORED healthy. Relaunch = 1 min once mtf-dev delivers a working image.
Archived 2026-08-03.
Recent decisions (archived 2026-08-05 batch)
-
[2026-07-16]GPU re-org: char-rp→GPU1 + both cards re-optimized for max context. Moved char-rp (Magidonia-24B) GPU0→GPU1, then maxed context: char-rp-reasoning 150K→256K (util 0.46, 1.56x), gen→256K + seqs 16→32 (util 0.42, 5.43x), granite 64K→128K full-chapter (util 0.27, 1.50x). FINAL: GPU0 ~14 G reserve (both seats 256K native), GPU1 ~6.7 G headroom. All healthy. LESSON: KV must hold ≥1× max-len (util-floor crashes) + per-model KV cost varies ~8× (MoE cheap, dense pricey) → tune util empirically. Archived 2026-08-05. -
[2026-07-16]granite right-sized → ~10.5 GB freed on GPU1 (util 0.34→0.18 + max-len 131072→65536; KV 6.45 GiB / 1.29x@65536). LESSON: ~950 MiB KV per 0.01 util here + KV must hold ≥1× max-len — util 0.15 crash-looped before 0.18 landed..env-only, recreatevllm-granitealone (shared stack). [Superseded by the 07-16 GPU re-org above → 128K.] Archived 2026-08-05. -
[2026-07-15]image-bench eviction DONE (parked item closed). Stopped vllm-qwen-image-bench (ana-ml2 GPU1, ~32 GB freed); LiteLLMimage-judge+qwen-image-bench→ gen :8015 (judge samplers + thinking-off); comfy-dev pinged; backfilled the canonical char-rp-reasoning litellm block. Revert ~90 s. auto-memoryproject_arbo_gen_switch_imagebench_evict. Archived 2026-08-05. -
[2026-07-15]Homepage AI-tab revamp — flat "AI Systems" group → dedicated AI tab, 6 role-based groups + AI-Dormant; committed569e1af, pushed. (Also caught + pushed a ~100-commit unpushed eshpfi backlog.) Archived 2026-08-05. -
[2026-07-15]Home Assistant config repo created (vh/home-assistant-config, private). UI-managed HA → allowlist model (YAML + curated secret-free.storagesubset). git-in-place in/configon esh-docker-vm + scoped deploy key + local clone~/development/home-assistant-config. Archived 2026-08-05. -
[2026-07-15]char-rp-reasoning OOM rescue — solo-restart on the packed GPU0 crash-looped; fixed viaexpandable_segments:True+ util 0.39→0.38 + max-model-len 192K→150K. LESSON:max-model-lendoes NOT free vLLM VRAM (util-pinned KV pool). ~4.5 GB GPU0 headroom. Archived 2026-08-05. -
[2026-07-15]soong-labSOONG_LAB_LIBRARY_DIRmade persistent (corviduo-dev) — was on the redeploy-wiped code default; set to/home/infra-ops/soong-lab-data/library, restarted. Closed a queued no-rush item. Archived 2026-08-05. -
[2026-07-15]Statusline overhauled (~/.claude/statusline-command.sh) — git state / 🔔🔕 monitor-armed / project tag / abs tokens / per-session cost / threshold-colored ctx+rate. Archived 2026-08-05.
Tried and abandoned (archived) — moved 2026-08-12
-
[2026-07-01]MTP/spec-decode on a SHARED serving model helps single-stream but HURTS moderate-concurrency aggregate + silently ignoresmin_p/logit_bias(qwopusgen: N=1 +12%, N=4 −20%). Reserve for dedicated/interactive deployments. Archived 2026-08-12. -
[2026-07-02]irv-ml1/worktankROOT is root-owned — lkraven can't write there (irv-ml1 sudo needs a password) → stage model pulls to/home. PIN THE A6000 BY UUID for training (native-CUDA ordering differs vs docker; the 3090 index 0 is usually near-full → OOM).CUDA_VISIBLE_DEVICES=GPU-<uuid>. Archived 2026-08-12.