Files
IdeA/.ideai/tickets/134/issue.md
Blomios ecad746c66 chore(tickets): synchronise les statuts tickets et l'état plugin android
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>
2026-08-05 13:40:44 +02:00

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
target kind
#133 dependsOn
agentId role
fe887179-933f-47d4-960f-c3b06827f86c assigned
kind agent_id
agent b4730d7f-c54d-4736-8a04-c6203aa2fd49
kind
user
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-tauri vert, nouveaux cas inclus.
  • Un plugin composé de dist/index.js + dist/constants.js (import relatif) se charge sans 403 via le protocole idea-plugin://.
  • Aucune régression sur les tests de confinement/path-traversal existants.