Clean up CCC inconsistencies and DX issues before rc1 (part 1)
Back and forth with opus 4.6 to review inconsistencies and DX issues: See MD file: [ai-context-naming-dx-review.md](/uploads/bdc9625673e049cdd31d2f0653de3ccd/ai-context-naming-dx-review.md) ## Handled in this issue (part 1) The ones that are addressed in this MR are: Addressed from `reviews/ai-context-naming-dx-review.md`: - **1c: Orphaned form**: deleted `AiContextScopeSiteSectionForm` - **2d: Missing `declare(strict_types=1)`**: added to `DiffHooks.php` and `AiContextUninstallValidator.php`; `DynamicEntityReferenceHooks.php` already had it - **2f: Procedural camelCase variable**: renamed `$childrenService` to `$children_service` in `ai_context.module` - **3b: Menu link ID / route name mismatch**: renamed menu link ID from `ai_context.overview` to `ai_context.main_menu_link` - **3e: Install config site-specific entity type**: removed `canvas_page` from `ai_context.scope_settings.target_entity.yml` ## Full list (other items will be addressed in follow-up issue #3586192) | Priority | Issue | Section | |---|---|---| | **High** | ~~Orphaned `AiContextScopeSiteSectionForm` writes to wrong config name~~ | 1c | | **High** | Dead `AiContextItemController::revisionOverview()` | 1b | | **Medium** | `Hook/` vs `Hooks/` dual directories | 1a | | **Medium** | Permission name with underscores | 2a | | **Medium** | Route names break `settings.*` pattern | 2b | | **Medium** | `new static()` in `final` classes (~20+ files) | 2c | | **Medium** | Mixed snake_case / camelCase locals within same files (internal inconsistency) | 2f | | **Low** | Codebase-wide variable convention split (Service/Model = camelCase, Form/Plugin = snake_case) | 2f | | **Low** | ~~camelCase `$childrenService` in procedural `ai_context.module` (PHPCS violation)~~ | 2f | | **Low** | ~~Missing `declare(strict_types=1)` on 2–3 files~~ | 2d | | **Low** | `ai_context.children_service` redundant suffix | 2e | | **Low** | Inconsistent `final` policy | 3c | | **Low** | ~~`canvas_page` in install config~~ | 3e | | **Low** | No service interfaces | 3d | | **Low** | Constructor style inconsistency (promotion vs traditional) | 3f | | **Info** | Constraint PascalCase plugin ID (follows core convention) | 2g | | **Info** | Lowercase `diff` plugin directory (required by diff module) | 2h | | **Info** | `getContextForEntity` naming ambiguity | 3a | | **Info** | ~~Menu link ID / route name collision~~ | 3b | | **Info** | FQCN service IDs for hook classes (Drupal 11 autowire pattern) | 2f (YAML) | **AI usage disclosures:** - [x] AI Assisted Issue - [x] AI Generated Code
issue