CluPilotCloud/app/Actions
nexxo 507636f38f
tests / pest (push) Waiting to run Details
tests / assets (push) Waiting to run Details
tests / release (push) Blocked by required conditions Details
Die abgebuchte Domain wird jetzt wirklich von der Maschine genommen
Der Registereintrag nannte den falschen Grund: das Deaktivieren startet sehr
wohl eine Provisionierung. CustomDomainAccess::deactivate() ruft seit Langem
ReapplyInstanceAddress, das legt einen Lauf der `address`-Pipeline an und
schickt AdvanceRunJob auf die provisioning-Warteschlange; ConfigureNextcloud
loescht dort trusted_domains 2 und ConfigureDnsAndTls schreibt den Router ohne
den Namen neu. Das ist gebaut und geprueft.

Der Schaden war trotzdem echt, nur eine Tuer weiter. Erreicht wurde deactivate()
allein ueber PlanChange::settleCustomDomain, also ueber den Paketwechsel. Der
zweite und haeufigere Weg, auf dem das Recht endet — der Kunde bucht das Modul
in der Abrechnung ab, clupilot:end-cancelled-addons haelt den Termin am Ende des
bezahlten Zeitraums — ging an dieser Stelle vorbei: BookAddon::cancel() lieferte
Speicher nach und sprach mit Stripe, fragte aber niemanden nach der Adresse. Die
Domain verschwand aus jeder Ansicht und blieb auf der Maschine stehen.

BookAddon::cancel() fragt jetzt CustomDomainAccess::enforce() — die ganze Regel,
nicht den Modulschluessel: wer von Team auf Business aufgestuft hat und sein
altes Modul loswird, behaelt die Domain, weil das Paket sie selbst traegt.

Und der Anstoss darf die Entscheidung nicht kippen. deactivate() faengt jetzt
einen Fehlschlag der Nachfuehrung ab und schreibt ihn als Fehler ins Log: die
Wahrheit steht in der Datenbank, die Maschine zieht nach, und eine Kuendigung
haengt nicht daran, ob ein fremder Host gerade antwortet.

Die Gegenrichtung brauchte nichts: der Entzug loescht die Domain-Spalte, also
traegt der Kunde sie nach der Neubuchung neu ein und weist sie neu nach — und
genau dort haengt seit jeher der Lauf, der sie wieder ausliefert. Ein Test haelt
das fest, damit es keine Einbahnstrasse wird.

Registereintrag gestrichen.

Rot gesehen: ohne den settleCustomDomain-Aufruf fallen drei der vier neuen
Tests; ohne das try/catch faellt der vierte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 14:50:46 +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 Die abgebuchte Domain wird jetzt wirklich von der Maschine genommen 2026-08-04 14:50:46 +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