Commit Graph

1022 Commits

Author SHA1 Message Date
5d0b32542d merge(infrastructure,backend,app-tauri,frontend): feature #341 — tools MCP workspace natifs read-only idea_workspace_map/list/read/search, activés par défaut, configurables surfaces MCP/templates (QA verte) 2026-09-12 19:17:16 +02:00
7b712f2b62 feat(infrastructure,backend,app-tauri,frontend): tools MCP workspace natifs read-only idea_workspace_map/list/read/search, activés par défaut et configurables dans les permissions MCP et les templates — #341 (QA verte) 2026-09-12 19:17:09 +02:00
ea42d95f2e chore(appimage): rebuild AppImage develop — commit dédié v0.59.0 #340 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120699384 octets, mode 755, sha256 8932a0e9c9b39f53a01963d839b6c3bb294cc2dffc0c93d23b67174264daf64a, produit depuis develop @ 4be94a14 incluant le fix #339 — renforce la couleur projet dans les onglets non sélectionnés, teinte inactive 5% + hover thématisé (987b33db, merge 4be94a14) — PREMIÈRE AppImage embarquant #339, couleur projet renforcée visible dans l'app ; delta source propre: uniquement #339 depuis v0.58.0, SDK submodule 720cd53 inchangé ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri mkdir -p /tmp/idea-cargo-home && CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.58.0 -> v0.59.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.59.0 — couleur projet renforcée dans les onglets non sélectionnés, état sélectionné non régressé (#339) ; note: scripts/ non suivi au repo root, signalé hors périmètre et volontairement non inclus ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #340 ; aucun push. 2026-09-12 16:25:59 +02:00
4be94a149c merge(frontend): fix #339 — renforce la couleur projet dans les onglets non sélectionnés, teinte 5% + hover thématisé (QA verte) 2026-09-12 16:22:19 +02:00
987b33dbb4 fix(frontend): renforce la couleur projet dans les onglets non sélectionnés — teinte inactive 5% (+25% vs 4%), hover thématisé, actif préservé — #339 (QA verte) 2026-09-12 16:22:13 +02:00
d537ae75df chore(appimage): rebuild AppImage develop — commit dédié v0.58.0 #338 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120699384 octets, mode 755, sha256 f14a92decfa1b967eb44d9574c6c5ef88a4b120a828f3ae70c181e71738cea3a, produit depuis develop @ c44c380f — REBUILD SANS DELTA SOURCE vs v0.57.0: aucun commit entre v0.57.0 (c44c380f) et ce build, sources identiques #335 + #336, SDK submodule 720cd53 inchangé, artefact fonctionnellement équivalent au précédent, motif demande utilisateur #338 ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri mkdir -p /tmp/idea-cargo-home && CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.57.0 -> v0.58.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.58.0 (contenu identique à v0.57.0) ; note: scripts/ non suivi au repo root, signalé hors périmètre et volontairement non inclus ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #338 ; aucun push. 2026-09-12 16:12:06 +02:00
c44c380fbe chore(appimage): rebuild AppImage develop — commit dédié v0.57.0 #337 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M, sha256 5a11133f123374e951e840d97dd38b4e60cff5621a86c4180bf257bb8bf3103c, produit depuis develop @ 0b0e58ec incluant le merge du fix #336 — dispatch des commandes de menus plugin fiabilisé après hot reload, garde d'enregistrement côté hôte + feedback structuré i18n (1844c993, merge 8d7ed9c9) ET la feature #335 — registre icônes de marque légales, monogrammes A-Z, filigrane CLI agrandi (52365c24), première AppImage embarquant #335 ; contrat docs SDK #336 embarqué via bump submodule 0b0e58ec, docs only ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage, beforeBuildCommand build:bundle relancé par Tauri ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.56.0 -> v0.57.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.57.0 — menus plugin Git (Ouvrir les dépôts Git / Configurer / Actualiser / Git Graph) fonctionnels sans redémarrage après reload (#336), icônes de marque/monogrammes A-Z/filigrane CLI visibles (#336 #335) ; note: scripts/ non suivi au repo root, signalé hors périmètre et volontairement non inclus ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #337 ; aucun push. 2026-09-12 14:21:13 +02:00
0b0e58eca8 chore(sdk): bump submodule — contrat docs #336 fiabilise apres hot reload (erreur retryable jamais no-op, feedback skipped/failed host-owned, rejet windows.open remonte, commandes stale rejetees, reload sans refresh auto) — merges SDK 9efb781 + 116b75a, docs only, aucun push 2026-09-12 14:06:54 +02:00
8d7ed9c93e merge(frontend): fix #336 — fiabilise le dispatch des commandes de menus plugin après hot reload, garde d'enregistrement + feedback i18n (QA verte) 2026-09-12 14:03:17 +02:00
1844c99312 fix(frontend): fiabilise le dispatch des commandes de menus plugin après hot reload — garde d'enregistrement côté hôte + feedback structuré i18n (failed/skipped) — #336 (QA verte) 2026-09-12 14:03:11 +02:00
52365c24af merge(frontend): feature #335 — registre icônes de marque légales, monogrammes A-Z et filigrane CLI agrandi (QA verte) 2026-09-12 12:29:43 +02:00
4c69914817 feat(frontend): registre icônes de marque légales avec métadonnées et fallback, monogrammes A-Z et filigrane CLI agrandi — #335 (QA verte) 2026-09-12 12:29:35 +02:00
460fad4e60 chore(appimage): rebuild AppImage develop — commit dédié v0.56.0 #334 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120703480 octets, sha256 39518f3cc15919c439f96cb78d105ab0b1b61a2c9ef68433125686fe20d5021b, produit depuis develop @ 26ce3d70 incluant le merge du fix #333 — namespace MCP plugin borné à 64 chars pour Codex/OpenAI (a94167ad) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; QA verte sur le fix ; build réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.55.0 -> v0.56.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.56.0 — sur UnitySoundTool les namespaces MCP plugin tiennent dans la limite 64 d'OpenAI (client_name 59 bytes, stem tronqué + hash SHA-256) et les échecs terminaux Codex remontent avec le code lisible MCP_NAMESPACE_TOO_LONG au lieu du fallback générique ; IMPORTANT: les agents Codex existants doivent redémarrer avec une nouvelle conversation — les historiques antérieurs contiennent le namespace invalide et resteront en échec HTTP 400 ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #334 ; aucun push. 2026-09-12 08:02:01 +02:00
26ce3d70d8 merge(domain,application,infrastructure): fix #333 — namespace MCP plugin borné à 64 chars pour Codex/OpenAI, client_name tronqué + hash déterministe, erreurs terminales Codex remontées (QA verte) 2026-09-12 07:57:03 +02:00
a94167ada0 fix(domain,application,infrastructure): borne le namespace MCP plugin à 64 chars pour Codex/OpenAI — #333 (QA verte)
Cause racine: PluginMcpServerSpec::client_name() encodait chaque octet
non alphanumérique en _XX, produisant pour UnitySoundTool
`idea_plugin__com_2eidea_2eunity_2ddeveloper_2dtools__unity_2ddeveloper_2dtools_2etools`
(86 chars). Codex préfixe `mcp__` => 91 chars, limite API 64 => HTTP 400
`Invalid input.namespace string too long` sur chaque `codex exec resume`
dont l'historique contenait un outil Unity, aucun agent_message, UI en
fallback générique « réponse non finalisée ».

