diff --git a/CHECKPOINT-encryption.md b/CHECKPOINT-encryption.md
index 3d300ef..85c36b5 100644
--- a/CHECKPOINT-encryption.md
+++ b/CHECKPOINT-encryption.md
@@ -1,11 +1,11 @@
-# Checkpoint — Profile import over IPC (2026-09-01)
+# Checkpoint — HomeScreen keyboard accessibility (2026-09-01)
## Where things are
- Project: `/home/avi/Projects/Keynctr`
-- Git repo: `master` @ `3083a44` ("chore: fix two clippy warnings").
-- Working tree: clean except four untracked items (`.directory`, `.opencode/`,
- `COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`) — none are part of this
- feature and none have been committed.
+- Git repo: `master` @ `f1236e7` ("checkpoint: document clippy warning cleanup").
+- Working tree: **3 modified files uncommitted** (the harden changes below) plus
+ the usual untracked items (`.directory`, `.opencode/`, `.impeccable/`,
+ `COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`).
## What was completed
1. **Clippy is now warning-free.** Removed the two pre-existing warnings: the
@@ -29,21 +29,37 @@
5. **Prettier** applied to `ImportProfileModal.tsx`, `ProfilesScreen.tsx`,
`AppProvider.tsx` (and the test file), clearing the three existing
`format:check` warnings — `npm run format:check` is now fully clean.
+6. **HomeScreen keyboard accessibility (this session).** Profile list rows
+ (`
` elements) are now keyboard-focusable and operable:
+ - Added `role="listbox"` on the `` and `role="option"` + `aria-selected`
+ on each non-active `- `.
+ - Added `tabIndex={0}` so non-active rows receive keyboard focus.
+ - Added `onKeyDown` handler (Enter/Space to select) matching the existing
+ `onClick` behavior (skips if target is a button/a/input).
+ - Added descriptive `aria-label` including profile name and active state.
+ - Added `.home-profile-row:not(.is-active):focus-visible` CSS rule for the
+ standard 2px solid var(--focus) + 2px offset ring.
+ - Updated the test from `findByRole('list')` to `findByRole('listbox')`.
## Commits added in this session (newest first)
+- `f1236e7` checkpoint: document clippy warning cleanup
- `3083a44` chore: fix two clippy warnings
- `0207636` feat: expose profile import over IPC
- `2604cf9` checkpoint: document release packages
+**Uncommitted (this session):**
+- `frontend/src/screens/HomeScreen.tsx` — keyboard accessibility for profile list
+- `frontend/src/styles.css` — focus-visible styling for profile rows
+- `frontend/src/test/HomeScreen.test.tsx` — updated test role to listbox
+
## Verification commands run
All green in this session, run after the changes:
- Rust: `cargo fmt --check` clean; `cargo test` — 116 passed;
`cargo clippy --all-targets` — clean, zero warnings; `cargo build --release` — success.
-- Frontend: `npm test` — 15 files / 99 passed (the 2 previously failing HomeScreen
- tests now pass); `npm run typecheck` clean; `npm run lint` clean (only the
- harmless ES-module reparsing warning); `npm run format:check` — all files clean;
- `npm run electron:build` — success; `npm run build` — success (Vite bundle built).
+- Frontend: `npm test` — 15 files / 99 passed; `npm run typecheck` clean; `npm run lint`
+ clean (only the harmless ES-module reparsing warning); `npm run build` — success
+ (Vite bundle built).
- Packaging (previous session, still valid artifacts):
`npx electron-builder --linux AppImage deb` produced
`frontend/release/Keynctr-0.1.0.AppImage` and
@@ -72,10 +88,14 @@ All green in this session, run after the changes:
## Outstanding / next-step items
- **Undo restores with empty `secret_key`** (stores `ProfileSummary`); needs
`StoredProfile` in `undo_history` for full secret recovery.
-- `.opencode/`, `COSMIC_THEME.md`, `KeynctrAppIconPossibility02.jpeg` remain
- untracked (`.directory` is a file-manager artifact); no commit was created for
- them in this session.
+- `.opencode/`, `.impeccable/critique/`, `COSMIC_THEME.md`,
+ `KeynectrAppIconPossibility02.jpeg` remain untracked (`.directory` is a
+ file-manager artifact); no commit was created for them in this session.
- Installer artifacts are local build outputs under `frontend/release/` and are
not committed.
- README is stale (title, dependency versions, test counts, Forgejo references) —
worth a docs pass before 0.2.
+- **HomeScreen critique follow-up** (from `/impeccable critique`): 27/40 score.
+ Remaining P1: identity card gradient breaks flat-by-default rule. P2: flat
+ first-run guide, off-system 8px border-radius, publication empty state as
+ sentence. See `.impeccable/critique/2026-09-01T15-55-28Z__...` for full report.