{deployments ? 'Test servers' : 'Test results'}

{#if !deployments}{/if}
{#if !closed && !deployments} {#if editable && !hasDeletedServers}
{#if test.outcome === 'paused' && !expired}{/if} {#if test.outcome === 'active'}{/if} {#if ['paused', 'failed'].includes(test.outcome) && !expired}{/if}
{/if} {#if retryBlocked && ['paused', 'failed'].includes(test.outcome)}

{retryBlocked}

{/if} {#if expired}

The testing window ended. Use “Update beta” to test changed files in a fresh revision, or roll back and reuse the plan with a longer window.

{:else if test.outcome === 'paused' && !hasDeletedServers}

Resume retains completed milestones; continuous health and in-progress timing intervals start fresh. Pausing does not extend the deadline.

{/if} {/if} {#if error}{/if} {#if message}

{message}

{/if} {#if !test.servers.length}

{closed ? 'Test results were not recorded.' : hasDeletedServers ? 'No test run was recorded before a participating server was deleted.' : 'Awaiting the first test run.'}

{/if} {#if deployments}
{#each combined as { deployment, result } (deployment.server)} {@const failed = deployment.stage === 'failed' || result?.progress.some((check) => check.failed)} {@const open = expanded[deployment.server] ?? Boolean(failed)} {/each}
ServerDeploymentTest resultDetails
{#if result?.passed}Passed {:else if result?.progress.some((check) => check.failed)}Failed {:else if !result}{closed || deployment.server_deleted_at ? 'Not recorded' : 'Awaiting test run'} {:else}{closed ? 'Incomplete' : test.outcome === 'paused' ? 'Paused' : 'Waiting'}{/if}
{:else} {#each ranked as server (server.server)}
{server.progress.filter((p) => p.passed).length} / {server.progress.length} checks passed{#if test.plan.requirements.some((r) => r.kind === 'recovery')}Recovery cycles: {server.phase}{/if} {@render checks(server)}
{/each} {/if}
Test policy

{coverageSummary(test.plan)} · Every requirement must pass on each qualifying server.

{test.plan.waveSize ? `${test.plan.waveSize} servers per wave.` : 'All selected servers deployed together.'} {test.plan.failureAction === 'rollback' ? 'Failed checks trigger automatic rollback.' : test.plan.failureAction === 'pause' ? 'Failed checks pause testing for investigation.' : 'Failed checks hold testing for review.'} {test.plan.rollbackRestart === 'when-empty' ? 'Rollback restarts wait for empty servers.' : 'Rollback changes wait until the rollback campaign is resumed.'} Health checks continue after passing until promotion.

Evidence ({test.evidence.length}{test.evidence.length === 200 ? ' most recent' : ''}) {#if evidenceOpen}

Newest first. Includes retained evidence from earlier attempts and recovery cycles; current progress uses only the current attempt.

{#each filteredEvidence.slice(0, evidenceLimit) as event (event.id)}

{betaEvidenceSummary(event)}

Raw payload · {event.kind}
{event.payload}
{/each} {#if !filteredEvidence.length}

{test.evidence.length ? 'No evidence matches these filters.' : 'No evidence recorded yet. Check deployment progress and telemetry diagnostics.'}

{/if} {/if}
{#snippet checks(server: BetaTestView['servers'][number])} {#if test.plan.requirements.some(needsGameTelemetry)}

{#if server.observation?.lastGameplayAt}Latest gameplay: {server.observation.lastEvent?.replaceAll( '_', ' ' )} · · {server.observation.players ?? 'Unknown'} players{#if server.observation.round !== null} · Round {server.observation.round}{/if}{:else}No gameplay reports in this attempt yet.{/if} {#if !server.server_deleted_at}Telemetry diagnostics{/if}

{/if} {#each server.progress as progress (progress.id)} {@const requirement = test.plan.requirements.find((r) => r.id === progress.id)} {#if requirement}
{progress.passed ? 'Passed' : progress.failed ? 'Failed' : 'Waiting'} {requirementSummary(requirement)}{progress.detail}
{#if !progress.passed && !closed && !hasDeletedServers}

{betaWaitingCondition(requirement, server.observation)}

{/if} {#if !['manual', 'failure-budget'].includes(requirement.kind)}{/if} {#if editable && requirement.kind === 'manual' && !progress.passed && !closed && !hasDeletedServers} {#if canSign && server.observingAt}
{:else if canSign}

Waiting for this server's restart and health verification to finish before tester sign-off.

{:else}

Sign-off is unavailable while this test is {test.outcome}. {test.outcome === 'paused' ? 'Resume testing first.' : 'Use the recovery instructions above.'}

{/if} {/if}
{/if} {/each} {/snippet}