CluPilotCloud/app/Actions
nexxo 51ec6ebed2 Kuendigung B1, Task 3 — Fix-Runde: der Nachtrag braucht ein Lebenszeichen
Vier Befunde aus der Pruefung.

Der schwerste: der Nachtrags-Zweig konnte eine LAUFENDE Kundenmaschine als
abgebaut verbuchen. vmExists() ist ->get(...)->successful() ohne ->throw(), und
Proxmox antwortet auf die Konfiguration einer nicht vorhandenen VM mit 500 —
demselben Code wie ein hakender Knoten. "Gibt es nicht" und "ich konnte nicht
fragen" sahen damit gleich aus, und der Zustand entsteht im Regelbetrieb: ein
Lauf sichert, scheitert am Loeschen, und der naechste findet archive_volid
gesetzt und einen Knoten, der nichts beantwortet. Die Ablagenpruefung steht
deshalb jetzt VOR dem Zweig: nodeStorage() ruft ->throw(), laeuft sie durch, hat
der Knoten geantwortet, und erst dann ist ein "nein" aus vmExists() ein Befund
statt einer Vermutung.

Drei Ausnahmen lagen ausserhalb des try und haetten im Zeitplan die uebrigen
Instanzen mitgerissen: das Anlegen der Sperre (im Betrieb Redis), das Vermerken
des Grundes im catch, und die Freigabe im finally — die sogar am Erfolgsfall
vorbei. Alle drei abgesichert.

Die Sperrfrist war mit backupWaitSeconds + 600 knapper als der laengste Lauf
(Herunterfahren UND Sichern) und konnte kurz vor dem Loeschen auslaufen. Jetzt
shutdownWaitSeconds + backupWaitSeconds + Puffer — und sie hat endlich eine
eigene Pruefung.

Ein einzelnes Archiv ohne Zeitpunkt bleibt gueltig, mehrere nicht: sie lassen
sich nicht ordnen, und vermerkt wuerde womoeglich die Sicherung von vorgestern.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 11:36:18 +02:00
..
Fortify Passwortrichtlinie einstellbar, doppelte Anmelde-Mail behoben 2026-07-31 20:53:19 +02:00
ApplyPlanChange.php ApplyPlanChange lehnt Wechsel auf interne Pakete ab statt sie ewig zu parken 2026-08-01 19:08:55 +02:00
ApplyStorageAllowance.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
ApplyStripeBillingEvent.php Mahnwesen: Sperre und Freigabe, zusammen gebaut 2026-07-31 22:19:42 +02:00
ArchiveAndTearDown.php Kuendigung B1, Task 3 — Fix-Runde: der Nachtrag braucht ein Lebenszeichen 2026-08-04 11:36:18 +02:00
BookAddon.php Der Deckel hielt außerhalb der Transaktion, das Fenster versprach einen Block zu viel 2026-08-01 18:53:00 +02:00
EndInstanceService.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
GrantAddon.php Decide who may have their own domain, and decide it in one place 2026-07-29 15:59:04 +02:00
GrantSubscription.php Let a subscription or add-on be opened for free, with who and why on the row 2026-07-29 12:41:06 +02:00
IssueStripeInvoice.php Jede Mail faehrt wieder ueber ihren eigenen Mailer 2026-08-03 20:36:20 +02:00
MoveStripeSubscriptionPrice.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
OpenDunningCase.php Zweite Fix-Runde: Regressionen der ersten (Trockenlauf, Doppelmail, Bestand, Isolierung) 2026-07-31 23:02:13 +02:00
OpenSubscription.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
ReapplyInstanceAddress.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
RecordCommercialEvent.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
RestartInstance.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
ResumeInstance.php Mahnwesen: Sperre und Freigabe, zusammen gebaut 2026-07-31 22:19:42 +02:00
SettleDunningCase.php Fix-Runde: Reichweite der Sperre, keine doppelte Gebuehr, verlorene Nachricht 2026-07-31 22:57:56 +02:00
StartCustomerProvisioning.php Jede Mail faehrt wieder ueber ihren eigenen Mailer 2026-08-03 20:36:20 +02:00
StartHostOnboarding.php Hostnamen vergibt CluPilot: ein Name statt zweier, und der Zaehler ueberlebt das Loeschen 2026-08-01 13:45:43 +02:00
SuspendInstance.php Mahnwesen: Sperre und Freigabe, zusammen gebaut 2026-07-31 22:19:42 +02:00
SyncStripeAddonItems.php Stop charging VAT to the customers who owe us none 2026-07-30 02:15:41 +02:00
VerifyCustomerVatId.php Ask the EU register whether a VAT number is real 2026-07-29 22:42:29 +02:00
WithdrawContract.php Stop charging for a service that has ended 2026-07-30 00:52:19 +02:00