Stable v2.10.12
- fix(agent): make #846's slice tests run without root
- merge: the controller pushes each site's real slice limits from DB truth at startup, so one missed push no longer lasts forever
- merge: a provisioning placeholder no longer cements itself into the slice limits, neither in the cache nor in the unit
- merge: the admin delete buttons have a name, and the blocklist dialog stops answering in German regardless of the chosen language
- fix(agent): an unconfirmed slice call must not touch a unit that already exists (#846)
- fix(settings): add accessible names to remaining admin-only delete buttons
- fix(agent): don't let a provisioning placeholder cement itself into the slice-limits cache (#846)
- fix(packages): reconcile slice limits from DB truth at controller start
- merge: the customer dashboard stops pitching a bigger package over a single throttled window
- fix(dashboard): gate customer upsell tile on sustained throttle, not a single window
- merge: deleting a backup schedule keeps the key its repository needs, so the next schedule can still read the old snapshots
- merge: the icon-only delete and revoke buttons a customer sees have a name a screen reader can read
- merge: a malware hit from another tenant's tmp is no longer this site's finding, and a skipped file is no longer counted against a server-wide tally
- fix(malware): the coverage check derives its numbers from one webroot pass, not maldet's tmp-inclusive tally
- fix(malware): a scan attributes a finding to this site only when it is actually this site's
- merge: whether an invitation leaves the server is written down, not inherited from an upstream default
- fix(groupware): the appointment notification setting is written down instead of inherited from an upstream default
- merge: a malware scan that skips files says so, per reason, instead of claiming a clean pass
- fix(malware): the skip reason is three numbers the UI composes, not a German sentence from Go
- fix(malware): a scan that skips files reports it instead of claiming a clean pass
- merge: a single 700ms throttle tick no longer warns the customer or pitches a bigger package — only sustained throttling does
- merge: reporting a malware finding as a false positive no longer hides it from the operator, the score or a later payload at the same path
- fix(settings): add accessible names to icon-only revoke/delete buttons
- fix(malware): the message for a finding without a content checksum names the limit of its own advice
- fix(resources): decide CPU-throttle Now vs Sustained in one place, not per surface (#843)
- fix(backup): a repository key outlives the plan it belonged to, and an existing repository is never assumed to be ours
- fix(malware): a false alarm is reported with a reason and bound to the file content, not clicked away