Repository navigation
v6.1.5: services-only hardening
Headless services-only release (FastAPI daemon for airunnerweb). No desktop client remains.
Security fixes (closes #2261, #2262, #2263, #2267, #2269):
- CivitAI/HF downloads: server-supplied filenames sanitized and confined to the model dir; every redirect hop revalidated; legacy HF downloader hardened the same way.
- Loopback token: pre-existing weak files/symlinks are tightened or replaced, never silently reused.
- Tenant schema identifiers validated; migration signature is now content-hashed; tenant migrations serialized with a lock.
- Secrets: persisting without a keyring now requires AIRUNNER_ALLOW_PLAINTEXT_SECRETS=1, otherwise raises. Operators without a keyring must set the flag or install one.
Robustness fixes (closes #2264, #2265, #2266, #2268):
- Daemon singleton lock is an flock file lock, not a TCP probe.
- Signal shutdown no longer skips API/heartbeat/app cleanup.
- Dead preload stub removed (lifecycle preload covers configured models); WS sockets now scope tenants exactly like HTTP.
Repairs (closes #2270-#2273, #2275): dead entry points wired (airunner-docker-build/wrapper, cleanup-llm-models, generate-cert), docker_build compose path fixed, model_optimizer uses sys.executable, stale desktop docs updated, six new regression test files.
Known gaps (open): #2274 dependency majors (no safe bumps; verified), order-dependent CUDA segfault in test_fp8_scaled_mm under the full suite (passes standalone), scipy/langchain/ollama extras missing from dev venvs (pre-existing).