CluPilotCloud/app/Livewire
nexxo 08670ecbee fix(vpn): stop revoked accesses coming back and stale jobs undoing intent
Two lifecycle holes Codex found in the new VPN management:

1. Delete removed the row before the hub knew. If the removal job was delayed
   or failed, SyncVpnPeers saw a peer it did not recognise and adopted it back
   as a live access — silently restoring what an operator had just revoked, and
   with no row left to revoke it again. Deletion is now a soft-delete
   tombstone: the row survives until the hub confirms the peer is gone, the
   sync retries the removal instead of adopting, and the tombstone is purged
   only once the peer is really absent. It also keeps the key and the tunnel
   address reserved meanwhile, so neither is handed out twice.

2. ApplyVpnPeer applied the state captured at dispatch. A retried block job
   could therefore undo a later unblock, and nothing would repair it — the sync
   only observes state, it never re-applies intent. The job now resolves the
   current desired state from the row and treats its payload as a fallback for
   the case where the row is already gone.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 21:41:03 +02:00
..
Admin fix(vpn): stop revoked accesses coming back and stale jobs undoing intent 2026-07-25 21:41:03 +02:00
Auth feat(auth): enterprise split login + signup (Fortify registration) via frontend-design 2026-07-25 18:16:27 +02:00
Concerns fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
Backups.php feat(portal): service framing + gradient line charts + billing button fix 2026-07-25 14:18:08 +02:00
Billing.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
Cloud.php fix(portal): cloud status labels for all instance states; scale storage curve into the quota 2026-07-25 19:16:16 +02:00
ConfirmCancelPackage.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
ConfirmCloseAccount.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
CustomerProvisioning.php fix(engine-b): stop customer dashboard polling once provisioning failed 2026-07-25 13:06:31 +02:00
Dashboard.php feat(dashboard): rich overview with Chart.js (customer-portal template) 2026-07-25 07:59:19 +02:00
Invoices.php feat(portal): service framing + gradient line charts + billing button fix 2026-07-25 14:18:08 +02:00
Settings.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
Support.php feat(portal): full sidebar — Cloud, Users, Backups, Invoices, Support 2026-07-25 08:08:33 +02:00
Users.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00