diff --git a/web/src/routes/containers/stale/+page.svelte b/web/src/routes/containers/stale/+page.svelte
index bb442bb..f720291 100644
--- a/web/src/routes/containers/stale/+page.svelte
+++ b/web/src/routes/containers/stale/+page.svelte
@@ -41,7 +41,7 @@
cleaningIds = new Set([...cleaningIds, id]);
try {
await api.cleanupStaleContainer(id);
- containers = containers.filter((c) => c.id !== id);
+ containers = containers.filter((c) => c.instance.id !== id);
toasts.success($t('stale.cleanedUp'));
} catch (e) {
toasts.error(e instanceof Error ? e.message : $t('stale.cleanupFailed'));
@@ -124,10 +124,10 @@
/>
{:else}
- {#each containers as container (container.id)}
+ {#each containers as container (container.instance.id)}
{/each}
diff --git a/web/src/routes/projects/[id]/env/+page.svelte b/web/src/routes/projects/[id]/env/+page.svelte
index b865ef8..fee6978 100644
--- a/web/src/routes/projects/[id]/env/+page.svelte
+++ b/web/src/routes/projects/[id]/env/+page.svelte
@@ -40,7 +40,10 @@
let editProjectValue = $state('');
let projectEnvDeleteTarget = $state(null);
- const projectId = $derived($page.params.id);
+ // $page.params.id is typed string | undefined because SvelteKit can't
+ // statically prove the [id] segment is present, but inside this route file
+ // it always is — assert non-null so call sites don't need their own guards.
+ const projectId = $derived($page.params.id ?? '');
async function handleAddProjectEnv() {
if (!newProjectKey.trim()) return;