Journal des modifications
Ce qui a changé, en direct du code
Le contenu ci-dessous n'est pas une page marketing : c'est le fichier CHANGELOG.md réellement livré dans le zip téléchargeable, lu automatiquement à chaque affichage — jamais ressaisi à la main, donc jamais désynchronisé.
Version actuelle : v1.4.0 Télécharger cette version
[1.1.7] - 2026-08-22
Corrigé (2026-08-22, 7e vague — le scroll du journal ne suivait pas l'apparition de la barre de retour/challenge/relance)
- Retour utilisateur (capture) — « lorsque j'ai la popup qui demande si le résultat convient le scroll de l'assistant ne descend pas et on perd de vue les derniers échanges » : afficher la barre « Ce résultat vous convient ? » (ou la barre de défi conversationnel, ou celle de relance après échec) rétrécit la zone visible du journal — la position de défilement, elle, ne bouge pas, ce qui peut faire disparaître les derniers messages sous la barre qui vient d'apparaître. Le journal est désormais explicitement forcé en bas à l'apparition de CHACUNE de ces 3 barres (
ChatPanel.prompt_feedback/_show_challenge_bar/show_retry_offer) — même correctif déjà appliqué au démarrage/à la fin d'un traitement IA.
Ajouté (2026-08-22, 6e vague — effet « pro » sur le message de fin de traitement IA)
- Retour utilisateur — « lorsque l'IA a terminé de travailler est-ce que tu peux ajouter un effet pro au niveau du texte retourné qui dit que c'est terminé par l'assistant pour que ça soit plus visible » : le message « Terminé en X,X s » quitte le simple texte italique gris/vert des autres messages système pour un vrai encart (fond vert pâle, liseré, coche ✓, texte en gras —
ChatPanel.add_completion, même discipline que l'encart déjà utilisé pour une question de l'assistant). Le journal reçoit en plus le MÊME traitement que celui déjà en place au lancement d'une action (cadre + scroll forcé en bas), cette fois en vert succès plutôt qu'en rouge — langage visuel cohérent : rouge = ça démarre, vert = c'est fini.
Ajouté (2026-08-22, 5e vague — halo rouge + mise en évidence du message + scroll forcé, boutons IA grisés pendant un traitement)
- Retour utilisateur — « je pense qu'avec un cadre rouge ça serait plus visible [...] il faudrait ajouter un effet sur le prompt pour mettre en évidence ce qui a été déclenché et surtout garantir que le scroll soit bien en bas [...] car pour le moment je ne le vois pas bien » : le halo autour du journal passe du bleu au rouge, le dernier message ajouté (celui qui annonce l'action tout juste déclenchée) reçoit en plus un fond rouge pâle, et le journal est désormais forcé à défiler tout en bas dès le lancement d'un traitement IA — plus de risque que le message annonçant l'action reste hors champ.
- Retour utilisateur — « lorsqu'il y a déjà une action IA en cours il faut griser les boutons comme pour le bouton "Envoyer + CTRL-Entrée" pour ne pas pouvoir déclencher plusieurs actions IA en parallèle ce qui pourrait complexifier la compréhension de ce qu'il se passe » : les 3 boutons rapides au-dessus du canevas, les boutons Notes (Suggérer/Retaguer) et l'intégralité des actions IA du menu contextuel d'une slide se grisent désormais dès qu'un traitement IA — n'importe lequel, pas seulement le leur — est en cours (
ChatPanel.busy_changed, émis parset_busydéjà appelé par toute action IA existante ; aucun des call sites existants n'a eu besoin d'être modifié).
Ajouté (2026-08-22, 4e vague — repère visuel vers l'assistant à chaque action IA)
- Retour utilisateur — « lorsque l'on clic sur les boutons "Mise en forme", "Challenger" et "Animation" ça se déclenche tout de suite [...] est-ce que l'utilisateur qui commence à utiliser va comprendre que c'est dans l'assistant que le raisonnement se fait [...] idem pour [...] les notes [...] et toutes les actions du menu contextuel d'une slide [...] il faut qu'il comprenne bien ce qu'il se passe (effet visuel ?). Mais [...] un utilisateur confirmé ne voudra pas faire plein de clic inutile » : un bref halo bleu apparaît désormais autour du journal de l'assistant à CHAQUE lancement d'un traitement IA, pour attirer l'œil vers le bon endroit sans ajouter le moindre clic ni la moindre confirmation. Un seul point d'accroche (
ChatPanel.start_processing, déjà le passage commun à toute action IA de l'app) couvre d'un coup les 3 boutons rapides, les actions de notes, et l'intégralité du menu contextuel d'une slide — coût nul pour qui sait déjà où regarder.
Corrigé (2026-08-22, 3e vague — popup d'aperçu avant/après trop large, note d'auto-critique restée en français)
- Retour utilisateur (capture) — « il arrive que pour accepter ou rejeter des changements suite à suggestion de l'IA la popup soit tellement large qu'on ne voit pas tout » : le résumé affiché en haut de l'aperçu avant/après (
ui/diff_preview.py::DiffPreviewDialog) — notamment la note d'auto-critique, une phrase parfois longue — restait sur une seule ligne SANS retour à la ligne, ce qui forçait Qt à élargir tout le dialogue pour la faire tenir plutôt que de simplement la faire tenir dans sa largeur normale. Le résumé passe désormais en retour à la ligne automatique. - Retour utilisateur (capture, interface anglaise) — « auto-corrected after verification (L'ordre des blocs texte reste incorrect [...]) » restait en français, il faut suivre la langue de l'utilisateur pour donner l'explication » : la note d'auto-critique (champ
"issue"du LLM, affichée telle quelle dans l'aperçu avant/après) n'était pas concernée par le mécanisme d'adaptation de langue des sorties IA « méta » de ce projet (ai/language.py::language_directive, déjà appliqué aux explications de/review_slide, du défi conversationnel et du wizard/suggest_design) — corrigé dansservices/edit_service.py::_critique_prompt. Le champ"refine", lui, reste volontairement non contraint : texte 100% interne renvoyé au LLM pour corriger son propre patch, jamais montré à l'utilisateur.
Ajouté (2026-08-22, 2e vague — bouton « Réessayer » après un échec IA)
- Retour utilisateur (capture) — sur un échec d'application de
/suggest_design(« Failed: Modification impossible : La réponse de l'IA n'était pas un JSON exploitable. ») : « est-ce que tu penses qu'il pourrait y avoir une action pour l'utilisateur pour relancer le traitement qui a planté » : un bouton Réessayer apparaît désormais directement dans le chat après CET échec précis (ChatPanel.show_retry_offer,MainWindow._on_ai_error(..., retry=...)) — relance uniquement l'application des 3 choix déjà faits (disposition/couleurs/tailles), sans faire tout reperdre à l'utilisateur en le renvoyant au début de l'assistant. Comportement inchangé pour tout le reste (aucun autre échec IA du logiciel ne propose de relance).
Corrigé (2026-08-22, 2e vague — textes français restants dans /suggest_design, icône d'exemple non reprise sur une install existante, alignement de l'icône workflow)
- Retour utilisateur (capture, interface anglaise) — « Génération de suggestions de disposition [...] Failed: Modification impossible : ... » restait intégralement en français : les 3 étapes de l'assistant
/suggest_design(disposition/couleurs/tailles — messages de progression, titres et indices des popups de choix, message final d'application) n'étaient encore passées par AUCUNself.tr()— corrigé dansui/main_window.py. Le préfixe fixe des erreurs venant du pipeline d'édition partagé (services/edit_service.py::AIClientError("Modification impossible : ..."), une couche volontairement sans Qt donc sansself.tr()possible) est désormais lui aussi retraduit à la frontière (MainWindow._translate_service_message) — le détail dynamique qui suit (erreur technique du modèle) reste inchangé, comme pour toute donnée dont SlydeForge ne maîtrise pas le contenu. - Retour utilisateur (capture) — « l'icône du workflow n'est pas reprise dans le menu [...] j'ai dû aller dans édition et le réenregistrer sauf qu'ici on était sur l'exemple de base, donc j'aimerais qu'il gère l'icône pour cet exemple de base automatiquement » : l'icône par défaut de l'exemple bundlé (ajoutée dans la vague précédente) n'était posée qu'à la toute PREMIÈRE création de l'exemple — sans effet sur une installation l'ayant déjà seedé auparavant.
storage/workflows_store.py::ensure_examplecomplète désormais cette icône manquante à chaque lancement pour ces installations-là (repéré par le nom bundlé, jamais en resemant un exemple supprimé ni en écrasant une icône déjà choisie). - Retour utilisateur (capture) — « problème d'alignement de l'icône dans la liste des workflows » : le badge (taille fixe) se retrouvait centré verticalement par le comportement par défaut de Qt tandis que le bloc nom/description (qui, lui, s'étire sur toute la hauteur de la ligne) plaquait son contenu en haut à cause de son propre
addStretch— deux ancrages différents dans la même ligne. Les deux sont désormais alignés de la même façon (ui/workflow_manager_dialog.py::_build_row_widget).
Modifié (2026-08-22, 2e vague — boutons d'accès rapide IA repositionnés et centrés)
- Retour utilisateur — « on perd beaucoup en hauteur [...] ne faudrait-il pas centrer ces nouveaux boutons ? » : les 3 boutons d'accès rapide IA (ajoutés ci-dessous) quittent leur propre ligne dédiée pour rejoindre celle des contrôles de zoom — centrés entre le bouton Zones de sécurité et les contrôles de zoom, sans ligne supplémentaire au-dessus du canevas.
Ajouté (2026-08-22 — boutons d'accès rapide IA au-dessus du canevas)
- Retour utilisateur (capture) — « si la personne a bien configuré l'IA alors il faudrait ajouter des boutons d'accès rapide pour faire différentes actions qui lancent des fonctions '/' à l'assistant directement, voici les fonctions : /suggest_design, /review_slide, /suggest_animation » : 3 boutons (icône étincelle IA, même langage visuel que le menu contextuel des vignettes) apparaissent désormais juste au-dessus du canevas d'édition, entre la barre contextuelle de l'élément sélectionné et les contrôles de zoom — « Mise en forme », « Challenger », « Animation », équivalents directs des 3 commandes slash sur la diapositive courante. Rangée entière masquée tant qu'aucun backend IA n'est configuré (
ui/main_window.py::_update_ai_quick_actions, rafraîchie à chaque changement de slide et à la fermeture de Paramètres > IA…), pour ne jamais exposer un raccourci inutilisable.
Modifié (2026-08-22 — rendu professionnel du gestionnaire de workflows, icônes reprises dans le menu, confirmation avant lancement)
- Retour utilisateur (captures) — « je pense que tu peux améliorer le rendu pour que ça soit plus pro et même agrandir cette popup » : la liste du dialogue Workflows (Gérer les workflows…) passe de simples lignes de texte à de vraies cartes (icône/image en badge, nom en gras, description en dessous — jamais tronquée sans infobulle), dialogue agrandi en conséquence (
ui/workflow_manager_dialog.py). - Retour utilisateur (capture) — « il faudrait que l'icône du workflow soit utilisée dans le menu » : déjà le cas techniquement (
ui/main_window.py::_rebuild_workflows_menu) mais invisible faute d'icône sur l'unique workflow d'exemple bundlé — il en reçoit désormais une par défaut, pour démontrer le mécanisme dès le premier lancement. - Retour utilisateur (capture) — « lorsque l'on lance un workflow directement depuis le menu il faudrait qu'une popup s'ouvre pour rappeler ce que l'on va lancer » : une confirmation (nom + description) est désormais demandée avant l'exécution d'un workflow choisi dans le menu Workflows — jamais pour
/workflowdans le chat, où le choix par autocomplétion puis l'envoi du prompt sont déjà un geste explicite en 2 temps.
Ajouté (2026-08-22 — "/review_deck", langue anglaise par défaut à la 1re installation, drapeaux dessinés, liens cliquables dans À propos)
- Retour utilisateur — « j'aimerais mettre en place un "/review_slide" mais sur l'ensemble des slides » : nouvelle commande
/review_deck(chat) qui challenge et améliore TOUTES les slides du deck l'une après l'autre (services/slide_review_service.py::review_deck, réutilisereview_slide/edit_service.edit_by_prompt— une slide jugée déjà satisfaisante ou dont l'édition échoue est simplement ignorée, jamais bloquante pour les suivantes). Confirmation préalable (coût/temps proportionnels au nombre de slides), même aperçu avant/après et undo qu'un prompt normal. - Retour utilisateur — « il faudrait qu'une personne qui installe pour la première fois SlydeForge soit en langue anglaise » : une toute première exécution (jamais encore passée par l'onboarding, aucune préférence de langue déjà enregistrée) démarre désormais en anglais par défaut, au lieu du français — n'affecte jamais une installation déjà lancée au moins une fois, ni un choix de langue déjà fait explicitement.
- Retour utilisateur (capture) — « pour la sélection de la langue [...] il faudrait mettre des icônes image de drapeaux pour que ce soit plus visuel » : les indicateurs régionaux Unicode (🇫🇷/🇬🇧), qui ne s'affichaient que comme de simples badges texte "FR"/"GB" sur ce poste (rendu emoji couleur incomplet selon la version de Windows), sont remplacés par de vrais drapeaux dessinés (
ui/language_dialog.py::_flag_pixmap, QPainter — jamais un fichier image externe à empaqueter). - Retour utilisateur (capture) — « dans les liens dans about il faudrait les rendre cliquable » : le dialogue À propos passe en HTML (
<a href>) —QMessageBox.about()active alors automatiquement l'ouverture des liens dans le navigateur par défaut au clic, sans câblage supplémentaire.
Corrigé (2026-08-22 — erreurs de validation répétées sur "/review_slide", derniers textes français restants en interface anglaise)
- Retour utilisateur (bug réel, captures) — « lorsque je fais "/review_slide" j'ai encore des erreurs, ça ne fonctionne pas à chaque fois » (
Deck non conforme au schéma : ... 'fade' is not of type 'object',Additional properties are not allowed ('type' was unexpected)). Root cause :services/slide_review_service.pypeut proposer d'ajouter une transition de slide ou une animation d'élément, réinjectée en langage naturel dans le pipeline d'édition générique (generate/prompts.py::system_edit_patch/system_edit_patch_deck) — qui n'avait jusqu'ici AUCUNE consigne sur la forme JSON attendue pour ces deux champs (objet, jamais une chaîne nue ; noms de champkind/effectDIFFÉRENTS entre transition et animation, jamaistype). Documentation précise ajoutée (_ANIMATION_NOTE) aux deux prompts d'édition. - Retour utilisateur (capture) — « je suis en version anglaise et j'ai toujours des messages en français dans l'assistant » : plusieurs messages échappaient encore à la traduction — la revue de slide (« Revue de la slide N… », « Analyse de la slide… », « Génération de la version améliorée… »), les dialogues d'export/import de projet, les fenêtres de progression de mise à jour/import PowerPoint, le message d'échec générique (« Échec : … »), et le libellé « Temps prévu » (+ son infobulle) à côté des notes du présentateur.
Modifié (2026-08-22 — Confidentialité sort du dialogue IA, titre corrigé, confirmation de fermeture au démarrage)
- Retour utilisateur (capture) — « mettre le paramètre de confidentialité dans un menu à part depuis paramètres » : le réglage de partage de statistiques d'usage (introduit en 1.1.6) quitte l'onglet
Confidentialitédu dialogueParamètres > IA…pour sa propre popup dédiée (ui/privacy_dialog.py, même précédent queui/language_dialog.py), accessible depuisParamètres > Confidentialité…. - Retour utilisateur (capture) — « corriger le titre de la popup de paramétrage de l'IA [...] ce n'est pas un paramétrage général mais juste pour l'IA » : ce dialogue redevient réellement centré sur l'IA (backend, génération d'images, dictée) une fois la Confidentialité sortie — son titre passe de « Paramètres » à « Paramètres IA ».
- Retour utilisateur (capture) — sur l'écran de bienvenue (choix du 1er projet), cliquer sur la croix (X) fermait SlydeForge sans avertir que ça quittait l'application ENTIÈRE : une confirmation (« Fermer cette fenêtre quittera SlydeForge. Confirmer ? ») est désormais demandée avant de laisser passer la fermeture.
[1.1.6] - 2026-08-22
Ajouté (2026-08-22 — statistiques d'usage anonymes)
- Retour utilisateur — « ajouter [...] des informations (non nominative) [...] pour me rendre compte du niveau d'utilisation et du niveau de mise à jour » : SlydeForge signale désormais chaque lancement à une API du site (
services/telemetry_service.py, endpoint à créer côté serveur) — version installée, langue, système d'exploitation, et un identifiant aléatoire généré une seule fois (jamais un nom, un e-mail, ou toute autre donnée personnelle). Best-effort, jamais bloquant, jamais d'erreur visible. Désactivable via Paramètres > Confidentialité (dernier onglet, présent mais pas le plus visible — retour utilisateur explicite pour ne pas encourager la désactivation) ; une désactivation est respectée dès le lancement suivant.
Corrigé (2026-08-22 — installation laissée inconsistante par une mise à jour automatique)
- Retour utilisateur (bug réel, capture) — une mise à jour automatique a rendu
SlydeForge.exeinjoignable (aucun log, y compris le journal dédié%LOCALAPPDATA%\SlydeForge\logs\launcher.log), alors queslydeforge.batrestait utilisable directement. Root cause probable :SlydeForge.exe(venant de servir à lancerslydeforge.bat) était encore transitoirement verrouillé (antivirus qui le scanne juste après exécution) au moment précis oùapply_update_from_ziptentait de l'écraser — l'échec avortait toute la boucle d'extraction, laissant tout le code applicatif SUIVANT (ai/,core/,services/,ui/...) non mis à jour, etSlydeForge.exelui-même tronqué. Double correctif dansservices/update_service.py::apply_update_from_zip: (1) le lanceur.exeest désormais TOUJOURS écrit en DERNIER (jamais avant le code applicatif) ; (2) son écriture est retentée quelques fois avant d'abandonner, et un échec persistant sur CE seul fichier n'interrompt plus le reste de la mise à jour (journalisé, non bloquant — une mise à jour normale ultérieure le corrige de toute façon). Le comportement pour tout autre fichier (code applicatif) reste inchangé : un verrou y fait toujours échouer clairement toute la mise à jour, jamais un état à moitié appliqué masqué.
Modifié (2026-08-22 — e-mails de suivi de statut sur un retour partagé)
- Évolution côté site (
api/feedback.php) : un e-mail de suivi est désormais envoyé à l'utilisateur à chaque changement de statut de son retour côté admin (ouvert → en cours → traité/rejeté), dans la langue transmise à l'envoi initial (repli anglais si absente) — contrat de l'API inchangé, rien de nouveau côté app. Le message affiché après un partage réussi (chat et menu Retours) mentionne désormais ces e-mails de suivi, en plus de l'e-mail de vérification anti-robot déjà annoncé. - Corrigé au passage (bug réel) : ce message, dans le fil de chat, était un f-string brut jamais passé par
self.tr()— restait en français quelle que soit la langue de l'interface, contrairement à son équivalent du menu Retours qui, lui, était déjà correctement traduit.
Ajouté (2026-08-22 — choix « installer à la fermeture » pour la mise à jour publique)
- Retour utilisateur — « faire la vérification à l'ouverture et proposer à l'utilisateur de l'appliquer [...] de télécharger la mise à jour et de l'installer à la fermeture ou de la déployer tout de suite (avec redémarrage nécessaire) » : la popup de mise à jour publique (
offer_site_update, déjà déclenchée automatiquement au démarrage viaservices/update_service.py::check_site) propose désormais 3 choix — Installer maintenant (comportement inchangé : téléchargement, confirmation avec le changelog, application, puis proposition de redémarrage), Installer à la fermeture (téléchargement et confirmation immédiats, mais l'application du .zip est différée à la fermeture de SlydeForge —closeEvent, best-effort, jamais bloquant même en cas d'échec), et Plus tard. - Vérifié en conditions réelles contre
https://www.slydeforge.com/api/version-check.php(retourne bien la 1.1.5, correctement détectée comme plus récente qu'une 1.1.4) : le mécanisme de détection lui-même n'avait pas de défaut identifié — cette évolution ajoute le choix demandé sans corriger de régression trouvée sur la détection.
[1.1.5] - 2026-08-21
Ajouté (2026-08-21 — Ctrl+Entrée pour envoyer, redémarrage immédiat après changement de langue, partage de retour repensé)
- Retour utilisateur — « depuis le prompt si je fais Ctrl-Entrée alors il faut que ça envoie le prompt [...] faut que ça soit visuel dans le bouton » : Ctrl+Entrée envoie désormais le prompt en cours depuis la zone de saisie (Entrée seule reste réservée au saut de ligne) — le raccourci est visible directement dans le libellé du bouton Envoyer (Ctrl+Entrée), traduit comme le reste de l'interface, plutôt qu'une simple infobulle à survoler.
- Retour utilisateur — « lorsque l'on change de langue [...] faudrait proposer à l'utilisateur s'il souhaite redémarrer tout de suite [...] SlydeForge devra se relancer automatiquement » :
Paramètres > Langue…propose désormais de redémarrer immédiatement (Oui/Non) après un changement de langue, au lieu d'un simple rappel à faire soi-même — réutilise le même mécanisme de relance que la mise à jour applicative. - Retour utilisateur — « une case à cocher pour que l'utilisateur puisse partager les feedbacks [...] par défaut il faudrait demander validation à l'utilisateur [...] à chaque soumission [...] et avoir une case qui dit qu'il ne désire jamais les partager automatiquement » : chaque 👍/👎 déclenche maintenant une confirmation avant tout envoi à l'auteur, avec une case « ne plus jamais me demander » intégrée (silence complet tant qu'elle reste cochée) — remplace l'ancienne case « Partager mes futurs retours » à bascule unique. Si aucun e-mail valide n'est renseigné au moment de partager, il est demandé directement dans la foulée (plus besoin de passer par le menu Retours).
- Retour utilisateur — « pouvoir revenir sur un ancien feedback [...] qui n'a pas encore été partagé [...] et l'envoyer manuellement en cliquant sur un bouton » : le dialogue Retours utilisateurs permet désormais de sélectionner n'importe quel retour passé et de le partager manuellement (bouton dédié, e-mail toujours obligatoire), même avec le refus permanent activé — un clic explicite n'est, par définition, pas automatique. Un message de remerciement s'affiche à chaque partage réussi, automatique ou manuel.
Corrigé (2026-08-21 — réponses de l'assistant toujours en français malgré une interface anglaise, Ctrl+C intercepté par le canevas, retour utilisateur perdu silencieusement)
- Retour utilisateur — « les retours de l'assistant SlydeForge sont toujours en français lorsque j'ai défini la langue en anglais » : les prompts système du projet sont écrits en français (langue source du code) et un LLM suit naturellement leur langue par défaut pour tout texte libre qu'il produit — une consigne de langue explicite (
ai/language.py) est désormais injectée aux points précis où l'IA s'adresse directement à l'utilisateur (question de clarification en édition, revue de slide, défi conversationnel, libellés du wizard de mise en page, contrôle de lisibilité), sans jamais affecter le contenu de présentation lui-même (qui reste dans la langue de la demande de l'utilisateur). Corrigé au passage un bug direct : la revue de slide forçait « en français » en dur, quelle que soit la langue de l'interface. Les libellés de PHASE affichés pendant un traitement ("Préparation du contexte…", "Génération du patch…"...), émis par la couche services/generate volontairement sans dépendance à Qt, sont désormais eux aussi retraduits au point d'entrée Qt (ui/main_window.py::_tr_phase_emitter) sans casser cette frontière d'architecture. - Retour utilisateur — « pouvoir faire un CTRL-C directement depuis les messages du slydeforge assistant [...] aujourd'hui je suis obligé de faire clic droit -> copier » : root cause — le raccourci Ctrl+C de copie d'un élément de slide (menu Édition) était actif fenêtre entière par défaut et interceptait la touche avant qu'elle n'atteigne le copier-coller natif du journal de chat, même sans aucun élément sélectionné sur le canevas. Restreint au canevas et ses enfants : Ctrl+C copie l'élément sélectionné quand le canevas a le focus, et laisse le raccourci natif du widget focalisé s'appliquer partout ailleurs (texte du chat, champs de saisie…).
- Retour utilisateur (bug réel) — un retour disparaissait silencieusement (ni dans la liste locale, ni partagé, aucune trace visible) quand son enregistrement local échouait, le traitement continuant quand même jusqu'à proposer un partage pour un retour qui n'existait nulle part. Un échec d'enregistrement local est désormais signalé par un bandeau rouge dans le chat et bloque toute proposition de partage.
[1.1.4] - 2026-08-21
Ajouté (2026-08-19 — assistant d'installation natif Windows, FR/EN)
SlydeForge-Setup.exe(slydeforge_installer/setup.iss, Inno Setup) : assistant natif Windows (licence, choix du dossier —%LocalAppData%\Programs\SlydeForgepar défaut, sans droits admin —, barre de progression, entrée Programmes et fonctionnalités, désinstalleur), bilingue français/anglais. Vérifie/installe Python automatiquement si absent (winget en priorité — même patron queservices/video_installer.pypour ffmpeg —, repli sur un Python "embeddable" portable dans<dossier>\python\, déjà reconnu parslydeforge.bat), puis télécharge et déploie la dernière version publiée sur slydeforge.com (réutiliseservices/update_service.py, même mécanisme que la mise à jour automatique déjà existante) — cet installateur n'a donc pas besoin d'être reconstruit à chaque release. Un mode avancé permet de choisir les chartes/composants de workflow/exemples à déployer dès l'installation (réutiliseservices/theme_marketplace.py/workflow_marketplace.py/addon_marketplace.py, mêmes catalogues que le Marketplace intégré). La logique "intelligente" vit dans un petit worker Python caché (slydeforge_installer/worker/, compilé séparément parpackaging/build_installer_worker.py), invoqué en sous-processus par le script Inno Setup — zéro logique dupliquée en Pascal Script.services/update_service.py::fetch_latest()ajouté pour ce cas d'usage (variante decheck_site()sans comparaison à une version déjà installée, une 1re installation n'ayant rien à comparer).- Corrigé au passage (constaté en construisant le worker) :
packaging/build_exe.pyetpackaging/build_installer_worker.pyéchouaient tous deux à la construction PyInstaller — le paquet localworkflow/porte le même nom qu'une librairie PyPI tierce sans rapport pour laquelle_pyinstaller_hooks_contribembarque un hook incompatible (copy_metadata('workflow')).packaging/pyinstaller_hooks/hook-workflow.pyneutralise ce hook tiers pour les deux scripts.
Ajouté (2026-08-18 — 3 connecteurs IA "essai gratuit" sans carte bancaire)
- Trois nouveaux backends dans Paramètres > IA (badge 🆓, quota gratuit connu affiché sur chaque page, bouton de création de clé) pour tester SlydeForge sans backend payant : Google Gemini (AI Studio,
gemini-2.0-flash, recommandé par défaut dans l'accueil de premier lancement), Groq (llama-3.3-70b-versatile, endpoint compatible OpenAI) et OpenRouter (liste dynamique des modèles marqués:freevia/models, bouton « Rafraîchir »). Aucune clé fournie par défaut : chacun crée son propre compte gratuit (ai/settings.py::FREE_TIER_INFO). - Un dépassement de quota gratuit (HTTP 429) affiche désormais le quota connu et invite à réessayer plus tard ou changer de connecteur, au lieu du message générique existant.
- Chaque appel IA réussi (les 6 backends, payants et gratuits) est journalisé de façon uniforme (
ai/streaming.py::_log_call— fournisseur, modèle, tokens estimés, latence) pour le diagnostic.
Ajouté (2026-08-13 — marketplaces de chartes et de workflows d'exemple, min_app_version enforcé)
- Retour utilisateur — « cette mise à jour automatique devra être possible également avec les chartes et les exemples de workflows [...] gérer des mises à jour de version [...] on affichera toujours la dernière version mais la version permettra à SlydeForge de savoir qu'il existe une version plus récente » : le marketplace de composants de workflow (
services/addon_marketplace.py) est désormais accompagné de deux marketplaces analogues —services/theme_marketplace.py(cataloguehttps://slydeforge.com/themes/catalog.json, installe/met à jour une charte dans la bibliothèque locale) etservices/workflow_marketplace.py(cataloguehttps://slydeforge.com/workflows/catalog.json, installe/met à jour un workflow complet) — même contrat de catalogue, même vérification sha256, même suivi de version installée (une mise à jour d'un même composant ne crée jamais de doublon). Nouveaux dialoguesui/theme_marketplace_dialog.py/ui/workflow_marketplace_dialog.py, accessibles depuis Charte > Marketplace de chartes… et Workflows > Marketplace de composants…/Marketplace de workflows…. - Retour utilisateur (implicite au contrat
min_app_version) : ce champ, déjà présent dans le catalogue de composants, n'était jamais vérifié — un composant conçu pour une SlydeForge plus récente pouvait être installé silencieusement sur une version trop ancienne. Désormais vérifié partout (is_compatible) avant toute installation/mise à jour, avec un message clair indiquant la version requise ; l'entrée reste visible dans le catalogue mais le bouton Installer/Mettre à jour est désactivé.
[1.1.3] - 2026-08-13
Ajouté (2026-08-13 — présentation d'ouverture alignée, feedback vers slydeforge.com avec e-mail vérifié)
- Retour utilisateur (capture) — « en fond lorsque l'on vient d'ouvrir SlydeForge, c'est toujours l'ancienne présentation [...] mais quand je clique sur nouveau projet vierge j'ai celle que je souhaite que tu utilises dès l'ouverture » : le deck transitoire affiché avant même le sélecteur de projet utilise désormais exactement les mêmes gabarits riches de la charte SlydeForge que « Nouveau projet vierge » (
ui/main_window.py::MainWindow.__init__). - Retour utilisateur (capture) — « & axes » s'affichait « _axes » dans le menu Aide : un « & » simple est un marqueur de raccourci clavier pour Qt (avalé, souligne la lettre suivante) — corrigé en « && » (un « & » littéral).
- Retour utilisateur — « connecter [l'outil de retours locaux] à l'API du site slydeforge.com [...] il faut laisser le choix à l'utilisateur [de] partager ou non ses retours » : nouveau
services/site_feedback_service.py— les 👍/👎 + commentaires du chat peuvent désormais être partagés avec l'auteur viahttps://slydeforge.com/api/feedback.php, en complément (jamais en remplacement) de l'enregistrement local utilisé pour la synthèse IA. Désactivé par défaut (case à cocher dans le dialogue Retours utilisateurs). - Retour utilisateur — « ajout d'un système d'e-mail sur le feedback afin de pouvoir reconnaître l'utilisateur qui fait des retours et pouvoir dialoguer avec lui » : une adresse e-mail (persistée localement, saisie une seule fois) accompagne chaque retour partagé — vérifiée par un lien envoyé par le serveur avant d'être visible côté admin (protection anti-robot explicite de l'API). Après un envoi accepté (201 « pending_verification »), un message dans le fil de chat invite à vérifier sa boîte mail plutôt qu'un simple accusé de réception silencieux ; tout échec (réseau, e-mail invalide, quota…) reste, lui, silencieux comme le reste de ce mécanisme best-effort.