fix(version): BUG-047 la version suit chaque livraison (source unique VERSION + bump SemVer automatique)
CI / lint (push) Successful in 1m27s
CI / security (push) Successful in 57s
CI / test (push) Successful in 3m11s
CI / build (push) Successful in 54s
CI / e2e (push) Successful in 10m59s

VERSION (racine) devient la source unique de verite MAJEUR.MINEUR.CORRECTIF, incrementee a chaque commit par le hook prepare-commit-msg (BREAKING -> majeur, feat -> mineur, sinon correctif) ; post-commit rattache les fichiers derives au commit et cree le tag vX.Y.Z, publie au push (push.followTags). Tous les derives sont resynchronises : package.json, desktop Tauri, README.md/README.fr.md, docs/ROADMAP.md, CHANGELOG.md. Backend, image Docker et desktop lisent le meme fichier (plus de numero code en dur). Outils : scripts/bump_version.py, scripts/install-hooks.sh. Tests : tests/test_version.py (46, garde-fou de coherence globale).
This commit is contained in:
2026-09-16 11:02:47 -04:00
parent 3261917d62
commit d98c0c2f33
24 changed files with 1423 additions and 249 deletions
+33 -5
View File
@@ -5,13 +5,17 @@ Toutes les modifications notables d'ObsiGate sont documentées dans ce fichier.
Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
> **En cours de développement** : les changements non publiés sont dans la section
> [Unreleased](#unreleased). La dernière version publiée est **2.2.1**.
> **En cours de développement** : les changements à venir sont listés dans la section
> [Unreleased](#unreleased). La dernière version livrée est **2.3.0**.
---
## [Unreleased]
---
## [2.3.0] — 2026-09-16
### Ajouté
- **#89 Drag & Drop complet de fichiers/dossiers & intégration Assistant IA** — solution
@@ -87,9 +91,13 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
lecture (bandeau, métadonnées, tags et contenu). L'overlay reste monté mais neutralisé
(transparent, sans capture des clics, `z-index` conservé) car le ruban d'édition mobile y est
ancré. Retour à la lecture par ✓ (sauvegarde), ✕, Échap ou l'ouverture d'un autre fichier —
un garde-fou dans `renderFile()` libère proprement la session (destruction CodeMirror/Yjs,
retrait de l'iframe Forge) ; l'overlay n'est conservé qu'en repli, quand la cible n'est pas le
document affiché (ex. fichier créé depuis la palette). Conséquence directe : l'éditeur ne
trois garde-fous libèrent proprement la session (destruction CodeMirror/Yjs, retrait de
l'iframe Forge) avant qu'un rendu concurrent n'efface son DOM : `renderFile()`, l'activation
d'onglet (`TabManager.activate`, `PaneTabManager.activate`, qui vident la zone avant de
rendre) et l'événement SSE `index_updated` (un fichier modifié hors de l'app recharge le
**tampon de l'éditeur** au lieu de re-rendre la vue lecture). L'overlay n'est conservé qu'en
repli, quand la cible n'est pas le document affiché (ex. fichier créé depuis la palette).
Conséquence directe : l'éditeur ne
recouvre plus le panneau de l'assistant IA, qui peut donc mettre le document à jour **sous
les yeux de l'utilisateur** — `app_context.editing` annonce au modèle le document en cours
d'édition (et sa surface), et toute écriture d'outil (`edit_file`, `append_to_file`,
@@ -101,6 +109,26 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
Tests : `tests/frontend/editor-inline.test.mjs` (19), `tests/test_bookslm.py::TestGeneralPrompt` (3 nouveaux).
### Corrigé
- **BUG-047 — La version affichée ne suivait pas les livraisons** : la version
provenait du **dernier tag git**, or aucun tag n'était créé lors des livraisons
→ l'application restait bloquée sur `2.2.1` alors que 66 commits avaient été
livrés (et les numéros codés en dur divergeaient : `package.json` 1.0.0,
desktop Tauri 2.0.0, `Dockerfile` 2.2.1, README 1.7.0). Le fichier **`VERSION`
(racine du dépôt) devient la source unique de vérité** (`MAJEUR.MINEUR.CORRECTIF`),
incrémenté **automatiquement à chaque commit** par le hook versionné
`.githooks/prepare-commit-msg` (`!:`/`BREAKING CHANGE` → MAJEUR, `feat` → MINEUR, sinon
CORRECTIF) ; `.githooks/post-commit` crée le tag `vX.Y.Z` et `push.followTags`
le publie à chaque push. Tous les dérivés sont resynchronisés dans le même
commit : `package.json`, desktop Tauri (`tauri.conf.json`, `Cargo.toml`,
`Cargo.lock`), `docs/ROADMAP.md`, `README.md`/`README.fr.md` et rotation de
`CHANGELOG.md` (`[Unreleased]` → `[X.Y.Z] — date`). Le backend
(`backend/version.py`), l'image Docker (`COPY VERSION`) et le desktop Tauri
lisent ce même fichier : plus aucun numéro codé en dur dans le pipeline.
Outils : `scripts/bump_version.py` (+ `scripts/bump_version.sh`),
`scripts/install-hooks.sh`. Tests : `tests/test_version.py`, dont un garde-fou
de cohérence globale (VERSION ↔ package.json ↔ desktop ↔ CHANGELOG ↔ ROADMAP ↔
README). Vérifié : `curl /api/health` sur l'instance de test → `2.3.0`.
- **BUG-045 — Double barre de défilement dans l'éditeur « Editer »** : sur les
documents longs, `#editor-body` (qui gardait `overflow:auto`) et le scroller
CodeMirror débordaient simultanément — la barre d'outils IA empilée sous un