|
tests / pest (push) Failing after 7m44s
Details
tests / assets (push) Successful in 21s
Details
tests / release (push) Has been skipped
Details
A paid order that no host has room for used to FAIL at the reservation
step. The customer has paid by then, so that turned a sale into an
incident and left somebody holding money against nothing. The estate is
finite and booked thick, so "no host has room right now" is an ordinary
Tuesday — it means a machine has to be bought, which takes days.
So the order waits instead. poll(), not retry(): the wait is measured in
days and must not eat the run's attempt budget. It only fails after
PARK_DAYS (14) — long enough to buy, rack and onboard a server over a
weekend, short enough that a forgotten order surfaces instead of waiting
for ever.
Then say so, in the same words on both sides of the payment:
- The price sheet marks each package "wird sofort ausgeliefert" or
"Bereitstellung in 2-3 Werktagen", read from free capacity rather
than written into the page.
- The customer's own overview says their cloud is being prepared while
it is parked, instead of a stepper standing still for two days under
"wird eingerichtet" — which reads as broken.
- The console front page shows the same per-package answer, so an
operator can see what visitors are being promised.
And a capacity page for the decision that follows: who is waiting, what
the roomiest host still has, what the queue needs ("3x Start, 1x
Business" - the LARGEST parked package sets the minimum machine, because
an instance lives on one host), and what such a machine costs today from
the provider's live list. It orders nothing: buying a server is a
contract, and a bug in a capacity calculation must not sign one.
The operator can also say where each parked order goes. A pin is
honoured or it waits — never quietly redirected — because placing it
elsewhere answers a different question than the one they answered, and
they would find out from the finished instance.
Two things this shook out:
- `current_step` is an INDEX into the pipeline, not the step's key, and
it is cast to integer. `where('current_step', 'reserve_resources')`
reads as correct and matches step 0 of EVERY pipeline instead. Both
lookups go through HostCapacity::parkedRuns() now, which resolves the
index and filters by pipeline.
- The auction feed sends `hdd_hr` as a list, not a string. Casting it
printed "Array" into the console and raised a warning that took the
page down with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| Admin | ||
| Auth | ||
| Billing | ||
| Console | ||
| Portal | ||
| Provisioning | ||
| BillingTest.php | ||
| CartTest.php | ||
| ComponentTest.php | ||
| ConfirmInModalTest.php | ||
| ConnectionStateTest.php | ||
| CustomDomainServingTest.php | ||
| CustomDomainTest.php | ||
| CustomerTwoFactorTest.php | ||
| DashboardTest.php | ||
| DeliveryPromiseTest.php | ||
| DeploymentRunsAsTheAppUserTest.php | ||
| DisplayTimezoneTest.php | ||
| DoubleOptInTest.php | ||
| DowngradeTest.php | ||
| EditInModalTest.php | ||
| EnsureCustomerActiveTest.php | ||
| ErrorPagesTest.php | ||
| ExampleTest.php | ||
| HostStepTest.php | ||
| IconLayoutTest.php | ||
| IdentitySeparationTest.php | ||
| ImpersonationTest.php | ||
| InstanceMetricsTest.php | ||
| LandingPriceSheetTest.php | ||
| MailTemplatesTest.php | ||
| MonitoringStatusSyncTest.php | ||
| NewDeviceWarningTest.php | ||
| OfficialDomainsTest.php | ||
| PortalHostTest.php | ||
| PortalTabsTest.php | ||
| PublicSiteGateTest.php | ||
| ReleaseComparisonTest.php | ||
| ReleaseVersionTest.php | ||
| SeatsTest.php | ||
| ServerMarketTest.php | ||
| SessionListTest.php | ||
| SettingsTest.php | ||
| SiteDesignSystemTest.php | ||
| StatusHistoryTest.php | ||
| SupportRequestTest.php | ||
| TrafficTest.php | ||
| TranslationParityTest.php | ||
| WelcomeTest.php | ||