Rattrapage de l'état runtime .ideai/ (tickets #119-#139/#147 clôturés,
compteur→149, ticket #148 clos et QA verte, métadonnées plugin android) —
séparé du code de feature avant d'ouvrir le travail sur le nouveau bug
de lancement CLI custom.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
install_from_directory : audit confirme qu'avant correctif le store ne rejetait pas explicitement les symlinks source ; il les ignorait. Le correctif fait maintenant échouer l'installation sur toute entrée symlink ou unsupported dans l'arbre source.
install_from_archive : audit confirme un trou réel de confinement avant correctif. L'extraction reposait entièrement sur unzip sans validation applicative des entrées. Le correctif remplace cette extraction par une lecture Rust confinée qui rejette les entrées ..//absolues via enclosed_name() et refuse explicitement les symlinks d'archive.
Confinement d'écriture : après correctif, aucune écriture d'install ne sort de app_data/plugins/_staging/... puis app_data/plugins/installed/<id> ; le test ../../../../outside.txt prouve l'absence d'écriture hors racine.
hash_dir / collecte fichiers : durci pour échouer si un package contient encore un symlink ou une entrée non supportée, au lieu de l'ignorer.
plugin_uninstall / remove_package : audit confirmé par test multifichier. La désinstallation supprime le dossier entier, retire l'entrée registry et laisse le runtime catalog vide.
Stabilisation des tests SDK hello-plugin : fixture matérialisée avec dist/index.js dans un temp dir pour supprimer une dépendance implicite à un build préalable.
Verdict
Correctif confinement install/uninstall validé.
cargo test -p infrastructure -p application -p app-tauri vert avec CARGO_HOME=/tmp/idea-cargo-home dans cet environnement.