CluPilotCloud/app/Livewire
nexxo f64a564c40 Terminal: keine Fehlerseite mehr, ein Knopf auf jeder Zeile, eine Buehne statt roter Zeilen
Drei Dinge, die beim ersten Hinsehen im Betrieb auffielen.

1. Der Knopf war weg. Er verschwand, wenn dem Host die Tunneladresse oder der
   Fingerabdruck fehlte — mit der Begruendung, ein Knopf, der verlaesslich in
   eine Ausnahme laeuft, sei schlechter als gar keiner. Das stimmte, solange die
   Seite dahinter mit Laravels Fehlerseite aufging. Jetzt steht er auf jeder
   Zeile: ein fehlender Knopf sah aus wie "hier gibt es kein Terminal" statt
   "hier noch nicht, und zwar deshalb".

2. Die Seite ging mit einem Stacktrace auf. `TerminalTicket::issue()` warf,
   niemand fing es, und wer den Knopf drueckte, bekam Klassenname, Dateipfad,
   Zeilennummer und Quelltextauszug in einem Fenster des eigenen Produkts.
   `blocker()` beantwortet die Frage jetzt VOR dem Ausstellen und gibt ein
   Merkwort zurueck, keinen Satz — die Formulierung gehoert in die
   Sprachdateien. `mount()` wirft nicht mehr, mit Fangzaun fuer das, womit
   niemand gerechnet hat.

3. Der Abbruch war die einzige ungestaltete Stelle im Produkt: eine rote
   ANSI-Zeile mitten in der eigenen Ausgabe. Der Vorspann und der Schirm waren
   Geschwister, von denen abwechselnd eines `hidden` trug — das trug genau
   einmal, beim Aufbau, und fuer alles danach fehlte die Rueckfahrkarte. Die
   Buehne liegt jetzt UEBER dem Terminal und kann dreimal auftreten: beim
   Verbinden, beim Ende, beim Abbruch. Die Sitzung darunter bleibt stehen.
   Welcher Text, entscheidet der Schliesscode der Bruecke (4401 Ticket, 4502
   kein SSH); dazu ein Knopf, der neu laedt, weil ein Ticket dreissig Sekunden
   gilt und genau einmal.

Beim Hinsehen gefunden, nicht beim Testen:
- Die Schriftgrafik war unlesbar. Die Figlet-Zeichnung setzt darauf, dass der
  Unterstrich einer Zeile den Strich der naechsten beruehrt; in IBM Plex Mono
  sitzt er tiefer. Eng verschmierte das Wort, weit zerfiel es. Vollbloecke
  fuellen ihre Zelle und stapeln in jeder Schrift.
- Dunkelrot auf Fast-Schwarz hatte kaum Kontrast. Die Wortmarke bleibt jetzt
  immer in der Akzentfarbe — sie ist keine Statuslampe, was los ist, sagt die
  Zeile darunter.
- Auf dem Schirm stand ":host antwortet nicht". Der Name war an die Erklaerung
  uebergeben, an die Ueberschrift nicht. Ein Test mit
  `toContain(__('...title'))` haette das nie gefunden — er verglich ":host" mit
  ":host". Der neue prueft das Ergebnis.

Nachgewiesen: Knopf oeffnet ein NEUES Tab (die Liste bleibt stehen), Ticket
ausgestellt, Socket verbunden, Bruecke kommt nicht auf den Host, schliesst 4502,
Buehne kommt mit "pve-fsn-1 antwortet nicht" und Knopf zurueck, Knopf laedt
wirklich neu und holt ein frisches 64-Zeichen-Ticket. Der Fingerabdruck dafuer
war geliehen und ist wieder entfernt.

2507 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 19:27:35 +02:00
..
Admin Terminal: keine Fehlerseite mehr, ein Knopf auf jeder Zeile, eine Buehne statt roter Zeilen 2026-08-02 19:27:35 +02:00
Auth Passwortrichtlinie einstellbar, doppelte Anmelde-Mail behoben 2026-07-31 20:53:19 +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 Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +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
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 Prove a custom domain before serving it, and keep proving it 2026-07-29 14:47:51 +02:00
EditMailbox.php Merge credentials and infrastructure into one Integrations page 2026-07-29 01:49:39 +02:00
EditSeat.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
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
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 Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00