# Phase 2 Module Activation Guide > Reference document for activating disabled modules (Linker, Optimizer, SiteBuilder) ## Current Status (as of December 2025) | Module | Status | Backend Flag | Migration | |--------|--------|--------------|-----------| | **SiteBuilder** | ❌ DEPRECATED | `site_builder_enabled` | Disabled via 0011 | | **Linker** | ⏸️ Phase 2 | `linker_enabled` | Disabled via 0011 | | **Optimizer** | ⏸️ Phase 2 | `optimizer_enabled` | Disabled via 0011 | --- ## How Module Disabling Works ### 1. Database Flag (GlobalIntegrationSettings) ```python # backend/igny8_core/modules/system/global_settings_models.py site_builder_enabled = models.BooleanField(default=False) linker_enabled = models.BooleanField(default=False) optimizer_enabled = models.BooleanField(default=False) ``` ### 2. Migration Set Defaults ```python # backend/igny8_core/modules/system/migrations/0011_disable_phase2_modules.py # Sets all three modules to disabled for existing records ``` ### 3. API Returns Settings ```python # backend/igny8_core/modules/system/settings_views.py # GET /api/module-settings/ returns enabled/disabled status ``` ### 4. Frontend Checks Settings ```typescript // frontend/src/store/moduleStore.ts // useModuleStore.isModuleEnabled('linker') → checks API response ``` ### 5. Sidebar Hides Menu Items ```tsx // frontend/src/layout/AppSidebar.tsx if (isModuleEnabled('linker')) { // Add menu item } ``` --- ## Activation Steps for Phase 2 ### Option A: Via Django Admin (Recommended) 1. Log into Django Admin (`/admin/`) 2. Navigate to **System → Global Integration Settings** 3. Edit the singleton record 4. Set `linker_enabled` or `optimizer_enabled` to `True` 5. Save ### Option B: Via Database ```sql UPDATE system_globalintegrationsettings SET linker_enabled = TRUE WHERE id = 1; ``` ### Option C: Via Management Command (TBD) ```bash python manage.py enable_module linker python manage.py enable_module optimizer ``` --- ## Pre-Activation Checklist Before enabling a Phase 2 module: ### Linker Module - [ ] Verify `modules/linker/views.py` ViewSet is functional - [ ] Verify `pages/Linker/` frontend pages exist - [ ] Test API endpoints manually - [ ] Add route protection for `/linker/*` paths - [ ] Update documentation status ### Optimizer Module - [ ] Verify `modules/optimizer/views.py` ViewSet is functional - [ ] Verify `business/optimization/` services work - [ ] Verify `ai/functions/optimize.py` AI function - [ ] Verify `pages/Optimizer/` frontend pages exist - [ ] Test API endpoints manually - [ ] Add route protection for `/optimizer/*` paths - [ ] Update documentation status --- ## Route Protection (TODO for Phase 2) Currently, direct URL access (e.g., `/linker`) still works even when module is disabled. ### Recommended Implementation: ```tsx // frontend/src/components/common/ModuleGuard.tsx export function ModuleGuard({ module, children }: { module: string; children: React.ReactNode }) { const { isModuleEnabled } = useModuleStore(); if (!isModuleEnabled(module)) { return ; } return <>{children}; } // In routes: } /> ``` --- ## SiteBuilder (DEPRECATED) **Do NOT activate SiteBuilder.** This module is deprecated and code is being removed. ### Removed Items (Task 5.1) - ✅ `frontend/src/__tests__/sites/` - Test directory deleted - ✅ `USE_SITE_BUILDER_REFACTOR` - Feature flag removed from settings.py - ✅ Feature flag checks - Removed from clustering_service.py, validation_service.py, serializers.py - ✅ Tasks.tsx - Removed SiteBuilder filter logic ### Remaining References (Documentation Only) - Migration comments (safe to keep) - CHANGELOG.md entries (historical) - IGNY8-APP.md (documents deprecated status) - Database field (kept for backward compatibility) --- ## Related Documentation - [LINKER.md](../10-MODULES/LINKER.md) - Full Linker module docs - [OPTIMIZER.md](../10-MODULES/OPTIMIZER.md) - Full Optimizer module docs - [SYSTEM-SETTINGS.md](../10-MODULES/SYSTEM-SETTINGS.md) - Settings model reference