CluPilotCloud/resources/views/components/ui
nexxo 880b5f1998 Merge main into the operating-mode branch
Three real conflicts, and one file that did not conflict and mattered more.

Overview::notices(): both sides added notices. Kept all of them, and pointed
main's mail check at MailboxTransport::NON_DELIVERING — its own comment already
named the constant while the code carried a copy of the list.

billing.blade.php: main wrapped the page in a contract branch. The "payment is
not set up" error moved OUTSIDE it, because the customer most likely to meet
that message is the one buying for the first time, who has no contract yet and
would never have seen it from inside the @else.

ConsoleReportsRealDataTest: kept both sides rather than choosing. The renamed
test and its docblock explain why admin.systems_ok can no longer be asserted on
a bare install; main's mail pin still keeps "clean" clean in the mail
dimension. Picking one would have quietly weakened the other's claim.

HostStepsTest: git combined main's config()->set('provisioning.dns.zone',
'clupilot.com') with this branch's assertion on clupilot.cloud, and produced a
test that contradicted itself with no marker. Main's approach is the better one
— it pins the zone in the test and asserts the SHAPE of the name rather than
this box's domain — so its assertion stands.

HttpStripeClient merged silently and correctly: secret() still throws,
isConfigured() still reads the vault directly. Had it taken main's
filled($this->secret()), six callers that ask in order NOT to get an exception
would have become exception throwers, and the suite would have stayed green.
CheckoutWithoutStripeKeyTest is the lock that would have caught it.

StripeIdempotencyKeyTest (new on main) leaned on the environment fallback for
stripe.secret. That entry is strict now — no fallback in either direction, so
the .env cannot be a back door for a live key in test mode. It stores a real
vault row instead.

1966 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 17:53:20 +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 Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
icon.blade.php Put the switch where it governs, and say when it is thrown 2026-07-30 15:09:38 +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
modal.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +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
panel.blade.php Rebuild the settings page out of panels and rows 2026-07-30 17:38:57 +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
row.blade.php Rebuild the settings page out of panels and rows 2026-07-30 17:38:57 +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