checkpoint: document keyboard accessibility hardening

This commit is contained in:
Avi 2026-09-01 11:07:49 -05:00
commit a47ce8b9ef

View file

@ -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
(`<li>` elements) are now keyboard-focusable and operable:
- Added `role="listbox"` on the `<ul>` and `role="option"` + `aria-selected`
on each non-active `<li>`.
- 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.