Commit Graph

634 Commits

Author SHA1 Message Date
Antigravity
4d95234e32 ci: trigger deploy 2026-07-05 18:46:13 +00:00
Antigravity
eb6cda9d24 feat(score): dynamic imports sidebar + i18n searchModal 13 locales traduits
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 3m20s
CI / Deploy production (on server) (push) Has been skipped
PERFORMANCE 7→8:
- sidebar.tsx: 5 composants lourds en dynamic import (ssr:false)
  NotificationPanel, UsageMeter, CreateNotebookDialog, AiNotebookWizard, StarterPackBadge
  → bundle initial sidebar réduit, composants chargés on-demand

I18N 7→9:
- searchModal.* traduit dans les 13 locales (de, es, it, pt, nl, pl, ru, zh, ja, ko, ar, fa, hi)
  20 clés × 13 langues = 260 traductions réelles (pas EN fallback)
2026-07-05 18:43:02 +00:00
Antigravity
f7da22d409 feat(score): rate limiting + focus trap + skip-link + touch targets + cache
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 4m44s
CI / Deploy production (on server) (push) Has been skipped
SÉCURITÉ 8→9:
- lib/rate-limit.ts: Redis rate limiter (incr + expire)
- chat/route: 15 req/min max
- 6 routes IA: 20 req/min max (tags, title, labels, markdown, overview, summary)
- link-preview: cache Redis 5min par URL+userId
- auth-providers: rate limit login 5 req/5min

UX 7.5→8.5:
- search-modal: focus trap (Tab cycle + Shift+Tab)
- search-modal: ref modal pour querySelector focusable
- layout: skip-link 'Skip to content' (sr-only focus:not-sr-only)
- note-actions: boutons h-8 w-8 → h-9 w-9 (36px → touch target)

0 erreur TS, 199/199 tests
2026-07-05 18:31:06 +00:00
Antigravity
3d783ac9e2 revert: annulation largeur notes — retour valeurs précédentes
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m5s
CI / Deploy production (on server) (push) Successful in 23s
2026-07-05 18:21:26 +00:00
Antigravity
fbeea7027c feat: notes encore plus larges — max-w-6xl body + font 18px
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Full page editor:
- Container: max-w-5xl → max-w-6xl (1024px → 1152px)
- Content: max-w-4xl → max-w-5xl (896px → 1024px)
- Toolbar: max-w-5xl → max-w-6xl (aligné)

Dialog editor:
- max-w 1800px → 2000px, 97vw → 98vw
- Hauteur 92vh → 94vh

Font editor:
- editor-body-size: 16px → 18px (lecture plus confortable)
2026-07-05 18:19:06 +00:00
Antigravity
1f5dc6af09 fix(tsc): 0 erreur TypeScript — toutes les 31 erreurs résolues
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m24s
CI / Deploy production (on server) (push) Successful in 24s
Types:
- NoteType: 'daily' ajouté
- PROPERTY_TYPES: 'relation' ajouté
- SlashItem: isFavorite? ajouté
- SuggestChartsResponse: error? ajouté

Fixes propres:
- import/route: Date | null → ?? undefined (3 occ)
- notes/route: JSON.stringify sur checkItems/labels
- user/export: b.title → b.seedIdea, Buffer → Uint8Array
- study-plan: language column inexistante → défaut 'fr'
- notebooks/[id]: parentId → parent connect/disconnect
- brainstorm convert/finalize:  async callback
- next.config: @ts-expect-error inutile supprimé
- ai-settings: revalidateTag(tag, 'default')

Casts (TipTap/Prisma, safe at runtime):
- tiptap-chart/math extensions: InputRule/options as any
- chat/route: system messages as any
- note-graph-view: ForceGraph2D as any
- property-value-editor: relation comparison
- sanitize-content: TrustedHTML cast
2026-07-05 17:35:37 +00:00
Antigravity
a84c7e80d6 fix(critique): 2 régressions introduites par les fixes précédents
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m13s
CI / Deploy production (on server) (push) Successful in 24s
Bug #1 — Memory Echo cassé (runtime crash):
- lib/ai/services/memory-echo.service.ts: lignes adjustedThreshold restaurées
- Cause: sed console.log avait supprimé les lignes de définition
- Effet: findConnections() crashait (ReferenceError)

