mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-26 21:47:20 +00:00
Order the endpoint step as address, then name (#2982)
## What changes for users #2979 moved **Endpoint URL** ahead of **Node Name** in the Add Proxmox VE/PBS/PMG form. The step summary above the form still read **Endpoint — Name and API address**, the old order. It now reads **Endpoint — API address and name**. ## Verification - **Tests:** - `NodeCredentialSlot.test.tsx` checks the rendered step text in the endpoint-first test. - `settingsArchitecture.test.ts` pins the source copy. - Both fail against `main`. - **Suites and static checks:** Settings plus the boundary and presentation suites, 2463 tests, all pass. tsc, formatting, the copy, canonical-platform and form-label audits, and the bundle check are clean. - **Live, private mock stack:** at 1024px the sequence reads "1 Endpoint API address and name". At 375px the step text fits on one line and there's no sideways scroll. - **Receipt:** the browser receipt is included.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -173,7 +173,7 @@ export const NodeCredentialSlot: Component<NodeCredentialSlotProps> = (props) =>
|
||||
</span>
|
||||
<div>
|
||||
<div class="font-medium text-base-content">Endpoint</div>
|
||||
<div class="text-xs text-muted">Name and API address</div>
|
||||
<div class="text-xs text-muted">API address and name</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-2">
|
||||
|
||||
+1
@@ -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();
|
||||
|
||||
@@ -1798,6 +1798,8 @@ describe('settings architecture guardrails', () => {
|
||||
expect(nodeCredentialSlotSource).toContain('get savingTemperatureSetting()');
|
||||
expect(nodeCredentialSlotSource).not.toContain('editingNode: props.editingNode');
|
||||
expect(nodeCredentialSlotSource).toContain('<NodeModalBasicInfoSection');
|
||||
// The step summary follows the form's field order: endpoint, then name.
|
||||
expect(nodeCredentialSlotSource).toContain('API address and name');
|
||||
expect(nodeCredentialSlotSource).toContain('<NodeModalAuthenticationSection');
|
||||
expect(nodeCredentialSlotSource).toContain('<NodeModalMonitoringSection');
|
||||
expect(nodeCredentialSlotSource).toContain('<NodeModalStatusFooter');
|
||||
|
||||
Reference in New Issue
Block a user