From 4de25d2bcea0970badd2945e66923d96c7622679 Mon Sep 17 00:00:00 2001 From: Blomios Date: Fri, 17 Jul 2026 10:34:24 +0200 Subject: [PATCH] =?UTF-8?q?chore(ideai):=20=C3=A9tat=20runtime=20du=20tick?= =?UTF-8?q?et=20#74=20(passage=20en=20QA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enregistre le passage de #74 en statut QA (issue, carnet, index) et l'accusé de complétion des rendez-vous headless du lot. État runtime uniquement : aucun code de feature n'est touché. Co-Authored-By: Claude Opus 4.8 --- .../97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json | 40 +++++++++++++++---- .ideai/tickets/74/carnet.md | 4 +- .ideai/tickets/74/issue.md | 6 +-- .ideai/tickets/index.json | 4 +- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json b/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json index 96ba5f2..aef1dd3 100644 --- a/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json +++ b/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json @@ -8034,7 +8034,7 @@ "stdout_tail": "**Cadrage #74**\n\nContrat retenu : deux artefacts Vite distincts, avec un nom explicite côté web.\n\n- Bundle desktop : `frontend/dist`\n - transport par défaut : `tauri`\n - consommé par `build.frontendDist`\n - reste compatible avec le build desktop actuel.\n- Bundle navigateur embarqué : `frontend/dist-web`\n - transport forcé : `http`\n - packagé comme ressource Tauri `web/`\n - servi par `resolve_web_root()` via `resource_dir.join(\"web\")`.\n\nJe tranche donc pour `dist-web`. Le nom est clair, proche du workaround validé, et évite de faire porter au code Rust une distinction métier qui appartient au packaging.\n\n**Orchestration Build**\n\nÀ cadrer côté `frontend/package.json` :\n\n- garder `npm run build` comme build desktop historique, pour ne pas casser les habitudes ni le dev ;\n- ajouter un script dédié package, par exemple `build:bundle`, qui produit les deux sorties ;\n- éviter `VITE_TRANSPORT=http vite build` inline dans les scripts npm, car ce n’est pas portable Windows/NSIS ;\n- préférer `vite build --mode web --outDir dist-web --emptyOutDir` avec un `.env.web` contenant `VITE_TRANSPORT=http`.\n\nContrat attendu :\n\n```json\n\"build\": \"tsc --noEmit && vite build\",\n\"build:web\": \"tsc --noEmit && vite build --mode web --outDir dist-web --emptyOutDir\",\n\"build:bundle\": \"npm run typecheck && vite build --outDir dist --emptyOutDir && vite build --mode web --outDir dist-web --emptyOutDir\"\n```\n\nCôté [tauri.conf.json](/home/anthony/Documents/Projects/IdeA/crates/app-tauri/tauri.conf.json:1) :\n\n- `build.frontendDist` reste `../../frontend/dist` ;\n- `beforeDevCommand` reste `npm --prefix ../frontend run dev` ;\n- `beforeBuildCommand` devient `npm --prefix ../frontend run build:bundle` ;\n- `bundle.resources` devient `{ \"../../frontend/dist-web\": \"web\" }`.\n\nImpact Rust : aucun changement requis dans [embedded_server.rs](/home/anthony/Documents/Projects/IdeA/crates/app-tauri/src/embedded_server.rs:498) pour le packaging AppImage. `resolve_web_root()` cherche déjà `resource_dir/web`, donc il doit continuer à servir `web/`. Le chemin `idea --serve --web-root` et `IDEA_WEB_ROOT` restent prioritaires et ne doivent pas être modifiés : ils servent au workaround, au dev serveur embarqué et aux validations ciblées.\n\nAttention #68 : [tauri.conf.json](/home/anthony/Documents/Projects/IdeA/crates/app-tauri/tauri.conf.json:1) est déjà modifié. Le lot packaging doit être fait par patch minimal sur les clés concernées, sans reformater la conf ni toucher aux autres changements #68.\n\n**Garde-Fou Automatisable**\n\nLe test ne doit pas chercher seulement `__TAURI_INTERNALS__`, car les deux familles d’adapters peuvent rester présentes dans le bundle. Il doit vérifier le résultat du sélecteur de transport dans le bundle web.\n\nContrat recommandé : test de build côté frontend/package.\n\n1. Construire le bundle web avec le même contrat que le packaging :\n `npm --prefix frontend run build:web`.\n2. Inspecter les chunks JS de `frontend/dist-web/assets/*.js`.\n3. Échouer si le sélecteur compilé résout `\"tauri\"` au lieu de `\"http\"`.\n\nLe point robuste est de rendre le contrat observable sans dépendre d’un nom minifié. Deux options acceptables :\n\n- Option préférée : exposer une constante de build interne, par exemple `__IDEA_TRANSPORT__`, injectée via Vite `define`, puis vérifier dans `dist-web` qu’elle vaut `\"http\"` et dans `dist` qu’elle vaut `\"tauri\"`.\n- Option minimale : script Node qui recherche dans le bundle web la forme minifiée du retour constant `\"http\"` autour de la fonction de résolution, et échoue si la forme constatée est `\"tauri\"`. C’est moins stable face à minification.\n\nJe recommande l’option `define`, car elle teste le même signal que `resolveTransport()` sans dépendre des adapters importés. Le DoD devient : le bundle destiné à `web/` doit contenir une preuve machine du transport `http`, et le bundle desktop une preuve `tauri`.\n\n**Lots**\n\nLot B1 — Packaging Tauri \nPropriétaire : DevBackend \nPérimètre :\n- ajuster `beforeBuildCommand` pour appeler le script double build ;\n- changer `bundle.resources` de `frontend/dist` vers `frontend/dist-web`;\n- préserver `frontendDist` sur `frontend/dist`;\n- ne pas modifier `resolve_web_root()` sauf découverte bloquante ;\n- éviter les conflits avec #68 par patch minimal.\n\nLot F1 — Seam Vite/npm \nPropriétaire : DevFrontend \nPérimètre :\n- ajouter les scripts npm nécessaires, en npm uniquement ;\n- ajouter le mode/env web portable (`.env.web` ou équivalent Vite cross-platform) ;\n- garantir que `npm run build` reste desktop ;\n- produire `dist-web` avec `VITE_TRANSPORT=http`;\n- si besoin, ajouter le signal build-testable du transport.\n\nLot Q1 — Garde-fou et validation \nPropriétaire : QA \nPérimètre :\n- ajouter/exécuter le test automatisé qui échoue si `dist-web` résout `tauri`;\n- vérifier que le build package produit bien les deux dossiers ;\n- vérifier que la ressource packagée `web/` vient de `dist-web`;\n- validation live navigateur derrière reverse proxy : projets listés, pas d’erreur `__TAURI_INTERNALS__`;\n- rebuild AppImage livrable pour test utilisateur.\n\nHors périmètre :\n- refonte des adapters HTTP/Tauri ;\n- changement de `resolveTransport()` fonctionnel hors observabilité test ;\n- modification du protocole embedded server ;\n- modification nginx/reverse proxy ;\n- changement de `idea --serve --web-root` ou de la priorité `IDEA_WEB_ROOT`;\n- migration pnpm ou ajout d’un autre gestionnaire de paquets.", "stderr_tail": null }, - "completionDelivered": false + "completionDelivered": true }, { "id": "a2bef460-1bfe-4228-8872-1fa10e036f38", @@ -8060,7 +8060,7 @@ "stdout_tail": "Branche créée, arbre propre, base tranchée. Voici mes décisions.\n\n## 1. État réel de `HEAD`\n\nPas de détachement : `HEAD` était bien attaché à `feature/ticket68-appimage-web-assets`, qui pointait sur le même commit que `develop` (a13a6c1) — une branche créée mais encore sans commit propre. Rien à corriger.\n\n## 2. Les modifications #68 : committées sur leur branche, pas stashées\n\nLe point décisif que ton contexte soulignait, je l'ai confirmé et il tranche la question : **le bloc `bundle.resources: {\"../../frontend/dist\": \"web\"}` et le `beforeBuildCommand` n'existent pas sur `develop`** — ils n'existaient que dans le travail non committé. Or ce sont exactement les lignes que le lot B1 doit modifier.\n\nConséquence : partir d'une base propre était exclu. #74 aurait dû recréer le bloc de zéro, et les deux versions seraient entrées en conflit frontal sur les mêmes lignes au moment de réintégrer #68. **#74 n'est pas une feature indépendante, c'est le correctif d'un packaging #68 non encore mergé** — il doit s'empiler dessus.\n\nJ'ai donc committé le travail #68 sur sa branche, en deux commits atomiques (code séparé de l'état runtime `.ideai/`), après vérification que ça compile (`cargo check -p app-tauri`, vert) — je ne fige pas du travail cassé :\n\n- `166adc3` — `feat(app-tauri)` : plomberie du resource dir + candidat packagé dans `resolve_web_root`\n- `50d237e` — `chore(ideai)` : ouverture du ticket #74\n\nLe stash était le mauvais outil ici : il aurait mis en suspens du travail dont #74 dépend directement.\n\n## 3. La branche de travail\n\n**`feature/ticket74-web-transport-bundle`**, basée sur `feature/ticket68-appimage-web-assets` (à `50d237e`). C'est là que F1, B1 et Q1 se font.\n\n**Ma décision d'intégration, pour plus tard** : #74 remontera dans `feature/ticket68-appimage-web-assets`, pas directement dans `develop`. #68 est en statut QA et son packaging sert un bundle cassé — il ne peut pas être déclaré vert sans le fix #74. Les deux redescendront ensemble dans `develop` quand QA validera l'ensemble. Ça évite qu'un merge de #74 vers `develop` traîne les commits #68 par effet de bord et court-circuite leur propre porte QA.\n\n## 4. `.gitignore`\n\nDéjà fait, rien à ajouter — `frontend/dist-web/` y figure ligne 14, ajouté au titre de #65, avec le commentaire qui le classe explicitement dans la même catégorie que `dist/`.\n\nAucune action sortante effectuée : tout est strictement local.", "stderr_tail": null }, - "completionDelivered": false + "completionDelivered": true }, { "id": "75e788ad-0754-438f-928d-c0f245a5aa95", @@ -8086,7 +8086,7 @@ "stdout_tail": "Lot F1 livré et vert. Le bundle web n'est plus figé sur `tauri` : `resolveTransport()` fold bien vers `\"http\"` dans `dist-web`, et les trois scripts npm produisent les artefacts attendus.\n\n## Fichiers touchés\n\n| Fichier | Changement |\n|---|---|\n| `frontend/src/app/transport.ts` | **nouveau** — prédicat partagé `transportFromEnv()` + type `Transport` |\n| `frontend/src/app/di.tsx` | `shouldUseHttp()`/`resolveTransport()` dérivent du prédicat partagé ; `Transport` ré-exporté (API inchangée) |\n| `frontend/vite.config.ts` | passe en factory `({ mode })`, `loadEnv(mode)`, `define: __IDEA_TRANSPORT__` |\n| `frontend/.env.web` | **nouveau** — `VITE_TRANSPORT=http` |\n| `frontend/src/vite-env.d.ts` | `declare const __IDEA_TRANSPORT__: \"http\" \\| \"tauri\"` |\n| `frontend/src/app/main.tsx` | publie le marqueur sur `window` |\n| `frontend/vitest.config.ts` | même `define`, via le même prédicat |\n| `frontend/package.json` | scripts `build:web` / `build:bundle` (littéral du contrat) |\n| `frontend/src/app/di.test.tsx` | couverture de `transportFromEnv` |\n\n`.env.web` n'est pas gitignoré (vérifié) — il sera bien versionné.\n\n## Câblage de `__IDEA_TRANSPORT__`\n\nLe point dur : la constante ne doit pas être une valeur parallèle. J'ai donc fait converger les deux vers **une source unique**, et non vers deux expressions qui se ressemblent.\n\n`vite.config.ts` importe `transportFromEnv()` depuis `src/app/transport.ts` — la fonction que `resolveTransport()` appelle — et lui passe `VITE_TRANSPORT` lu par `loadEnv(mode)`, c'est-à-dire la résolution de fichiers `.env` exacte que Vite applique à `import.meta.env`. **Même variable, même prédicat, un seul endroit à changer.** Une divergence exigerait de modifier `transportFromEnv`, ce qui déplacerait constante *et* runtime ensemble.\n\nLa preuve dans le dist minifié est plus forte que ce que j'espérais : le prédicat lui-même fold, et la constante et le runtime tombent du même pli.\n\n```\n=== desktop === function YN(e){return\"tauri\"} … function Cb(){return YN()}\n=== web === function YN(e){return\"http\"} … function Cb(){return YN()}\n```\n\n`YN` = `transportFromEnv`, `Cb` = `resolveTransport` (le `Cb(){return\"tauri\"}` du ticket). Le web résout donc réellement vers les adapters HTTP.\n\nDeux choix à signaler :\n- **Publication sur `window`** plutôt qu'une simple constante : `define` ne remplace que les occurrences présentes, et une constante non référencée serait tree-shakée. L'affectation est un effet de bord, donc elle survit à la minification — et le marqueur est aussi lisible en devtools. QA grep `__IDEA_TRANSPORT__=\"http\"`.\n- **Le mock reste hors périmètre de la constante** : elle reporte le transport de build hors mock (`VITE_USE_MOCK` est un switch distinct, antérieur). Documenté dans `vite-env.d.ts`.\n\n## Sorties réelles\n\n```\n$ npm run typecheck\n> tsc --noEmit # exit 0, aucune sortie\n\n$ npx vitest run\n Test Files 87 passed (87)\n Tests 797 passed (797)\n Duration 13.39s\n```\n(Les stack traces `useGateways must be used within a ` dans le log sont le test de garde qui attend ce throw.)\n\n```\n$ npm run build → dist/assets/index-B9bzrt7e.js 962.03 kB ✓ built in 2.30s\n$ npm run build:web → dist-web/assets/index-2XU1NMO5.js 962.03 kB ✓ built in 2.31s\n$ npm run build:bundle → les deux (vite v5.4.21 building for web…) ✓ 2.24s + 2.27s\n\ndist: __IDEA_TRANSPORT__=\"tauri\"\ndist-web: __IDEA_TRANSPORT__=\"http\"\n```\n\n`npm run build` est inchangé côté comportement (mêmes hash `index-B9bzrt7e.js` avant/après `build:bundle`). Je n'ai touché ni `tauri.conf.json` (lot B1), ni les adapters, ni le protocole du serveur.\n\n```idea-memory\nslug: ticket74-f1-web-bundle-transport-seam\ntitle: Seam Vite du bundle web (#74 F1) — mode `web` + constante __IDEA_TRANSPORT__\ntype: reference\ndescription: Deux artefacts Vite (dist/dist-web), mode `web` portable Windows, et le câblage anti-divergence de la constante de transport.\n---\n\nLe frontend produit **deux** artefacts Vite depuis les mêmes sources :\n- `frontend/dist` → transport `tauri` (desktop, `build.frontendDist`) — `npm run build`.\n- `frontend/dist-web` → transport `http` (packagé en ressource Tauri `web/`) — `npm run build:web`.\n- `npm run build:bundle` produit les deux : c'est le point d'entrée du packaging Tauri.\n\n**Le mode web passe par `--mode web` + `frontend/.env.web` (`VITE_TRANSPORT=http`), jamais par un préfixe inline `VITE_TRANSPORT=http vite build`** : non portable Windows/NSIS, cible active du bundle. `.env.web` est versionné (non gitignoré) ; `dist-web/` est ignoré.\n\n**Anti-divergence de `__IDEA_TRANSPORT__`** : `frontend/src/app/transport.ts` expose `transportFromEnv(value)`, importé à la fois par `di.tsx` (`resolveTransport`/`shouldUseHttp`) et par `vite.config.ts`, qui lui passe `VITE_TRANSPORT` via `loadEnv(mode)`. Même variable + même prédicat = une seule source. Modifier le prédicat déplace constante et runtime ensemble. `vitest.config.ts` réplique le `define` via le même helper.\n\nLa constante est **publiée sur `window` dans `main.tsx`** : `define` ne remplace que les occurrences existantes et une constante non référencée serait tree-shakée ; l'affectation est un effet de bord qui survit à la minification. Elle reporte le transport hors mock (`VITE_USE_MOCK` reste un switch distinct).\n\nPour identifier le transport d'un bundle bâti : `grep -o '__IDEA_TRANSPORT__=\"[a-z]*\"' dist*/assets/*.js`. **Ne pas se fier à la présence de `__TAURI_INTERNALS__` ni à un nom de symbole minifié** : les deux jeux d'adapters sont présents dans les deux bundles, un grep ne les discrimine pas.\n```", "stderr_tail": null }, - "completionDelivered": false + "completionDelivered": true }, { "id": "453586ff-8b76-4f1b-88ba-aca6dae335cd", @@ -8112,7 +8112,7 @@ "stdout_tail": "Patch minimal appliqué sur `crates/app-tauri/tauri.conf.json`.\n\n**Diff**\n```diff\ndiff --git a/crates/app-tauri/tauri.conf.json b/crates/app-tauri/tauri.conf.json\nindex fd84eab..cf9f52d 100644\n--- a/crates/app-tauri/tauri.conf.json\n+++ b/crates/app-tauri/tauri.conf.json\n@@ -7,7 +7,7 @@\n \"frontendDist\": \"../../frontend/dist\",\n \"devUrl\": \"http://localhost:5173\",\n \"beforeDevCommand\": \"npm --prefix ../frontend run dev\",\n- \"beforeBuildCommand\": \"npm --prefix ../frontend run build\"\n+ \"beforeBuildCommand\": \"npm --prefix ../frontend run build:bundle\"\n },\n \"app\": {\n \"windows\": [\n@@ -27,7 +27,7 @@\n \"targets\": [\"appimage\", \"nsis\"],\n \"icon\": [\"icons/icon.png\"],\n \"resources\": {\n- \"../../frontend/dist\": \"web\"\n+ \"../../frontend/dist-web\": \"web\"\n }\n }\n }\n```\n\n**Commande**\n```text\n$ cargo check -p app-tauri\nFatal Python error: Failed to import encodings module\nPython runtime state: core initialized\nModuleNotFoundError: No module named 'encodings'\n\nCurrent thread 0x00007ff285fcff80 [vapoursynth] (most recent call first):\n \n Compiling app-tauri v0.3.0 (/home/anthony/Documents/Projects/IdeA/crates/app-tauri)\n Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.07s\n```\n\n`cargo check -p app-tauri` a terminé avec exit 0. Aucune découverte bloquante côté B1.", "stderr_tail": null }, - "completionDelivered": false + "completionDelivered": true }, { "id": "707ca3b1-f9c8-41c3-8a6f-3387286c3366", @@ -8138,7 +8138,7 @@ "stdout_tail": "Verdict : **vert pour Q1**, avec une réserve d’environnement sur la validation live locale réseau.\n\nTests rejoués :\n```text\nnpm run typecheck\n> tsc --noEmit\nexit 0\n\nnpx vitest run\nTest Files 87 passed (87)\nTests 797 passed (797)\nexit 0\n\ncargo check -p app-tauri\nFinished `dev` profile [unoptimized + debuginfo] target(s) in 1.67s\nexit 0\n```\n\nTest ajouté :\n- [frontend/scripts/assert-bundle-transport.mjs](/home/anthony/Documents/Projects/IdeA/frontend/scripts/assert-bundle-transport.mjs:1)\n- [frontend/package.json](/home/anthony/Documents/Projects/IdeA/frontend/package.json:11) ajoute `npm run test:bundle-transport`.\n\nJ’ai choisi un test sur artefacts existants, sans rebuild interne : le DoD porte sur le bundle bâti réellement packagé. Sortie réelle :\n```text\nnpm run build:bundle && npm run test:bundle-transport\ndist: __IDEA_TRANSPORT__=\"tauri\" (1 marker)\ndist-web: __IDEA_TRANSPORT__=\"http\" (1 marker)\nexit 0\n```\n\nPackaging vérifié :\n```text\ngrep AppImage extrait:\nsquashfs-root/usr/lib/IdeA/web/assets/index-2XU1NMO5.js:__IDEA_TRANSPORT__=\"http\"\n```\n\nLes SHA-256 confirment que `usr/lib/IdeA/web` dans l’AppImage est byte-for-byte identique à `frontend/dist-web` :\n```text\n35d2...7632 frontend/dist-web/assets/index-2XU1NMO5.js\n35d2...7632 /tmp/idea-ticket74-appimage/squashfs-root/usr/lib/IdeA/web/assets/index-2XU1NMO5.js\n4ff0...5351 frontend/dist-web/index.html\n4ff0...5351 /tmp/idea-ticket74-appimage/squashfs-root/usr/lib/IdeA/web/index.html\n```\n\nAppImage produit :\n```text\n/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage\n-rwxr-xr-x 109M\n```\n\nNote build : `tauri build --bundles appimage` a bien généré l’AppDir mais a échoué au téléchargement du runtime AppImage, réseau indisponible. J’ai finalisé avec le runtime déjà en cache :\n```text\nappimagetool --runtime-file /home/anthony/.cache/tauri/runtime-x86_64 ...\nSuccess\n```\n\nValidation live locale : impossible dans ce sandbox.\n- Exécution directe AppImage : KO FUSE (`No suitable fusermount`, `fuse: device not found`).\n- Lancement `--serve` extrait : KO bind TCP (`Operation not permitted`), même sur `127.0.0.1:0`.\n\nReste à valider par l’utilisateur : lancer cet AppImage réel sur la machine cible, sans `IDEA_WEB_ROOT`, puis vérifier via le navigateur/reverse proxy que l’UI charge et que le bundle servi annonce `window.__IDEA_TRANSPORT__ === \"http\"`.", "stderr_tail": null }, - "completionDelivered": false + "completionDelivered": true }, { "id": "e6b46838-0b3e-45ea-a509-8d421cc4e20a", @@ -8151,10 +8151,36 @@ "ticket_id": "01938366-c3ec-44f5-87e6-a78a87886cb8", "conversation_id": "6bc594e8-a37c-0dbd-1de6-6e3b73002cb4" }, - "state": "running", + "state": "completed", "wakePolicy": "recordOnly", "createdAtMs": 1784272119205, - "updatedAtMs": 1784272119205, + "updatedAtMs": 1784272238384, + "deadlineMs": null, + "result": { + "outcome": "success", + "finished_at_ms": 1784272238384, + "exit_code": null, + "summary": "Headless rendezvous completed with Final", + "stdout_tail": "Les 4 commits sont en place, arbre propre, aucun artefact. **Je révise ma décision d'intégration sur deux points**, et je ne merge rien pour l'instant.\n\n## Les commits (sur `feature/ticket74-web-transport-bundle`)\n\nDécoupage F1 / B1 / Q1 comme suggéré, plus l'état `.ideai/` isolé par convention :\n\n- `a7197fc` — `feat(frontend)` : seam de transport + bundle web distinct (F1)\n- `5ca2ab7` — `fix(app-tauri)` : ressource → `dist-web`, `beforeBuildCommand` → `build:bundle` (B1)\n- `25728de` — `test(frontend)` : garde-fou sur les bundles construits (Q1)\n- `f605989` — `chore(ideai)` : note mémoire + état runtime\n\n`frontend/.env.web` et `frontend/scripts/assert-bundle-transport.mjs` sont bien versionnés (vérifiés non ignorés). Aucun `dist/`, `dist-web/`, `target/` ni AppImage — vérifié avec `--untracked-files=all`, pas seulement via le résumé de statut.\n\nUn détail que j'ai tranché : `frontend/package.json` portait dans **un seul hunk** les scripts F1 (`build:web`, `build:bundle`) et le script Q1 (`test:bundle-transport`). Je l'ai découpé entre les deux commits (patch sur l'index, rien d'interactif) plutôt que de laisser Q1 déborder dans F1 — sinon le commit F1 aurait exposé un script pointant vers un fichier qui n'existe pas encore à ce commit.\n\n## Révision 1 — la branche `feature/ticket68-appimage-web-assets` est devenue redondante\n\n`git log ticket68 ^ticket74` est **vide** : elle n'a aucun commit propre, c'est un ancêtre strict de la branche #74. Au cadrage j'anticipais qu'elle porterait du travail que #74 n'aurait pas ; en réalité #74 en est issue et #68 n'a rien gagné depuis.\n\nLe détour « #74 → ticket68 → develop » serait donc de la cérémonie pure : un fast-forward rendant les deux branches identiques, pour zéro gain. **L'intégration sera un seul merge `--no-ff` de `feature/ticket74-web-transport-bundle` vers `develop`**, qui portera les deux tickets. `develop` n'a pas bougé (`ticket74..develop` vide) : pas de rebase nécessaire.\n\nCe qui **ne change pas** : #74 ne remonte pas seul dans `develop` en laissant #68 derrière. Les deux ferment ensemble.\n\n## Révision 2 — je ne merge pas maintenant\n\nLa réserve de QA est décisive et je la prends au mot : c'est un vert de build et de packaging, pas un vert live. La DoD de #74 exige explicitement la validation navigateur derrière reverse proxy et un rebuild AppImage testé par l'utilisateur — le symptôme d'origine (`__TAURI_INTERNALS__ undefined`) n'a été constaté que live, et c'est live qu'il doit disparaître. Merger sur `develop` maintenant reviendrait à déclarer close une correction dont la seule preuve qui compte manque encore.\n\nRien n'est bloqué par cette attente : **l'AppImage de test se construit directement depuis `feature/ticket74-web-transport-bundle`**, qui contient déjà tout #68 + tout #74. Aucun merge n'est nécessaire pour que l'utilisateur teste.\n\n## État final des branches\n\n| Branche | Commit | État |\n|---|---|---|\n| `feature/ticket74-web-transport-bundle` | `f605989` | **courante**, +6 sur `develop`, arbre propre |\n| `feature/ticket68-appimage-web-assets` | `50d237e` | ancêtre strict, redondante — je la supprimerai au merge |\n| `develop` | `a13a6c1` | inchangée, pas de divergence |\n\nTout est local : aucun push, aucune PR. Dis-moi quand le test live de l'utilisateur est vert et je fais le merge `--no-ff` vers `develop` puis le ménage des deux branches de feature. S'il est rouge, on reste ici et le correctif s'empile sur la même branche.", + "stderr_tail": null + }, + "completionDelivered": true + }, + { + "id": "19c939ce-7a40-47f9-aaea-7afb933dab75", + "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", + "ownerAgentId": "cd0b4cf1-1bef-4fae-ade5-f0a6b49bbaf5", + "kind": { + "kind": "headlessRendezvous", + "requester_agent_id": "a6ced819-b893-4213-b003-9e9dc79b9641", + "target_agent_id": "cd0b4cf1-1bef-4fae-ade5-f0a6b49bbaf5", + "ticket_id": "8bf414e0-60f1-4fb8-87ff-76d618150fb0", + "conversation_id": "6bc594e8-a37c-0dbd-1de6-6e3b73002cb4" + }, + "state": "running", + "wakePolicy": "recordOnly", + "createdAtMs": 1784277230713, + "updatedAtMs": 1784277230713, "deadlineMs": null, "result": null, "completionDelivered": false diff --git a/.ideai/tickets/74/carnet.md b/.ideai/tickets/74/carnet.md index 0f08869..1594ad1 100644 --- a/.ideai/tickets/74/carnet.md +++ b/.ideai/tickets/74/carnet.md @@ -1,6 +1,6 @@ --- issueRef: "#74" -version: 1 +version: 2 updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} -updatedAt: 1784271086298 +updatedAt: 1784272247901 --- diff --git a/.ideai/tickets/74/issue.md b/.ideai/tickets/74/issue.md index b6951dd..cdf02ce 100644 --- a/.ideai/tickets/74/issue.md +++ b/.ideai/tickets/74/issue.md @@ -2,7 +2,7 @@ id: "249bb0de-118f-4d6f-b0c4-1d4e2aadd83f" number: 74 title: "Le serveur embarqué sert le bundle desktop (Tauri) au navigateur — __TAURI_INTERNALS__ undefined" -status: "open" +status: "qa" priority: "high" sprint: null links: [{"target":"#68","kind":"relatesTo"},{"target":"#66","kind":"relatesTo"},{"target":"#13","kind":"relatesTo"}] @@ -10,8 +10,8 @@ agentRefs: [] createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} createdAt: 1784271086298 -updatedAt: 1784271086298 -version: 1 +updatedAt: 1784272247901 +version: 2 --- ## Symptôme (constaté live, exposition derrière reverse proxy) diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index 4183bf3..10b261a 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -773,11 +773,11 @@ "issueRef": "#74", "path": "74", "title": "Le serveur embarqué sert le bundle desktop (Tauri) au navigateur — __TAURI_INTERNALS__ undefined", - "status": "open", + "status": "qa", "priority": "high", "sprint": null, "assignedAgentIds": [], - "updatedAt": 1784271086298 + "updatedAt": 1784272247901 } ] } \ No newline at end of file