|
tests / pest (push) Failing after 21m20s
Details
tests / assets (push) Successful in 20s
Details
tests / release (push) Has been skipped
Details
Every path on the site ended in "anfragen": a mailto: link and a promise to answer the same working day. That is an afternoon of somebody's time per customer, for a product whose whole point is that the machine does the work — and it scales exactly as far as one inbox does. Now: sign in, pick a package, pay, and provisioning starts by itself. The pieces were already there — Stripe holds a Price per plan version (the catalogue sync writes the ids), the webhook opens the contract, the pipeline builds the VM — and what was missing was the checkout session between them. CheckoutController opens one and gets out of the way; the purchase becomes real on the webhook, which stays the only place allowed to believe a payment happened. The success URL is a redirect target and therefore a URL anybody can type, so it says "we are building it", not "you have paid". Nothing in the request may decide the price. The plan key arrives from a form and everything else is re-derived from the catalogue, including the plan VERSION, so a version published while the customer types their card number cannot change what they were quoted. Two cases that are not errors: no capacity is a parked order (already built), and an existing customer is sent to the plan change rather than sold a second, empty cloud that bills twice. The site says what it can keep. "danach wissen Sie … wie Ihre Daten sicher umziehen" was a promise made before seeing the thing it is about: we do not know where a visitor's data is, what shape it is in, or whether it can be moved at all. Migration is named as its own question, looked at first and quoted afterwards. The integrations page gets the settings page's treatment for the same reason: it was one narrow column of six cards, so an operator connecting DNS scrolled past Stripe to reach it and the raw .env editor sat at the bottom of everything. Three tabs by what a section is FOR — services we buy from outside, our own machines, the file underneath — the same axis the page was rebuilt around when it stopped being split by storage mechanism. The tab is in the query string; unlocking survives a switch, because a confirmed password is a session fact and not a property of a tab. The .env tab is Owner-only, like the editor it holds. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| AdminConsoleTest.php | ||
| AdminHostRestrictionTest.php | ||
| AdminSettingsTest.php | ||
| BroadcastAuthTest.php | ||
| CapacityQueueTest.php | ||
| ConsoleHostSeparationTest.php | ||
| ConsoleNetworkTest.php | ||
| ConsoleReportsRealDataTest.php | ||
| CustomerRevenueTest.php | ||
| DatacenterTest.php | ||
| EnvFileEditorTest.php | ||
| EnvRestartTest.php | ||
| GrantPlanTest.php | ||
| HostCapacityTest.php | ||
| HostManagementTest.php | ||
| HostVpnStateTest.php | ||
| IncidentConsoleTest.php | ||
| IncidentDeleteTest.php | ||
| InstanceAdminAccessTest.php | ||
| IntegrationsPageTest.php | ||
| MaintenanceTest.php | ||
| OperatorLogoutTest.php | ||
| OperatorModelTest.php | ||
| OperatorTwoFactorEnrollmentTest.php | ||
| OperatorTwoFactorPolicyTest.php | ||
| PasswordConfirmationGuardTest.php | ||
| PlanAdminTest.php | ||
| ProvisioningActionsTest.php | ||
| RbacMoveTest.php | ||
| RbacTest.php | ||
| RevenueGrantedTest.php | ||
| SecretCipherTest.php | ||
| SecretVaultTest.php | ||
| SettingsTabsTest.php | ||
| UpdateButtonTest.php | ||
| UpdateWindowTest.php | ||
| VpnTest.php | ||