Stable v2.8.32
- docs(whatsnew): pending notes for SSH key-only, localized errors, self-healing
- fix(agent): unbound-resolvconf mask must trigger on failed-state, not resolvconf presence
- fix(agent): mask always-failing no-op unbound-resolvconf helper
- fix(agent): SSH key-only drop-in must win over cloud-init + not touch root policy
- feat(agent): key-only SSH hardening — disable password auth once a key is present
- fix(agent): self-heal orphaned per-customer PHP-FPM template instances
- i18n(review): kick off native translation review — per-language workbooks + safe re-import
- i18n: eliminate residual prose display (frontend) + German in error API
- i18n: migrate middleware auth/error responses to error-code contract
- i18n: migrate remaining ~1042 backend error responses to error-code contract
- i18n(review): normalize NL mailbox term + record internal translation review
- i18n: guardrail — block regressions of German prose in error responses
- docs(i18n): consolidate + kick off translation review
- i18n: generic error-code sweep across 51 remaining handlers
- i18n: migrate FTP + Databases handlers to error codes (5th+6th domains)
- i18n: migrate Email handler to error codes (4th domain)
- i18n: migrate Backup handler to error codes (3rd domain)
- i18n: migrate Domains handler to error codes (2nd domain)
- i18n: error-code contract — the sustainable clean architecture (Sites reference)
- i18n(P3+P4): eliminate all remaining German backend text in the UI
- i18n(P1+P2): stop leaking German backend messages into toasts