- Dashboard: replace Assign link with device dropdown + arrow button for
quick inline assignment without leaving the page
- Device detail: replace hardcoded 4-row install form with 1 row + '+ Add
brand' button that clones rows dynamically
- Device detail: add 'Install Specific Battery' card with dropdown of all
available batteries (label, brand, size, notes) via new /device/<id>/install-one route
- Tests: 4 new acceptance tests covering dashboard quick-assign and
install-one, including capacity enforcement on both paths (39 total)
Filter bar with Status, Brand, Size, Storage Location dropdowns and text
search. Select-all and bulk toolbar respect visible rows so users can filter
to a group (e.g. a storage location) and bulk-action them in one step.
New nullable columns on Battery: size, chemistry, capacity_mah,
tested_capacity_mah, tested_date, charge_cycles, purchase_date.
Battery detail page shows all populated fields and a full edit form
with select dropdowns for size and chemistry (with Other fallback).
Capacity health % shown in green/orange/red when both nominal and
tested capacity are set. Dashboard gains a Size column.
datalist only shows suggestions when typing, not on click. Switched to
a <select> showing all known brands plus a 'New brand...' option that
reveals a text input for entering a new brand name.