checkpoint: document keyboard accessibility hardening
This commit is contained in:
parent
e9022b36b9
commit
a47ce8b9ef
1 changed files with 32 additions and 12 deletions
|
|
@ -1,11 +1,11 @@
|
||||||
# Checkpoint — Profile import over IPC (2026-09-01)
|
# Checkpoint — HomeScreen keyboard accessibility (2026-09-01)
|
||||||
|
|
||||||
## Where things are
|
## Where things are
|
||||||
- Project: `/home/avi/Projects/Keynctr`
|
- Project: `/home/avi/Projects/Keynctr`
|
||||||
- Git repo: `master` @ `3083a44` ("chore: fix two clippy warnings").
|
- Git repo: `master` @ `f1236e7` ("checkpoint: document clippy warning cleanup").
|
||||||
- Working tree: clean except four untracked items (`.directory`, `.opencode/`,
|
- Working tree: **3 modified files uncommitted** (the harden changes below) plus
|
||||||
`COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`) — none are part of this
|
the usual untracked items (`.directory`, `.opencode/`, `.impeccable/`,
|
||||||
feature and none have been committed.
|
`COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`).
|
||||||
|
|
||||||
## What was completed
|
## What was completed
|
||||||
1. **Clippy is now warning-free.** Removed the two pre-existing warnings: the
|
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`,
|
5. **Prettier** applied to `ImportProfileModal.tsx`, `ProfilesScreen.tsx`,
|
||||||
`AppProvider.tsx` (and the test file), clearing the three existing
|
`AppProvider.tsx` (and the test file), clearing the three existing
|
||||||
`format:check` warnings — `npm run format:check` is now fully clean.
|
`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)
|
## Commits added in this session (newest first)
|
||||||
|
- `f1236e7` checkpoint: document clippy warning cleanup
|
||||||
- `3083a44` chore: fix two clippy warnings
|
- `3083a44` chore: fix two clippy warnings
|
||||||
- `0207636` feat: expose profile import over IPC
|
- `0207636` feat: expose profile import over IPC
|
||||||
- `2604cf9` checkpoint: document release packages
|
- `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
|
## Verification commands run
|
||||||
All green in this session, run after the changes:
|
All green in this session, run after the changes:
|
||||||
|
|
||||||
- Rust: `cargo fmt --check` clean; `cargo test` — 116 passed;
|
- Rust: `cargo fmt --check` clean; `cargo test` — 116 passed;
|
||||||
`cargo clippy --all-targets` — clean, zero warnings; `cargo build --release` — success.
|
`cargo clippy --all-targets` — clean, zero warnings; `cargo build --release` — success.
|
||||||
- Frontend: `npm test` — 15 files / 99 passed (the 2 previously failing HomeScreen
|
- Frontend: `npm test` — 15 files / 99 passed; `npm run typecheck` clean; `npm run lint`
|
||||||
tests now pass); `npm run typecheck` clean; `npm run lint` clean (only the
|
clean (only the harmless ES-module reparsing warning); `npm run build` — success
|
||||||
harmless ES-module reparsing warning); `npm run format:check` — all files clean;
|
(Vite bundle built).
|
||||||
`npm run electron:build` — success; `npm run build` — success (Vite bundle built).
|
|
||||||
- Packaging (previous session, still valid artifacts):
|
- Packaging (previous session, still valid artifacts):
|
||||||
`npx electron-builder --linux AppImage deb` produced
|
`npx electron-builder --linux AppImage deb` produced
|
||||||
`frontend/release/Keynctr-0.1.0.AppImage` and
|
`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
|
## Outstanding / next-step items
|
||||||
- **Undo restores with empty `secret_key`** (stores `ProfileSummary`); needs
|
- **Undo restores with empty `secret_key`** (stores `ProfileSummary`); needs
|
||||||
`StoredProfile` in `undo_history` for full secret recovery.
|
`StoredProfile` in `undo_history` for full secret recovery.
|
||||||
- `.opencode/`, `COSMIC_THEME.md`, `KeynctrAppIconPossibility02.jpeg` remain
|
- `.opencode/`, `.impeccable/critique/`, `COSMIC_THEME.md`,
|
||||||
untracked (`.directory` is a file-manager artifact); no commit was created for
|
`KeynectrAppIconPossibility02.jpeg` remain untracked (`.directory` is a
|
||||||
them in this session.
|
file-manager artifact); no commit was created for them in this session.
|
||||||
- Installer artifacts are local build outputs under `frontend/release/` and are
|
- Installer artifacts are local build outputs under `frontend/release/` and are
|
||||||
not committed.
|
not committed.
|
||||||
- README is stale (title, dependency versions, test counts, Forgejo references) —
|
- README is stale (title, dependency versions, test counts, Forgejo references) —
|
||||||
worth a docs pass before 0.2.
|
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.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue