- New DashboardModel (BaseDatabaseModel) with getStats(), getCoverageByType(),
getMissingArticles() — coverage logic moved out of the list template
- New View/Dashboard/HtmlView + tmpl/dashboard/default.php: SVG donut coverage
gauge, field-gap badges, per-content_type breakdown table, and a list of
published articles missing OG tags (linking to the article editor) with a
Batch Generate shortcut
- DisplayController default_view -> dashboard; Dashboard + Tags submenu entries
- Removed the inline coverage.php include from the tags list (it ran 6 uncached
COUNT queries on every list load); that logic now lives in DashboardModel
- Declared tmpl/dashboard in the manifest; added language strings (en-GB, en-US)