216 Commits

Author SHA1 Message Date
Antigravity
5f9b8a9a09 fix(ui): thème des réglages et derniers textes de la revue
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m7s
CI / Deploy production (on server) (push) Successful in 24s
Les boutons des pages Agents, MCP, Données, Intégrations et Généraux suivent la couleur choisie. Les libellés encore techniques (recherche par le sens, notes proches, connexion unique) sont en langage courant.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 21:42:28 +00:00
Antigravity
afbb0dfc2d fix(ui): thème, textes et lisibilité restants de la revue
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m57s
CI / Deploy production (on server) (push) Successful in 24s
Les boutons suivent la couleur d’apparence, les libellés trop petits ou trop techniques sont clarifiés, et le catalogue des fournisseurs se met à jour tout seul.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 21:13:07 +00:00
Antigravity
ebf6f16fde fix(ui): voix Second Brain à la connexion et libellés du rail
Remplace le titre « notepad » et le jargon (Intelligence OS, SM-2) par des mots lisibles, et aligne la langue des pages d’auth sur le reste du site.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 10:56:00 +00:00
Antigravity
80ccc1f6de feat: dashboard Second Brain, essai 7 jours et vérification e-mail
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m14s
CI / Deploy production (on server) (push) Successful in 1m25s
Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 07:19:36 +00:00
Antigravity
69c99e4f4f feat: page interactive, démos Play/Step et simulateur Carnot
Ajoute le pipeline PageSpec (validation, rendu, publication /p/{slug}),
les démos TipTap /demo, et le simulateur Carnot (modes frigo/PAC/moteur,
énergie kJ vs puissance W, unités K/°C/°F) avec correctifs d’équations KaTeX.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 17:51:43 +00:00
Antigravity
f385d43d5d feat: redirect to AI consent settings when consent is missing
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m27s
CI / Deploy production (on server) (push) Successful in 23s
- requestAiConsent now redirects to /settings/general?highlight=aiConsent
  instead of opening the modal when called outside the settings page
- Settings page highlights the consent section and scrolls to it
- Adds consent.ai.settingsBanner i18n key (fr/en)
- Keeps inline modal on /settings/general so the grant button still works
2026-07-18 17:52:40 +00:00
Antigravity
324bf40658 fix: replace raw ai_consent_required code with translatable message and consent prompt
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m20s
CI / Deploy production (on server) (push) Successful in 24s
- Centralize AI consent 403 responses in server-consent helpers
- Return human-readable message + code + i18n errorKey from all AI APIs
- Update dashboard and AI clients to detect code/errorKey and translate
- Add consent.ai.requiredToast i18n keys (fr/en)
2026-07-18 17:32:00 +00:00
Antigravity
0ee2afbd62 fix(extension): sync robuste content/sidepanel, diagnostic panel, preview propre v0.4.4
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
- content.js : écrit la sélection dans chrome.storage.session/local en plus du message runtime
- sidepanel.js : lit le storage en fallback, loggue chaque étape, affiche un diagnostic panel
- sidepanel.js : avertissement explicite si le content script n'est pas détecté
- sidepanel.js : sépare le rendu Markdown du résumé et l'affichage texte brut de l'extrait
- sidepanel.css : agrandit la zone de prévisualisation
- i18n : nouvelles clés contentScriptMissing, diagnosticsTitle, copyDiagnostics
- locales : correction FR (Retour, Enregistrement, Note, etc.) + version 0.4.4 partout
- extract-article.ts : nettoie textContent des métadonnées (dates, temps de lecture, sources)
- analyze/route.ts : excerpt propre via makeExcerpt
- builds Chrome Store et Firefox regénérés en 0.4.4
2026-07-18 16:56:51 +00:00
Antigravity
a7c15e9fc3 feat(privacy+extension): publier la page /privacy et préparer les builds Chrome/Firefox Store
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m49s
CI / Deploy production (on server) (push) Successful in 24s
- Nouvelle page /privacy bilingue (FR/EN) avec sélection par Accept-Language
  ou ?lang=, sections complètes (données collectées, IA/BYOK, RGPD, sécurité,
  contact). Style sombre aligné sur la landing (x.ai premium).
