Audit query: Action filter as searchable group-tree picker with group-level selection (low priority, #433 follow-up) #442

Closed
opened 2026-09-06 22:11:05 +00:00 by Cordy · 1 comment
Owner

Nikola, 2026-09-07, on seeing the #433 dropdown live on bao: the registry-fed list is correct but at 52 verbs it is one huge scrollable dropdown. Wanted: a nicer presentation, and the ability to select a whole group ("all trash-related") instead of only single verbs.

Options considered (mockup: audit-action-picker-mockup.html, approved-pending):

  • Nested flyout menus (Drupal-style cascade) — rejected: hover-cascades are a navigation pattern, not a filter control; fragile hover corridors, near-unusable on touch (collides with the #389 mobile pass), poor screen-reader story.
  • Searchable checkbox tree popover (Carbon-style) — chosen: groups from the #433 registry, collapsed by default (9 rows, not 52), tri-state group checkboxes (group tick = all its verbs = the "all trash-related" ask), type-to-filter with auto-expand + highlight, chips on the closed button ("Any action" / "Trash · all" / "3 actions"), Esc/click-outside close, keyboard navigable.

Wire change: the query endpoint gains a comma-separated actions= OR-filter beside the existing single action= (kept for compatibility); audit.Filter matches any of the list. The client expands a group tick into its member verbs, so the server stays group-agnostic and the #433 registry remains the only vocabulary source — the scanner tripwire keeps covering everything unchanged.

Build sketch (after greenlight): backend TDD red for the multi-action filter; frontend replaces the <select> with the picker fed by the same info.verbs payload (fillAuditVerbs becomes the tree renderer); i18n reuses the 9 audGrp* labels plus ~4 new keys (type-to-filter placeholder, selected-count, Clear, Any action reused); CHANGELOG; release.

Priority: low per Nikola — park until called.

Nikola, 2026-09-07, on seeing the #433 dropdown live on bao: the registry-fed list is correct but at 52 verbs it is one huge scrollable dropdown. Wanted: a nicer presentation, and the ability to select a whole group ("all trash-related") instead of only single verbs. **Options considered (mockup: `audit-action-picker-mockup.html`, approved-pending):** - **Nested flyout menus** (Drupal-style cascade) — rejected: hover-cascades are a navigation pattern, not a filter control; fragile hover corridors, near-unusable on touch (collides with the #389 mobile pass), poor screen-reader story. - **Searchable checkbox tree popover** (Carbon-style) — chosen: groups from the #433 registry, collapsed by default (9 rows, not 52), tri-state group checkboxes (group tick = all its verbs = the "all trash-related" ask), type-to-filter with auto-expand + highlight, chips on the closed button ("Any action" / "Trash · all" / "3 actions"), Esc/click-outside close, keyboard navigable. **Wire change:** the query endpoint gains a comma-separated `actions=` OR-filter beside the existing single `action=` (kept for compatibility); `audit.Filter` matches any of the list. The client expands a group tick into its member verbs, so the server stays group-agnostic and the #433 registry remains the only vocabulary source — the scanner tripwire keeps covering everything unchanged. **Build sketch (after greenlight):** backend TDD red for the multi-action filter; frontend replaces the `<select>` with the picker fed by the same `info.verbs` payload (fillAuditVerbs becomes the tree renderer); i18n reuses the 9 `audGrp*` labels plus ~4 new keys (type-to-filter placeholder, selected-count, Clear, Any action reused); CHANGELOG; release. Priority: **low** per Nikola — park until called.
Cordy closed this issue 2026-09-06 22:47:20 +00:00
Author
Owner

Shipped in v0.6.136 (PR #443, merged; dogfoods live, build_info v0.6.136). Built per the approved audit-action-picker mockup.

Decision record:

  • Backend (TDD, compile-red witnessed): audit.Filter.Actions — OR-set matched beside the untouched single Action field; query endpoint accepts comma-separated actions=, old action= kept for compatibility. Pinned by test: OR-set returns exactly its members' events, single-action stays exact-match, empty set means unconstrained.
  • Group selection is client-side: ticking a group expands to its verbs before the request, so the server stays group-agnostic and the #433 registry (plus its scanner tripwire) remains the only vocabulary source. A future verb lands in the picker with zero picker changes.
  • Picker UX as mocked: chips on the closed button ("Any action" / "Trash · all" / "{n} actions", collapsing to a count past three chips), popover opens at the nine registry groups collapsed (9 rows, not 52), tri-state group checkboxes, type-to-filter with match highlight and auto-expand, Esc clears search first / closes second, click-outside closes, "n of 52 selected" footer with Clear; the form's Reset clears the selection too. 5 new i18n keys ×4 locales.
  • Rejected: nested flyout menus — navigation pattern, not a filter control; fragile hover corridors, hostile on touch (#389 collision), poor screen-reader story.

The picker is live on both dogfoods — bao's audit query now opens at nine group rows, and ticking Trash gives you exactly the "all trash-related" view.

Shipped in **v0.6.136** (PR #443, merged; dogfoods live, `build_info v0.6.136`). Built per the approved audit-action-picker mockup. **Decision record:** - **Backend** (TDD, compile-red witnessed): `audit.Filter.Actions` — OR-set matched beside the untouched single `Action` field; query endpoint accepts comma-separated `actions=`, old `action=` kept for compatibility. Pinned by test: OR-set returns exactly its members' events, single-action stays exact-match, empty set means unconstrained. - **Group selection is client-side**: ticking a group expands to its verbs before the request, so the server stays group-agnostic and the #433 registry (plus its scanner tripwire) remains the only vocabulary source. A future verb lands in the picker with zero picker changes. - **Picker UX** as mocked: chips on the closed button ("Any action" / "Trash · all" / "{n} actions", collapsing to a count past three chips), popover opens at the nine registry groups collapsed (9 rows, not 52), tri-state group checkboxes, type-to-filter with match highlight and auto-expand, Esc clears search first / closes second, click-outside closes, "n of 52 selected" footer with Clear; the form's Reset clears the selection too. 5 new i18n keys ×4 locales. - **Rejected**: nested flyout menus — navigation pattern, not a filter control; fragile hover corridors, hostile on touch (#389 collision), poor screen-reader story. The picker is live on both dogfoods — bao's audit query now opens at nine group rows, and ticking Trash gives you exactly the "all trash-related" view.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#442
No description provided.