v0.8.0 — Audit profond : dead code, bugs, sécurité, perfs
🔍 Audit complet du codebase
Zéro nouvelle feature, 100% qualité. Après la série v0.7.x (wake word, voice commands, X11 cleanup), pause pour nettoyer le code accumulé.
Code mort supprimé
- `_CatsetMarker` + `_CATSET_COLOR_DEF` (vestige du color-tinting v0.3.0 supprimé en v0.5.0)
- `self.color_def` + paramètre `color_def_obj` dans `CatInstance.init`
- `_check_deps()` méthode vide + appel dans `do_activate`
- `active_ids` (legacy `color_id` set) dans `SettingsWindow._build`
- `self._entry_window` (attribut jamais lu)
- Imports inline (re, math.log) → top-level
Bugs corrigés
- `for/else` piège dans `_apply_sequence_offset_compensation` — le `else` s'exécutait quand la boucle ne breakait pas, pas quand `_sequence` était None. Bug logique subtil corrigé.
- Double `now = time.monotonic()` dans `_check_encounters`
- 10+ attributs dynamiques sur CatInstance maintenant initialisés explicitement dans `init` au lieu d'être créés à la volée via `getattr()` dans 4000 lignes de code
Sécurité
- Test socket déplacé de `/tmp/` vers `$XDG_RUNTIME_DIR/` + `chmod 0600` — n'importe quel user du système pouvait se connecter avant
- Timeout DoS — `settimeout(5.0)` sur les deux sockets après `setblocking(True)`
- Log d'avertissement avant `--break-system-packages` dans l'auto-updater
- Commentaire explicite sur le trade-off des permissions des credentials
Optimisations
- pil_to_surface — RGBA→BGRA via PIL split/merge au lieu d'une boucle Python (~50x plus rapide)
- _sprite_floor_y + _sprite_center_x — via PIL getbbox() au lieu d'un scan pixel par pixel (C-level)
- metrics.track() — accumule en mémoire, flush tous les 30s + au shutdown (avant: 2-3 écritures disque/sec pendant un chat actif)
- math.log sorti de la boucle hot-path dans memory.py
353 passed / 0 failed, ruff clean
L'auto-update va attraper cette version au prochain lancement.
🤖 Generated with Claude Code