CluPilotCloud/resources/views/components/ui
nexxo ec8675861e
tests / pest (push) Failing after 7m44s Details
tests / assets (push) Successful in 21s Details
tests / release (push) Has been skipped Details
Take the order, park it, and say when it will be delivered
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>
2026-07-29 18:50:46 +02:00
..
alert.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
badge.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
brand.blade.php Give people a way back in, and put the URL in English 2026-07-29 16:50:29 +02:00
button.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
card.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
chart.blade.php feat(dashboard): rich overview with Chart.js (customer-portal template) 2026-07-25 07:59:19 +02:00
checkbox.blade.php feat(admin): a console for creating, pricing and scheduling plans 2026-07-26 12:41:51 +02:00
delivery.blade.php Take the order, park it, and say when it will be delivered 2026-07-29 18:50:46 +02:00
icon.blade.php List issued invoices in the console, with no way to change one 2026-07-29 02:21:15 +02:00
input.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
logo.blade.php feat(brand): CluPilot logo mark + SVG favicon across layouts 2026-07-25 15:31:33 +02:00
metric.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
nav-item.blade.php One design system for every surface 2026-07-27 16:03:47 +02:00
otp-input.blade.php Give the console a front door of its own 2026-07-28 11:45:22 +02:00
progress-stepper.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00
ring.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
spark.blade.php Measure what the template draws 2026-07-27 16:29:28 +02:00
stat-tile.blade.php feat(portal): Fortify auth + Login/2FA/Dashboard + component kit 2026-07-25 01:20:25 +02:00