There should be a place (places due to RC vs. watchlist issue) on the backend where you can configure:
* What filters there are
* Whether they are available on new RC page, or both old and new.
* The default value (may be based on a preference, can vary by watchlist vs. RC, e.g. 'hideminor' vs. 'watchlisthideminor' preferences) (the default can vary for non-preference cases too)
* The actual modification this makes to the DB query
* Prioritization (where it appears in the filter list)
* Filters that imply/control other filters (e.g. if you select "Likely have problems", it should also find edits that are "Very likely have problems"). See T151873 and T149452 .
This needs to extensible by extensions (we already have a need for this, e.g. ORES, Wikidata, Translate).
I suggest hooks would be a good option for extensibility, but @mooeypoo points out having extensions modify a wg could work.
Potentially pass in callbacks to a registration method, and disable if there are any missing (e.g. {T152797}).
In output for new rcfilters UI:
* If possible, backend converts 'all' to actual default values (e.g. comma-sep).
* Doesn't need to redirect 'all' URL, but would be nice if it's all *and* other stuff.
* Don't need to omit default: false.
** For send_unselected type, default: false means that this parameter is not active (e.g. for 'hideanons', default: false means anons are not hidden by default).
** For string type, default: false means that this parameter item is not active (e.g. for 'learner' of 'userExpLevel', default: false means 'learner' rows are not displayed by default).
* Numeric values (e.g. rcdays) to be solved later.
In output for old rcfilters UI, same except:
* Data attribute of filter name to hide/show link.
* Tag filter links with whether they exist in the new implementation.