From 0782915980ecaa6d840b5fe5feb6a718a03f3c7f Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Thu, 30 Apr 2026 23:07:40 +0200 Subject: [PATCH 1/2] fix: repair conditional rules + admin templates + permission defaults (#39) Walkthrough of all 9 archived OpenSpec features uncovered three critical runtime bugs in features marked "implemented". This commit restores them and clears the supporting quality stack. Critical fixes -------------- - ConditionalRule.createdAt: switch ?DateTime to ?string ('c' format) to match sibling entities. Doctrine DBAL cannot bind a DateTime without an explicit addType registration; INSERT now succeeds. Same change in AdminSetting.updatedAt. - AdminTemplateService + TemplateService: drop the ramsey/uuid require and inline the random_bytes(16) UUID generator already used by DashboardFactory. The ramsey class was never autoloaded at runtime (Application.php does not require vendor/autoload.php), so admin template creation and template-based dashboard provisioning both threw 500. - DashboardService: stop hardcoding PERMISSION_FULL when auto-creating user dashboards. Read defaultPermissionLevel and defaultGridColumns from AdminSettingMapper and pass them to DashboardFactory. Quality ------- - NamedParametersSniff: skip Entity-magic accessors (set*/get*/is*) on classes extending OCP\AppFramework\Db\Entity. Entity::__call uses args[0], so named arguments break those calls. Eliminates 4 false positives. - DashboardService: add the missing WidgetPlacement import (PHPMD). - PageController: replace \OC::server->get(IManager::class) with proper DI (Psalm). - UserAttributeResolver: drop the non-existent IUser::getLanguage() call and read 'core/lang' from IConfig instead (Psalm). Frontend warnings ----------------- - TileEditor + WidgetStyleEditor: NcSelect was passing 'Icon' as the vue-select label key (option.Icon does not exist). Use input-label for the visible label and label="label" for the option key. - AdminSettings: replace HTML