Commit Graph
709 Commits
Author SHA1 Message Date
bruno d20e623f0c fix(docker): build sans fichier VERSION pre-genere (docker compose build direct)
CI / lint (push) Failing after 23s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 32s
backend/VERSION est gitignore (genere par build.sh/CI) donc le COPY
echouait sur un clone propre. Remplace par le COPY backend/ existant +
ARG VERSION avec RUN fallback ; docker-compose.yml injecte VERSION via
build args. docker compose build --no-cache fonctionne desormais sans
build.sh.
2026-09-02 08:41:45 -04:00
bruno ef7a3ff1ed fix(watcher): auto-polling sur mounts reseau (NFS/SMB) pour maj temps reel des recents
CI / lint (push) Failing after 25s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 28s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
inotify ne voit pas les ecritures faites depuis d'autres clients NFS
(Obsidian sur Windows), donc index_updated n'etait jamais emis et la
section Recent du sidebar ne se rafraichissait pas. Detection du fstype
par vault via /proc/mounts -> PollingObserver (stat-based) sur mounts
reseau, Observer natif conserve sur les mounts locaux.
2026-09-02 08:16:21 -04:00
bruno 2115cb9085 chore: ignore desktop/checksums.txt (artefact regenere par publish_release.py)
CI / lint (push) Successful in 29s
CI / security (push) Successful in 26s
CI / test (push) Successful in 39s
CI / build (push) Successful in 13s
CI / e2e (push) Successful in 6m7s
2026-08-25 21:23:21 -04:00
bruno 5f981509ac fix(publish): user-agent navigateur pour contourner le blocage Cloudflare 1010 (writes Gitea)
CI / lint (push) Successful in 30s
CI / security (push) Successful in 22s
CI / test (push) Successful in 35s
CI / build (push) Successful in 13s
CI / e2e (push) Successful in 6m7s
2026-08-25 21:23:04 -04:00
bruno c9733b944a feat: preparation release v2.0.0 - guide dev/releases, script publication Gitea, build NSIS+MSI
CI / lint (push) Successful in 35s
CI / security (push) Successful in 22s
CI / test (push) Successful in 37s
CI / build (push) Successful in 13s
CI / e2e (push) Successful in 5m40s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
v2.0.0
2026-08-25 21:21:51 -04:00
bruno f6f08eef61 chore: ignore les scripts de debogage _*.py
CI / lint (push) Successful in 29s
CI / security (push) Successful in 27s
CI / test (push) Successful in 38s
CI / build (push) Successful in 21s
CI / e2e (push) Successful in 5m50s
2026-08-25 11:59:18 -04:00
bruno 67f469acfd docs: changelog 2.0.0/1.8.0 et registre de suivi des bugs
CI / lint (push) Successful in 29s
CI / security (push) Successful in 19s
CI / test (push) Successful in 34s
CI / build (push) Successful in 1m19s
CI / e2e (push) Successful in 5m56s
Ajoute les sections 2.0.0 Unreleased et 1.8.0 au CHANGELOG, ainsi que le registre de suivi des bugs et TODOs de correction.
2026-08-25 09:13:56 -04:00
bruno d6328e7b58 docs: README anglais + regles obligatoires tests/CI
Traduction complete du README en anglais et ajout de la section Tests et CI (regles obligatoires avant chaque push) dans les deux langues.
2026-08-25 09:13:41 -04:00
bruno 46e08abad1 chore(vault): reduit la fixture mermaid de test
La fixture contenait 22 diagrammes volumineux inutiles pour les tests ; un sous-ensemble representatif suffit.
2026-08-25 09:13:36 -04:00
bruno f6f4dad0ec test: script e2e local + commande npm test:e2e
Reproduit les conditions du job CI e2e (backend natif, auth desactivee, port 2029, projet chromium-desktop) pour valider localement avant chaque push.
2026-08-25 09:13:24 -04:00
bruno 077bfc0b6a fix(test): encoding utf-8 explicite pour read_text
Corrige les lectures de fichiers frontend qui echouent selon la locale par defaut.
2026-08-25 09:13:06 -04:00
bruno c6a1f8f54f fix(e2e): cible le selecteur .cp-input du palette
L'input de la palette porte la classe .cp-input et non l'id #cp-input. Le fallback de dispatch manuel du raccourci est supprime : la cause racine est traitee.
2026-08-25 09:12:57 -04:00
bruno 4038346de0 fix(e2e): reset panes - ouverture du palette via Control+Shift+Space + fallback dispatch
CI / lint (push) Successful in 28s
CI / security (push) Successful in 20s
CI / test (push) Successful in 33s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 5m37s
- le press Playwright Control+Shift+ (espace final) ne declenchait pas le handler de l app
2026-08-24 23:20:54 -04:00
bruno 14d0b6b7ee fix(e2e): reset panes - assertion stricte sur l ouverture du palette (diagnostic)
CI / lint (push) Successful in 29s
CI / security (push) Successful in 21s
CI / test (push) Successful in 34s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 5m58s
2026-08-24 23:09:43 -04:00
bruno d32ee1110b fix(e2e): dropdown autocomplete reste ferme apres une recherche (flag) + reset panes attend le rendu
CI / lint (push) Successful in 28s
CI / security (push) Successful in 21s
CI / test (push) Successful in 33s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 6m12s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- search.js : suppression par flag (jusqu a la prochaine frappe) au lieu d un timeout 500ms qui expirait avant le clic sur le bouton Forge