- Liens footer landing.footer.legal.* mis à jour vers /privacy dans les 15 locales.
- Extension Web Clipper rendue cross-browser :
  * background.js détecte chrome.sidePanel vs browser.sidebarAction
  * sidepanel.js ajoute un shim chrome<->browser pour Firefox
  * manifest.json inclut sidebar_action + browser_specific_settings.gecko
    + optional_host_permissions (Chrome les ignore)
- Script scripts/build-firefox.mjs pour produire un .xpi signé pour AMO,
  symétrique de build-chrome-store.mjs. Exclusion mutuelle des artefacts
  Chrome/Firefox pour éviter la cross-contamination.
- Branding corrigé : 176 occurrences de 'Momento' -> 'Memento' dans le
  bundle de traductions embarqué.
- Version bumpée 0.3.1 -> 0.4.0.
2026-07-18 09:00:44 +00:00
Antigravity
88a7d2ad0a fix(audit): nettoyage accès, garde-fous build, unification quotas
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m59s
CI / Deploy production (on server) (push) Successful in 24s
Semaine 1 — fuites et accès :
- /archive rendu accessible via sidebar (était invisible)
- Suppression pages orphelines : /chat, /graph, /support, test-title-suggestions
- Fixes i18n : search-modal (clé non interpolée), sidebar tooltips, export PDF
- 15 locales mises à jour

Semaine 2 — garde-fous :
- 8 erreurs TS fixees → ignoreBuildErrors: false (build type-safe)
- reactStrictMode: true (dev-only, zero impact prod)
- reserveUsageOrThrow → wrapper deprecie vers reserveAiUsageOrThrow
- auth-guard.ts : requireAuthOrResponse() + requireAdminOrResponse()

Tests 212/212 | Lint 0 erreur | Build OK | tsc 0 erreur
2026-07-17 18:47:44 +00:00
Antigravity
a77f3ffb6e fix: batch priorités — thème, scroll, wizard, agents, slides, charts, packs
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m15s
CI / Deploy production (on server) (push) Has been skipped
Anti-flash dark (color-scheme + applyDocumentTheme), scroll pages publiques,
prompts wizard/slides moins génériques, cron agents rattrapage nextRun null,
slides carnet via notebookId, graphiques à 2 crédits + hint, audit dashboard,
packs Stripe marqués non configurés sans price ID.
2026-07-16 20:48:55 +00:00
Antigravity
556a0b2f3f feat(credits): solde IA unique (option M), packs Stripe et polish billing
Un pot de crédits global (BASIC 100 / PRO 1 000 / BUSINESS 4 000) remplace
les seaux par fonction côté débit. Packs one-shot S/M/L, admin sans seaux
legacy, usage multi-features, hints de coût, anti-flash thème et hydratation
admin. Inclut aussi le pipeline slides renforcé et la page publique polishée.
2026-07-16 20:43:18 +00:00
Antigravity
704fed1191 fix: Memory Echo sans vol de scroll, badge IA sidebar, wizard langue
- Ne plus auto-scroller vers Memory Echo : pastille bas de page + reset scroll au titre
- Badges notes/carnets générés par l’IA dans la sidebar
- Wizard : langue du contenu = langue de la requête ; refresh carnet après création
- Voix : erreurs not-allowed/no-speech moins bruyantes
2026-07-16 17:25:57 +00:00
Antigravity
45297da333 fix: images, couverture, slash, agents, wizard, Stripe et admin
- Collage/accès images: ownership path userId + meta legacy, 403 non caché
- Couverture note: explicite (choix/aucune), plus d’auto depuis le corps
- Éditeur: suppression image TipTap, sync immédiate, toolbar réordonnée
- Slash: listes par titre (plus d’index), keywords nettoyés
- Agents: nextRun à la réactivation, cron sans stampede null
- Wizard: titres courts + mode Expert plus robuste
- Stripe checkout hosted fiable; admin métriques live; dark mode IA/settings
- Indexation notes courtes + test unit aligné
2026-07-16 16:58:07 +00:00
Antigravity
4fe31ebc99 fix(quotas): unifier le décompte IA (BYOK, rollback) et combler les fuites
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m55s
CI / Deploy production (on server) (push) Successful in 36s
Centralise la réserve via ai-quota, corrige admin unavailable (-1), brancher les routes sans quota et le host-pays brainstorm, avec usage-meter élargi, noms de clusters, MCP et ajustements dashboard/insights.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 20:42:25 +00:00
Antigravity
30da592ba2 feat(dashboard): tableau de bord Second Brain configurable avec chargement progressif
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m3s
CI / Deploy production (on server) (push) Successful in 23s
Briefing granulaire, pistes rapides puis enrichissement async, layout persisté v5,
suggestions agents, intégration Gmail et navigation sidebar alignée sur /home.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-14 16:50:53 +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
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
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
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
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
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
Antigravity
be500189c3 fix(lint): remplacer <a href="/"> par Link sur la page site carnet
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m18s
CI / Deploy production (on server) (push) Successful in 59s
Corrige les 2 erreurs ESLint @next/next/no-html-link-for-pages qui bloquaient la CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 08:38:00 +00:00
Antigravity
b3fb46fc52 feat(insights): UX gap closure — i18n, network graph, recalc panel, toasts
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m6s
CI / Deploy production (on server) (push) Has been skipped
Bugs fixes:
- network-graph.tsx: 2 strings hardcoded FR → props i18n (untitledLabel, resetFocusLabel)
- Panneau recalcul: clés i18n réutilisées avec mauvais sens → nouvelles clés recalcSystem.*
- 13 locales: section insightsView.* complète (67 clés × 13 = 871 traductions)

