nexxo
|
718e8568c1
|
fix(admin): require host on any maintenance save; cancel-notify only delivered announcements
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:19:44 +02:00 |
nexxo
|
62b4d85ef7
|
fix(admin): release notification claim on dispatch failure so retries aren't blocked
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:17:44 +02:00 |
nexxo
|
ab5ba2b169
|
fix(admin): dedup pending maintenance notifications (updated_at claim + staleness threshold)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:16:15 +02:00 |
nexxo
|
493b81aadf
|
fix(admin): confirm maintenance delivery via MessageSent (retryable until sent); guard resend/cancel on derived state; fix flaky non-unique host wg_ip
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:14:01 +02:00 |
nexxo
|
52fa7a34a2
|
feat(admin): email affected customers when maintenance is cancelled (ledger-guarded)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:07:21 +02:00 |
nexxo
|
6593dae946
|
fix(admin): retry path for missed maintenance emails; lock Owner role to serialize last-owner guard
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:04:31 +02:00 |
nexxo
|
bc2e95ba18
|
fix(admin): block role escalation of non-staff; validate maintenance host ids atomically; rollback ledger on dispatch failure
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 16:01:45 +02:00 |
nexxo
|
e5c74c6bdd
|
fix(admin): reject customer email on operator account update; do not claim mail delivery on dispatch
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 15:58:24 +02:00 |
nexxo
|
d68d8e1f25
|
fix(rbac/mail): migrate legacy is_admin users to Owner in-migration; send maintenance mail in customer locale
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 15:56:22 +02:00 |
nexxo
|
eff8c08258
|
feat(admin): maintenance windows — schedule once, assign many hosts, notify
- maintenance_windows + host pivot + notification ledger; derived state (never
stored); affected-customer + banner queries live off instances
- admin /maintenance: create draft/publish, multi-host select, impact counts,
cancel; capability-gated (maintenance.manage)
- publish emails affected customers once (queued Mailable, ledger-idempotent)
- customer portal maintenance banner (upcoming <=72h + active) merged per window
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-25 15:53:50 +02:00 |