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.1 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 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| e98c3f80-9fd6-444a-be80-ad695809c71c | 134 | Plugins: servir tout fichier confiné du package installé (fix racine multi-fichiers ESM) | closed | critical | null |
|
|
|
|
1785702651199 | 1785881187652 | 4 |
Implémente le contrat décidé en #133.
Modifier asset_allowed / plugin_asset_response_with_stores dans crates/app-tauri/src/plugins.rs:504-536 : remplacer la condition declared_main || declared_icon || rel.as_str().starts_with("assets/") par une autorisation basée sur les garanties déjà vérifiées avant cette ligne (hash de contenu du package entry.content_hash.as_str() == hash, entry.lifecycle_state.is_runtime_active()) et sur le confinement canonicalize déjà en place lignes 467-483 (target.starts_with(&root)).
Ne pas retirer validator.validate(&manifest_bytes.bytes, &package) : cette vérification reste une garde d'intégrité globale du manifeste, mais ne doit plus servir à restreindre le service fichier par fichier.
Respecter strictement la limite figée en #133 (imports relatifs uniquement, pas de résolveur node_modules/bare specifiers — hors scope).
Tests à ajouter dans crates/app-tauri/src/plugins.rs (module de tests existant en bas de fichier) :
- requête d'un fichier non déclaré dans le manifeste (ex:
dist/core/helper.js) → 200 OK si hash+lifecycle valides. - path traversal (
../) → toujours 403 (non-régression, déjà couvert mais à revérifier après le changement). - hash de contenu différent ou plugin non
runtime_active→ toujours 403 (non-régression).
Critères d'acceptation :
cargo test -p app-taurivert, nouveaux cas inclus.- Un plugin composé de
dist/index.js+dist/constants.js(import relatif) se charge sans 403 via le protocoleidea-plugin://. - Aucune régression sur les tests de confinement/path-traversal existants.