bruno
38f39a10ae
feat: tri, filtre, recherche et export CSV dans la visionneuse XLSX #153
...
A13 (affichage seul, le classeur n'est jamais réécrit) : clic sur un
en-tête pour trier la colonne (asc/desc, numérique si toutes les valeurs
le sont, localeCompare fr sinon — les cellules modifiées suivent leur
ligne) ; l'unique champ de recherche filtre les lignes ET surligne les
occurrences (marque <mark>, navigation ↑/↓/Entrée, compteur i18n,
insensible à la casse par défaut, bouton Aa) ; bouton « Réinitialiser »
qui re-rend le fichier (vérité serveur) ; export CSV de la feuille
visible (BOM UTF-8, échappement ;/" et retrait des ombres de valeurs
calculées).
Vérifié : xlsx-viewer.test.mjs 30/30 (5 nouveaux) + contre-preuves
(tri neutralisé -> 1 échec, filtre neutralisé -> 1 échec), validate-imports,
i18n parity (xlsx.find_*, xlsx.sort_*, xlsx.csv_export).
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-28 12:28:09 -04:00
bruno
48e023ba25
feat: navigation clavier et barre de formule dans la visionneuse XLSX #153
...
A7 : barre de formule sous la barre d'outils (nom de cellule active A1 +
miroir du contenu, édition live, Entrée valide, Échap annule puis
refocalise) ; flèches et Tab déplacent la cellule active dans les 4
directions (Shift inverse Tab), outline persistant sur la cellule active
quand le focus passe à la barre ; Maj+Entrée ne valide plus (réservé au
multiligne A7+). td.tabIndex=0 pour la focalisation clavier.
Vérifié : xlsx-viewer.test.mjs 25/25 (6 nouveaux), E2E 9/9 (barre +
flèches + Échap sur fixture réelle), validate-imports, i18n parity
(xlsx.formula_bar_placeholder, xlsx.active_cell).
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-28 12:18:24 -04:00
bruno
011ec84f23
feat: outils IA de lecture et d'edition des classeurs existants #153
...
A6 : list_xlsx_sheets (noms + dimensions + truncated), xlsx_to_markdown
(table bornee 100x20 pour le contexte LLM), update_xlsx_cells et
append_xlsx_rows (WRITE + confirmation, via edit_xlsx_cells : verrou,
ecriture atomique, neutralisation des formules, 409 lossy). Les lignes
ajoutees sont coercees comme dans le viewer (A10). Labels de step
ai.step.xlsx_* FR/EN ; update_xlsx_cells/append_xlsx_rows branches sur
MUTATING_TOOLS et FILE_WRITE_TOOLS (refresh viewer via obsigate:file-written).
Tests : test_spreadsheet_tools.py 17 (risque, confirmation, persistance,
garde formule heritee, coercion) + contre-preuve (cells vide -> 2 echecs).
ruff 0, mypy 0, i18n parity, validate-imports.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-28 12:05:16 -04:00
bruno
472ea9d309
feat: chargement à la demande des lignes cachées des tableurs #153
...
CI / lint (push) Successful in 2m24s
CI / security (push) Failing after 1m39s
CI / test (push) Successful in 4m0s
CI / build (push) Successful in 1m37s
CI / e2e (push) Successful in 15m34s
A9bis : sous une feuille tronquée, un pied de page « N lignes affichées
sur M · Charger la suite » fetch la fenêtre suivante (limit=500) au clic
ou à l'approche du bas du tableau (sentinelle de défilement, marge 120px).
Les lignes ajoutées passent par le même pipeline d'édition que le rendu
initial (setupCell factorisé) : éditables et sauvegardables immédiatement.
Fetch échoué → bouton restauré (retry) + toast ; feuille complète → pied
de page masqué (class done).
Vérifié : xlsx-viewer.test.mjs 19/19 (5 nouveaux, contre-preuve
wireLazyRows désactivé → 5 échecs), E2E 8/8 (A520 visible et éditable
après clic), validate-imports 40 modules, unit.test.mjs 12/12, i18n parity.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-28 11:52:42 -04:00
bruno
6ba04c4381
feat: troncature annoncee et lecture par fenetres des tableurs #153
...
CI / lint (push) Successful in 2m29s
CI / security (push) Failing after 1m39s
CI / test (push) Successful in 4m1s
CI / build (push) Successful in 1m37s
CI / e2e (push) Successful in 14m47s
- BUG-090 (#153 A8) : render_sheets() expose total_rows/total_cols,
max_rows/max_cols et truncated ; la visionneuse affiche un bandeau
« Feuille tronquée » (i18n FR/EN) au lieu de couper en silence, et la
ligne d'en-têtes devient sticky (top:auto sur les numéros de ligne).
- #153 A9 : GET /api/file/{vault}/xlsx/sheet?sheet&offset&limit sert une
fenêtre de 1 à 1000 lignes avec les vraies coordonnées A1, has_more de
pagination et valeurs calculées A12 ; 404 feuille inconnue, 415 non-xlsx.
- Tests : TestXlsxTruncationNotice (4) + TestXlsxSheetWindow (11) avec
contre-preuves, xlsx-viewer.test.mjs 14/14, E2E 7/7 (fixture
sample-xlsx-large.xlsx 520 lignes), suite 1417 passed / 6 skipped,
ruff/mypy 0, i18n parity.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-28 10:38:24 -04:00
bruno
06f8e63d06
feat: tableurs indexables, saisie typée et valeurs calculées #153
...
Les tableurs étaient invisibles à la recherche, chaque saisie devenait
du texte, et une formule n'affichait que sa formule.
- A5 : extract_indexable_text() indexe les noms de feuilles et les 20
premières lignes (plafond 5 k caractères) pour le TF-IDF et la
recherche sémantique. Un mot tapé dans une cellule rend le fichier
trouvable ; un classeur chiffré s'indexe par son seul nom.
- A10 : la saisie est typée comme dans Excel — booléens
(TRUE/FAUX/OUI/NON) et dates FR JJ/MM/AAAA en ordre jour-first, donc
01/02/2026 est le 1er février. Une saisie ressemblant à une formule
n'est jamais convertie (BUG-088 préservé).
- A12 : la valeur calculée par Excel s'affiche sous la formule, via une
2e lecture data_only=True faite seulement si l'archive contient un
<v>. Info-bulle traduite FR/EN, aucun texte d'interface côté backend.
- BUG-089 : un reindex manuel ne reconstruisait pas l'index inversé, et
backend/search.py lisait l'index via un import par valeur — après un
rechargement du module, la recherche écrivait dans un dict périmé.
Contre-preuves vérifiées pour A5, A10 et A12 (neutralisation de chaque
fonction → échec des tests concernés). Tests : 1402 pytest, 10 JSDOM,
4 E2E, suite E2E complète verte, ruff/mypy 0.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-27 22:43:24 -04:00
bruno
31d4616baf
feat: garde-fous d'écriture des classeurs Excel #153 (P0)
...
L'édition d'un .xlsx pouvait détruire une partie du classeur, le
concurrencer en silence, ou diffuser une injection de formule.
- BUG-085 : inspect_workbook() détecte ce qu'un round-trip openpyxl perd
(valeurs calculées en cache, slicers, contrôles, connexions, custom
XML, signature, commentaires enrichis, macros) → xlsx_lossy_features
exposé en lecture, bandeau FR/EN, et 409 xlsx_lossy_content sans
`force` (confirmation explicite puis reprise). Périmètre réel
revalidé : graphiques, images et TCD survivent au round-trip.
- BUG-086 : écriture atomique (fichier .tmp + os.replace) : un plantage
ne peut plus tronquer le classeur, le backup reste intact.
- BUG-087 : verrou par fichier autour du read-modify-write (timeout 15 s,
409 conflict) ; endpoint xlsx/save devenu synchrone pour que
l'attente s'exécute dans le threadpool.
- BUG-088 : une saisie en '=' ou '@' est stockée en texte, sauf opt-in
`allow_formula` ou le bouton f(x) de la visionneuse. Le handler
ServiceError expose désormais code + details, que api() propage.
- BUG-084 : la suppression d'une vault purge enfin l'index inversé
(documents fantômes qui continuaient de matcher) et is_stale() devient
is_ready(), le nom étant trompeur (la staleness n'existe plus).
Tests : 1390 pytest, 10 JSDOM (xlsx-viewer.test.mjs, branché au CI),
3 E2E Playwright, suite E2E complète verte, ruff/mypy 0.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <[email protected] >
2026-09-27 20:39:12 -04:00
bruno
4c4b1222d5
chore: ignore les diagrammes E2E générés (excalidraw)
CI / lint (push) Successful in 2m23s
CI / security (push) Failing after 1m48s
CI / test (push) Successful in 3m49s
CI / build (push) Successful in 2m28s
CI / e2e (push) Successful in 14m5s
2026-09-27 14:46:09 -04:00
bruno
a3973b981c
securite: #87 T6-T8 fin dette — deps qualifiées, semgrep, Secure auto, CORS
2026-09-27 12:43:31 -04:00
bruno
b6e2029770
fix: E2E node-direct, timeouts réalistes 25/30 min (complément BUG-080)
CI / lint (push) Successful in 2m22s
CI / security (push) Successful in 1m37s
CI / test (push) Successful in 4m48s
CI / build (push) Successful in 1m33s
CI / e2e (push) Successful in 14m3s
2026-09-27 11:28:35 -04:00
bruno
6b878caff3
securite: #87 T5c script-src sans unsafe-inline (nonces T5b)
CI / lint (push) Successful in 2m18s
CI / security (push) Successful in 1m37s
CI / test (push) Successful in 4m32s
CI / build (push) Successful in 1m34s
CI / e2e (push) Successful in 14m22s
2026-09-27 10:36:00 -04:00
bruno
e9b7a317c1
fix: mfa/status 200 auth désactivée (garde anonymous) BUG-081 + clôture BUG-080/082/083
2026-09-27 10:35:33 -04:00
bruno
14b8032635
fix: CI lint — config-ai-keys.test.mjs rejoint l'étape JSDOM (complément BUG-082)
CI / security (push) Successful in 1m37s
CI / lint (push) Successful in 2m18s
CI / test (push) Successful in 4m8s
CI / build (push) Successful in 1m38s
CI / e2e (push) Successful in 14m28s
2026-09-27 09:44:18 -04:00
bruno
7dfe26c83d
fix: CI security — echo pip-audit sans dièse (runner Act) BUG-083
CI / lint (push) Failing after 1m50s
CI / build (push) Skipped
CI / security (push) Successful in 1m37s
2026-09-27 09:37:34 -04:00
bruno
24229316c7
fix: CI lint — upload.test.mjs rejoint l'étape JSDOM (jsdom) BUG-082
CI / lint (push) Failing after 1m30s
CI / build (push) Skipped
CI / security (push) Failing after 1m33s
2026-09-27 09:23:51 -04:00
bruno
7d70e0fb75
fix: harnais E2E local anti-blocage BUG-080
CI / lint (push) Failing after 1m51s
CI / build (push) Skipped
CI / security (push) Failing after 1m33s
2026-09-27 09:08:58 -04:00
bruno
d70ecd0968
securite: #87 T5b nonces CSP prets pour bascule (sans changement)
2026-09-26 22:44:12 -04:00
bruno
36a4030c09
securite: #87 T5a supprime 16 handlers inline au profit de listeners (CSP inchangee)
2026-09-26 22:32:01 -04:00
bruno
330462e7a5
docs: #87 T4 consigne resultats E2E locaux (108/108 desktop, 10/10 mobiles cibles)
2026-09-26 22:22:31 -04:00
bruno
922dfa2e79
test: #87 T4 E2E XSS partage et lecteur + script serveur E2E avec progression
2026-09-26 21:46:16 -04:00
bruno
34fce932cb
securite: #87 T3 cookies Secure centralises + CORS atteste (defaut inchange)
2026-09-26 18:37:19 -04:00
bruno
18b1e13f34
test: #87 T2 durcissement concurrence users.json et budget temps regex
2026-09-26 18:34:06 -04:00
bruno
7bee4a237d
ci: #87 T1 bandit et npm audit bloquants, 5 suites frontend au CI
2026-09-26 18:30:04 -04:00
bruno
d6cca2b1af
feat: #85 T10 persistance etat (verrous stores, ratelimit SQLite) et cloture refonte
2026-09-26 18:10:10 -04:00
bruno
58312e64da
refactor: #85 T9 extrait realtime et render vers modules dedies (comportement inchange)
2026-09-26 16:59:25 -04:00
bruno
3b0927a8c9
refactor: #85 T8 extrait vaults-history-conflicts vers backend/routers (comportement inchange)
2026-09-26 14:46:55 -04:00
bruno
6e527c371d
refactor: #85 T7 extrait le domaine config vers backend/routers (comportement inchange)
2026-09-26 14:33:40 -04:00
bruno
6cccdc1f34
refactor: #85 T6c extrait media-pdf-export vers backend/routers (comportement inchange)
2026-09-26 14:06:52 -04:00
bruno
0abc17e9f2
refactor: #85 T6b extrait mutations fichiers-dossiers vers backend/routers (comportement inchange)
2026-09-26 13:51:36 -04:00
bruno
b83d8dacdf
refactor: #85 T6a extrait lecture fichiers vers backend/routers (comportement inchange)
2026-09-26 13:43:53 -04:00
bruno
dadc055429
refactor: #85 T5 extrait le domaine search vers backend/routers + executor partage (comportement inchange)
2026-09-26 13:14:31 -04:00
bruno
750114a923
refactor: #85 T4 extrait le domaine backups vers backend/routers + sse partage (comportement inchange)
2026-09-26 13:06:45 -04:00
bruno
83a81da319
refactor: #85 T3 extrait le domaine sharing vers backend/routers (comportement inchange)
2026-09-26 12:51:06 -04:00
bruno
3eb0256127
refactor: #85 T2 extrait le CRUD webhooks vers backend/routers (comportement inchange)
2026-09-26 12:43:57 -04:00
bruno
9d8b3cc854
refactor: #85 T1 extrait le domaine health vers backend/routers (comportement inchange)
2026-09-26 12:36:49 -04:00
bruno
0ab402aa73
docs: roadmap priorise dette et securite #85 #87 ( #77 non signe, #73 reporte)
CI / lint (push) Successful in 2m13s
CI / security (push) Successful in 1m34s
CI / test (push) Successful in 4m9s
CI / build (push) Successful in 1m31s
CI / e2e (push) Successful in 14m17s
2026-09-26 11:55:32 -04:00
bruno
c36c299466
docs: #152 — aligne changelog et roadmap sur la version livrée 2.27.0
...
Fusionne la section 2.26.0 (jamais publiée) dans 2.27.0 et corrige la ligne
index de la roadmap ; suppression du tag local v2.26.0.
2026-09-25 20:32:14 -04:00
bruno
8611416670
feat: #152 viewer XLSX — affichage multi-feuilles, édition des cellules et téléchargement des .xlsx
...
- backend/xlsx_reader.py : rend openpyxl en tableaux HTML (plafond 500x40 par feuille)
- PUT /api/file/{vault}/xlsx/save : service edit_xlsx_cells (backup avant écriture, refs A1 validées)
- frontend : renderXlsxViewer (onglets, contenteditable, sauvegarde par feuille)
- docs : CHANGELOG [Unreleased], Roadmap index #152 , archive, README FR/EN, exemple OpenAPI
2026-09-25 20:30:45 -04:00
bruno
e20fd6bf97
fix: /api/diagnostics 500 « dictionary changed size during iteration » — snapshot des dicts avant itération BUG-079
CI / lint (push) Successful in 2m3s
CI / security (push) Successful in 1m27s
CI / test (push) Successful in 4m22s
CI / build (push) Successful in 1m22s
CI / e2e (push) Successful in 13m36s
2026-09-24 17:13:40 -04:00
bruno
943005328c
feat: barre d'outils de lecture epinglee, coloration syntaxique des fichiers de code et avatars predefinis ( #115 , #117 , BUG-078)
CI / lint (push) Successful in 2m5s
CI / security (push) Successful in 1m27s
CI / test (push) Successful in 4m10s
CI / build (push) Successful in 1m23s
CI / e2e (push) Successful in 13m55s
2026-09-24 16:21:45 -04:00
bruno
e1842043d8
feat: assistant IA — approbation groupee des actions, bloc d'etapes, refresh UI et bouton Stop (BUG-074, BUG-075, BUG-076, BUG-077)
CI / lint (push) Successful in 2m1s
CI / security (push) Successful in 1m25s
CI / test (push) Successful in 4m19s
CI / build (push) Successful in 1m26s
CI / e2e (push) Successful in 13m38s
2026-09-24 10:05:32 -04:00
bruno
9fb094f505
feat: refonte mobile de la section Configurations #114
CI / lint (push) Successful in 2m1s
CI / security (push) Successful in 1m26s
CI / test (push) Successful in 4m50s
CI / build (push) Successful in 1m22s
CI / e2e (push) Successful in 15m34s
2026-09-24 08:43:18 -04:00
bruno
d142049216
fix: degagement mobile sous la barre de navigation du bas (clearance retargetee .main-body) BUG-073
CI / lint (push) Successful in 1m59s
CI / security (push) Successful in 1m26s
CI / test (push) Successful in 3m41s
CI / build (push) Successful in 1m21s
CI / e2e (push) Successful in 14m0s
2026-09-23 23:36:35 -04:00
bruno
33fe1a3439
feat: ordre naturel des sections Configurations et avatar utilisateur #113
CI / lint (push) Successful in 1m59s
CI / security (push) Successful in 1m28s
CI / test (push) Successful in 4m14s
CI / build (push) Successful in 1m20s
CI / e2e (push) Successful in 13m43s
2026-09-23 22:18:29 -04:00
bruno
a726ad8511
feat: en-tete allege, compte utilisateur en sidebar et pellicule d'images defilable (molette + fleches) #112
CI / lint (push) Successful in 1m59s
CI / security (push) Successful in 1m29s
CI / test (push) Successful in 4m59s
CI / build (push) Successful in 1m48s
CI / e2e (push) Successful in 13m49s
2026-09-23 21:06:41 -04:00
bruno
b926f01b85
feat: visionneuse d'images - navigation fluide, image ajustee au cadre, fleches laterales et pellicule persistante #111
CI / lint (push) Successful in 2m2s
CI / security (push) Successful in 1m23s
CI / test (push) Successful in 4m23s
CI / build (push) Successful in 1m19s
CI / e2e (push) Successful in 13m27s
2026-09-23 14:37:41 -04:00
bruno
8264e7ffae
fix: conserver plein ecran et panneau metadonnees dans la visionneuse d'images (sidebar droite) + lanceur E2E Windows BUG-072
CI / lint (push) Successful in 2m1s
CI / security (push) Successful in 1m23s
CI / test (push) Successful in 4m27s
CI / build (push) Successful in 1m19s
CI / e2e (push) Successful in 17m45s
2026-09-23 13:43:47 -04:00
bruno
80852374a8
fix: positionnement lecteur media (mobile/desktop) et drag libre de la mini-video #110
CI / lint (push) Successful in 2m0s
CI / security (push) Successful in 1m22s
CI / test (push) Successful in 4m36s
CI / build (push) Successful in 1m18s
CI / e2e (push) Successful in 13m7s
2026-09-23 11:42:23 -04:00
bruno
e3c6789776
feat: lecteur média persistant Now Playing (dock audio, mini-vidéo PiP, Media Session, mobile) #110
CI / lint (push) Successful in 2m5s
CI / security (push) Successful in 1m23s
CI / test (push) Successful in 3m57s
CI / build (push) Successful in 1m18s
CI / e2e (push) Successful in 13m18s
2026-09-23 10:41:15 -04:00
bruno
e2417cb5ab
feat: support audio & vidéo — lecteurs HTML5 intégrés #109
CI / lint (push) Successful in 1m58s
CI / security (push) Successful in 1m22s
CI / test (push) Successful in 4m32s
CI / build (push) Successful in 2m6s
CI / e2e (push) Successful in 12m57s
2026-09-23 09:14:34 -04:00
bruno
eccbf7474e
feat: support complet des images — arborescence, visionneuse, indexation #108
CI / lint (push) Successful in 1m57s
CI / security (push) Successful in 1m22s
CI / test (push) Successful in 4m32s
CI / build (push) Failing after 1m16s
2026-09-23 07:47:04 -04:00
bruno
69cee4d93a
docs(roadmap): add #108 image support and #109 audio/video players
...
CI / lint (push) Successful in 1m55s
CI / security (push) Successful in 1m25s
CI / test (push) Successful in 4m33s
CI / build (push) Successful in 1m15s
CI / e2e (push) Successful in 11m59s
- #108 : images parity — tree + indexing (never read bytes into TF-IDF),
fix broken standalone viewer (img src points to JSON /raw instead of
/api/image), zoom/pan viewer, thumbnails, SVG sandbox hardening
- #109 : audio/video — HTML5 players, shared media streaming endpoint
with Range/206 (extract helper from existing pdf/stream), codec
fallback UI, PWA/mobile notes
- Update effort summary (8 items, ~28-43 days)
2026-09-22 23:28:55 -04:00
bruno
705f755b6b
docs: guides d'utilisation, capture reelle et README ameliores
CI / lint (push) Successful in 2m2s
CI / security (push) Successful in 1m25s
CI / test (push) Successful in 4m13s
CI / build (push) Successful in 1m16s
CI / e2e (push) Successful in 11m56s
2026-09-22 22:40:51 -04:00
bruno
8ad8eaac71
test: spec E2E mobile pour la page Configurations BUG-071
CI / lint (push) Successful in 1m54s
CI / security (push) Successful in 1m21s
CI / test (push) Successful in 3m58s
CI / build (push) Failing after 1m22s
2026-09-22 22:03:42 -04:00
bruno
dd9224e685
fix: page Configurations inutilisable en mode mobile BUG-071
CI / lint (push) Successful in 1m57s
CI / security (push) Successful in 1m20s
CI / test (push) Successful in 4m20s
CI / build (push) Successful in 1m20s
CI / e2e (push) Successful in 11m51s
2026-09-22 21:24:56 -04:00
bruno
aeb7516445
fix: activation WebAuthn impossible BUG-070 (rp_id/origines derives requete, challenges multiples)
CI / lint (push) Successful in 1m59s
CI / security (push) Successful in 1m35s
CI / test (push) Successful in 4m7s
CI / build (push) Successful in 1m16s
CI / e2e (push) Successful in 12m12s
2026-09-22 20:54:01 -04:00
bruno
bca0fdd941
fix: login 2FA bloque sans erreur BUG-069 (challenge montait dans .login-box inexistant -> .login-card + erreur visible)
CI / lint (push) Successful in 1m56s
CI / security (push) Successful in 1m20s
CI / test (push) Successful in 4m17s
CI / build (push) Successful in 1m16s
CI / e2e (push) Successful in 12m35s
2026-09-22 20:38:37 -04:00
bruno
60da957f13
fix: section Securite du compte incomplete BUG-068 (boutons theme, QR local, mot de passe, recovery WebAuthn)
CI / lint (push) Successful in 2m25s
CI / security (push) Successful in 1m20s
CI / test (push) Successful in 3m43s
CI / build (push) Successful in 2m9s
CI / e2e (push) Successful in 12m7s
2026-09-22 20:07:25 -04:00
bruno
f621620593
feat: optimisation globale des performances #86 (scan differentiel, excalidraw differe, garde-fou replace; inverted index/PDF lazy/caps regex deja livres via BUG-033/040/025)
CI / lint (push) Successful in 1m54s
CI / security (push) Successful in 1m22s
CI / test (push) Successful in 4m23s
CI / build (push) Successful in 1m17s
CI / e2e (push) Successful in 12m9s
2026-09-22 19:04:26 -04:00
bruno
eff74cabe0
feat: #107 configuration - gestion des clés API & MCP (création/révocation, expiration 1j/1mois/6mois/1an/sans fin, une clé pour API REST + serveur MCP, dernière utilisation, store sans secret persisté; fix révocation longue durée) + script token MCP
CI / lint (push) Successful in 1m58s
CI / security (push) Successful in 1m32s
CI / test (push) Successful in 4m0s
CI / build (push) Successful in 1m15s
CI / e2e (push) Successful in 12m9s
2026-09-22 14:48:51 -04:00
bruno
6f0a6f7fd8
chore(fixtures): enrichit les vaults de test (frontmatter complet, types fichiers pour vues/aper/us, dossiers avec accents+espaces, scripts dupliques, images/logs) + purge residus e2e-diagram
CI / lint (push) Successful in 1m55s
CI / security (push) Successful in 1m20s
CI / test (push) Successful in 3m43s
CI / build (push) Successful in 1m16s
CI / e2e (push) Successful in 11m44s
2026-09-22 13:42:49 -04:00
bruno
ab7c227b97
feat: assistant IA - actions instantanées contextuelles, catalogue Toutes les actions & frontmatter complet #106
CI / lint (push) Successful in 1m43s
CI / security (push) Successful in 1m8s
CI / test (push) Successful in 4m4s
CI / build (push) Successful in 2m10s
CI / e2e (push) Successful in 11m51s
2026-09-19 11:07:50 -04:00
bruno
b8054665bc
fix: guide - bouton telechargement icone seule, diagramme Architecture rendu en image dans le PDF, emoji couleur (Noto) ( #105 )
CI / lint (push) Successful in 1m39s
CI / security (push) Successful in 1m5s
CI / test (push) Successful in 3m25s
CI / build (push) Successful in 1m18s
CI / e2e (push) Successful in 11m43s
2026-09-18 15:01:14 -04:00
bruno
99a5b735c8
chore: relance CI run 1544 (echec checkout transitoire, 524 Cloudflare)
CI / lint (push) Successful in 1m41s
CI / security (push) Successful in 1m5s
CI / test (push) Successful in 3m27s
CI / build (push) Successful in 1m1s
CI / e2e (push) Successful in 12m6s
2026-09-18 13:49:16 -04:00
bruno
fb2d83e9e3
feat: guide d'utilisation - couverture complete, telechargement MD/PDF, section Architecture Mermaid, guide desktop elargi ( #105 , BUG-067)
CI / lint (push) Successful in 1m40s
CI / security (push) Successful in 1m6s
CI / test (push) Failing after 1m52s
CI / build (push) Skipped
2026-09-18 13:06:30 -04:00
bruno
82f6b4a791
fix: icones manquantes dans la table des matieres de la configuration (BUG-066)
CI / lint (push) Successful in 1m40s
CI / security (push) Successful in 1m4s
CI / test (push) Successful in 3m2s
CI / build (push) Successful in 1m1s
CI / e2e (push) Successful in 11m53s
2026-09-18 10:14:41 -04:00
bruno
7e1f5d6852
fix: fixture E2E manquante diagram-app-export.excalidraw (test de regression BUG-064)
CI / lint (push) Successful in 1m38s
CI / security (push) Successful in 1m4s
CI / test (push) Successful in 3m26s
CI / build (push) Successful in 1m5s
CI / e2e (push) Successful in 11m24s
2026-09-18 09:23:22 -04:00
bruno
ab766862a3
feat: redesign UI section Cles API IA - recherche, carte defaut, cartes depliables, footer sticky ( #104 )
CI / lint (push) Successful in 1m47s
CI / security (push) Successful in 1m5s
CI / test (push) Successful in 3m14s
CI / build (push) Successful in 1m1s
CI / e2e (push) Failing after 12m11s
2026-09-18 09:01:20 -04:00
bruno
2bd9dd7535
fix: Editeur Excalidraw - diagramme vide (CSS + appState) et auto-save pendant l'edition (BUG-064, BUG-065)
2026-09-18 08:59:54 -04:00
bruno
7f0f64a42e
fix: TOC PDF - forcer le rechargement de l'iframe (BUG-063 complement)
CI / lint (push) Successful in 1m37s
CI / security (push) Successful in 1m15s
CI / test (push) Successful in 3m36s
CI / build (push) Successful in 59s
CI / e2e (push) Successful in 11m13s
2026-09-17 21:16:46 -04:00
bruno
f7e068baed
fix: viewer PDF (TOC, largeur) et plein ecran assistant (BUG-061 a BUG-063)
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 1m11s
CI / test (push) Successful in 3m33s
CI / build (push) Successful in 1m2s
CI / e2e (push) Successful in 11m23s
2026-09-17 20:45:38 -04:00
bruno
2e2a33cef3
fix: corrige 6 bugs mineurs (BUG-035 a BUG-040)
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 1m4s
CI / test (push) Successful in 3m41s
CI / build (push) Successful in 59s
CI / e2e (push) Successful in 11m8s
2026-09-17 20:05:08 -04:00
bruno
2c460022f8
test(pdf): helper d'ouverture robuste au vault replie (BUG-060)
CI / lint (push) Successful in 1m37s
CI / security (push) Successful in 1m3s
CI / test (push) Successful in 3m33s
CI / build (push) Successful in 59s
CI / e2e (push) Successful in 10m57s
2026-09-17 19:42:43 -04:00
bruno
133644a0ba
fix(pdf): affichage des pages du viewer PDF via iframe (BUG-060)
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 1m3s
CI / test (push) Failing after 3m41s
CI / build (push) Skipped
2026-09-17 19:39:48 -04:00
bruno
ba0ec3d1fa
feat(config): cles des sources connectees et recherche a cle editables depuis la page Configurations ( #103 )
CI / lint (push) Successful in 1m46s
CI / security (push) Successful in 1m23s
CI / test (push) Successful in 3m42s
CI / build (push) Successful in 58s
CI / e2e (push) Successful in 10m50s
2026-09-17 13:59:26 -04:00
bruno
22e9240e4f
fix(ai): les clics ne font plus sauter la conversation au bas (BUG-059); tableaux markdown corrects dans create_pdf ( #92 )
2026-09-17 13:55:36 -04:00
bruno
6a58a59a11
feat(ai): ecosysteme d'outils phase 2 - recherche a cle, cache/retry, Playwright, crawl, Gitea/GitHub, documents ( #92 )
CI / lint (push) Successful in 1m37s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 3m26s
CI / build (push) Successful in 1m44s
CI / e2e (push) Successful in 11m1s
2026-09-17 11:52:03 -04:00
bruno
26328fadeb
fix(editor): la barre de numerotation de ligne suit le theme (BUG-058)
CI / lint (push) Successful in 1m37s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m54s
CI / build (push) Successful in 56s
CI / e2e (push) Successful in 10m43s
2026-09-17 10:02:48 -04:00
bruno
c0eea526de
feat(ai): ajouter une section de la reponse et supporter l'editeur Forge (BUG-057, #102 )
...
CI / lint (push) Successful in 1m34s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m44s
CI / build (push) Successful in 1m1s
CI / e2e (push) Successful in 10m51s
L'assistant IA peut desormais inserer sa reponse dans l'editeur Forge (postMessage parent-insert) en plus d'Editer, et chaque bloc de code propose un bouton « Ajouter la section » pour n'inserer que ce bloc.
2026-09-17 09:39:35 -04:00
bruno
94ea5909f4
fix(forge): le parent quitte aussi le plein ecran avant l'assistant IA (BUG-056)
CI / lint (push) Successful in 1m34s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m11s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 10m50s
2026-09-17 09:19:06 -04:00
bruno
3758db2861
fix(forge): quitter le plein ecran avant d'ouvrir l'assistant IA (BUG-056)
CI / lint (push) Successful in 1m33s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 3m7s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 10m56s
2026-09-17 09:07:00 -04:00
bruno
8b09093aca
fix(forge): ne plus ecraser une completion acceptee au Tab (BUG-055)
CI / lint (push) Successful in 1m34s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m44s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 11m14s
2026-09-17 09:00:35 -04:00
bruno
61347e0f0b
fix(forge): autocompletion Tab naturelle et fiable (BUG-055)
CI / lint (push) Successful in 1m34s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 3m30s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 10m54s
2026-09-17 08:48:03 -04:00
bruno
3131277b19
feat(forge): assistant IA partage et plein ecran Forge/Editer ( #101 )
CI / lint (push) Successful in 1m33s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m50s
CI / build (push) Successful in 1m6s
CI / e2e (push) Successful in 10m48s
2026-09-17 08:30:32 -04:00
bruno
23a3c147cd
fix(editor): le bouton Sauvegarder ne reste plus bloque sur le spinner (BUG-054)
CI / lint (push) Successful in 1m45s
CI / security (push) Successful in 1m1s
CI / test (push) Successful in 2m55s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 10m48s
2026-09-17 08:00:13 -04:00
bruno
f02174af57
fix(ai): mode agent utilise les outils natifs au lieu du bloc obsigate-action (BUG-053)
CI / lint (push) Successful in 1m33s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 2m57s
CI / build (push) Successful in 56s
CI / e2e (push) Successful in 10m48s
2026-09-17 07:30:31 -04:00
bruno
e3434d19ea
fix(ai): garantir une reponse finale quand la boucle d'agent epuise son budget (BUG-052)
CI / lint (push) Successful in 1m31s
CI / security (push) Successful in 1m2s
CI / test (push) Successful in 3m25s
CI / build (push) Successful in 56s
CI / e2e (push) Successful in 10m41s
2026-09-16 23:28:56 -04:00
bruno
62cff271d8
fix(ai): entetes navigateur pour le repli web_search (Bing/DDG, BUG-051)
CI / lint (push) Successful in 1m39s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 2m9s
CI / build (push) Successful in 56s
CI / e2e (push) Successful in 11m9s
2026-09-16 23:17:27 -04:00
bruno
56b46cde0e
fix(ai): chaine de repli web_search (SearXNG -> DuckDuckGo -> Bing, BUG-051)
CI / lint (push) Successful in 1m32s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 3m8s
CI / build (push) Successful in 56s
CI / e2e (push) Successful in 10m44s
2026-09-16 23:13:44 -04:00
bruno
75b8d294b0
feat(ai): 30 skills integres et prompts enrichis
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 59s
CI / test (push) Successful in 2m44s
CI / build (push) Successful in 57s
CI / e2e (push) Successful in 11m31s
2026-09-16 22:13:42 -04:00
bruno
634d10cdd4
fix(ai): creation dossier+fichier en mode agent (BUG-050)
CI / lint (push) Successful in 1m32s
CI / security (push) Successful in 1m7s
CI / test (push) Successful in 3m6s
CI / build (push) Successful in 55s
CI / e2e (push) Successful in 10m48s
2026-09-16 21:10:38 -04:00
bruno
0d4f43a8bf
test(ai): collecter toutes les requetes pour eviter la course avec l'hydratation d'historique
CI / lint (push) Successful in 1m31s
CI / security (push) Successful in 1m0s
CI / test (push) Successful in 2m42s
CI / build (push) Successful in 55s
CI / e2e (push) Successful in 11m10s
2026-09-16 20:22:15 -04:00
bruno
4231f2e929
feat(sidebar+assistant): filtre Recents/Sauvegardes ( #99 ), pastille Deep Research ( #100 ) et icone du bouton + (BUG-049)
CI / lint (push) Failing after 1m20s
CI / build (push) Skipped
CI / security (push) Successful in 59s
2026-09-16 20:16:41 -04:00
bruno
8f26a418a9
test(ai): rendre le test du menu mention non flaky (nettoyage d'etat + attente du fetch)
CI / lint (push) Successful in 1m29s
CI / security (push) Successful in 1m3s
CI / test (push) Successful in 2m55s
CI / build (push) Successful in 55s
CI / e2e (push) Successful in 10m44s
2026-09-16 19:30:15 -04:00
bruno
f50a9f5bf3
docs(roadmap): clore la livraison #98 + BUG-048 avec la confirmation CI (v2.5.0, run #1511 )
CI / lint (push) Failing after 1m19s
CI / build (push) Skipped
CI / security (push) Successful in 58s
2026-09-16 16:29:36 -04:00
bruno
8e2b6203a1
feat: filtre de recherche dans la sidebar Historique IA ( #98 ) + menus '@' et '/' depuis le menu '+' (BUG-048)
CI / lint (push) Successful in 1m28s
CI / security (push) Successful in 58s
CI / test (push) Successful in 2m19s
CI / build (push) Successful in 54s
CI / e2e (push) Successful in 10m44s
2026-09-16 16:11:54 -04:00
bruno
c9e3240ae2
feat(assistant): #94-#97 historique permanent, sidebar IA, panneau + et bouton rond
CI / lint (push) Successful in 1m28s
CI / security (push) Successful in 58s
CI / test (push) Successful in 2m9s
CI / build (push) Successful in 1m3s
CI / e2e (push) Successful in 11m12s
2026-09-16 14:56:45 -04:00
bruno
0841778b99
docs(agents): versionnage automatique documente dans AGENTS.md + menage des fichiers temporaires
...
CI / lint (push) Successful in 1m26s
CI / security (push) Successful in 57s
CI / test (push) Successful in 2m16s
CI / build (push) Successful in 53s
CI / e2e (push) Successful in 10m40s
AGENTS.md : la checklist de fin de tache rappelle que VERSION est la source unique de verite, incrementee a chaque commit par le hook, avec resynchronisation des derives et publication du tag au push ; ligne ajoutee a la cartographie documentaire. Suppression des captures de diagnostic (diag-*.png, ogdiag.png, state.png) et du script jetable tmp-verify-inline.cjs.
2026-09-16 12:12:06 -04:00
bruno
788d84a2bf
fix(editeur): #93 garde-fous de session d'edition inline (onglets, ecriture externe) + hooks de versionnage documentes
...
CI / lint (push) Successful in 1m27s
CI / security (push) Successful in 57s
CI / test (push) Successful in 2m52s
CI / build (push) Successful in 53s
CI / e2e (push) Successful in 10m45s
Une session d'edition inline (Editer/Forge) qui possede la zone de contenu etait detruite par deux chemins qui vident cette zone : activation d'onglet (TabManager.activate, PaneTabManager.activate) -> detachInlineEditor() avant le placeholder ; evenement SSE index_updated -> reloadExternalWrite() recharge le tampon de l'editeur au lieu de re-rendre la vue lecture. Nouveau helper queryEditor() ; closeEditor() remet le conteneur dans la modale avant de restaurer en-tete/pied/marque. docs/CONTRIBUTING.md documente scripts/install-hooks.sh.
2026-09-16 11:43:41 -04:00
bruno
168261964e
docs(version): preciser le SHA reecrit par l'amend du hook post-commit
CI / lint (push) Successful in 1m27s
CI / security (push) Successful in 57s
CI / test (push) Successful in 3m27s
CI / build (push) Successful in 53s
CI / e2e (push) Successful in 10m59s
2026-09-16 11:20:29 -04:00