Admin list screens should use the shared list-control and list-layout rails so search, filters, sorting, row counts, checkbox selection, and pagination behave consistently across addons.
Owners
- `core/http/list_controls.php` shapes request parsing for pagination, search, sorting, filters, and total counts.
- `admin/views/list_layout.php` renders shared list toolbars, sortable headers, pagination controls, action blocks, and neutral panels.
- Individual addons own their query allow-lists, table rows, labels, and permissions.
How To Call It
- Parse request controls with `amv_core_list_controls_parse()` or addon adapters that call `amv_core_pagination_parse_request()`, `amv_core_search_parse_request()`, and `amv_core_sort_parse_request()`.
- Render toolbars with `amv_admin_template_list_toolbar()`.
- Render sortable headers with `amv_admin_template_sort_header()`.
- Render bottom pagination with `amv_admin_template_pagination()`.
- Keep each list's allowed sort columns explicit. Map UI sort keys to SQL columns instead of trusting request strings.
Existing Usage
- Wiki requires `core/http/list_controls.php` and `admin/views/list_layout.php` from `addons/wiki/src/runtime.php`.
- Wiki pages and spaces screens use shared search, filters, sort headers, per-page dropdowns, bulk checkboxes, and pagination in `amv_wiki_render_page_list()` and `amv_wiki_render_space_list()`.
- System Manager uses the same pagination language for completion-board and version findings in `addons/system_manager/src/admin_runtime.php`.
Do Not Duplicate
- Do not build per-addon row-count dropdown behavior.
- Do not sort directly on request parameter names.
- Do not mix create/edit forms into list views when the addon has separate create/edit screens.
- Do not bypass the shared template merely to change layout text; add addon labels and keep the behavior centralized.