|
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>
|
||
|---|---|---|
| .. | ||
| capacity.blade.php | ||
| confirm-delete-datacenter.blade.php | ||
| confirm-delete-incident.blade.php | ||
| confirm-delete-plan-draft.blade.php | ||
| confirm-delete-vpn-peer.blade.php | ||
| confirm-disable-two-factor.blade.php | ||
| confirm-end-other-sessions.blade.php | ||
| confirm-forget-secret.blade.php | ||
| confirm-reissue-vpn-peer.blade.php | ||
| confirm-remove-host.blade.php | ||
| confirm-restart-instance.blade.php | ||
| confirm-save-env.blade.php | ||
| confirm-save-secret.blade.php | ||
| customers.blade.php | ||
| datacenters.blade.php | ||
| edit-datacenter.blade.php | ||
| edit-export-target.blade.php | ||
| edit-invoice-series.blade.php | ||
| edit-plan-family.blade.php | ||
| finance.blade.php | ||
| grant-plan.blade.php | ||
| host-create.blade.php | ||
| host-detail.blade.php | ||
| hosts.blade.php | ||
| incidents.blade.php | ||
| instance-admin-access.blade.php | ||
| instances.blade.php | ||
| integrations.blade.php | ||
| invoices.blade.php | ||
| mail.blade.php | ||
| maintenance.blade.php | ||
| overview.blade.php | ||
| plan-versions.blade.php | ||
| plans.blade.php | ||
| provisioning.blade.php | ||
| revenue.blade.php | ||
| settings.blade.php | ||
| two-factor-setup.blade.php | ||
| vpn-config-access.blade.php | ||
| vpn.blade.php | ||