État runtime .ideai séparé du code (index, counter, carnets, note mémoire plugin-asset-serving-and-owned-storage-contracts). Purge des tickets obsolètes 51/63/66. 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) | qa | critical | null |
|
|
|
|
1785702651199 | 1785707290184 | 3 |
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.