feat(desktop): overlay réduit à une boule animée thinking-orbs (T-131) #124
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/T-131-overlay-orb-animations"
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?
Tâche
T-xxx — (titre dans docs/STATUS.md)
Changements
Contrat modifié ?
packages/contract/supabase/migrations—docs/API.md/docs/DATA.mdmis à jour, labelcontract, approbation humaine requiseTests
scripts/check.shvertImpacts cross-domaine
Fichiers hors périmètre de l'agent (et pourquoi) :
Suivi
docs/STATUS.mdmis à jour (ligne de la tâche)docs/CHANGELOG.md: entrée ajoutée sous Unreleaseddocs/DECISIONS.md/docs/ECARTS.mdmis à jour si décision ou écartAPPROVE (a posteriori — la PR est déjà mergée sur main au moment de cette review, cf. note ci-dessous).
Vérifié indépendamment (worktree isolé sur
c75a3cf, sans faire confiance à l'affirmation de l'agent auteur) :scripts/check.shvert — server 276 passed/1 skipped, desktoptsc/eslintclean,cargo clippy -D warnings/cargo test155/155.Race
should_reset_after_timeout/reset_after(session.rs:71-73,269,370-378) : pas de course trouvée.can_start(Idle uniquement) sérialise entièrement la machine à états — aucune nouvelle session ne peut démarrer tant qu'Injectingn'est pas retombé àIdle, donc jamais deux minuteursreset_afterconcurrents sur le même "bucket". Point non-bloquant à noter : ça introduit une vraie fenêtre de ~300ms (contre ~10ms avant, durée dupaste()sync) pendant laquelle un appui hotkey juste après une dictée est silencieusement ignoré (start()retourne tôt, aucun retour visuel) — comportement différent, jamais testé physiquement (cf. STATUS.md "Vérifications manuelles en attente" T-131, pas d'accès GUI). Pas un bug de logique, juste un compromis latence-résiduelle/pas de feedback à surveiller si un usage de dictées rapprochées se manifeste.Autres call sites de
Injecting/Idle: seulementtray.rs::icon_bytes_for(groupeInjectingavec les autres icônes "actif", cohérent) etOverlay.tsx::orbFor(mapping visuel). Aucune régression trouvée par grep exhaustif.!importantoverlay.html:16 : bien scopé à cette seule page. Vérifié queindex.html/agent.htmlsont des entrées Vite séparées avec leurs propres<style>inline (agent.html n'a pas de règlebackground, index.html aucune) —tokens.css::body{background:var(--aria-bg)}(non!important) continue de s'appliquer normalement àsettings/agent, pas de fuite.Filtre SVG
feFlood+feComposite operator="in": solide. Confirmé par lecture du bundle réel (thinking-orbs@0.3.1/dist/index.es.js) queThinkingOrbrend un<canvas>et questyle.filter(donturl(#orb-tint-*)) s'applique dessus comme n'importe quel filtre CSS — dégradation gracieuse si non supporté (l'orbe resterait visible en encre native, pas de crash/disparition). Coût perf négligeable (canvas 64px, filtre composité GPU, pas de travail JS supplémentaire par frame). Le retrait despeeddérivé durmsest confirmé exact par lecture du même bundle :useEffectdeps[t, e, y, r, i, E], phaseperformance.now()/1000*speed— diagnostic du rebond vérifié indépendamment, correct.Tests Rust cohérents avec le nouveau comportement (
should_reset_after_timeout_only_from_error_agent_message_or_injectingcouvre bien les 3 cas + les négatifs).Cross-domaine (
windows.rs/tauri.conf.jsonpar une tâche ui-ux) correctement signalé dans la PR et STATUS.md. Pas de contrat/migration/secret touché.Note hors scope de cette PR, trouvée pendant la review :
session.rs(ligne inchangée par ce diff) logge le texte dicté en clair au niveauinfo(log::info!("dictée traitée et injectée (...) : {text:?}")) — décision documentée et assumée en T-041/PR#50 pour satisfaire littéralement le critère M2, mais en tension avec l'exigence "texte dicté jamais loggué en INFO". Pré-existant, non introduit par #124, à traiter séparément si pertinent (M2 est clos depuis longtemps, la justification d'origine ne tient peut-être plus).Constat opérationnel important pour la suite : au moment de cette review, la PR est déjà state=closed merged=True sur origin/main (commit squash
c75a3cf) — le merge automatique programmé s'est déclenché avant/pendant cette review, la CI étant déjà verte. Aucun problème bloquant trouvé, donc pas d'impact ici, mais si un problème avait été trouvé il aurait fallu un correctif de suivi plutôt qu'un blocage du merge.