- ArticleManager::getSearchIndex() : rebuild automatique si un UUID
référencé dans search_index.json n'existe plus sur le disque (article
supprimé hors CMS via rsync ou suppression manuelle). Même logique que
getBySlug() qui nettoie déjà le slug_index à la volée.
- bootstrap.php : lire SESSION_NAME depuis $_ENV avant session_start(),
permettant de personnaliser le nom du cookie de session via le .env.
- oidc/{start,callback,me}.php : inverser l'ordre des require pour charger
config.php (dotenv) avant bootstrap.php, condition nécessaire pour que
SESSION_NAME soit disponible au démarrage de la session.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
data/ ne doit pas contenir de données de site (articles, config, cache).
Seuls data/.gitkeep et data/site/ (exemples pour installation fraîche)
sont conservés. Le .gitignore est mis à jour en conséquence.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
L'autoloader mappait App\ vers app/ (inexistant).
Tous les namespaces App\ échouaient silencieusement sauf
quand les classes étaient chargées via require_once direct.
Première erreur visible : App\Http\Csrf introuvable → 500 sur /login/.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajoute .env.example avec toutes les variables requises (DB_DSN, OIDC_*,
SMTP_*, SESSION_NAME, ADMIN_EMAIL…) — DB_DSN était absent et cassait
database/migrate.php au premier déploiement.
- Clarifie migrate-init.php : réservé aux serveurs existants antérieurs au
système de migrations ; pour une installation fraîche, migrate.php suffit
(applique tout depuis migration_000).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>