From da623e840955e009abdc02b2fc47449dbc55a690 Mon Sep 17 00:00:00 2001 From: Josh Wright Date: Fri, 9 Oct 2026 14:27:51 -0400 Subject: [PATCH] Limit provisioning step timing to progress and evidence --- .../ui/components/ProvisioningActivity.svelte | 5 ++-- src/routes/provisioning/[id]/+page.svelte | 26 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/lib/ui/components/ProvisioningActivity.svelte b/src/lib/ui/components/ProvisioningActivity.svelte index 68e0049..acf3685 100644 --- a/src/lib/ui/components/ProvisioningActivity.svelte +++ b/src/lib/ui/components/ProvisioningActivity.svelte @@ -1,5 +1,6 @@ +{#snippet dateTime(value: Timestamp)} + {@const iso = timestampISO(value)} + {#if iso}{:else}Not recorded{/if} +{/snippet} + {deployment ? `${actionLabels[deployment.action]} ${deployment.server}` : 'Provisioning'} | Electric Cherry
@@ -128,10 +132,10 @@ {#if outcome.checksSummary}

{' '}{outcome.checksSummary}

{/if}
{#if deployment.error}{/if} - {#if detail.activity.failureExcerpt && detail.activity.failureExcerpt.message !== deployment.error && ['failed', 'interrupted'].includes(deployment.state)}

Last failure event · {detail.activity.failureExcerpt.message}

{/if} + {#if detail.activity.failureExcerpt && detail.activity.failureExcerpt.message !== deployment.error && ['failed', 'interrupted'].includes(deployment.state)}

Last failure event · {@render dateTime(detail.activity.failureExcerpt.created_at)}{detail.activity.failureExcerpt.message}

{/if} {#if detail.warningMessages.length}

Recorded warnings

{/if} - {#if detail.safetyOverride}

Admin override enabled

Player safety checks bypassed for this operation. Confirmed by {detail.safetyOverride.actorName} · .

{/if} + {#if detail.safetyOverride}

Admin override enabled

Player safety checks bypassed for this operation. Confirmed by {detail.safetyOverride.actorName} · {@render dateTime(detail.safetyOverride.confirmedAt)}.

{/if} {#if detail.canResumeVerification || detail.canResumeCleanup || detail.canResumeRebuild || detail.canRetryWithRebuild || detail.canCancel || detail.canCancelCreation || canOverride}
{#if canOverride}

{detail.safetyOverrideUnavailableReason ?? 'Confirm to bypass player safety checks for this operation.'}

{/if} @@ -147,18 +151,18 @@ {#if view.actionError}{/if} {#if view.notice}

{view.notice}

{/if} {#if detail.progress?.blocker?.href}{detail.progress.blocker.label ?? 'View blocking work'} →{/if} - {#if detail.progress?.recovery}
{detail.progress.recovery.state === 'held' ? 'Recovery remains in progress' : detail.progress.recovery.state === 'released' ? 'Recovery capacity released' : detail.progress.recovery.state === 'transferred' ? 'Recovery transferred' : 'Recovery state not confirmed'}

{detail.progress.recovery.message}

Recorded {#if detail.progress.recovery.operationId && detail.progress.recovery.operationId !== deployment.id}View recovery operation →{/if}
{/if} + {#if detail.progress?.recovery}
{detail.progress.recovery.state === 'held' ? 'Recovery remains in progress' : detail.progress.recovery.state === 'released' ? 'Recovery capacity released' : detail.progress.recovery.state === 'transferred' ? 'Recovery transferred' : 'Recovery state not confirmed'}

{detail.progress.recovery.message}

Recorded {@render dateTime(detail.progress.recovery.at)}{#if detail.progress.recovery.operationId && detail.progress.recovery.operationId !== deployment.id}View recovery operation →{/if}
{/if} {#if serverHref && !['done', 'cancelled'].includes(deployment.state)}
Open server logsDiagnose connection{#if detail.progress?.phase === 'verify-map' || detail.progress?.checks.some(check => check.key === 'map' && check.result !== 'pass')}Review map configuration{/if}
{/if}
{#if outcome.active}
Time in phase{elapsedTime(timestampISO(detail.progress?.phaseStartedAt), now)}
{/if} -
Last evaluated
+
Last evaluated{@render dateTime(detail.progress?.observedAt)}
{#key deployment.id}
-

Offsets below show time from the operation start (minutes:seconds or hours:minutes:seconds).

+