- split-view.spec.js : le test reset panes attend l apparition de la liste de commandes (debounce 150ms du palette) avant Entree
2026-08-24 22:58:18 -04:00
bruno b0a1685dda fix(e2e): reset panes - prefixe > pour chercher une commande dans le palette
CI / lint (push) Successful in 28s
CI / security (push) Successful in 21s
CI / test (push) Successful in 34s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 6m36s
- sans >, le palette cherche des fichiers (mode par defaut) et ne trouve jamais la commande Reinitialiser les panneaux
2026-08-24 22:44:10 -04:00
bruno a9540c5750 ci: relance - echec DNS transitoire du runner (lookup github.com)
CI / lint (push) Successful in 29s
CI / security (push) Successful in 22s
CI / test (push) Successful in 35s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 5m44s
2026-08-24 22:30:59 -04:00
bruno 9a834e04ab fix(split-view): le split cree un pane vide (sans copie ni transfert d onglet)
CI / lint (push) Successful in 29s
CI / security (push) Successful in 21s
CI / test (push) Successful in 38s
CI / build (push) Failing after 15s
CI / e2e (push) Skipped
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- la copie de l onglet actif etait dedupe (fichier deja ouvert dans le pane source) et le transfert clavier (200ms) vidait le pane source -> auto-collapse -> grid disparu

- comportement coherent avec le menu contextuel : pane vide, l utilisateur y glisse ses fichiers
2026-08-24 22:25:11 -04:00
bruno 8c9e881922 fix(e2e): derniers tests split-view + Forge - dropdown autocomplete, transferTab menu, drag natif
CI / lint (push) Successful in 29s
CI / security (push) Successful in 21s
CI / test (push) Successful in 33s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 6m35s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- search.js : le dropdown d autocomplete ne se rouvre plus 500ms apres un hide (la recherche le rouvrait et bloquait les clics toolbar - test Forge)

- ui.js + pane-manager.js : le split via menu contextuel ne transfert plus l onglet en synchrone (vidait le pane source -> auto-collapse -> grid disparu)

- split-view.spec.js : navigation clavier attend la copie asynchrone (setTimeout 150ms qui reactivait pane 0)

