CluPilotCloud/app/Livewire
nexxo 24eb7b3d80 Fix-Welle: Schlussreview-Befunde 1-6 zur Release-Decke
Sechs Befunde aus dem Schlussreview, in einer Welle behoben:

- BEFUND 1 (Important): eine leere Auswahl im Festnageln-Feld liess
  pinRelease() ueber `$this->ceilingChoice ?: null` in setCeiling(null)
  laufen — die Gegenhandlung (Decke abnehmen) — und meldete dabei die
  Erfolgsmeldung des Festnagelns. ConfirmPinRelease::confirm() schickt die
  Version jetzt als Event-Nutzlast (wie ConfirmSaveSecret den Schluessel),
  und pinRelease(string $version) weist eine leere Version ausdruecklich
  ab, mit einer eigenen Meldung (release_pin_empty).
- BEFUND 2 (Minor, durch 1 miterledigt): Modal und Seite lasen bisher zwei
  getrennte Eigenschaften ($version vs. $ceilingChoice). Der Fix oben
  beseitigt die Trennung.
- BEFUND 3 (Important, Text only): der Kommentar bei release_tag_exists()
  in deploy/lib/release.sh und der Fehlerbehandlungs-Abschnitt der Spec
  behaupteten, ceiling_missing schuetze gegen einen vom Release-Prozess
  geloeschten Tag. Tut es nicht: `git fetch --tags --force` (ohne
  --prune-tags, bewusst) entfernt keine lokal bereits geholten Tags, die
  drueben verschwunden sind. Beide Stellen beschreiben jetzt, wogegen die
  Pruefung tatsaechlich schuetzt (ein nie geholter oder nie existierender
  Tag) und wogegen nicht. Kein --prune-tags hinzugefuegt.
- BEFUND 4 (Minor): ConfirmPinRelease hatte keinen Test. Zwei neue Tests
  nach dem Vorbild von ConfirmSaveSecret in IntegrationsPageTest.
- BEFUND 5 (Minor): ceilingChoice wurde nie aus dem gesetzten Zustand
  vorbelegt. UpdateChannel::ceiling() ist jetzt public, Settings::mount()
  belegt das Feld damit vor.
- BEFUND 6 (Minor): eine von Hand geleerte Deckendatei liest die Konsole
  als "keine Decke" (ceiling() -> null), der Agent meldet dafuer aber
  ceiling_error. Der "Decke abnehmen"-Knopf stand nur hinter
  @if($update['ceiling']) und verschwand damit genau in dem Zustand, aus
  dem er zurueckfuehren muesste. Bedingung erweitert auf
  ($update['ceiling'] || $update['ceiling_error']).

Jeder Befund traegt einen eigenen Test in ReleaseCeilingConsoleTest.php.
Volle Suite: 2973 passed (10389 assertions).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 16:25:48 +02:00
..
Admin Fix-Welle: Schlussreview-Befunde 1-6 zur Release-Decke 2026-08-04 16:25:48 +02:00
Auth Ein Rückweg aus der abgelaufenen Betreiber-Einladung 2026-08-04 02:24:13 +02:00
Concerns Close the domain page to packages that may not have one 2026-07-29 16:20:21 +02:00
Backups.php Show times on the operator's clock, keep storing them in UTC 2026-07-27 17:32:21 +02:00
Billing.php Zusatzspeicher: 20 GB fuer 15 Euro, hoechstens drei, nicht bei Enterprise 2026-08-01 15:09:02 +02:00
Checkout.php Give the order a checkout page, and stop hiding what a year costs 2026-07-30 16:00:08 +02:00
Cloud.php Deliver the storage a customer actually buys 2026-07-29 19:13:10 +02:00
ConfirmBookStorage.php Der Deckel hielt außerhalb der Transaktion, das Fenster versprach einen Block zu viel 2026-08-01 18:53:00 +02:00
ConfirmCancelAddon.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
ConfirmCancelPackage.php Fix-Runde: echte Umlaute, und das Versprechen sagt "auf Wunsch" 2026-08-04 08:44:20 +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
ConfirmDeleteOwnAccount.php Discard an unconfirmed registration, and sweep the abandoned ones 2026-07-30 14:08:02 +02:00
ConfirmDisableTwoFactor.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
ConfirmEndOtherSessions.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
ConfirmReleaseBlock.php Sperren sehen und aufheben: Portalseite fuer den Inhaber, Abschnitte in der Konsole 2026-08-03 15:53:24 +02:00
ConfirmRemoveOrder.php Book a downgrade for a date that cannot move, and sell a module once 2026-07-29 17:51:37 +02:00
ConfirmRestartCloud.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
ConfirmRevokeSeat.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
ConfirmWithdraw.php Charge the price the website shows, and hand a withdrawal back in full 2026-07-29 22:42:02 +02:00
CustomDomain.php Serve the custom domain, not just announce it 2026-07-29 16:44:52 +02:00
CustomerProvisioning.php Take the order, park it, and say when it will be delivered 2026-07-29 18:50:46 +02:00
Dashboard.php Zweite Fix-Welle: kein „beendet" ueber einem laufenden Aufbau 2026-08-04 10:25:01 +02:00
EditMailbox.php Merge credentials and infrastructure into one Integrations page 2026-07-29 01:49:39 +02:00
EditSeat.php Die zweite Tuer zur selben Attrappe, und die Adresse, die dem Kundenkonto gehoert 2026-08-04 00:33:48 +02:00
Invoices.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
NewSupportRequest.php Editing in modals, an update button that is not gated on a stale reading, and a support page that is real 2026-07-27 17:55:49 +02:00
OpenInvoices.php Portal: Karte tauschen, offene Rechnungen begleichen, Hinweis bei Faelligkeit 2026-07-31 21:12:31 +02:00
Order.php Sell the year as well as the month, and say what it saves 2026-07-30 15:44:35 +02:00
PaymentMethod.php Portal: Karte tauschen, offene Rechnungen begleichen, Hinweis bei Faelligkeit 2026-07-31 21:12:31 +02:00
Security.php fix(security): Aufheben einer Sperre sagt die Wahrheit und wird nachgeholt 2026-08-03 17:28:28 +02:00
Sessions.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
Settings.php Deliver the processing agreement, and hold the proof it was accepted 2026-07-30 16:56:57 +02:00
Support.php Editing in modals, an update button that is not gated on a stale reading, and a support page that is real 2026-07-27 17:55:49 +02:00
Users.php Fuenf geparkte Kleinigkeiten nach der Mitarbeiterverwaltung 2026-08-04 01:09:45 +02:00