- domain: client_name() borné à 59 bytes ASCII (=> 64 avec mcp__) —
  stem lisible (minuscules, non-alnum => '_', tronqué) + suffixe
  déterministe = 16 premiers hex de SHA-256(plugin_id + NUL + server_id)
  pour conserver la résistance aux collisions après troncature; tests
  Unity (59 exact), stabilité, slug ponctuation, collisions sur stems
  tronqués identiques
- application: tests de projection TOML/JSON Codex et Claude adaptés au
  vrai namespace legacy encodé (86 chars) — vérifie que les tables
  utilisateur (mcp_servers.user_server, user-server) sont préservées
  pendant le retrait des tables managées périmées
- infrastructure: parse_event Codex traite turn.failed/error comme
  ReplyEvent::Error avec le message fournisseur (fini le fallback
  générique muet), classification lisible MCP_NAMESPACE_TOO_LONG: pour
  les erreurs de longueur de namespace; tests

Après déploiement: nouvelle conversation/restart requis pour les agents
Codex existants — les historiques contiennent déjà le namespace
invalide. Aucun push.
2026-09-12 07:57:03 +02:00
25506e160a chore(appimage): rebuild AppImage develop — commit dédié v0.55.0 #328 #329 #330 #331 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120695288 octets, sha256 3a60ba6068f8a093de3707ce551940ad3e21020dd8b616244f2a5999cde459c5, produit depuis develop @ 6af1e6c1 incluant le merge du lot utilisateur #328 #329 #330 #331 — section plugins projet, erreurs menus plugin visibles, refresh auto des pages, droplist agents (db67ecdf) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; QA verte sur le lot ; build réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.54.0 -> v0.55.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.55.0 — section dédiée activation/désactivation des plugins dans Paramètres du projet, échecs des commandes de menus plugin remontés à l'hôte, pages tickets/plugins/agents rafraîchies automatiquement après changements, droplist agents des cellules au thème avec états hover/focus/disabled ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #332 ; aucun push. 2026-09-12 01:20:28 +02:00
6af1e6c16e merge(domain,application,backend,app-tauri,frontend): lot utilisateur #328 #329 #330 #331 — section plugins projet, erreurs menus plugin visibles, refresh auto des pages, droplist agents (QA verte) 2026-09-12 01:15:05 +02:00
db67ecdf8f feat(domain,application,backend,app-tauri,frontend): lot utilisateur #328 #329 #330 #331 — section plugins projet, erreurs menus plugin visibles, refresh auto des pages, droplist agents (QA verte)
Lot en un seul commit: les quatre tickets partagent les mêmes fichiers
(événements domaine/DTO, ProjectPluginsPanel, useProjectPlugins) — une
séparation par hunks aurait risqué des états intermédiaires non
compilables (convention lot des batches #310-#313, #315 et #325-#326).

#328 — section dédiée plugins dans Paramètres du projet:
- frontend: ProjectPluginsPanel intégré à ProjectSettingsPanel
  (Panneaux > Paramètres du projet) — activation/désactivation par
  plugin avec état actif/inactif explicite par projet, distinct de
  l'assignation agents/skills/tools
- domaine: événement ProjectPluginSettingsChanged publié par
  SetProjectPluginEnabled, MutateAgentPluginSkill et
  MutateAgentPluginTool après persistance de .ideai/project-plugins.json
  (application + backend + DTO camelCase, test dto.rs)

#329 — les menus plugin qui échouent ne sont plus muets:
- usePluginMenus: dispatcher strict (runCommandStrict) pour les
  commandes réellement enregistrées au lieu du dispatcher laxiste qui
  journalisait et avalait les rejets — rendait les échecs d'ouverture
  de fenêtres natifs invisibles pour l'hôte de menus
- le no-op SDK historique (commande déclarée sans handler) est préservé
- échec remonté à l'hôte via commandError/clearCommandError (journal
  console + état exposé); test window_usecases adapté à un plugin
  installé