- split-view.spec.js : drag depuis l arbre via dragTo (drag natif HTML5)
2026-08-24 22:12:56 -04:00
bruno 16e8bbf811 fix(e2e): split-view - openFile sans reload (les onglets simple-pane ne sont pas restaures au chargement)
CI / lint (push) Successful in 32s
CI / security (push) Successful in 21s
CI / test (push) Successful in 33s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 7m45s
- un goto() entre deux openFile perd les onglets du singleton (PaneManager.init ne restaure que les splits >= 2 panes)

- expansion du vault seulement si le fichier n est pas deja visible
2026-08-24 21:58:14 -04:00
bruno 7b53f64249 fix(e2e): split-view - openFile en dblclick (onglet persistant, pas preview)
CI / lint (push) Successful in 29s
CI / security (push) Successful in 23s
CI / test (push) Successful in 34s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 9m8s
- le clic simple ouvre un preview qui remplace l onglet precedent (openPreview ferme l ancien preview)

- dblclick -> openPersistent : onglets cumulables (requis pour les tests multi-onglets)
2026-08-24 21:44:15 -04:00
bruno 4505fe77c4 fix(e2e): split-view - openFile ouvre via l arbre sidebar (TabManager/onglets)
CI / lint (push) Successful in 28s
CI / security (push) Successful in 21s
CI / test (push) Successful in 34s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 9m25s
- le deep-link #file= ouvre l ancien viewer sans onglets (#tab-bar absent)

- le clic sur un tree-item passe par TabManager.openPreview/openPersistent
2026-08-24 20:47:35 -04:00
bruno 37b059aa82 fix(e2e): split-view - openFile utilise le deep-link reel #file=Vault:Path
CI / lint (push) Successful in 29s
CI / security (push) Successful in 23s
CI / test (push) Successful in 33s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 15m2s
- l app lit #file= (avec :), pas #/file/ ; le helper naviguait vers un format inexistant
2026-08-24 20:30:55 -04:00
bruno 70cb9ca6a2 fix(e2e): recherche sur Entree + fixtures note1/note2 + init filtre saved searches
CI / lint (push) Successful in 29s
CI / security (push) Successful in 19s
CI / test (push) Successful in 33s
CI / build (push) Successful in 13s
CI / e2e (push) Failing after 16m5s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- obsigate.spec.ts : searchFor appuie sur Entree (la recherche se declenche au keydown Enter, l autocomplete s affiche pendant la frappe)

- test_vault : ajout note1.md et note2.md (requis par les tests split-view)

- viewer.js : initialise la barre de filtres saved searches meme quand la liste est vide (sinon clics sans effet)
2026-08-24 20:08:56 -04:00
bruno b812afabbc fix(ci): e2e - fixtures copiees dans le container (docker cp) + 2 tests obsolètes mis a jour
CI / lint (push) Successful in 27s
CI / security (push) Successful in 18s
CI / test (push) Successful in 34s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 24m15s
- ci.yml e2e : les bind mounts C:\dev\git\python\ObsiGate sont vides en docker-in-docker (chemin du job container inexistant sur l hote) -> docker create + docker cp des fixtures + docker start

- obsigate.spec.ts : placeholder de recherche attendu mis a jour (Rechercher dans toutes les vaults...)

- obsigate.spec.ts : theme par defaut accepte defaut-obsigate (moteur themes.js) en plus de dark (ui.js legacy)
2026-08-24 19:37:30 -04:00
bruno 62eabb2944 fix(ci): e2e - fixtures de test versionnees + acces via passerelle docker (dind)
CI / lint (push) Successful in 30s
CI / security (push) Successful in 19s
CI / test (push) Successful in 34s
CI / build (push) Successful in 11s
CI / e2e (push) Failing after 25m16s
- test_vault/ et test_dir/ : fixtures markdown pour les tests E2E Playwright (22 fichiers, .obsigate-backup ignore)

- ci.yml e2e : health check et BASE_URL via IP passerelle docker (localhost du job container ne voit pas le port publie sur l hote)

