chore(tickets): sync store local — #285 rouvert puis implémenté: pluginRoot officiel activate(ctx) (branches feature/285-plugin-root-runtime-api parent+SDK, merges develop b681433/e3a0f46, QA verte multi-suites; rebuild AppImage + validation live ctx.pluginRoot restants à exécuter) + note memory #284 cross-project rattrapée (exclusion scripts/restart-idea-over-ssh.sh hors périmètre)

This commit is contained in:
2026-09-08 18:35:39 +02:00
parent b681433cdd
commit 270c740afc
5 changed files with 113 additions and 15 deletions

View File

@ -1,8 +1,8 @@
---
issueRef: "#285"
version: 4
version: 8
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedAt: 1788880858861
updatedAt: 1788885132878
---
## 2026-09-08 - Clarification SDK pluginRoot
@ -20,4 +20,70 @@ QA : VERT. Commandes reelles executees dans `sdk/IdeaSDK` : `git status --short
Git : commits locaux dans le submodule `sdk/IdeaSDK` : `5f9c2f9` (`docs(sdk): clarify pluginRoot scope for runtime plugins — #285`) puis merge local `68019de` sur `develop`. Pas de push. Le pointeur du depot parent est volontairement laisse sur `7db819c` et le submodule reparké dessus pour eviter de melanger avec le travail #284 en cours ; le bump sera fait plus tard par Git avec le sync local approprie. L'utilisateur UnityPlugin peut reprendre/mettre a jour le sous-module vers `68019de`.
Risque residuel : validation documentaire uniquement, pas de test runtime host sur la substitution `${pluginRoot}` des MCP servers. Docs-only, pas de rebuild AppImage requis.
Risque residuel : validation documentaire uniquement, pas de test runtime host sur la substitution `${pluginRoot}` des MCP servers. Docs-only, pas de rebuild AppImage requis.
## 2026-09-08 - API runtime officielle `ctx.pluginRoot`
Le constat documentaire precedent est remplace par une implementation runtime : le catalogue host projette la racine canonique du package installe actif, le DTO la transporte sous `pluginRoot`, et le loader l'injecte dans `activate(ctx)`. Le SDK expose ce champ obligatoire dans `ActivateContext`. L'exemple hello-plugin execute un script inclus dans son archive en construisant son chemin depuis `ctx.pluginRoot`.
Fichiers modifies dans le depot parent :
- `crates/domain/src/ports.rs`
- `crates/infrastructure/src/plugin/mod.rs`
- `crates/infrastructure/tests/plugin_install_load.rs`
- `crates/application/src/plugin/mod.rs`
- `crates/application/src/slash_command.rs`
- `crates/backend/src/dto.rs`
- `crates/app-tauri/tests/dto_plugins.rs`
- `frontend/src/domain/index.ts`
- `frontend/src/plugins/runtime/loader.ts`
- `frontend/src/plugins/runtime/loader.test.ts`
- `frontend/src/features/plugins/PluginRuntimeProvider.test.tsx`
- `frontend/src/features/plugins/plugins.test.tsx`
Fichiers modifies dans le submodule `sdk/IdeaSDK` :
- `src/runtime.ts`
- `docs/activation-context.md`
- `docs/commands-and-feedback.md`
- `docs/manifest.md`
- `docs/services.md`
- `examples/hello-plugin/README.md`
- `examples/hello-plugin/src/core/workspace.ts`
- `examples/hello-plugin/scripts/hello-task.mjs` (nouveau)
- `scripts/package-hello-plugin.mjs`
Commandes reelles et resultats :
- `cargo fmt --all` : succes.
- `cargo check -p domain -p application -p infrastructure -p backend -p app-tauri --lib` : succes.
- `cargo test -p application runtime_catalog_ --lib` : 5 passes, 0 echec.
- `cargo test -p infrastructure --test plugin_install_load` : 5 passes, 0 echec.
- `cargo test -p app-tauri --test dto_plugins` : 2 passes, 0 echec.
- `npm run check` dans `sdk/IdeaSDK` : succes (`build`, `typecheck:examples`, `package:hello-plugin`) ; archive hello-plugin creee.
- `npm run typecheck` dans `frontend` : succes.
- `npm test -- --run src/plugins/runtime/loader.test.ts src/features/plugins/PluginRuntimeProvider.test.tsx src/features/plugins/plugins.test.tsx` dans `frontend` : 3 fichiers, 33 tests passes, 0 echec.
Reserves :
- Aucun test end-to-end avec chargement dans l'AppImage en cours d'execution ; les validations couvrent les frontieres store/catalogue/DTO/loader et le packaging SDK.
- Les avertissements Vite sur les options `esbuild` depreciees sont preexistants et non bloquants.
- Aucun commit, push, bump ou merge du submodule effectue dans ce lot.
## 2026-09-08 - QA indépendante API `ctx.pluginRoot`
Validation QA indépendante effectuée sur la branche parent `feature/285-plugin-root-runtime-api` et le submodule `sdk/IdeaSDK` également sur `feature/285-plugin-root-runtime-api`, sans commit ni action distante.
Diffs relus/identifiés :
- Parent : `PluginPackageStore::installed_plugin_root`, implémentation FS canonique, propagation `PluginRuntimePlugin.plugin_root`, DTO backend `pluginRoot`, loader frontend `IdeaPluginContext.pluginRoot`, tests catalogue/DTO/loader.
- SDK : `ActivateContext.pluginRoot`, docs `activation-context`, `services`, `commands-and-feedback`, `manifest`, exemple hello-plugin et packaging du script `scripts/hello-task.mjs`.
Commandes réelles QA :
- Parent : `git status --short --branch` ; `git diff --name-status` ; `git diff --stat` ; `git diff -- crates/domain/src/ports.rs crates/infrastructure/src/plugin/mod.rs crates/application/src/plugin/mod.rs crates/backend/src/dto.rs frontend/src/domain/index.ts frontend/src/plugins/runtime/loader.ts`.
- SDK : `git status --short --branch` ; `git diff --name-status` ; `git diff --stat` ; `git diff -- src/runtime.ts docs/activation-context.md docs/services.md docs/commands-and-feedback.md docs/manifest.md examples/hello-plugin/README.md examples/hello-plugin/src/core/workspace.ts scripts/package-hello-plugin.mjs`.
- Docs : `rg -n "does not expose|does not currently provide|no public runtime|there is no public runtime|Packaged scripts cannot be launched|unavailable to|package-path resolver" docs src examples scripts` dans le SDK. Aucun ancien énoncé contradictoire sur l'absence de `pluginRoot` runtime ; seul match restant : commentaire SDK générique indiquant que `services` n'expose pas les gateways internes IdeA.
- SDK occurrences : `rg -n "pluginRoot|installed plugin root|installed package|hello-task|package-relative|contributes\\.mcpServers" src docs examples scripts`.
- Parent occurrences : `rg -n "pluginRoot|plugin_root|installed_plugin_root|runtime_catalog|missing installed plugin root" crates frontend/src`.
- Script packagé : `sed -n '1,160p' examples/hello-plugin/scripts/hello-task.mjs`.
- Rust : `cargo check -p domain -p application -p infrastructure -p backend -p app-tauri --lib` vert ; `cargo test -p application runtime_catalog_ --lib` 5/5 vert ; `cargo test -p infrastructure --test plugin_install_load` 5/5 vert ; `cargo test -p app-tauri --test dto_plugins` 2/2 vert.
- Frontend : `npm run typecheck` dans `frontend` vert ; `npm test -- --run src/plugins/runtime/loader.test.ts src/features/plugins/PluginRuntimeProvider.test.tsx src/features/plugins/plugins.test.tsx` dans `frontend` 3 fichiers / 33 tests verts.
- SDK : `npm run check` dans `sdk/IdeaSDK` vert (`build`, `typecheck:examples`, `package:hello-plugin`) ; `unzip -l examples/hello-plugin/build/hello-plugin-0.1.0.zip | rg "idea-plugin.json|dist/index.js|scripts/hello-task.mjs|README.md"` confirme l'inclusion du script packagé.
- Hygiène : `cargo fmt --all -- --check` vert ; `git diff --check` parent vert ; `git diff --check` SDK vert.
Verdict QA : VERT pour le périmètre source/test. Réserves : un rebuild AppImage puis une validation live sont nécessaires pour prouver l'usage réel de `ctx.pluginRoot` dans le binaire actuellement utilisé par l'application, car les tests exécutés valident les frontières source/store/catalogue/DTO/loader/SDK mais ne remplacent pas le binaire AppImage lancé. Le submodule reste dirty par ses modifications locales et le parent pointe vers ce submodule dirty ; aucun commit/bump/push/merge n'a été fait par QA.