diff --git a/docs/release-control/v6/internal/subsystems/agent-lifecycle.md b/docs/release-control/v6/internal/subsystems/agent-lifecycle.md index 02d1f7610b..6853a7fb30 100644 --- a/docs/release-control/v6/internal/subsystems/agent-lifecycle.md +++ b/docs/release-control/v6/internal/subsystems/agent-lifecycle.md @@ -582,6 +582,10 @@ duplicates with the host IP. The help copy therefore says only that an empty name is named after the host, and makes no uniqueness demand. This adds no agent authority and changes no setup or save payload. +The connection sequence above the form follows the same order: its first step +reads "Endpoint — API address and name" (`NodeCredentialSlot.tsx`), so the +summary never asks for the name before the address it is derived from. + ### Explicit filesystem selections survive the report boundary Disk reports carry optional `explicitlyIncluded` evidence when the collector diff --git a/docs/release-control/v6/internal/subsystems/api-contracts.md b/docs/release-control/v6/internal/subsystems/api-contracts.md index 7472788178..29ef055e35 100644 --- a/docs/release-control/v6/internal/subsystems/api-contracts.md +++ b/docs/release-control/v6/internal/subsystems/api-contracts.md @@ -362,6 +362,10 @@ so registration falls back to the reported server name, and new empty-name request shape. `NodeCredentialSlot.test.tsx` pins endpoint-first order, the optional name and the derivation as the endpoint is typed. +The sequence summary in `NodeCredentialSlot.tsx` names the endpoint step "API +address and name" to match that field order; it is copy only and changes no +request. + ### Canonical incident-history query contract Incident APIs discover canonical-only occurrences and retain exact-start diff --git a/frontend-modern/browser-verification/5c9f1334f78c1a40.json b/frontend-modern/browser-verification/5c9f1334f78c1a40.json new file mode 100644 index 0000000000..6fbd292a65 --- /dev/null +++ b/frontend-modern/browser-verification/5c9f1334f78c1a40.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "base_sha": "de7fc078fc561f2e4b9d6e816b19f42ef626dd58", + "verified_at": "2026-10-15T22:20:00Z", + "result": "passed", + "changed_paths": [ + "frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx" + ], + "content_sha256": { + "frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx": "372cb93c01b8de3d1cdfcfc516b5f78e04cdbaa425849fb45a335ffd0654937f" + }, + "routes": [ + "/settings/infrastructure?add=pve" + ], + "viewports": [ + { + "width": 1024, + "height": 768 + }, + { + "width": 375, + "height": 812 + } + ], + "states": [ + "Before (main): the connection sequence above Add Proxmox VE read \"Endpoint \u2014 Name and API address\" while the form below asks for Endpoint URL first and Node Name second", + "After: the first step reads \"Endpoint \u2014 API address and name\", matching the field order", + "At 375px the step text fits on one line (126px, not clipped) and the page has no sideways scroll" + ], + "interactions": [ + "Signed in to a private mock stack, opened Add infrastructure for Proxmox VE, read the sequence text from the DOM and looked at a full screenshot", + "Resized to the mobile preset and measured the step text and page width" + ] +} diff --git a/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx b/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx index 351e55d3fb..85bba88949 100644 --- a/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx +++ b/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx @@ -173,7 +173,7 @@ export const NodeCredentialSlot: Component = (props) =>
Endpoint
-
Name and API address
+
API address and name
diff --git a/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/__tests__/NodeCredentialSlot.test.tsx b/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/__tests__/NodeCredentialSlot.test.tsx index b2d18291fb..b67d470658 100644 --- a/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/__tests__/NodeCredentialSlot.test.tsx +++ b/frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/__tests__/NodeCredentialSlot.test.tsx @@ -211,6 +211,7 @@ describe('NodeCredentialSlot', () => { /> )); + expect(screen.getByText('API address and name')).toBeInTheDocument(); const endpoint = screen.getByLabelText(/^Endpoint URL/); const name = screen.getByLabelText(/^Node Name/); expect(endpoint.compareDocumentPosition(name) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy(); diff --git a/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts b/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts index eb50c72394..0ecdaf1eef 100644 --- a/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts +++ b/frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts @@ -1798,6 +1798,8 @@ describe('settings architecture guardrails', () => { expect(nodeCredentialSlotSource).toContain('get savingTemperatureSetting()'); expect(nodeCredentialSlotSource).not.toContain('editingNode: props.editingNode'); expect(nodeCredentialSlotSource).toContain('