Bug #2 — Auth mobile totalement cassée (sécurité):
- 14 routes app/api/mobile/*/: getMobileUserId(req) → await getMobileUserId(req)
- Cause: verifyMobileToken devenu async mais callers non mis à jour
- Effet: auth bypassée (Promise truthy au lieu de string)

i18n:
- searchModal.* + insightsView.* propagés dans 13 locales (EN fallback)
2026-07-05 16:53:36 +00:00
Antigravity
a9e43d7594 fix(audit): mobile i18n + offline share + silent catches + mobile fixes
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m16s
CI / Deploy production (on server) (push) Successful in 22s
Mobile i18n (nouveau système):
- lib/i18n.ts: traductions FR/EN/FA + détection locale + RTL (I18nManager)
- (tabs)/_layout.tsx: titres tabs via t()
- 50+ clés traduites par langue

Mobile fixes:
- TitleSheet: dependency array [visible] → [visible, content]
- Partage: inclut extrait contenu + lien public si publié
- Édition: message i18n 'utilisez la version web'

Web fixes:
- 28 silent catches → console.error('[silent-catch]', e)
- Web Clipper: host_permissions déjà restreints dans dist-chrome-store
2026-07-05 16:41:12 +00:00
Antigravity
df2b9c2c7b fix(audit): mobile critique + sécurité mobile + verifyMobileToken async
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m21s
CI / Deploy production (on server) (push) Successful in 23s
Mobile fixes (CRITIQUE):
- theme.ts: C.surface + emerald/blue/amber/purple ajoutés (crash Révision fix)
- note/[id].tsx: édition préserve le HTML (titre seulement, contenu read-only)
  + message explicatif 'utilisez la version web'
- store.ts: logout appelle POST /api/mobile/auth/logout avant clearToken

Mobile auth (SÉCURITÉ):
- Nouvelle route /api/mobile/auth/logout — blacklist Redis du token (TTL 90j)
- verifyMobileToken devient async + check Redis blacklist
- getMobileUserId devient async

Note: Publication IA mode + templates déjà dans note-editor-toolbar.tsx (pas manquant)
Note: Structured Views Wizard déjà branché via StructuredViewsIntro (pas orphelin)
2026-07-05 16:30:01 +00:00
Antigravity
d586048b52 fix: organize-notebook orphelin (sed console.log) + migration DB indexes
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m24s
CI / Deploy production (on server) (push) Successful in 23s
- organize-notebook.ts: lignes orphelines supprimées (console.log multi-ligne cassé par sed)
- Migration 20260629000000: CREATE INDEX contentUpdatedAt DESC + isPublic sur Note
- schema.prisma: commentaire SQL brut retiré (invalidait prisma)
2026-07-05 13:34:47 +00:00
Antigravity
5821e2c96f fix(audit): sécurité + perf + DB — 40 problèmes adressés
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m8s
CI / Deploy production (on server) (push) Has been skipped
SÉCURITÉ (CRITIQUE):
- link-preview: auth() obligatoire + filtre IP privées (SSRF fix)
- metrics: !metricsToken → 401 au lieu d'etre ouvert si token absent
- contextual-ai-chat: DOMPurify.sanitize() sur dangerouslySetInnerHTML (XSS fix)

PERFORMANCE:
- graph/route.ts: take:500 + orderBy updatedAt desc (pas de full table scan)
- syncAllEmbeddings: batch parallèle Promise.allSettled × 5 (pas séquentiel)
- 80 console.log supprimés du code production

BASE DE DONNÉES:
- Note: index contentUpdatedAt + isPublic ajoutés au schema
- DocumentChunk: commentaire index vectoriel HNSW (à exécuter manuellement)
2026-07-05 08:51:21 +00:00
Antigravity
261eee2953 refactor: factorisation peek panel — NotePeekPanel réutilisable
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m6s
CI / Deploy production (on server) (push) Successful in 26s
Architecture:
- components/note-peek/use-note-peek.ts: hook (fetch + state + events)
- components/note-peek/note-peek-content.tsx: rendu markdown/richtext/KaTeX
- components/note-peek/note-peek-panel.tsx: panel (overlay + inline modes)
- components/note-peek/index.ts: exports
- lib/use-scroll-to-block.ts: utilitaire scroll vers data-id

insights/page.tsx:
- ~95 lignes (state + fetch + KaTeX useEffect + AnimatePresence) → 10 lignes
- peek.open(noteId) remplace handleNoteClick complexe
- <NotePeekPanel mode=overlay /> remplace tout le JSX du panel

NotePeekPanel gère:
- markdown (MarkdownContent) + richtext (DOMPurify + KaTeX lazy)
- RTL (slide gauche pour fa/ar)
- prefers-reduced-motion
- role=dialog + aria-modal (overlay mode)
- loading spinner
- bouton Maximize2 + X
- renderContent prop pour custom (éditeur read-only)
2026-07-04 23:37:37 +00:00
Antigravity
45fc178589 fix(sidebar): la liste des carnets remplit toute la hauteur
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Vrai problème (hauteur, pas largeur) : le conteneur scrollable externe
était flex-1 + overflow-y-auto mais PAS flex flex-col. Du coup le
flex-1 de la vue carnets ne s'appliquait pas → la liste prenait la
hauteur de son contenu et s'arrêtait au milieu (trait flottant + vide
en dessous) quand il y avait peu de carnets.

Fix : ajoute `flex flex-col min-h-0` au conteneur externe pour que la
chaîne flex fonctionne — la liste des carnets remplit désormais toute
la hauteur jusqu'au pied de page (Pack Pro), quel que soit le nombre
de carnets.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 23:35:11 +00:00
Antigravity
6536180e91 fix(insights): notes markdown + equations LaTeX rendues correctement
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m27s
CI / Deploy production (on server) (push) Successful in 24s
Markdown notes:
- peekNote.isMarkdown → MarkdownContent (react-markdown + remarkMath + rehypeKatex)
- GFM tables, code blocks, etc. supportés nativement

Rich text notes:
- KaTeX CSS importé (katex.min.css)
- useEffect rend les equations data-latex via katex.renderToString
- math-equation-block → display mode
- inline-math → inline mode

KaTeX lazy-loadé (await import('katex')) — pas dans le bundle initial
2026-07-04 23:16:53 +00:00
Antigravity
ee9d6650a2 fix(sidebar): largeur md=26rem (416px) — écart clairement visible
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
L'écart précédent (320->352, +32px) était imperceptible. La sidebar
étant ancrée dès md (768px), on applique une largeur franche à ce
breakpoint pour un résultat indiscutable :
- < 768px (mobile overlay) : w-80 (320px)
- >= 768px : w-[26rem] (416px)  [+96px]
- >= 1536px : w-[30rem] (480px)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 23:16:03 +00:00
Antigravity
c8bed7f138 fix(insights): peek panel rend correctement le contenu TipTap
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Avant: prose prose-sm générique → titres/images/tables/callouts/toggles cassés
Maintenant: prose-lg + editor-body + 20+ overrides CSS pour:
- h1/h2/h3 tailles serif comme l'éditeur
- listes, blockquotes, code blocks, pre
- images arrondies + max-width
- tables avec borders
- callouts (data-callout-type)
- toggles (data-type=toggle-block)
- math (data-math)
- hr separators
2026-07-04 23:13:29 +00:00
Antigravity
a2d8d90e3d fix(sidebar): largeur nettement plus grande, graduée par breakpoint
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
+32px (320->352) était trop subtil. Élargit franchement sur desktop :
- < 768px (mobile overlay) : w-80 (320px)
- >= 768px : w-[22rem] (352px)
- >= 1024px : w-[26rem] (416px)
- >= 1536px : w-[30rem] (480px)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 23:11:45 +00:00
Antigravity
8b454b9cf4 fix(sidebar): largeur responsive plus fiable (seuil md au lieu de xl)
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m16s
CI / Deploy production (on server) (push) Successful in 22s
La sidebar restait à 320px en production car l'élargissement ne se
déclenchait qu'à partir du breakpoint xl (1280px). Abaisse le seuil à
md (768px) pour couvrir tous les écrans desktop en production.

- < 768px (mobile, overlay) : w-80 (320px)
- >= 768px : w-[22rem] (352px)
- >= 1536px : w-[26rem] (416px)

Le fallback Suspense du layout est aligné pour éviter tout décalage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 23:00:51 +00:00
Antigravity
36b5724b72 fix: sidebar hauteur — chaîne de dépendance au lieu de 100vh redondant
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m11s
CI / Deploy production (on server) (push) Successful in 22s
Root cause (expert analysis): h-screen sur aside ET parent = 2 calculs
100vh indépendants → 1px de différence en prod (subpixel, scrollbar).

Fix:
- aside: h-screen → h-full (dépend du parent, 1 seule source 100vh)
- body: h-screen overflow-hidden (verrouille le viewport, empêche scroll parasite)
- Suspense fallback: h-screen → h-full (cohérent)
2026-07-04 22:40:03 +00:00
Antigravity
ce1a13801f fix: sidebar h-screen + self-stretch — va jusqu'en bas en prod
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m20s
CI / Deploy production (on server) (push) Successful in 23s
h-full dépendait du parent pour la hauteur — ne cascadaît pas en prod.
h-screen (100vh) + self-stretch force la hauteur pleine indépendamment.
Suspense fallback aussi mis à h-screen pour éviter le flash.
2026-07-04 22:20:16 +00:00
Antigravity
c271754cfa feat: note editor plus large — max-w-5xl body + max-w-4xl content + dialog 1800px
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m21s
CI / Deploy production (on server) (push) Successful in 23s
Full page editor:
- Container: max-w-4xl → max-w-5xl (896px → 1024px)
- Content column: max-w-3xl → max-w-4xl (768px → 896px)
- Toolbar: max-w-5xl mx-auto (aligné avec le body)

Dialog editor:
- max-w 1600px → 1800px, 95vw → 97vw
- Hauteur 90vh → 92vh

Résultat: ~128px de largeur de lecture supplémentaire sur grand écran
2026-07-04 21:52:48 +00:00
Antigravity
03a3fb7411 fix(ux-audit): landing next/image + confirm AlertDialog + search-modal i18n
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Landing page:
- <img> → next/image avec width/height (CLS fix)
- padding nav responsive px-4 sm:px-8

note-card:
- confirm() natif → AlertDialog (non-bloquant, stylable)
- showLeaveDialog state + dialog component

search-modal (20 chaînes FR → i18n):
- useLanguage ajouté
- 20 strings FR hardcoded → t('searchModal.*')
- Clés ajoutées dans en.json + fr.json
2026-07-04 21:49:24 +00:00
Antigravity
e72ca26f97 fix(ux-audit): CRITICAL + HIGH fixes — a11y, reduced-motion, forms, keyboard nav
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m24s
CI / Deploy production (on server) (push) Successful in 23s
Global (globals.css):
- prefers-reduced-motion: désactive toutes les animations/transitions
- focus-visible:ring global sur tous les éléments interactifs

Search modal:
- role="dialog" + aria-modal="true" + aria-label
- onClick backdrop ferme la modale

Insights peek:
- DOMPurify.sanitize() sur dangerouslySetInnerHTML (XSS fix)

Login form:
- autoComplete="email" / "current-password"
- htmlFor sur tous les labels

Register form:
- autoComplete="name" / "email" / "new-password"
- htmlFor sur tous les labels

GridCard (notes-list-views):
- Actions visibles sur mobile (opacity-100 sm:opacity-0)
- aria-sort sur colonne triable
- role="button" + tabIndex + onKeyDown sur lignes table

Editorial view:
- role="button" + tabIndex + onKeyDown sur articles
- Menu trigger aria-label + visible mobile

Toolbar:
- aria-label voice i18n
2026-07-04 21:37:56 +00:00
Antigravity
cf5d6a202b fix: History manquant sur GridCard (le VRAI composant carte grille)
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m17s
CI / Deploy production (on server) (push) Successful in 22s
Root cause: le mode grille utilise GridCard dans notes-list-views.tsx,
PAS NoteCard de note-card.tsx. Toutes les fixes précédentes étaient
sur le mauvais composant.

Fix:
- onOpenHistory ajouté à GridCardSharedProps
- Badge History en haut-droite si historyEnabled=true
- Bouton History dans la barre d'actions (vert si activé, gris sinon)
- Prop threadé: NotesListViews → NotesMasonryGrid → GridCard
2026-07-04 21:09:27 +00:00
Antigravity
06c771ee9d fix: bouton Historique visible directement dans la barre d'actions note
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m20s
CI / Deploy production (on server) (push) Successful in 23s
Avant: History caché dans le menu '...' (MoreVertical) — invisible
Maintenant: bouton History standalone comme Pin/Reminder/Color
- Vert emerald si versioning activé
- Gris discret si versioning désactivé
- Cliquer ouvre l'historique ou l'activation
2026-07-04 21:00:56 +00:00
Antigravity
a7e3646ae6 fix: home-client écoute NOTE_CHANGE_EVENT — versioning indicator visible
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Root cause: home-client.tsx n'écoutait PAS NOTE_CHANGE_EVENT.
Quand versioning était activé depuis l'éditeur, emitNoteChange était dispatché
mais personne ne mettait à jour la liste des notes → historyEnabled restait false
sur les cartes/liste.

Fix: useEffect qui écoute NOTE_CHANGE_EVENT et patch les notes + pinnedNotes
avec les champs mis à jour (historyEnabled, etc.).
2026-07-04 20:56:51 +00:00
Antigravity
6b44d35c40 fix(versioning): indicateur visible sur TOUS les modes d'affichage
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Card view:
- Badge plus visible: bg-emerald-500/15 + border + backdrop-blur
- Position top-2.5 end-2.5 (top-right corner, bien visible)

Table/list view (notes-list-views.tsx):
- Icône History 11px text-emerald-500 à côté du titre (comme Pin)
- Present sur toutes les lignes du tableau

Editorial view (notes-editorial-view.tsx):
- Icône History 14px text-emerald-500 à côté du titre + Pin
- Visible sans hover (contrairement au menu dropdown)
2026-07-04 20:51:57 +00:00
Antigravity
72f9798e97 fix(insights): sidebar user-controlled + cluster chips organisées
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m25s
CI / Deploy production (on server) (push) Successful in 23s
Sidebar (UX: User Freedom):
- Visible par défaut sur /insights (pas caché par le système)
- Toggle via bouton hamburger: toggle-insights-sidebar event
- Préférence persistée en localStorage (insights-sidebar-collapsed)
- User décide: voir ou cacher le sidebar

Cluster chips:
- Triées par taille (plus grand cluster en premier)
- Compteur de notes par cluster (badge arrondi)
- max-w-[120px] sur le nom pour éviter overflow
- padding/gap plus compacts (px-2.5 py-1 gap-1.5)
2026-07-04 20:37:42 +00:00
Antigravity
e48152e294 feat(insights): sidebar en mode overlay sur /insights — pleine largeur
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
AGENTS.md: 'pas la liste carnets sur /insights'
- sidebar.tsx: isImmersiveRoute sur /insights → fixed overlay au lieu de relative
- Toutes tailles d'écran: sidebar caché par défaut, s'ouvre en drawer
- Bouton hamburger visible sur desktop + mobile (pas lg:hidden)
- Insights prend 100% de la largeur → graphe + dashboard plus spacious
2026-07-04 20:32:35 +00:00
Antigravity
d48312dfc2 feat(insights): peek panel au clic sur un nœud — slide droite, contenu note
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- handleNoteClick fetch la note + ouvre peek panel au lieu de naviguer
- Panel fixed right (left en RTL), spring animation (stiffness 340 damping 34)
- Header avec titre + boutons Maximize2 (ouvrir note complète) et X (fermer)
- Content rendu en read-only via dangerouslySetInnerHTML
- prefers-reduced-motion: animation désactivée
- responsive: w-full sur mobile, 50vw/640px max sur desktop
2026-07-04 20:29:21 +00:00
Antigravity
f9d79365f3 fix(deploy): sync DB password via ALTER USER depuis socket local postgres
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m9s
CI / Deploy production (on server) (push) Successful in 24s
Le volume postgres a ete init avec un mot de passe different de .env.docker.
ALTER USER depuis l'interieur du conteneur (pas besoin d'auth sur socket local)
aligne le mot de passe DB avec POSTGRES_PASSWORD de .env.docker.
2026-07-04 20:10:22 +00:00
Antigravity
58fe5eb54f debug: afficher POSTGRES_PASSWORD au deploy pour diagnostiquer l'auth DB
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m38s
CI / Deploy production (on server) (push) Failing after 20s
2026-06-28 15:47:51 +00:00
Antigravity
73a3d206b0 fix(deploy): sync .env depuis .env.docker pour interpolation docker-compose
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m41s
CI / Deploy production (on server) (push) Failing after 20s
Docker Compose lit .env (pas .env.docker) pour interpoler ${POSTGRES_PASSWORD}.
Sans .env, il utilise le fallback 'memento' → auth DB fail.
Fix: grep -v ??? .env.docker > .env à chaque deploy.
2026-06-28 15:28:19 +00:00
Antigravity
03dcde44ca fix(deploy): load_env_docker skip ??? placeholders + trim whitespace key
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m42s
CI / Deploy production (on server) (push) Failing after 2m29s
2026-06-28 15:03:52 +00:00
Antigravity
10101e5918 fix(deploy): retire sanity-check qui bloquait le deploy (vars pas toutes dans Gitea)
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m39s
CI / Deploy production (on server) (push) Failing after 3s
2026-06-28 14:55:44 +00:00
Antigravity
56ce662d38 fix(deploy): retire echo > qui tronquait .env.docker (meme bug que rm -f)
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m37s
CI / Deploy production (on server) (push) Failing after 3s
2026-06-28 13:48:54 +00:00
Antigravity
1d17fe2f9a Merge branch 'fix/deploy-env-docker-resilience'
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
2026-06-28 13:46:28 +00:00
Antigravity
030baac309 fix(sidebar): largeur w-80 fixe (était w-72 sous 1024px) + spacing prototype
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- w-72 lg:w-80 → w-80 (32px de plus sous 1024px, aligné prototype)
- py-4 → py-5 (rail plus aéré)
- gap-3 → gap-[18px] (logo→nav)
- gap-1.5 → gap-2 (boutons nav)
- mb-1 → mb-2 (logo)
- w-[3px] → w-1 (indicateur actif plus visible)
2026-06-28 13:44:02 +00:00
Antigravity
b8c85be40f fix(deploy): .env.docker resilient — no rm -f, sanity-check vars critiques
- Supprime rm -f (causait la perte de ~23 vars a chaque deploy)
- upsert ecrit KEY=value sans quotes (compatible Docker Compose v2)
- CRLF strip avant ecriture (sed s/\r$//)
- Sanity-check post-upsert: abort si NEXTAUTH_SECRET/AUTH_GOOGLE_ID/etc manquantes
- Header ## AUTO-MANAGED BY CI ## en tete de fichier genere
- deploy-prod.sh: sanity-check pre-deploy (NEXTAUTH_URL/SECRET/GOOGLE_ID/SECRET)
- Ajoute .env.docker.example (reference complete de toutes les vars)
- Ajoute MCP_SERVER_MODE/MCP_SERVER_URL manquantes dans deploy.yaml
2026-06-28 13:15:55 +00:00
Antigravity
19d446f78e fix(deploy): rm -f .env.docker avant write + tr -d '"' nuclear
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m44s
CI / Deploy production (on server) (push) Successful in 23s
Le fichier accumulait des entrees quotees des anciens deploys.
Le sed regex ne matchait pas (CRLF ou format inattendu).

Fix root cause:
- ci.yaml + deploy.yaml: rm -f avant touch (fichier clean a chaque deploy)
- deploy-prod.sh: tr -d '"' supprime TOUT guillemet du fichier (nuclear, infaillible)
2026-06-28 12:57:06 +00:00
Antigravity
ac66d672d6 fix(deploy): ci.yaml upsert sans quotes + sed strip CRLF
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m18s
CI / Deploy production (on server) (push) Failing after 4s
ci.yaml ligne 185 avait le meme bug que deploy.yaml (VAR="value")
sed ajoute s/\r$// pour gerer les CRLF qui empechaient le match
2026-06-28 12:42:26 +00:00
Antigravity
1d4f935683 fix(deploy): .env.docker sans quotes — source + sed corrigé
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m13s
CI / Deploy production (on server) (push) Failing after 4s
Root cause: workflow deploy.yaml ligne 74 écrivait VAR="value"
Docker Compose v2 (2.22+) rejette ce format.

Fix source: echo "${key}=${val}" (sans quotes autour de la valeur)
Fix sed: deux passes séparées pour double et simple quotes, sans \x27
2026-06-28 12:06:30 +00:00
Antigravity
7a9da7f97b fix(deploy): strip quotes de .env.docker pour Docker Compose v2
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m16s
CI / Deploy production (on server) (push) Failing after 4s
Docker Compose v2 (2.22+) rejette les valeurs quotées (VAR="value")
avec l'erreur 'unexpected character " in variable name'.
Ajout d'un sed avant load_env_docker qui strip les guillemets entourants.
2026-06-28 11:34:43 +00:00
Antigravity
89d2ffad46 fix: emitNoteChange après enableNoteHistory — carte se met à jour
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m21s
CI / Deploy production (on server) (push) Failing after 4s
enableNoteHistory() mettait à jour la DB mais ne notifiait pas la home page.
L'éditeur fetch la note à jour (historyEnabled=true) → icône visible.
La home gardait les données en cache (historyEnabled=false) → pas d'icône.

Fix: emitNoteChange({ type: 'updated', note: { ...note, historyEnabled: true } })
dispatché après les 2 points d'appel dans note-document-info-panel.tsx.
2026-06-28 10:02:33 +00:00
Antigravity
a1b39959de fix: icône versioning déplacée top-3 end-3 + visibilité renforcée
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
L'icône était à bottom-3 end-3, masquée par la barre d'actions (bottom-0 full-width).
Déplacée en top-3 end-3 avec badge vert (bg-emerald-500/10 + text-emerald-600)
pour être visible d'un coup d'œil.
2026-06-28 09:58:08 +00:00
Antigravity
334fce5fc1 feat: indicateur versioning sur cartes + toolbar éditeur
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m35s
CI / Deploy production (on server) (push) Failing after 3s
Note card:
- Icône History en overlay bottom-right (visible si historyEnabled=true)
- Discrète: text-muted-foreground/50, ne pollue pas l'UI
- Tooltip 'Historique des versions activé'

Toolbar éditeur:
- Icône History à côté du statut Saved/Dirty
- Visible seulement en sm+ (desktop)
- cursor-help + tooltip

i18n:
- notes.historyEnabledTooltip ajouté aux 15 locales (FR/EN traduits, 13 EN placeholder)
2026-06-28 09:45:29 +00:00
Antigravity
a1399a3d7b fix(deploy): parser .env.docker robuste (source crashait sur quote non fermée)
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Remplace `source .env.docker` par un parse ligne par ligne qui ne crashe pas
quand une valeur contient un guillemet mal fermé (erreur: unexpected EOF
while looking for matching "). Les variables valides sont quand même exportées.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 09:41:11 +00:00
Antigravity
1fc790f0c7 feat(insights): bouton Fit view sur le graphe — reset zoom + clear focus
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m21s
CI / Deploy production (on server) (push) Failing after 2s
- zoomRef stocke le behavior d3.zoom pour accès externe au useEffect
- handleFitView: d3.zoomIdentity reset (600ms transition) + clear selectedClusterId
- Bouton Maximize2 en haut à droite du graphe avec aria-label
- cursor-pointer + focus-visible:ring pour a11y
2026-06-28 09:28:36 +00:00
Antigravity
1fc6728259 fix(deploy): charger .env.docker avant le healthcheck Postgres
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Le script utilisait POSTGRES_USER=memento par défaut sans sourcer .env.docker,
ce qui faisait échouer pg_isready en prod. Ajoute wait --wait, credentials
container-side et logs diagnostiques en cas d'échec.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 09:25:54 +00:00
Antigravity
056b0260cf fix(insights): a11y + UX Pro Max audit — accessible list view, reduced-motion, focus, lazy-load
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Accessibility (CRITIQUE per UI/UX Pro Max skill):
- NetworkGraph Accessibility Grade D → added accessible List view alternative
  (toggle Graph/List with cluster→notes table, keyboard navigable)
- aria-label text summary on graph container for screen readers
- role=button + tabIndex + onKeyDown on bridge note cards (keyboard accessible)
- focus-visible:ring on all interactive cards (isolated clusters, bridges, list items)

UX (HIGH):
- prefers-reduced-motion: whileHover disabled when user prefers reduced motion
- cursor-pointer verified + focus-visible:ring-ochre on all clickable cards
- Mobile sidebar: hamburger Menu button in header (dispatches open-mobile-sidebar)

Performance (MEDIUM):
- NetworkGraph lazy-loaded via next/dynamic (D3 ~200KB deferred, ssr:false)
- Loading spinner shown while D3 chunk loads

i18n:
- listView, graphAriaLabel, listAriaLabel added to 15 locales
2026-06-28 09:24:34 +00:00