## Final review findings
### P0
- None.
### P1
- None.
### P2
1. **Candidate-selection checkboxes lack accessible names and adequate touch targets.**
`frontend/src/pages/BudgetCategoryAssignmentPage.vue:29`
Each checkbox is a bare ` ` without a `` or `aria-label`, so assistive technology cannot identify which candidate it selects. The checkbox also retains the browser-default small hit area, including in the new 390/820px card layout.
2. **Clickable transaction rows do not expose button semantics or complete keyboard behavior.**
`frontend/src/pages/BudgetCategoryAssignmentPage.vue:34`
The `` opens a transaction on click or Enter, but has no action role/name and does not support Space. Keyboard and screen-reader users encounter a focusable table row without being told it opens details. Use a real button within the row, or add appropriate semantics plus Enter and Space handling.
3. **Household action dialogs omit the selected operation from their accessible name.**
`frontend/src/pages/HouseholdReviewPage.vue:117-125`
`aria-labelledby="review-detail-title"` points only to the merchant heading. The operation in `detailIntent`—such as reopening a duplicate, excluding a duplicate, or confirming a settlement—is visually displayed but not associated with the dialog. Screen readers therefore announce only the merchant, not the purpose of this consequential confirmation workflow.
4. **Interactive monthly chart bars expose only the month, not their represented value or purpose.**
`frontend/src/pages/BudgetStatusPage.vue:25`
Each chart control’s accessible name is only the abbreviated month. Actual spending is conveyed solely through bar height, while budget and actual values are absent from the button name or an accessible data alternative. Nonvisual users cannot interpret the chart before activating a month.
## Verification
- Focused frontend suite: **55 tests passed**.
- `npm run typecheck`: passed.
- `npm run build`: passed.
- `git diff --check`: passed.
- Reviewed responsive CSS behavior for the specified 1440/820/390 layouts; no P0/P1 responsive blocker found.
## Workspace
- Files created or modified: **none**.
- Issue encountered: initial focused-test invocation used repository-relative paths from inside `frontend/`; rerun with corrected paths passed.