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>
2.4 KiB
id, number, title, status, priority, sprint, links, agentRefs, attachments, createdBy, updatedBy, createdAt, updatedAt, version
| id | number | title | status | priority | sprint | links | agentRefs | attachments | createdBy | updatedBy | createdAt | updatedAt | version | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 13442dae-7860-45e3-9287-31b9bde19170 | 135 | Plugins: audit confinement install & désinstallation 100% propre | closed | high | null |
|
|
|
|
1785702662938 | 1785881187659 | 5 |
Applique le contrat de confinement/désinstallation décidé en #133.
Auditer plugin_install_from_archive / plugin_install_from_directory (crates/app-tauri/src/plugins.rs:67-142) et le store d'infrastructure (crates/infrastructure/src/plugin/mod.rs) pour confirmer qu'aucune écriture ne peut jamais sortir de app_data/plugins/installed/<id> :
- Un plugin dont le manifeste ou l'archive contient un chemin
../ou un symlink pointant hors de sa racine doit échouer à l'install (vérifier queRelativePath::new— qui rejette déjà..et les chemins absolus, cf.crates/domain/src/plugin.rs— est bien appliqué à l'INSTALL, pas seulement au SERVE ajouté en #134). - Aucune écriture ne doit jamais toucher le project root ni
.ideai/du projet ouvert : le plugin est un citoyen deapp_data, jamais du repo utilisateur.
Vérifier que plugin_uninstall (crates/app-tauri/src/plugins.rs:142) supprime bien 100% : dossier entier + entrée registry, zéro résidu. Étendre si besoin les tests existants (uninstall_removes_registry_package_and_stops_mcp, uninstall_then_reinstall_leaves_runtime_catalog_active_without_residue dans crates/application/src/plugin/mod.rs) pour couvrir explicitement le cas d'un plugin multi-fichiers (plusieurs fichiers sous dist/).
Si un chemin d'attaque (symlink sortant, ../ dans une archive zip malveillante) n'est pas déjà bloqué à l'install, ouvrir un correctif dans ce même ticket (pas de nouveau ticket) : c'est un renforcement du même contrat, pas une nouvelle feature.
Critères d'acceptation :
- Rapport d'audit écrit (dans le carnet du ticket) listant les points vérifiés et leur statut.
- Test explicite : tentative d'installer un plugin avec chemin
../ou symlink sortant → échec propre, aucun fichier écrit hors racine. - Test explicite : désinstallation d'un plugin multi-fichiers → dossier disparu, entrée registry disparue, aucun résidu.
cargo test -p app-tauri -p infrastructure -p applicationvert.