CluPilotCloud/app/Livewire
nexxo 099a29fa5c Drei Wirt-Vorgaenge kommen in die Konsole
Der Waechter, die Vertragsversion des Wirt-Helfers und die Tunnel-Rettung
brauchten bisher die Kommandozeile auf dem Wirt. Bei zehn Servern zehnmal.

WAECHTER: Er redete nur ins systemd-Journal — und das liegt auf dem Wirt,
waehrend die Konsole in einem Container laeuft. Sie sah ihn also gar nicht.
Genau das hat am 4. August die Fehlersuche gekostet: er hielt die Sperre, der
Agent kam nicht an die Arbeit, und die einzige Stelle, an der das gestanden
haette, war unerreichbar. Er hinterlaesst jetzt seinen Ausgang, einschliesslich
des Ruecktritts, und die Konsole sagt auch, wenn er seit Minuten schweigt.

WIRT-HELFER: Hebt ein Release seine Vertragsversion an, braucht jeder Wirt
einmal "sudo bash deploy/install-agent.sh". Das wird gemeldet statt
automatisiert, und zwar bevor jemand einen Knopf drueckt, der daran scheitert.
Die sudoers-Grenze bleibt: sie gewaehrt dem Dienstbenutzer genau drei benannte
Befehle, und etwas Root-Eigenes, das ungeprueft aus dem beschreibbaren Checkout
ausfuehrt, gaebe jedem, der je an diesen Benutzer kommt, Root auf dem Wirt.
Nebenbei aufgeloest: die gebrauchte Vertragsversion stand zweimal im Repo, und
kein Test hielt die beiden Enden mehr zusammen.

TUNNEL-RETTUNG: Ein Knopf, ueber den bestehenden Postkasten. Kein zweiter Weg.

Der rote Faden war, dass die Konsole in JEDEM Zustand die Wahrheit sagt, und er
ist dabei dreimal gerissen: ein gescheiterter Tunnelaufbau meldete erst
"geheilt", nach dem Fix "nichts zu tun", und die Rettung meldete "erfolgreich",
wo das Skript bei seinen wichtigsten Teilfehlschlaegen 0 zurueckgab. Alle drei
behoben und im gerenderten HTML nachgewiesen — samt Gegenprobe, dass ein
gesunder Lauf NICHT warnt. Ein Warnkasten, der immer steht, wird nach zwei
Tagen nicht mehr gelesen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 19:19:59 +02:00
..
Admin Fix-Welle Schlussreview: Tunnel-Rettung und Waechter melden Misserfolg ehrlich 2026-08-04 19:09:02 +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 Zweiter Sicherungsort ebenfalls aus dem Verkauf nehmen, eigener Schalter 2026-08-04 17:28:03 +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