Fix discovery proposal copy style

This commit is contained in:
Richard Courtman 2026-08-30 19:35:59 +01:00
parent defc24af83
commit b0de67332f
4 changed files with 35 additions and 44 deletions

View file

@ -2045,6 +2045,12 @@ served clones. Proof: `TestClonedResourcesPreservePlatformAdmission` and
## Current State
Discovery-led availability proposals present their evidence and canonical
attachment boundary as short, complete sentences in both the inline card and
machine-wide review. The colocated component test pins that operator-facing
copy so the shared copy-style audit cannot regress it back to semicolon-joined
instructions.
### Provider workflows hydrate only their active route inventory
Docker / Podman, Kubernetes, TrueNAS, and VMware surfaces declare an explicit

View file

@ -1,37 +1,13 @@
{
"version": 1,
"base_sha": "65bec55229d7b0ce94115740c8e45f19481f25c9",
"verified_at": "2026-08-30T17:24:54Z",
"base_sha": "defc24af837b91428fbee939d09cd31e9559fb4f",
"verified_at": "2026-08-30T18:33:03Z",
"result": "passed",
"changed_paths": [
"frontend-modern/src/api/discovery.ts",
"frontend-modern/src/components/Discovery/AvailabilityProposalCard.tsx",
"frontend-modern/src/components/Discovery/DiscoveryTab.tsx",
"frontend-modern/src/components/Discovery/availabilityProposalModel.ts",
"frontend-modern/src/components/Discovery/useDiscoveryTabState.ts",
"frontend-modern/src/components/Infrastructure/ResourceDetailDrawer.tsx",
"frontend-modern/src/components/Infrastructure/ResourceDetailDrawerOverviewTab.tsx",
"frontend-modern/src/components/Workloads/GuestDrawer.tsx",
"frontend-modern/src/components/Workloads/NodeDrawer.tsx",
"frontend-modern/src/features/docker/DockerHostDrawer.tsx",
"frontend-modern/src/types/discovery.ts"
],
"changed_paths": ["frontend-modern/src/components/Discovery/AvailabilityProposalCard.tsx"],
"content_sha256": {
"frontend-modern/src/api/discovery.ts": "ab530402b9f781725360f2f3a493d249e5e2460fc7b000fecd071ea482245b91",
"frontend-modern/src/components/Discovery/AvailabilityProposalCard.tsx": "fd730057d1ce530737d4db85406ab373300e7cb80aff08a3cebb1997703feaea",
"frontend-modern/src/components/Discovery/DiscoveryTab.tsx": "34d9bbe317f04e03a475c7f008a09cb0aec7c55d6cc16111887ad1084173a83b",
"frontend-modern/src/components/Discovery/availabilityProposalModel.ts": "3b4836202ccd7ea3e3e5a77984066d0992baa1f2aca1ab939d6c646e00de8e73",
"frontend-modern/src/components/Discovery/useDiscoveryTabState.ts": "8fe05c6c687fae58871b7cd169d571e6e4e20e0f3658a919f1a4bd1303fee8c6",
"frontend-modern/src/components/Infrastructure/ResourceDetailDrawer.tsx": "2da737d42e57b846e2f38872114b352dcf2e19d6f5be06ad5ba394f8d39abf3c",
"frontend-modern/src/components/Infrastructure/ResourceDetailDrawerOverviewTab.tsx": "b4d13cc0b945e15d73f0b5d3cc5f07d7081728c1b81673566c7b65af9e444938",
"frontend-modern/src/components/Workloads/GuestDrawer.tsx": "7516b22879ff63eca143e1b76f18bc1b86602ddb20d9fd6af74be01a529a6ab5",
"frontend-modern/src/components/Workloads/NodeDrawer.tsx": "6b43a190bab1a666a41395edfe8e4dda6fa0554dd276121155148a846accf781",
"frontend-modern/src/features/docker/DockerHostDrawer.tsx": "5d1125eddecc8a9d543c7497af4a1ba67032a11af6402aae22265a7bc10aa7e5",
"frontend-modern/src/types/discovery.ts": "4831b27ebf6577411f634f8bad01c7735e47bc4d212f8d4ad29790a68e4cf251"
"frontend-modern/src/components/Discovery/AvailabilityProposalCard.tsx": "8432b423e90ebb0e8dbc56ae82535b992bb7715be688cf6f95be34c1d12564e4"
},
"routes": [
"/docker/overview?q=uptime-kuma"
],
"routes": ["/docker/overview?q=uptime-kuma"],
"viewports": [
{
"width": 1280,
@ -43,17 +19,14 @@
}
],
"states": [
"discovered Uptime Kuma service with an evidence-bound inactive verification proposal",
"operator-edited check name and five-minute cadence with Pulse server observation",
"safe proposal test reporting an unresolved discovered hostname without creating a check",
"machine-wide review listing HTTP service proposals without guessing canonical attachments",
"desktop and phone-width proposal card and machine-review dialog layouts"
"current-build AvailabilityProposalCard with a discovered Uptime Kuma verification proposal",
"inline proposal evidence and canonical attachment copy",
"open machine assurance suggestions dialog with one reviewable HTTP service",
"desktop and phone-width proposal card and dialog layouts"
],
"interactions": [
"opened a Docker workload drawer, Manage, Access, and embedded Discovery analysis",
"changed the operator-owned name and interval while preserving the inferred endpoint",
"ran Test proposal and confirmed failure feedback remained inside the proposal",
"opened and closed Review machine suggestions and inspected the scrollable service list",
"verified the proposal card and machine-review dialog at desktop and phone widths"
"opened Review machine suggestions and verified the evidence-specific dismissal copy",
"closed the machine suggestions dialog with Escape",
"verified card and dialog bounds, wrapping, scrolling, and absence of horizontal overflow at desktop and phone widths"
]
}

