chore(web): document set-state-in-effect on ThemeToggle localStorage read (#90) #93
No reviewers
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/simpl-liste#93
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-90-themetoggle-lint-disable"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #90
Suite à /analyze 90 (décision : Option A — eslint-disable documenté).
Changement (comment-only)
ThemeToggle.tsx, 1eruseEffect: ajout d'un// eslint-disable-next-line react-hooks/set-state-in-effectciblé sur la lignesetTheme(stored), avec justification. Aucun changement de logique.Pourquoi un disable (pas useSyncExternalStore / cookie)
localStorageindisponible en SSR → le read doit être post-mount.ThemeScript.tsxpose déjà la classedarkavant hydratation (pas de FOUC de page).web/(fix local, pas de hook partagé).useSyncExternalStorene supprimerait pas le flash d'icône (le SSR ne lit pas localStorage) ; le cookie aurait un scope trop large. Options B/C détaillées dans #90.Vérification
eslintweb/ : 0 problème (était 1)tsc --noEmit: OKweb/; changement comment-only → zéro impact runtime (cycle de thème inchangé).Review — APPROVE
Verdict : APPROVE
Changement comment-only validé. Le directive
eslint-disable-next-line react-hooks/set-state-in-effectcible la bonne ligne et supprime une erreur réelle (pas un faux positif de directive inutilisée).Vérification locale (sur la branche
issue-90-themetoggle-lint-disablevia worktree isolé)eslintweb/ → exit 0, 0 problème (master en avait 1 sur cette ligne). La directive fonctionne.eslint --report-unused-disable-directives→ exit 0 : le disable est bien consommé, pas orphelin.tsc --noEmit→ exit 0.Bien-fondé de la justification
ThemeScript.tsxlit effectivementlocalStorage.getItem('sl-theme')et pose la classedarkavant le premier paint → pas de FOUC de page, seule l'icône du toggle se corrige au mount. Claim exact.localStorageindisponible en SSR → read forcément post-mount. Le choix d'un disable documenté plutôt queuseSyncExternalStore/cookie est cohérent avec l'analyse de #90 (le SSR ne lirait pas localStorage de toute façon).Checklist
web/, impact runtime nul — aucun test de régression requis).chore(web): document set-state-in-effect on ThemeToggle localStorage read (#90)), référenceFixes #90.Aucun point bloquant.