- le correctif côté SDK/GitPlugin vit dans le projet GitPlugin (son
  commit/merge local y est fait, hors périmètre de ce dépôt)

#330 — refresh automatique des pages:
- frontend/domain: typage des événements pluginEnabled,
  pluginDisabled (restartRequired), pluginUninstalled
  (restartRequired), pluginLoadFailed et projectPluginSettingsChanged
- useProjectPlugins et PluginRuntimeProvider: souscription
  onDomainEvent — refresh sur changement catalogue global ou sur
  projectPluginSettingsChanged du projet courant; gardes
  révision/projet contre les réponses obsolètes
- useProjectAgents: refresh auto quand un agent est ajouté au projet;
  ProjectsView et AgentsPanel suivent (erreur de rafraîchissement
  affichée avec bouton Réessayer)

#331 — droplist agents des cellules:
- SmallDropdown: liste bg-overlay + bordure border-strong (plus de
  fond blanc hors thème), hover/focus bg-raised, sélection
  bg-primary/15, disabled text-faint opacity-60, role=combobox
- LayoutGrid: sélecteur d'agent des cellules migré du <select> natif
  vers SmallDropdown (mêmes libellés Terminal/visible
  ailleurs/arrière-plan)

QA verte réelle sur les quatre lots (tests ciblés + exécution).
sdk/IdeaSDK: contenu modifié non committable ici (pointeur inchangé).
Aucun push.
2026-09-12 01:14:45 +02:00
4f0457c08a chore(appimage): rebuild AppImage develop — commit dédié v0.54.0 #325 #326 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120695288 octets, sha256 27fd485dcf1f5c7e30c681f1ea0c48e27a307bb1d2693509458895bdb1efc07e, produit depuis develop @ 69fa9251 incluant le merge du lot utilisateur #325 #326 — icônes projet avec watermark CLI custom et localisation FR/EN (1a1429f1) ; QA verte sur le lot ; build réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.53.0 -> v0.54.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.54.0 — chaque projet peut choisir une icône (recherche EN) affichée en watermark à faible opacité en fond de CLI custom, et l'interface bascule FR/EN depuis les paramètres avec l'ensemble des textes traduits ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #327 ; aucun push. 2026-09-11 21:58:04 +02:00
69fa925140 merge(domain,application,infrastructure,backend,web-server,app-tauri,frontend): lot utilisateur #325 #326 — icônes projet avec watermark CLI custom et localisation FR/EN (QA verte) 2026-09-11 21:54:02 +02:00
1a1429f10e feat(domain,application,infrastructure,backend,web-server,app-tauri,frontend): lot utilisateur #325 #326 — icônes projet avec watermark CLI custom et localisation FR/EN (QA verte)
Lot en un seul commit: les deux features partagent les mêmes contrats
(domain/settings.rs, DTO, commandes Tauri/HTTP, web-server) et les mêmes
surfaces UI — la séparation par fichiers était impossible sans chirurgie
de hunks risquant des états intermédiaires non compilables (convention
lot des batches #310-#313 et #315).

#325 — icône configurable par projet, watermark CLI custom:
- domaine: ProjectIconSet (devicon, simple-icons, lucide, idea),
  ProjectIconRef validé (nom ASCII 1..=64, -_. internes), champ icon
  optionnel sur ProjectSettings; sérialisation camelCase et try_from
  strict
- application: UpdateProjectSettings.execute accepte un patch
  theme_color OU icon (absent = inchangé, null = défaut produit), tests
  in-dependants avec store mémoire
- backend/app-tauri/web-server: ProjectIconRefDto, UpdateProjectSettingsRequestDto
  avec icon optionnel (désérialisation additive), commandes
  update_project_settings alignées Tauri/HTTP, tests DTO et HTTP
  (défaut null, set, clear, nom invalide rejeté)
- frontend: catalogue projectIcons (recherche EN), ProjectIconPicker en
  grille multi-lignes dans Paramètres projet, affichage de l'icône dans
  ProjectTabs et watermark grand format à faible opacité en fond de CLI
  custom; ports ProjectSettings.icon, Partial<ProjectSettings>,
  adapters tauri/mock/http et tests alignés

#326 — localisation FR/EN et traduction des textes IdeA:
- domaine: IdeaLanguage (fr | en), champ language optionnel sur
  IdeaUserSettings (absence = défaut produit, série additive validée)
- backend/web-server: UserSettingsDto.language, update_user_settings
  accepte language, tests HTTP alignés; fixtures structured_launch_d3
  mises à jour
- frontend: i18n/ (catalogue FR/EN, I18nProvider, scan anti-régression
  des sources visibles), GeneralSettings avec sélecteur de langue dans
  les paramètres, setupI18n dans vitest; migration de l'ensemble des
  textes hardcodés vers le catalogue sur toutes les surfaces (agents,
  layout, projets, tickets, sprints, web, plugins, permissions, git,
  templates, skills, mémoire, model servers, embedder, first-run,
  devices, scheduled tasks, workstate, dialogs), FR conservé par défaut;
  recherche d'icônes #325 en anglais conformément au ticket

QA verte sur feature/batch-325-326-project-icons-localisation. Aucun push.
2026-09-11 21:53:56 +02:00
cd744b5f18 chore(appimage): rebuild AppImage develop — commit dédié v0.53.0 #321 #322 #323 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120613368 octets, sha256 d1f8be96cdce603fa7272818cc3a679d0194652329edb264d66cc969fc407a24, produit depuis develop @ 259fc6b6 incluant le merge de la feature #321 — contributions UI/runtime des plugins limitées aux projets liés (bf33e585), et les merges des fixes #322 — restauration d'une cellule agent CLI custom après changement de projet (b0d68c2d) et #323 — persistance immédiate de l'historique des prompts (a3c20059) ; QA verte sur les trois lots ; build réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.52.0 -> v0.53.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.53.0 — seuls les plugins liés au projet exposent menus/layouts/slash commands, une cellule CLI custom retrouve mode et conversation après changement de projet, chaque prompt envoyé est retrouvé à la flèche haut même après fermeture brutale ; l'AppImage installée n'est pas remplacée par cette opération ; suivi #324 ; aucun push. 2026-09-11 18:46:32 +02:00
259fc6b64b merge(application,frontend): fix #322 #323 — restauration cellule CLI custom après changement de projet et persistance immédiate de l'historique des prompts (QA verte) 2026-09-11 18:23:18 +02:00
a3c2005938 fix(frontend): persistance immédiate de l'historique des prompts à chaque envoi — #323 (QA verte)
Symptôme: l'historique du composer CLI custom (flèche haut) n'était
écrit dans localStorage qu'via un effet sur l'état, sans garantie au
moment de l'envoi — une fermeture brutale/crash perdait la dernière
entrée.

- writeComposerHistory retourne désormais le succès de l'écriture; à
  chaque envoi, l'entrée est ajoutée et écrite AVANT l'invocation de
  l'agent (source de vérité par ref + état, réinit de l'index de
  navigation et du brouillon d'historique)
- l'effet d'écriture global est supprimé: l'historique n'est plus
  réécrit en boucle, seulement aux envois (et lectures au changement de
  scope projet/layout/node)
- si l'écriture échoue, l'envoi part quand même et un avertissement
  discret « Historique des prompts non sauvegardé. » (role=status)
  s'affiche au-dessus du composer
- tests: persistance vérifiée au moment de l'appel sendAgentChat,
  envoi conservé + avertissement affiché quand localStorage échoue

QA verte sur fix/batch-322-323-session-restore-prompt-history. Aucun push.
2026-09-11 18:23:10 +02:00
b0d68c2d14 fix(application,frontend): restauration correcte d'une cellule agent en CLI custom après changement de projet — #322 (QA verte)
Symptôme: après changement de projet puis retour, une cellule en CLI
custom retombait en TUI native et un nouveau switch CLI custom repartait
à neuf (aucune conversation reprenable) car le mode préféré de la
cellule n'était pas persisté dans l'arbre de layout.

- domaine frontend: type PreferredView (tui | chat) et champ
  preferredView optionnel sur LeafCell; opération de layout
  setCellPreferredView persistant la surface préférée (tui = défaut,
  champ omis pour garder les arbres existants compacts)
- LayoutGrid: le mode de présentation d'une cellule agent dérive de
  preferredView persisté; le cache localStorage du mode custom n'est
  plus qu'un cache de migration secondaire; remount par clé
  projectId:layoutId:nodeId à chaque changement de projet pour éviter
  tout état résiduel inter-projets; la conversation/engine session/
  session/agentWasRunning de la cellule sont préservés par les
  bascules chat <-> TUI
- useLayout: setCellPreferredView exposé au view model
- tests: layout_usecases (persistance chat puis retour TUI en
  conservant session/conversation/engine/running), layout.test
  (setCellPreferredView chat persiste, tui omet le champ),
  LayoutGrid.chat et cellControlsLayering alignés

QA verte sur fix/batch-322-323-session-restore-prompt-history. Aucun push.
2026-09-11 18:22:57 +02:00
791e068d2e merge(application,backend,infrastructure,app-tauri,frontend): feature #321 — contributions UI/runtime des plugins limitées aux projets liés (QA verte) 2026-09-11 17:46:17 +02:00
bf33e58508 feat(application,backend,infrastructure,app-tauri,frontend): contributions UI/runtime des plugins limitées aux projets liés — #321 (QA verte)
Les contributions runtime des plugins (menus, slash commands, layouts,
surfaces) ne sont exposées que dans les projets liés au plugin.

- Définition du lien: ProjectPluginSettingsStore par racine projet
  (domaine) — une contribution runtime-active n'entre dans le catalogue
  que si elle est explicitement activée pour le projet courant; hors
  projet focalisé, catalogue vide
- Application: ListPluginRuntimeContributions.execute prend un
  project_id optionnel, charge projet + settings et filtre le registre
  par activation projet; tests fake store/settings (catalogue vide sans
  projet, activation, layout, slash commands)
- Backend/app-tauri: plugin_list_runtime_contributions et slash
  commands list/execute acceptent projectId optionnel (DTO camelCase,
  défaut serde), BackendCore recâblé avec store_port et
  project_plugin_settings_store; test DTO de scope optionnel
- Frontend: PluginGateway.listRuntimeContributions(projectId) (ports,
  tauri, http/unsupported, mock alignés); PluginRuntimeProvider
  re-scope le catalogue au changement de focus projet (vidage du
  registre précédent, disposition des bundles, requêtes obsolètes
  ignorées par projectId/révision); PluginLayoutCellView ignore les
  références de layout devenues hors périmètre via onChooseAnotherLayout
  et ne rend rien pendant le rechargement (aucune fuite inter-projets)
- Tests: plugin_install_load (infrastructure), dto slash commands,
  plugin.test, PluginRuntimeProvider.test, PluginLayoutCellView.test

QA verte sur feature/321-plugin-contributions-linked-projects. Aucun push.
2026-09-11 17:46:03 +02:00
6bdbe755fa chore(appimage): rebuild AppImage develop — commit dédié v0.52.0 #319 #320 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120637944 octets, sha256 53330fc540e42d10adf2db722af8c2f375a9aff61c27b8a629fd2d6eeffbbe84, produit depuis develop @ b01fa0ce incluant les merges du fix #319 — la couleur projet s'applique et persiste sur tous les projets, id opaque inclus, ex PipoufWebSite (a93db1c6), et du fix #320 — arrêt d'agent fiable avec cascade sur l'arbre de propriété/attente des agents et travaux lancés, statut live cohérent, fin de la pastille orange fantôme (b01fa0ce) ; QA verte sur les deux lots ; build réussi par Main: npm --prefix frontend run build puis CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage depuis crates/app-tauri) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.51.0 -> v0.52.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.52.0 — la couleur choisie s'applique et persiste sur l'ensemble des projets y compris PipoufWebSite, et l'arrêt d'un agent stoppe en cascade les agents/travaux lancés avec pastille/statut cohérent et aucune poursuite d'appels inter-agents ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push. 2026-09-11 16:47:13 +02:00
b01fa0ce4d merge(application,domain,infrastructure,web-server,app-tauri,frontend): fix #320 — arrêt d'agent fiable avec cascade sur travaux/agents lancés et statut cohérent (QA verte) 2026-09-11 16:42:37 +02:00
a93db1c64f merge(frontend): fix #319 — la couleur projet s'applique et persiste sur tous les projets, id opaque inclus (QA verte) 2026-09-11 16:42:37 +02:00
1316e87010 fix(application,domain,infrastructure,web-server,app-tauri,frontend): arrêt d'agent fiable avec cascade sur l'arbre de propriété et statut cohérent — #320 (QA verte)
Symptôme: stopper un agent (ex Main sur UnityPlugin) laissait des travaux
poursuivre, la cascade n'atteignait pas les agents lancés et la pastille
restait orange pendant que l'agent continuait à en appeler d'autres.

- barrière d'admission par génération d'exécution (ExecutionControl): un stop
  ferme l'admission de tout le sous-arbre propriété/attente AVANT toute
  annulation asynchrone — plus aucune nouvelle action inter-agents après stop
- arbre de propriété durable en-process (launched_by) + dépendances d'attente
  actives: la cascade couvre transitivement agents et travaux lancés
- commandes d'un agent arrêté rejetées (AppError::AgentStopped); stop
  lui-même admis pour rester idempotent; réactivation sur relance humaine
  (génération +1) et enregistrement du propriétaire au spawn
- admission exposée aux adaptateurs hors commandes cœur (tickets, templates,
  plugins) via ensure_agent_execution_active; MCP server/tools, web-server et
  commandes Tauri alignés
- cohérence live-state: statut Idle avec intent « Arrêté » ou
  « Arrêt incomplet — Certains travaux sont encore actifs » selon l'issue de
  la cascade; workstate et surfaces UI (AgentsPanel, LayoutGrid,
  ProjectWorkStatePanel) reflètent l'état réel, plus de pastille orange fantôme
- tests: orchestrator_service (cascade/générations/idempotence),
  workstate_actions, background_task_cancel, error_codes, agents, layout,
  workstate

QA verte sur fix/320-agent-stop-cascade. Aucun push.
2026-09-11 16:42:29 +02:00
0b9e085ec3 fix(frontend): la couleur projet s'applique et persiste sur tous les projets, id opaque inclus — #319 (QA verte)
Reprise après crash du diagnostic (ticket #318, même symptôme) : sur certains
projets, ex PipoufWebSite, la couleur choisie n'était ni appliquée ni reflétée.

- application optimiste: la couleur demandée est publiée immédiatement via
  PROJECT_THEME_CHANGED_EVENT et affichée dans le picker, sans attendre le
  round-trip de persistance
- persistance systématique par identifiant de projet (jamais par nom), couvrant
  les projets à id opaque
- échec de sauvegarde: rollback visuel vers la couleur précédente + reprise
  possible via Réessayer qui rejoue exactement le payload demandé
- réouverture du panneau: la couleur persistée est rechargée et affichée
- tests: application immédiate + persistance id opaque, rechargement après
  réouverture, rollback/réessai sur échec (ProjectSettingsPanel.test.tsx)

QA verte sur fix/319-project-color-application. Aucun push.
2026-09-11 16:42:29 +02:00
1dc892d80b chore(appimage): rebuild AppImage develop — commit dédié v0.51.0 #317 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120584696 octets, sha256 6c3f6a5292d8f8b886702eba8b6367574c952b3b8144f26bbaa506140057e400, produit depuis develop @ 6128be7e incluant le merge de la feature #317 — bouton Redémarrer l'agent dans la barre supérieure des cellules, restart valable pour les trois modes de présentation headless/TUI native/CLI custom via le use case RestartCellAgentRuntime déléguant au scheduler self-restart existant, commande restart_cell_agent contrat identique Tauri/HTTP, stop borné par timeout typé, relance préservant routage TUI natif/géométrie de cellule/conversation, overlay d'état et confirmation frontend, QA verte ; build réussi par Main: npm --prefix frontend run build puis tauri build --bundles appimage depuis crates/app-tauri) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.50.0 -> v0.51.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.51.0 — le bouton Redémarrer l'agent redémarre l'agent attaché à la cellule depuis chaque mode de présentation, avec conservation du layout/cell/node et états d'échec correctement libellés ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push. 2026-09-11 15:05:05 +02:00
6128be7e53 merge(backend,application,frontend,domain,web-server,app-tauri): feature #317 — bouton Redémarrer l'agent dans la barre des cellules (QA verte)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 15:00:51 +02:00
7fb9d8bb86 feat(backend,application,frontend,domain,web-server,app-tauri): bouton Redémarrer l'agent dans la barre supérieure des cellules — #317 (QA verte)
La cellule expose un bouton Redémarrer l'agent valable pour les trois
modes de présentation (headless, TUI native, CLI custom), sans jamais
prendre la présentation pour vérité runtime.

- Application: use case RestartCellAgentRuntime validant le binding
  exact cellule/runtime via les snapshots live (RestartRuntimeNotFound,
  ConflictAgentVisibleElsewhere, AgentNotBoundToCell) puis déléguant au
  scheduler self-restart existant (schedule_cell); CellAgentPresentation
  purement informationnelle.
- Backend/app-tauri/web-server: commande restart_cell_agent sur contrat
  DTO identique Tauri/HTTP, stop borné par timeout typé
  (RestartStopTimeout), relance préservant routage TUI natif, géométrie
  de cellule (node/rows/cols) et conversation; évenements domaine
  enrichis.
- Frontend: bouton dans la barre de cellule avec confirmation,
  overlay d'état Redémarrage…/échec (libellés par code d'erreur, Fermer/
  Réessayer), gardes d'identité de cellule et de restarts externes,
  gateway/mock/http adapters et ports alignés.
- Tests: dto_agents, workstate_actions, contrats web-server,
  LayoutGrid.cellControlsLayering, adapters agent/mock/http.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 15:00:43 +02:00
46449bdf46 chore(appimage): rebuild AppImage develop — commit dédié v0.50.0 #316 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120543736 octets, sha256 d240c78b705572635d12364d6d26340ad4569a6652f89700acbc13b62f0a0863, produit depuis develop @ aac37d81 incluant le merge du fix #316 — set de couleurs des paramètres projet fiable pour tous les projets: DTO tri-état absent/inchangé vs null/défaut, mise à jour partielle theme_color, garde-fous de course frontend par projet, gardes de focus ViewWindow, QA verte ; build réussi par Main: npm --prefix frontend run build puis tauri build --bundles appimage depuis crates/app-tauri) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.49.0 -> v0.50.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.50.0 — le set de couleurs des paramètres projet s'applique et persiste correctement sur l'ensemble des projets, y compris après changements de projet rapides ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push. 2026-09-11 13:04:52 +02:00
aac37d816d merge(frontend,application,backend,web-server,infrastructure): fix #316 — set de couleurs projet fiable pour tous les projets (QA verte)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 13:01:13 +02:00
bbe8c1d04b fix(frontend,application,backend,web-server,infrastructure): le set de couleurs projet s'applique à tous les projets — #316 (QA verte)
Cause: update_project_settings remplaçait tout ProjectSettings avec la
seule couleur fournie — champ absent et null indistinguables — et des
réponses de chargement/sauvegarde obsolètes d'un projet précédent
pouvaient réafficher/écraser la couleur lors d'un changement de projet
rapide, d'où l'impression que la couleur ne prenait pas sur tous les
projets.

- DTO tri-état (absent = inchangé, null = défaut produit) avec
  Deserialize manuel et use case de mise à jour partielle du champ
  theme_color; commandes Tauri et web-server alignées sur le même
  contrat.
- Garde-fous de course frontend: séquences load/save + révision thème
  par projet (pub/sub onProjectThemeChanged) dans ProjectSettingsPanel,
  garde de révision de focus dans ViewWindow.
- Tests: infrastructure settings, contrats web-server (inchangé/reset),
  ProjectSettingsPanel, ViewWindow, projects.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 13:01:05 +02:00
89937c7cd9 chore(appimage): rebuild AppImage develop — commit dédié v0.49.0 #315 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120556024 octets, sha256 7055487cd147279a3d0e227e1676627add1f53c314f74bd62c4a7c54717514a2, produit depuis develop @ 40050170 incluant le merge du lot #315 — détachement Paramètres projet, couleurs projet fiables inter-webviews, restauration conversation/images custom CLI après aller-retour projet, retrait menus Projects/Project Context du menu Panneaux, QA verte ; build réussi par Main après QA verte) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.48.0 -> v0.49.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.49.0 — détachement du panneau Paramètres du projet (et Retry), application persistante des couleurs projet y compris dans les fenêtres détachées, conversation CLI custom restaurée après changement de projet puis retour, images conservées après aller-retour projet, menu Panneaux sans entrées Projects/Project Context ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push. 2026-09-11 11:31:45 +02:00
40050170dd merge(frontend,application): lot utilisateur #315 — détachement Paramètres projet, couleurs projet, restauration conversation/images custom CLI, menus Panneaux (QA verte) 2026-09-11 11:27:18 +02:00
45f819e1e8 fix(frontend,application): lot utilisateur #315 — détachement Paramètres projet, couleurs projet fiables, restauration conversation custom CLI, images post-aller-retour projet, retrait menus Projects/Project Context (QA verte)
- détachement: le panneau Paramètres du projet devient détachable (mapping historique panel=context → projectSettings dans parseViewWindowParams, DETACHABLE/ViewPanelBody alignés, ProjectsView ne court-circuitant plus le refus); Retry d'échec de détachement préservé
- couleurs projet: projectTheme publie idea:project-theme-changed localement + BroadcastChannel inter-webviews (fenêtres OS détachées), garde de révision par projet dans ProjectsView/ViewWindow contre les lectures settings en course — plus de flash/retour au bleu par défaut
- conversation custom CLI: transcript_restore_expected ne considère plus l'absence de scrollback volatile comme une restauration échouée quand la session rouvre en SessionPlan::None (continuation vide valide); CustomAgentChatView n'affiche plus le faux « conversation liée n'a pas pu être restaurée »
- images: conservation des images de conversation après changement de projet puis retour
- menus Panneaux: retrait des entrées Projects et Project Context (panelOrder WebWorkspace, création/switch via tab-bar +, contexte projet fusionné dans Paramètres du projet)
- QA verte: tests frontend ciblés window/ViewWindow/ProjectSettingsPanel/ProjectsView.detach/projects/CustomAgentChatView/WebDesktopWorkspace + cargo test -p application lifecycle transcript_restore_expected; fichiers .ideai/* (tickets 308-315, index/counter, agents/test, chat-drafts, system-permissions, project-settings.json, attachments/) et scripts/ hors périmètre préservés en worktree; aucun push
2026-09-11 11:27:09 +02:00
352ec2d8b7 chore(tickets): sync store local — clôture #305 (tâches planifiées projet, livrées v0.48.0) et #314 (transcript lié après reboot, corrigé) par Main après rebuild AppImage validé; carnets à jour, index qa->closed; counter inchangé; fichiers non liés (agents/test, chat-drafts, system-permissions, attachments/, tickets 308-313, scripts/) hors périmètre; tag v0.48.0 inchangé sur 1e2cb5e; aucun push 2026-09-11 10:39:28 +02:00
1e2cb5e2af chore(appimage): rebuild AppImage develop — commit dédié v0.48.0 #305 #314 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120560120 octets, sha256 d7de4519736eee6b923ba5b9a6e966cea08760173bd85a66ae6422a60a95e0d1, produit depuis develop @ 600aae17 incluant le merge #305 tâches planifiées projet — tool MCP idea_scheduled_task_* + menu utilisateur — et le fix #314 transcript lié indisponible après reboot, QA verte sans bloquant; commandes carnet: npm --prefix frontend run build OK puis depuis crates/app-tauri: mkdir -p /tmp/idea-cargo-home && CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage OK; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.47.0 -> v0.48.0, tag annoté posé sur ce commit; restant: validation live depuis l'app installée v0.48.0 — menu projet 'Tâches planifiées' (création/édition/approbation tâche agent/exécution maintenant/suppression), tools MCP idea_scheduled_task_* list/create/run_now, transcript lié restauré après reboot; l'AppImage installée n'est pas remplacée par cette opération; aucun push) 2026-09-11 10:36:43 +02:00
600aae175f merge(backend,frontend): tâches planifiées projet #305 + fix transcript lié après reboot #314 (QA verte)
Source: feature/305-scheduled-project-tasks-mcp (7007b2c feat + 686cf31 chore tickets; sous-module sdk/IdeaSDK 047c38b docs services.md). #305: agrégat ScheduledProjectTask persisté <app_data_dir>/scheduled-project-tasks/<projectId>.json, schedules interval/daily/weekly, approbation obligatoire des tâches agent, 7 tools MCP idea_scheduled_task_*, commandes Tauri/HTTP contrats identiques, surface projet 'Tâches planifiées', reconcile boot sans rattrapage rafale, docs dédiée. #314: transcript lié restauré après reboot côté application et frontend avec état/action utile. QA verte sans bloquant rapportée par QA. Restant: rebuild AppImage depuis develop (commit dédié + tag, convention y: v0.47.0 -> v0.48.0) puis validation live; aucun push.
2026-09-11 10:32:21 +02:00
686cf31620 chore(tickets): sync store local — #305 carnet/issue (cadrage UX+Architect, QA verte, livraison) et #314 issue (QA verte); counter/index à jour; tickets 308-313 non liés, agents/test, chat-drafts, system-permissions, attachments/ et scripts/ hors périmètre; aucun push 2026-09-11 10:32:09 +02:00
7007b2cc7e feat(backend,frontend): tâches planifiées projet — tool MCP idea_scheduled_task_* et menu utilisateur #305, fix transcript lié indisponible après reboot #314 (QA verte)
#305: nouvel agrégat durable ScheduledProjectTask dans domain (scheduled_task.rs, ids, ports ScheduledProjectTaskStore), source de vérité <app_data_dir>/scheduled-project-tasks/<projectId>.json, schedules bornés V1 interval/daily/weekly avec fuseau, cycle À approuver/Active/Suspendue avec approbation obligatoire des tâches demandées par agent; use cases application/scheduled_task (list/create/update/delete/run_now/reconcile/fire) réutilisant BackgroundTask pour les runs avec distinction planifié/manuel; store infrastructure dédié + scheduler reconcile au boot sans rattrapage en rafale, cwd confiné au projet; 7 tools MCP idea_scheduled_task_* (list/read lecture seule, create/update/delete/run_now/set_enabled write-actions soumises aux permissions natives); commandes Tauri + routes HTTP aux contrats DTO identiques (camelCase nextRunAtMs/lastRunAtMs/lastTaskId/createdBy/updatedBy); frontend: gateways Tauri/HTTP/mock + types ports/domain, surface projet 'Tâches planifiées' (liste utilisateur+agent unifiée, création/édition avec récapitulatif avant activation, approbation/refus, exécuter maintenant, suspendre/reprendre, suppression), catalogage surface web (webSurfaceCatalog/viewPlacement/ViewPanelBody/WebWorkspace); docs/scheduled-project-tasks.md et sdk docs/services.md (047c38b: pas un service plugin V1, pas d'émulation via cron système).

#314: correction de 'Conversation liée — transcript indisponible' après reboot: restauration du transcript lié côté application (orchestrator service, lifecycle, session_limit, background sink, terminal registry) et côté frontend (adapters agent/http frames/stream/requestResponse, workStateNormalization, CustomAgentChatView avec état et action utile), tests dto_chat/agent_lifecycle/structured_registry_d1/background_completion_sink étendus.

QA verte rapportée par QA sur feature/305-scheduled-project-tasks-mcp, sans bloquant, pour #305 et #314.

Hors périmètre worktree: tickets non liés, attachments/, scripts/; aucun push.
2026-09-11 10:32:01 +02:00
72792bb02b merge(backend,frontend): lot utilisateur #310-#313 — horodatage conversation, stop agent robuste, préférence terminal par défaut, paramètres projet (QA verte) 2026-09-10 21:26:23 +02:00
402a60f213 feat(backend,frontend): lot utilisateur #310 #311 #312 #313 — horodatage conversation, stop agent robuste, préférence terminal par défaut, paramètres projet (QA verte)
- #310: horodatage de tous les messages et événements de conversation visibles — composant partagé EntryTimestamp, timestamps propagés dans le transcript chat, les annonces inter-agent et le viewer de conversation, normalisation côté domain/adapters (conversation_log, paginate).
- #311: stop d'agent robuste pour PTY non monté, sessions headless et CLI custom — lifecycle/orchestrator durcis, ponts chat app-tauri/web-server alignés, arrêt fiable sans session orpheline.
- #312: préférence globale d'interface terminal par défaut — nouveau store settings (domain/application/infrastructure + tests), DTO et commandes backend, adapter frontend userSettings, panneau TerminalSettings dans les paramètres globaux.
- #313: Paramètres du projet — contexte de projet éditable et couleur de thème par projet (ProjectSettingsPanel + projectTheme), teinte des onglets projet, persistance via DTO projet.

QA verte (GO QA sur feature/batch-310-311-312-313-chat-stop-prefs-theme) — vérifications Git: git diff --cached --check OK; staging borné à crates/ et frontend/ (74 fichiers, +2105/-531), commit unique de lot conforme à la convention des lots (précédents batch-151/158/159, batch-210/211/212) car les fichiers partagés (dto.rs, commands.rs, CustomAgentChatView) entrelacent les 4 tickets.

fichiers .ideai/* (agents/test.md, chat-drafts.json, system-permissions.json, tickets/counter.json, tickets/index.json, tickets/308-313/), attachments/ et scripts/ hors périmètre et préservés en worktree ; aucun push.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 21:26:16 +02:00
fc45594d9a chore(appimage): rebuild AppImage develop — commit dédié v0.47.0 #309 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 119937528 octets, sha256 ffed1647c876057fdf69940801d53759876d1231552d9407d40e1cfa4b0e8ae2, produit depuis develop @ 3eaa3db incluant le merge du fix #309 — writable roots Codex corrects sur projets non-IdeA quel que soit le mode de lancement ; build réussi par Main après QA verte) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.46.0 -> v0.47.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet #309/index/counter reste hors périmètre en worktree — ce message est la trace durable in-repo du rebuild ; restant: validation live des writable roots Codex depuis l'app installée v0.47.0 (first-run TUI native, stop/relaunch, CLI custom, délégation headless sur projet non-IdeA) ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 19:09:12 +02:00
3eaa3db22b merge(application): writable roots Codex corrects sur projets non-IdeA — #309 (QA verte)
intègre fix/309-codex-writable-roots commit 1f38c61 — politique de lancement Codex unifiée: project root par défaut sans permissions explicites, roots extra posés uniquement en workspace-write, réécriture --sandbox/--add-dir du SpawnSpec PTY par apply_codex_pty_launch_policy (composition identique first-run/relaunch/custom CLI/headless) ; QA verte reconfirmée par Git: fmt --check, diff --check, codex_permissions 3/3, lifecycle 48/48 ; fichiers .ideai/*, attachments/ et scripts/ hors périmètre préservés en worktree ; aucun push.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 19:04:11 +02:00