Why
The repository tabs draw the same controls in different shapes. On issues and changes the state chips sit above the search row; on activity the kind chips sit above the actor/assignee pickers; on code the search field comes before the ref pickers. The search is sometimes first, sometimes last, depending on the page.
A reader moving between tabs has to find the search again. The controls are the same component; the row should be too.
Scope
- One row per tab: chips and labelled dropdowns on the left, the search group on the right.
- Pages without a text search (activity) put their clear action in the same right-hand slot, so the left edge is always filters.
- The chips move inside the form on issues, changes and activity, so a search submits the chosen state/kind and an htmx swap replaces the row with the server’s values.
- Code search and the global search page use the same
.filters-searchgroup. - On a phone the row stacks; the search keeps its button beside the field.
Acceptance
- Issues, changes, activity, code, code search and global search all have one filter row, with nothing labelled as a filter after the search group.
- A search from a tab keeps that tab’s state chips selection.
- The htmx fragments still replace the row along with the list.
- A UI test pins the order, and the existing filter-shape test still passes.
Notes
This is layout only; no handler, query, or htmx target changes.