- ci.yml e2e : l etape Start ObsiGate echoue explicitement si l app n est pas joignable
2026-08-24 16:48:37 -04:00
bruno fdc0b5b15a fix(ci): job build docker - generation backend/VERSION avant docker build
CI / lint (push) Successful in 28s
CI / security (push) Successful in 19s
CI / test (push) Successful in 33s
CI / build (push) Successful in 1m17s
CI / e2e (push) Failing after 4m12s
- backend/VERSION est gitignore et genere par build.sh, mais le job build du CI ne le generait pas : docker build echouait avec /backend/VERSION: not found

fix(ci): job e2e - reparation de l etape Start ObsiGate (YAML imbrique casse, port 2029, nettoyage du container stale)
2026-08-24 16:34:43 -04:00
bruno 62e191abfc fix(ci): lint ruff 0.16.3 - imports tries, check explicite, removeprefix
CI / lint (push) Successful in 28s
CI / security (push) Successful in 18s
CI / test (push) Successful in 36s
CI / build (push) Failing after 12s
CI / e2e (push) Skipped
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- backend/main.py : split import csv / import io as csv_io (I001)

- backend/version.py : check=False explicite sur subprocess.run (PLW1510)

- backend/version.py : tag.removeprefix() au lieu du slice conditionnel (FURB188)

