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