# v2.6.7 (Lyra) — Essential plugins consistent tonen + docblock-vereiste Releasedatum: 2026-08-27 Codename: Lyra Status: stable ## Samenvatting Vervolg op v2.6.6 (essential plugins altijd laden). In v2.6.6 forcerde alleen `PluginManager::loadPlugins()` het laden van essential plugins — maar vier andere plekken in de code lazen nog de ruwe `config.enabled_plugins` zonder essential-forcering, waardoor essential/protected plugins (Dashboard, Navigation) op diverse plekken als "Inactief" of onzichtbaar toonden, ondanks dat ze effectief draaiden. Deze release maakt alle plekken die plugin-status bepalen consistent met `PluginManager`. Daarnaast is de docblock-vereiste formeel vastgelegd in `AGENTS.md`. ## Wijzigingen ### `cms/core/plugin/AdminPluginAPI.php` - `getEnabledPlugins()` bevraagt nu de geïnjecteerde PluginManager (single source of truth) wanneer aanwezig. Fallback (zonder PluginManager) doet zelf een essential-scan over de plugins-directory, consistent met `PluginManager::loadPlugins()`. Essential plugins worden altijd geretourneerd, ook als ze niet in `config.enabled_plugins` staan. ### `public/admin.php` - `handleDashboard()` (plugin-overzicht op `/admin/dashboard`): `enabled` wordt `true` voor protected/essential plugins via `isProtectedPlugin()`. Eerder toonde het dashboard essential plugins als inactief als ze uit `enabled_plugins` raakten. - `handleContentFiles()` en `handleContentEdit()` (content-editor plugin-multiselect): essential/protected content-plugins worden altijd getoond in de selector (via `isProtectedPlugin()`). Eerder ontbrak `Navigation` uit de keuzelijst als die niet in `enabled_plugins` stond, terwijl hij effectief draaide. - Dode functie `countEnabledPlugins()` verwijderd (nergens aangeroepen). ### `AGENTS.md` - Nieuwe sectie `Docblocks (verplicht)`: elke plugin, theme, class, method en function (ook private/protected) krijgt een WordPress-stijl docblock. Bevat het vereiste formaat met `@since`, `@param`, `@return` en de `{ @type }` array-structuur. Controle bij elke verandering. ## Consistentie-check (alle 17 plekken) Alle plekken die plugin-status bepalen zijn gecontroleerd. Na v2.6.7 leest geen enkele plek meer de ruwe `enabled_plugins` zonder essential-forcering: | Plek | Voor v2.6.7 | Na v2.6.7 | |------|-------------|-----------| | `PluginManager::loadPlugins()` | ✅ v2.6.6 | ✅ | | `PluginManager::isEnabled()` | ✅ | ✅ | | `CodePressCMS` (front-end) | ✅ (via PM) | ✅ | | `handleDashboard()` admin.php:670 | ❌ ruw | ✅ geforceerd | | `handleContentFiles()` admin.php:1272 | ❌ ruw | ✅ geforceerd | | `handleContentEdit()` admin.php:1973 | ❌ ruw | ✅ geforceerd | | `handlePlugins()` admin.php:3827 | ✅ v2.6.6 | ✅ | | `handlePluginsToggle()` admin.php:5252 | ✅ v2.6.6 | ✅ | | `AdminPluginAPI::getEnabledPlugins()` | ❌ ruw | ✅ via PM | | `Dashboard.php` (plugin) | via API | ✅ via gefixte API | | guide-sidebar (admin.php:5650) | ✅ direct require | ✅ | | `config.php` default | ✅ bevat Navigation | ✅ | | `countEnabledPlugins()` | dode code | verwijderd | ## Tests uitgevoerd - `php -l` over alle PHP-bestanden (zonder vendor): 0 syntax-errors. - Functionele tests (`cli/test/functional/run-tests.sh` tegen Apache): 16/16 PASS (100%). - Pentest (`cli/test/pentest/pentest.sh`): 29/29 SAFE, 0 vulnerabilities. - Accessibility / WCAG 2.1 AA (`cli/test/accessibility.sh`): 25/25 PASS. - Runtime-check `AdminPluginAPI::getEnabledPlugins()` met lege `enabled_plugins`: retourneert `Dashboard`+`Navigation` (zowel via PM als via fallback). - Runtime-check `handleDashboard()` simulatie met lege `enabled_plugins`: `Dashboard`+`Navigation` tonen `enabled=true`. - Runtime-check content-editor selector met lege `enabled_plugins`: `Navigation` zichtbaar (essential content-plugin). ## Upgrade-instructies 1. Pull de nieuwe versie. 2. Geen verdere actie nodig — alle plekken tonen essential plugins nu consistent als actief, ongeacht de staat van `enabled_plugins` in `config.json`.