UX features:
- Hint /insights ≠ /graph (semanticGraphLegend + lien vers /graph)
- Toasts succès/échec/zéro-clusters après analyse (analysisSuccess/Failed/NoClusters)
- État vide différencié: emptyNeedMoreNotes si < 10 notes
- Tips contextuels sections Bridge Notes et Suggestions

Sprint:
- 4 epics marqués done (3,4,5,6 — toutes stories terminées)
- sprint-status.yaml last_updated corrigé
2026-06-28 08:06:05 +00:00
Antigravity
96e7902f01 feat: publication IA (magazine/brief/essay) + fixes critique
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m22s
CI / Deploy production (on server) (push) Has been skipped
Publication IA:
- 4 templates (magazine, brief, essay, simple) avec CSS riche
- Rewrite IA (article/exercises/tutorial/reference/mixed)
- Modération avec timeout 12s + fallback safe
- Quotas publish_enhance par tier (basic=2, pro=15, business=100)
- Détection contenu stale (hash)
- Migration DB publishedContent/publishedTemplate/publishedSourceHash

Fixes:
- cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast
- _isShared ajouté au type Note (champ virtuel serveur)
- callout colors PDF export: extraction fonction pure testable
- admin/published: guard note.userId null
- Cmd+S fonctionne en mode dialog (pas seulement fullPage)

i18n:
- 23 clés publish* traduites dans les 15 locales
- Extension Web Clipper: 13 locales mise à jour

Tests:
- callout-colors.test.ts (6 tests)
- note-visible-in-view.test.ts (5 tests)
- entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs
- 199/199 tests passent

Tracker: user-stories.md sync avec sprint-status.yaml
2026-06-28 07:32:57 +00:00
Antigravity
eab4b3e27b feat: Memory Echo chunk-level — détecte connexions au niveau section
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
Quand la similarité whole-note ne passe pas le seuil, vérifie les chunks.
Si une section spécifique de la note A résonne avec une section de la note B,
la connexion est créée avec le snippet précis qui a matché.

