# TODO - [x] Fix #1: TFE publié se dépublie quand on modifie ses données (is_published missing from getThesisRawFields SELECT) - [x] Fix #2: Renommer "Note contextuelle" → "Note contextuelle relative à soutenance" - [x] Fix #3: Impossible de mettre une majuscule au nom d'étudiant·e — la recherche par nom en SQLite est case-sensitive (BINARY), contournait le UPDATE et tombait dans le fallback email sans updater le nom. Ajout COLLATE NOCASE + UPDATE dans le chemin email. - [x] Fix #4: Décorréler contact interne et contact visible (ajouter colonne contact_visible sur theses) - [x] Fix #5: "Contact public : non" partout, non modifiable, sans impact - [x] Fix #6: Investiguer "libre → interne" impossible — aucune restriction trouvée dans le code admin - [x] Hotfix: contact_visible manquant dans le SQL de updateThesis (l'edit matchait createThesis à la place) - [x] Fix #7: Options de licence non persistées en edit — HTMX load trigger perdait les valeurs - [x] Fix #3 (v2): findOrCreateAuthor avec cascade ID → nom → email, setThesisAuthors passe les IDs existants - [x] Migration 038: corriger les identifiers theses qui ne matchent pas leur année - [x] Filtres finalité + format dans la page de recherche (search.php) - [x] Styliser boutons Filtrer/Réinitialiser : plus compacts, Réinitialiser en neutre - [x] Commit + jj new - [x] Fix identifier-year mismatch: extend save() to regenerate identifier when prefix doesn't match year (not just on year change) - [x] Fix migration runner run.php to support .php migrations alongside .sql - [x] Fix runner: treat PHP subprocess idempotent errors (no such column / already exists) as skippable rather than fatal - [x] Update 016 and 038 PHP migrations to accept $argv[1] DB path - [x] Fix migration 016 to gracefully handle banner_path column already being dropped - [x] Commit + jj new - [x] Formulaire étudiant : préciser "un seul contact" dans le label, mise à jour du hint pour le format le plus court (site sans https://www., insta/mastodon avec @), adaptation de l'affichage public pour supporter ces formats courts (liens automatiques pour @pseudo → Instagram, @pseudo@instance → Mastodon, domaine nu → https://) - [x] Déplacer "Contact visible" du Backoffice vers "Informations du TFE" dans le formulaire admin edit, renommer "Identité" → "Informations du TFE" dans le récapitulatif admin