The `?text=` param on `/v1/me/page-tags/chapters` and `/mangas` was
reserved and returned 501 `text_search_not_yet_supported`. Now that OCR
populates `search_doc`, flip it to real search.
- `aggregate_chapters_for_tag` / `aggregate_mangas_for_tag` take an optional
`text`; when non-blank they JOIN `page_analysis` and filter on
`search_doc @@ plainto_tsquery('simple', $n)`, consistent with
`repo::page_analysis::page_search`. `match_count` and the sample
thumbnails reflect the filtered set. `text` is always bound, never
interpolated.
- Drop `ensure_text_unsupported` and the 501 guard. `AppError::NotImplemented`
stays as a generic variant for future reservations.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>