View file

@ -230,8 +230,8 @@ export const AvailabilityProposalCard: Component<AvailabilityProposalCardProps>
</span>
</div>
<p class="mt-1 max-w-2xl text-xs text-blue-800 dark:text-blue-200">
Pulse inferred a useful check from this service. Review exactly what will run;
nothing is created until you choose the active-check action below.
Pulse inferred a useful check from this service. Review exactly what will run.
Nothing is created until you choose the active-check action below.
</p>
</div>
<Button size="sm" variant="ghost" onClick={() => setShowBulkReview(true)}>
@ -408,8 +408,8 @@ export const AvailabilityProposalCard: Component<AvailabilityProposalCardProps>
</h2>
<p class="mt-1 text-sm text-muted">
Review the services discovered through{' '}
{props.discovery.hostname || props.targetId}. Dismissing is evidence-specific;
creating a check still happens from its canonical resource so Pulse never
{props.discovery.hostname || props.targetId}. Dismissing is evidence-specific.
Creating a check still happens from its canonical resource so Pulse never
guesses the attachment.
</p>
</div>

View file

@ -103,7 +103,19 @@ describe('AvailabilityProposalCard', () => {
expect(screen.getByText('Endpoint · inferred')).toBeInTheDocument();
expect(screen.getByText('Expected behavior · reviewed default')).toBeInTheDocument();
expect(screen.getByText('GET returns HTTP 200–399')).toBeInTheDocument();
expect(screen.getByText(/nothing is created until/i)).toBeInTheDocument();
expect(
screen.getByText(
'Pulse inferred a useful check from this service. Review exactly what will run. Nothing is created until you choose the active-check action below.',
),
).toBeInTheDocument();
await fireEvent.click(screen.getByRole('button', { name: 'Review machine suggestions' }));
expect(
screen.getByText(
'Review the services discovered through docker-1. Dismissing is evidence-specific. Creating a check still happens from its canonical resource so Pulse never guesses the attachment.',
),
).toBeInTheDocument();
await fireEvent.click(screen.getByRole('button', { name: 'Close machine suggestions' }));
await fireEvent.change(screen.getByLabelText('Observation location · you control'), {
target: { value: 'edge-1' },