Repo-owner report, 2026-05-26: "there are no checkboxes to select and apply actions to multiple records; wrong."
The list page has no row-selection + bulk-action UI, even though the backend ships it.
Backend already exists
Frontend gap (3 layers, none built)
@dar/api: add client.runAction(app, model, actionName, pks) — the only package that talks to the backend.
@dar/data: a runAction mutation/hook wrapping it (page packages can't import @dar/api).
ListPage.tsx:
- a checkbox column + header select-all (with indeterminate state),
- a bulk-action toolbar that appears when ≥1 row is selected: an actions
<select> (from data.actions) + a Go button,
requires_confirmation actions prompt before running,
- after run, refresh the list + toast the result.
Parity target
Django admin's changelist: the checkbox column, "Action: [dropdown] Go", "Select all N" affordance, and the action-confirmation interstitial for destructive actions.
Acceptance (ACCEPTANCE §2.9 E-6a..E-6c made real)
A ModelAdmin with actions = [...] surfaces a checkbox column + action dropdown on the SPA list; selecting rows + an action + Go runs it server-side (permission-gated) and reflects the result.
Priority
P0 / v0.1 / Frontend. Sibling to the CRUD-affordance issue; both are the core list-action loop.
Repo-owner report, 2026-05-26: "there are no checkboxes to select and apply actions to multiple records; wrong."
The list page has no row-selection + bulk-action UI, even though the backend ships it.
Backend already exists
data.actions: ActionDescriptor[](fromModelAdmin.actions, feat(api): ModelAdmin.actions metadata + action runner endpoint (Closes #58) #101).POST /api/v1/<app>/<model>/actions/<name>/exists (feat(api): ModelAdmin.actions metadata + action runner endpoint (Closes #58) #101), takes a pk list, runs the action overget_querysetwith per-rowhas_*_permission.Frontend gap (3 layers, none built)
@dar/api: addclient.runAction(app, model, actionName, pks)— the only package that talks to the backend.@dar/data: arunActionmutation/hook wrapping it (page packages can't import@dar/api).ListPage.tsx:<select>(fromdata.actions) + a Go button,requires_confirmationactions prompt before running,Parity target
Django admin's changelist: the checkbox column, "Action: [dropdown] Go", "Select all N" affordance, and the action-confirmation interstitial for destructive actions.
Acceptance (ACCEPTANCE §2.9 E-6a..E-6c made real)
A
ModelAdminwithactions = [...]surfaces a checkbox column + action dropdown on the SPA list; selecting rows + an action + Go runs it server-side (permission-gated) and reflects the result.Priority
P0 / v0.1 / Frontend. Sibling to the CRUD-affordance issue; both are the core list-action loop.