diff --git a/docs/development/ui-patterns.md b/docs/development/ui-patterns.md index 562fc1a..5c0945e 100644 --- a/docs/development/ui-patterns.md +++ b/docs/development/ui-patterns.md @@ -98,8 +98,10 @@ timestamps without an offset are UTC; never parse them as browser-local time. Receipt freshness uses the browser clock and shows Paused or a retry reason when updates are unavailable. These clocks are not live regions. -Provisioning detail pages show absolute start and finish times once in the -summary. Use `OperationTime` for their steps, checks and activity: offsets from +Provisioning detail pages show the requester, absolute start time and duration +in the summary. Keep the finish time, raw IDs and copy controls in collapsed +Technical details. Show freshness and poll only while the operation is active. +Use `OperationTime` for steps, checks and activity: offsets from the operation start (`+m:ss` or `+h:mm:ss`), with negative offsets for earlier evidence. Missing timestamps stay **Not recorded**. diff --git a/src/lib/ui/components/ProvisioningProgress.svelte b/src/lib/ui/components/ProvisioningProgress.svelte index 78ded5c..f86a37b 100644 --- a/src/lib/ui/components/ProvisioningProgress.svelte +++ b/src/lib/ui/components/ProvisioningProgress.svelte @@ -71,7 +71,6 @@
Agent state
{step.agentOperation.state}
Command queued
Latest agent report
-
Command ID
{step.agentOperation.id}
{#if step.agentOperation.error}

{step.agentOperation.error}

{/if} View host operation history @@ -136,7 +135,7 @@ .evidence-meta { display: flex; gap: var(--space-1) var(--space-4); flex-wrap: wrap; color: var(--text-tertiary); line-height: 1.6; } .checkpoints { display: grid; gap: var(--space-2); margin-top: var(--space-3); color: var(--text-secondary); line-height: 1.6; } .checkpoints li { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-3); } - .map-note { margin-top: var(--space-2); }code { font-family: var(--font-mono); overflow-wrap: anywhere; } + .map-note { margin-top: var(--space-2); } a { color: var(--accent-primary-hover); text-underline-offset: 3px; } a:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 3px; border-radius: 2px; } @media (max-width: 600px) { .phases summary { padding: var(--space-4); gap: var(--space-2); flex-wrap: wrap; }.phase-title { flex-basis: calc(100% - 70px); }.phase-state { padding-left: 34px; order: 1; flex-basis: 100%; }.phases summary::after { order: 0; }.steps { padding: var(--space-4); } } diff --git a/src/routes/provisioning/[id]/+page.svelte b/src/routes/provisioning/[id]/+page.svelte index feaac55..4a75e93 100644 --- a/src/routes/provisioning/[id]/+page.svelte +++ b/src/routes/provisioning/[id]/+page.svelte @@ -1,6 +1,6 @@