fix(clusters): address remaining Cubic and Copilot review feedback on engine v2

Merged
RM
10d ago
+186-51

Summary

Follow-up to #2997. I triaged the 22 still-unresolved Cubic and Copilot threads against the current branch. This PR fixes the ones that are still valid, one commit per change.

Fixed

  • Profile selection: no longer falls back to a disabled layer when none can be opened, and an empty state is shown instead (Cubic + Copilot).
  • Search: a component with nothing to configure that matches the search no longer opens an empty form; the layer's openable state is recomputed after filtering (Cubic).
  • Operator polling: stopping on a missing Operator state is now opt-in (stopPollingWhenMissing). It was also stopping the poll in the self-managed install step, which waits for the Operator to appear (Cubic).
  • Save: edits reverted by hand are no longer sent in the PUT, so those fields keep following the schema default (Copilot).
  • Sensitive number inputs are masked in both layouts (Cubic).
  • Provider cards: the icon is hidden from assistive technologies, so the accessible name is no longer "AWS AWS" (Copilot).
  • Operator status panel moves from a tooltip to a popover, so the Update Operator action is reachable by keyboard (Cubic x2). It now opens on click rather than hover.
  • Tests: asserted the analytics event on the EKS Anywhere request, and dropped a no-op focus/Enter simulation on a disabled button (Cubic).

Not changed

  • Object-array items with nested fields, isItemModalOpenRef, the post-save reset of edits made while saving, and the add-modal initial validation are already handled on the branch (guarded Add button, onMountedChange, omitSubmittedValues, existing test).
  • omitEmptyValues dropping '': left as is. Clearing a defaulted field falling back to the schema default on save is the intended behaviour, and sending '' risks violating minLength/required.
  • Default-valued cluster inputs shown as changed: the input descriptors only exist in resolver previews, not in the profile context. Fixing it needs a larger refactor.
  • Navigation blocker on the install step, EKS Anywhere "unavailable" styling, aria-describedby on catalog errors, the stale InputSelectSmall value, and the semantic close-button query: product or scope calls that I left for follow-ups.

Testing

  • Jest for clusters/feature (78 suites) and console-shared pass
  • tsc and ESLint clean on the touched libs

🤖 Generated with Claude Code


Summary by cubic

Follow-up to the engine v2 review, fixing the remaining valid Cubic and Copilot feedback.

Fixes:

  • Show an empty state instead of a disabled layer when no profile layer can be opened.
  • Filtered search no longer opens a component with nothing to configure; the empty state appears instead.
  • Polling for the Operator status now keeps running while the Operator state is missing by default; stopPollingWhenMissing opts into stopping when the cluster is known to have no Operator.
  • Reverted edits are left out of the profile save so the field keeps its schema default.
  • Sensitive number inputs are masked in both catalog variable layouts.
  • Provider card icons, including cloned SVGs, are hidden from assistive technologies.
  • The Operator status panel moved from a tooltip to a popover named "Qovery Operator status" that opens on click, making the update action reachable by keyboard.
  • Tests cover the new behavior, including the analytics event for the EKS Anywhere access request and the empty/disabled layer cases.