SQL: cross-join LATERAL sur NoteEmbeddingChunk avec pgvector <=>.
Fallback gracieux si la table chunks est vide ou erreur.
2026-06-20 17:09:34 +00:00
Antigravity
e9e829e579 fix: TOUTES les clés i18n manquantes ajoutées — 0 erreur
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m15s
CI / Deploy production (on server) (push) Successful in 37s
- general.continue/send
- structuredViews.tagApplied/filterDone/filterTodo/propertyStatus
- wizard.taskA/taskB
- richTextEditor.preview*Tip (7 clés SlashPreview)
- wizard.* au niveau racine (48 clés FR + 48 EN)
- Total: 0 clé manquante pour FR et EN
- 0 erreur TypeScript
2026-06-20 17:01:04 +00:00
Antigravity
4d96605144 fix(security): Phase 1 P0 hardening from cross-project audit
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m42s
CI / Deploy production (on server) (push) Successful in 33s
Close open uploads, image-proxy SSRF, fail-open AI quotas in production,
auth gaps on app routes, and MCP tenant isolation issues.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-20 16:53:19 +00:00
Antigravity
af277f418a fix: console.log retirés du code production + i18n slash menu
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m31s
CI / Deploy production (on server) (push) Successful in 21s
- Retiré tous les console.log de rich-text-editor.tsx (2)
- Retiré console.log qui fuitait le contenu utilisateur dans chart-suggestions-dialog.tsx
- Commenté tous les console.log dans notes.ts (9 appels)
- i18n: slashCharts, slashLivingBlock, frequentCommands traduits
2026-06-20 16:18:27 +00:00
Antigravity
ee70e74bf5 fix: 5 bugs critiques de l'éditeur (Phase 1 audit)
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m39s
CI / Deploy production (on server) (push) Successful in 22s
1. replaceAll (Find & Replace) — une seule transaction ProseMirror
   au lieu d'un forEach cassé. Tous les matchs sont maintenant remplacés.

2. Link Preview unwrap — deleteNode() au lieu de clearer les attrs
   qui laissaient un nœud fantôme invisible dans le document.

3. Conversion Markdown → richtext — breaks: true dans marked.parse()
   Les simple newlines sont maintenant convertis en <br>.
   + préserve les blocs custom (toggle, callout, math, columns,
   outline, link-preview) en commentaires HTML lors de l'export MD.

4. emitNoteChange exercices — shape corrigée (type:'created' attend
   un objet Note, pas noteId/notebookId séparés).

5. Raccourcis clavier sans conflit :
   Cmd+Shift+C → Cmd+Alt+C (callout, avant: copier)
   Cmd+Shift+O → Cmd+Alt+O (outline, avant: historique/signets)
   Cmd+Shift+L → Cmd+Alt+L (colonnes, avant: lock screen macOS)
2026-06-20 15:48:18 +00:00
Antigravity
3a1e4254df fix: chunk indexing en import dynamique — ne casse plus notes.ts si p-queue/migration absent
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m27s
CI / Deploy production (on server) (push) Failing after 2s
Les imports statiques de chunkIndexingService dans notes.ts et clip/save
causaient un crash du module entier si la table NoteEmbeddingChunk
n'existait pas en production. Maintenant les imports sont dynamiques
( await import() ) avec try-catch — les notes fonctionnent même si
le chunk indexing est indisponible.
2026-06-20 10:57:17 +00:00
Antigravity
17594124b0 feat: modération IA automatique à la publication
Some checks failed
CI / Lint, Unit Tests & Build (push) Successful in 5m30s
CI / Deploy production (on server) (push) Failing after 0s
- contentModerationService branché dans /api/notes/publish
- blocked → 403, publication refusée, toast d'explication
- flagged → publié mais admins notifiés pour révision
- safe → publication normale
- PublishDialog gère les 3 cas (succès normal, flagged, blocked)
- i18n FR/EN
2026-06-20 07:51:44 +00:00
Antigravity
3f3d37ebeb feat: pages publiées utilisateur (settings) + fix import Shield dupliqué
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 0s
CI / Deploy production (on server) (push) Has been skipped
- /settings/published : l'utilisateur voit ses notes publiées
  - Copier le lien, ouvrir, dépublier
  - API /api/user/published
- Onglet 'Mes pages' (Globe) dans la nav settings
- Fix: import Shield dupliqué dans admin-sidebar.tsx
- i18n FR/EN
2026-06-20 07:21:02 +00:00
Antigravity
722cb905e4 feat: panel admin pages publiées + force-dépublier + nav
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 0s
CI / Deploy production (on server) (push) Has been skipped
- /admin/published : liste toutes les notes publiées
- Bouton dépublier (force) pour chaque note
- Notification envoyée au propriétaire quand dépublié par admin
- API GET /api/admin/published (liste) + DELETE (force unpublish)
- Liens signalements affichés si notifications
- Onglet 'Pages publiées' dans sidebar admin (icône Shield)
- i18n FR/EN
- Fix: report page params Promise unwrap
2026-06-20 07:11:41 +00:00
Antigravity
a2d1926e6e fix: report page params Promise unwrap (Next.js 16)
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
2026-06-20 07:06:56 +00:00