- verifie localement avec ruff 0.16.3 : All checks passed!
2026-08-24 16:28:28 -04:00
bruno 331c614330 feat(boot): écran de chargement inline + staging backend/frontend pour le bundle desktop
CI / lint (push) Failing after 16s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 18s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- frontend/index.html : splash #boot-splash 100% inline (CSS+JS), scripts CDN en defer pour ne pas bloquer le premier paint
- frontend/js/app.js : signale le boot terminé via __OBSIGATE_BOOTED (try/finally)
- desktop/src/main.rs : met à jour le statut du splash avant la redirection vers le backend
- ci: stage backend/ + frontend/ sous desktop/ avant tauri build (resources backend/** et frontend/**) dans desktop-build.yml et build-linux.sh
- desktop/gen/schemas/windows-schema.json : régénéré (permissions store/updater)
- docs: README, README.fr, ROADMAP
2026-08-24 15:50:49 -04:00
bruno 6da7fa6786 fix(wikilinks): supporte les ancres internes [[#Titre|Texte]] et corrige les IDs de titres
CI / lint (push) Failing after 19s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 23s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
- Ajoute la reconnaissance de la syntaxe Obsidian [[#Titre|Texte]] pour
  créer des liens d'ancre vers les titres du document courant.
- Corrige _heading_slugify pour ignorer les balises HTML et décoder les
  entités HTML (ex. &) avant de générer l'ID, évitant ainsi la
  pollution par les wikilinks placés dans les titres.
- Ajoute le style .wikilink-anchor et des tests couvrant ces cas.

Fixe le rendu du document TestDir/Agents IA - Panorama Complet 2026.md.
2026-08-13 15:24:52 -04:00
bruno c8d35b2ee6 fix(docs): corrige les ancres des liens internes avec caractères accentués
CI / lint (push) Failing after 2m59s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 29s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
Les ancres des tables des matières utilisaient des caractères accentués
qui ne correspondaient pas aux identifiants de titres générés par
ObsiGate (suppression des accents et normalisation des slugs).

Fichiers concernés :
- README.md
- docs/ANALYSE_REVIEW.md
- desktop/README.md
2026-08-13 12:53:26 -04:00
bruno ba73af8ced fix: CSP font-src blocks Excalidraw fonts from esm.sh
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 14s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
CSP directive 'font-src' only allowed self, data:, and fonts.gstatic.com.
Excalidraw loads its handwriting fonts (*.woff2) from esm.sh via
EXCALIDRAW_ASSET_PATH. All ~12 font files were blocked (blocked:csp)
→ Excalidraw fails to initialize → infinite 'Loading...' spinner.

Fix: added https://esm.sh to font-src directive.
2026-07-29 21:14:36 -04:00
bruno 185d603a94 fix: Excalidraw loading forever — ReactDOM.createRoot undefined
CI / lint (push) Failing after 21s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 17s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
Root cause: 'import ReactDOM from react-dom' resolves to the root
react-dom package which does NOT export createRoot in React 18.
createRoot lives in react-dom/client.

Changes:
- Changed import to 'react-dom/client' (line 109)
- Added error handling around the render call so loading spinner
  shows an error message instead of spinning forever on failures
2026-07-29 20:50:36 -04:00
bruno 9804cf9a6d feat(excalidraw): support .excalidraw.md (Obsidian plugin format) with lz-string decompression
CI / lint (push) Failing after 14s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 16:08:03 -04:00
bruno a4ea322c75 fix(excalidraw): send ready signal immediately (fix deadlock: iframe waited for init, parent waited for ready)
CI / lint (push) Failing after 10s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 14s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 13:06:47 -04:00
bruno 7e5cd85b8a fix(excalidraw): use esm.sh ?alias param to force React 18.3.1 across entire dependency tree
CI / lint (push) Failing after 10s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 11:45:09 -04:00
bruno 8c665fb568 fix(excalidraw): use import map to force React 18.3.1 for ALL modules including Excalidraw internals
CI / lint (push) Failing after 10s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 23s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 11:41:30 -04:00
bruno 7d8fa18201 fix(excalidraw): pin React 18.3.1 exact version (esm.sh was resolving to React 19)
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 11:32:15 -04:00
bruno b413ca9a0b chore: remove stray session files
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
2026-07-29 11:17:57 -04:00
bruno dfd8d5929c fix(excalidraw): fusion imports ESM en un seul module + CSP worker-src/blob:
CI / lint (push) Failing after 13s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 29s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
2026-07-29 11:17:06 -04:00
bruno 1b5319fde1 feat(excalidraw): support complet des fichiers .excalidraw (#78)
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
- Backend: ajout .excalidraw dans SUPPORTED_EXTENSIONS + squelette JSON creation
- Backend: détection is_excalidraw dans api_file() + FileContentResponse
- Frontend: icône pen-tool dans EXT_ICONS
- Frontend: ajout dans la modale de création (ui.js)
- Frontend: excalidraw-editor.html (iframe autonome, React+Excalidraw via esm.sh)
- Frontend: excalidraw-viewer.js (postMessage, auto-save 2s, thème)
- Frontend: dispatch dans viewer.js (renderFile)
- Tests: 6 tests (détection, création squelette, fallback, tree, roundtrip)
- 359/359 tests passent
2026-07-29 10:55:00 -04:00
bruno ff38dd086e docs(roadmap): #78 — ajout création .excalidraw (modale, menu contextuel, squelette JSON)
CI / lint (push) Failing after 10s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 19s
2026-07-29 10:44:40 -04:00
bruno 7b02bc9ab4 docs(roadmap): ajout #78 — Éditeur Excalidraw (.excalidraw)
CI / lint (push) Failing after 11s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 32s
2026-07-29 10:38:49 -04:00
bruno 380ca29f2c fix(dragdrop): unify tree+tab drop zone logic, fix cross-pane transfer
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 18s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
Three fixes for drag-and-drop in split view (#75):

1. Tree drag-to-split: edge zone detection now runs BEFORE the tree/tab
   dispatch, so dragging a sidebar file to the right/bottom edge of a
   single pane correctly creates a split and opens the file in the new
   pane (was: tree check returned early before edge zone logic).

2. Cross-pane transfer consistency: transferTab() now tracks pane count
   before the transfer — if closePane() fires inside transferTabTo()
   (source pane becomes empty), the DOM is rebuilt and the original
   targetTm reference is stale. After close, re-lookup the tab manager
   that actually holds the transferred tab before _renderTabs()+activate.

3. dragdrop.js flicker: onDragLeave() now checks relatedTarget instead
   of unconditionally clearing highlights on every child boundary.
2026-07-29 10:20:52 -04:00
bruno 7389d26520 fix(markdown): convert single newlines to hard breaks matching Obsidian behavior
CI / lint (push) Failing after 36s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 14s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
Add _normalize_line_breaks() pre-processor that converts single \n to
two-spaces+\n (hard break) before mistune rendering, while protecting
fenced code blocks. This matches Obsidian's default 'Strict Line Breaks
= off' behavior where standalone lines render on separate rows instead
of merging into a single paragraph.
2026-07-29 09:56:51 -04:00
bruno 298ea082c0 fix: split view — plus de panneaux vides, transfert auto de l'onglet
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 14s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
- _hasAnyTab(): empêche split si aucun onglet ouvert (tous les points d'entrée)
- _copyActiveTabToNewPane(): copie l'onglet actif dans le nouveau panneau
- Menu contextuel: l'onglet cliqué-droit est transféré dans le nouveau panneau
- Raccourci clavier Ctrl+Alt+\: transfert l'onglet actif dans le nouveau panneau
- Boutons split: vérifient _hasAnyTab() avant d'agir
- Singleton ui.js: même comportement (split + transfert de l'onglet)
2026-07-28 13:10:57 -04:00
bruno ffefe4eb16 fix: grille CSS grid-row/column explicites pour 2/3/4 panneaux
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
Refonte complète du layout grid:
- _computePanePositions: positions explicites (row/col/span) selon n et layout
- _createPaneAt: grid-row/grid-column explicites sur chaque .pane-container
- _addAllResizeHandles: handles placés aux bonnes positions grid
- _rebuildResizeHandles: nettoie et recrée les handles après add/remove
- closePane: repositionne les panneaux restants + rebuild handles
- 3 panneaux horizontal: 2 en haut, 1 pleine largeur en bas
- 3 panneaux vertical: 1 pleine hauteur à gauche, 2 à droite
- 4 panneaux: grille 2×2

Fix aussi: _addPane avec positions explicites + rebuild handles
2026-07-28 11:08:08 -04:00
bruno 257e35198d fix: split view — supprimé display:none qui cachait les panneaux inactifs
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 13s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
Problème: le lazy rendering masquait le contenu du panneau non-sélectionné
→ split view devenait inutile (un seul panneau visible à la fois)
→ Solution: supprimé display:none dans setActivePane, tous les panneaux visibles

Test mis à jour: test_panes_remain_visible_when_inactive
2026-07-28 10:53:27 -04:00
bruno 38569c2f9f test: I2 + I3 — 46 tests d'intégration + suite E2E Playwright
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 16s
I2 (test_pane_manager.py): 46 nouveaux tests
  - Module structure: 10 tests (exports, methods, factory, max panes)
  - Data flow: 8 tests (drag format, tree format, JSON, migration, localStorage)
  - DOM flow: 7 tests (grid, IDs, lazy render, collapse, empty pane, transfer)
  - Keyboard: 6 tests (all shortcuts + preventDefault counts)
  - Context menu: 4 tests (split, move-to, close actions)
  - CSS: 7 tests (grid, container, resize, drop zone, buttons, responsive)
  - HTML/App: 5 tests (wrapper, tab-bar, modules, imports)
  - Palette: 3 tests (commands, reset, category)
  - Editor lock: 2 tests
  - Dashboard: 1 test (TabManager vs openFile)

I3 (tests/e2e/): suite Playwright complète
  - package.json, playwright.config.js, split-view.spec.js
  - 12 test specs: basic ops, tab drag, tree drag, persistence, regression, keyboard nav
  - Exécution: cd tests/e2e && npm install && npx playwright test

Total: 353 tests passent (307 + 46)
2026-07-28 10:27:15 -04:00
bruno 66d9c17985 chore: ROADMAP #75 — sections synchronisées (C1b/D2/E3/E4/G3 cochées)
CI / lint (push) Failing after 9s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Successful in 12s
2026-07-28 10:20:26 -04:00