- Add missing blank line after imports in application.py (ruff I001)
- Use full path string instead of template literal for export API call
to avoid false positive in API contract drift check
- Update pdf-queue test to expect 200 for non-admin listing
Add Set<number>-based selection state to ScholarsPage with checkboxes
in both table and card views, select-all toggle, and stale-key pruning.
Backend: POST /scholars/bulk-delete, POST /scholars/bulk-toggle, and
GET /scholars/export?ids= filter. Service functions use user-scoped
queries. Structured logging for bulk operations.
Frontend: useScholarBulkActions composable extracts selection and bulk
action logic. AppSelect-based action dropdown with dynamic options.
Delete prompts window.confirm; enable/disable applies immediately.
Export downloads filtered JSON.
Includes integration tests for all bulk endpoints and frontend unit
tests for selection toggle, select-all, and stale pruning.
- Convert check interval setting from minutes to hours in the UI
- Show PDF queue tab to all authenticated users (not admin-only); requeue
actions remain admin-only in both backend and frontend
- Fix users tab not loading on first visit by removing the AsyncStateGate
wrapper that prevented child component refs from being populated before
onMounted fired
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove the auth.isAdmin guard from the Start check and Cancel check
buttons in the Activity Monitor. Admin-only route links (check history,
diagnostics) are unchanged.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>