v2.20.0 — Security hardening + chat routing/console/widget fixes
Deployed to the private cluster on 2026-07-10 (backend images secsprint → wiss404 → shoverview → widget; frontend v2.15.55 → v2.15.56). Current live backend tag: 2026-07-10-widget, frontend v2.15.56.
🔒 Security — OWASP-scan hardening sprint
- #945 (#684) supply-chain: pin MCP deps to immutable commit SHAs + bound
python-jose<4 - #946 (#698) refresh-token rotation + reuse-detection on
/refresh(fail-closed blacklist) - #947 (#693 / #696 / #694) login-surface: Redis-capable rate-limit storage + right-most-untrusted XFF, per-username account lockout,
login_failure_total/authz_denied_totalmetrics, enforcedmust_change_password(HTTP + WS) - #948 (#697) explicit auth-config posture in the ConfigMap + fail-loud consistency assertion (
RENFIELD_ENVnow a tracked field) - #949 (#445) consolidated atom-ownership checks into a shared
load_owned_atomchokepoint (uniform 404, TOCTOU-safe) - #950 (#695) corrected stale "un-circle-filtered" docstrings in the atoms query path
- #687 / #690 / #692 / #657 re-verified as already-fixed and closed with current-code evidence
Auth remains off (single-user LAN posture) — this wave is the multi-user prerequisite set for the xidra clone. The auth-on cutover (flip
AUTH_ENABLED/WS_AUTH_ENABLED/RENFIELD_ENV=production+TRUSTED_PROXIES+ Redis rate-limit storage, strongSECRET_KEYfirst) is documented ink8s/configmap.yaml.
💬 Chat routing / UX
- #951 detect the Reva Wissensbasis surface via the 200
/api/config/featuresflag instead of a 404-probe — kills console 404 noise - #953 gate the
ChatMessages/tracequery on availability — eliminates the last console 404 (6 → 0) - #952 smart-home overviews are now one agent tool (
internal.smart_home_overview), not four router short-circuits — fixes time questions ("Wie spät ist es?") non-deterministically dumping room temperatures. No regex, no hardcoded topics — the LLM orchestrates. - #954 steer the agent to the overview widget tool over raw
GetLiveContext— the typed sensor/status/devices widgets render again
Notes
- Private
twin_adapterre-staged on every backend rebuild; twin capture + recall verified end-to-end post-deploy.