{row.file.name}
-{message}
- {r && !r.ok && <> -{r.error}
- {r.code &&{r.code}{r.provider ? ` — ${r.provider}` : ""}{r.missing?.length ? ` — ${r.missing.join(", ")}` : ""}{r.slots?.length ? ` — ${r.slots.join(", ")}` : ""}
} - - >} -{error}
+ ))}>; } diff --git a/components/sidebar.tsx b/components/sidebar.tsx index 1f21140..dfcb898 100644 --- a/components/sidebar.tsx +++ b/components/sidebar.tsx @@ -213,7 +213,7 @@ export function SidebarToggle() { * phases only advance (all sessions end in Teaching — phase-as-signal was * decoration, now retired app-wide), and question-pending is the dominant * RESTING state of real sessions — a resting state has no scan value, so - * the meta line's "Waiting for your answer" text carries it. Idle is the + * the meta line's "Waiting for input" text carries it. Idle is the * absence of a signal, by design. */ function SessionStatus({ busy }: { busy: boolean }) { @@ -250,7 +250,7 @@ export function timeAgo(iso: string, now = new Date()): string { * ever wanted. */ function sessionMeta(chat: ChatListItem): string { if (chat.compacting) return `Compacting context · ${timeAgo(chat.updatedAt)}`; - if (chat.pendingQuestion) return `Waiting for your answer · ${timeAgo(chat.updatedAt)}`; + if (chat.pendingQuestion) return `Waiting for input · ${timeAgo(chat.updatedAt)}`; if ((chat.kind ?? "teach") === "practice" && chat.pendingProblem) { return `Problem waiting · ${timeAgo(chat.updatedAt)}`; } diff --git a/tests/notes-import.test.tsx b/tests/notes-import.test.tsx index b66d093..602e6c0 100644 --- a/tests/notes-import.test.tsx +++ b/tests/notes-import.test.tsx @@ -1,10 +1,44 @@ -import assert from "node:assert/strict"; -import { after, it } from "node:test"; -import { renderToStaticMarkup } from "react-dom/server"; -import { NotesImportResults, parseNotesImportResults, postNotesImport, type NotesImportResult } from "../components/notes-import.tsx"; +import React, { act } from "react"; +(globalThis as Record