diff --git a/docs/nav-test-checklist.md b/docs/nav-test-checklist.md
index 05f26342..5fa51807 100644
--- a/docs/nav-test-checklist.md
+++ b/docs/nav-test-checklist.md
@@ -44,32 +44,32 @@ Pre-existing, but **surfaced** by the nav work: once rows became real ``s
one is a route change, so the deep-link resolver in `ChatHistory/index.tsx:69` — previously reached only
on refresh or a pasted URL — now runs on every ordinary click, and it calls `setActiveCwd(detail.cwd)`.
-## L — Chat: long-transcript lazy-load — 0/8
+## L — Chat: long-transcript lazy-load — 8/8 ✅
-- [ ] **L1** Open a very long chat → instantly at the newest message (no long scroll or visible jump).
-- [ ] **L2** Open is fast (only the tail loads, not thousands of messages).
-- [ ] **L3** Scroll near the top → older messages load (brief spinner at top).
-- [ ] **L4** After older messages load, the view stays put (doesn't snap to top or bottom).
-- [ ] **L5** Keep scrolling up → eventually reaches the true first message; loading stops.
-- [ ] **L6** Send a new message in a resumed chat → appends at the bottom, view follows.
-- [ ] **L7** A short chat (<20 msgs) behaves normally — all visible, no spinner.
-- [ ] **L8** "Jump to bottom" appears when scrolled up, and works.
+- [x] **L1** Open a very long chat → instantly at the newest message (no long scroll or visible jump).
+- [x] **L2** Open is fast (only the tail loads, not thousands of messages).
+- [x] **L3** Scroll near the top → older messages load (brief spinner at top).
+- [x] **L4** After older messages load, the view stays put (doesn't snap to top or bottom).
+- [x] **L5** Keep scrolling up → eventually reaches the true first message; loading stops.
+- [x] **L6** Send a new message in a resumed chat → appends at the bottom, view follows.
+- [x] **L7** A short chat (<20 msgs) behaves normally — all visible, no spinner.
+- [x] **L8** "Jump to bottom" appears when scrolled up, and works.
-## J — Jobs (`/jobs`) — H1 — 0/8
+## J — Jobs (`/jobs`) — H1 — 8/8 ✅
-- [ ] **J1** Click a job row → URL changes to `/jobs/`.
-- [ ] **J2** The clicked job's detail renders on the right.
-- [ ] **J3** The active row is highlighted.
-- [ ] **J4** Right-click a row → "Copy link" gives `/jobs/`.
-- [ ] **J5** The row's stop/delete button works and does **not** navigate.
-- [ ] **J6** Refresh on `/jobs/` → same job detail loads.
-- [ ] **J7** Both panels (Running/Queued **and** History) navigate correctly.
-- [ ] **J8** Different detail types still render (script terminal / pipeline steps / download).
+- [x] **J1** Click a job row → URL changes to `/jobs/`.
+- [x] **J2** The clicked job's detail renders on the right.
+- [x] **J3** The active row is highlighted.
+- [x] **J4** Right-click a row → "Copy link" gives `/jobs/`.
+- [x] **J5** The row's stop/delete button works and does **not** navigate.
+- [x] **J6** Refresh on `/jobs/` → same job detail loads.
+- [x] **J7** Both panels (Running/Queued **and** History) navigate correctly.
+- [x] **J8** Different detail types still render (script terminal / pipeline steps / download).
-## D — Dashboards (`/dashboards`) — H2 — 0/13 (highest risk: never runtime-tested)
+## D — Dashboards (`/dashboards`) — H2 — 2/13 (highest risk: never runtime-tested)
-- [ ] **D1** Click a row → URL becomes `/dashboards?selected=`.
-- [ ] **D2** The preview panel shows that dashboard.
+- [x] **D1** Click a row → URL becomes `/dashboards?selected=`.
+- [x] **D2** The preview panel shows that dashboard.
- [ ] **D3** The clicked row is highlighted.
- [ ] **D4** Preview's "open" arrow overlay → `/dashboards/` (full page).
- [ ] **D5** "New Dashboard" → create form appears; `?selected=` cleared from the URL.