CluPilotCloud/app/Actions
nexxo 19a770e1eb Kuendigung B1, Fix-Welle: der Platz wird frei, und das Loeschen ist vollzogen
K1 — abgebaute Instanzen zaehlten weiter als belegend. `scopeOccupyingHost`
filtert jetzt `torn_down_at`: eine abgebaute Instanz behaelt `ended`, `vmid`
und `disk_gb` als Nachweis, `status != 'failed'` war fuer sie also wahr. Der
Knoten wurde physisch leer und die Buchhaltung blieb voll — die naechste
bezahlte Bestellung derselben Groesse waere geparkt und verworfen worden.

K2 — `deleteVm()` gibt die UPID zurueck, der Abbau wartet den qmdestroy-Auftrag
ab und schreibt `torn_down_at` erst danach. Ein 200 heisst nur, dass Proxmox
den Auftrag angenommen hat; scheitert die Zerstoerung danach, stand bisher eine
laufende Maschine mit einem Datensatz da, der "abgebaut" sagte — und niemand
sah sie je wieder an. Die Attrappe bildet die Asynchronitaet ab
(`destroyedVmids`, `destroyExitStatus`, `destroyHangs`). Die Fristen des
Auftrags wandern mit: Sichern 900 s, Zerstoeren 300 s, Summe unveraendert 1800 s
unter der Uhr des Arbeiters.

K3 — vor `shutdownVm()` steht derselbe `vmStatus()`-Riegel wie im
Nachbarschritt. Eine wegen offener Zahlung gesperrte Cloud und jeder
Wiederholungslauf nach einem Teilfehlschlag treffen einen gestoppten Gast; der
Wurf haette die Instanz unheilbar gemacht und den echten Grund am Datensatz
ueberschrieben. Die Attrappe weist eine Bitte gegen eine stehende Maschine
jetzt ab, und ein Test faehrt erstmals einen zweiten Lauf nach einem
Fehlschlag durch.

W2 — der rote Kasten "Abbau haengt" filtert `status = 'ended'`. Eine
wiederbelebte Instanz waere sonst fuer immer darin stehengeblieben.

Neun Pruefungen im Mahnwesen lassen ihre Cloud jetzt laufen, bevor sie gesperrt
wird — die geschaerfte Attrappe legt offen, dass `SuspendInstance` denselben
fehlenden Riegel hat (Folgepunkt im Bericht).

Zu jedem der vier Punkte eine Zusicherung, die ohne den Fix rot ist; die
Rotproben stehen im Bericht.
2026-08-04 12:39:06 +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, Fix-Welle: der Platz wird frei, und das Loeschen ist vollzogen 2026-08-04 12:39:06 +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