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>
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)
- Menu déroulant GraduationCap : Flashcards + Exercices réunis
- Fix: language non défini dans toolbar (useLanguage destructuring)
- Fix: équations 658071 → KaTeX dans exercices (preprocessMathInHtml partagé)
- lib/text/math-preprocess.ts : utilitaire partagé wizard + exercices
- Toast avec bouton 'Voir' pour rafraîchir après création exercices
- emitNoteChange pour rafraîchir la liste
- i18n FR/EN
- Générateur d'exercices : bouton dans menu note → IA crée 5 exercices
- Niveaux variés (facile/moyen/difficile) avec emojis 🟢🟡🔴
- Corrigés détaillés dans des toggles (cliquer pour révéler)
- Callout warning pour le niveau
- Notes créées dans le même carnet
- Planning de révision : bouton dans barre carnet → IA crée planning
- Choix date d'examen
- Répétition espacée (première lecture → revoir → révision globale)
- Rappels automatiques ajoutés aux notes (9h le jour J)
- Vue chronologique avec activités et notes par jour
- Services : exercise-generator.service.ts + study-planner.service.ts
- Endpoints : /api/ai/generate-exercises + /api/ai/study-plan
- i18n FR/EN complet
Le test 'should return FEATURE_NOT_AVAILABLE for BASIC user requesting chat'
était décalé par rapport à la config actuelle où BASIC a 10 crédits chat/mois.
Remplacement par deux tests reflétant la réalité:
- BASIC sous la limite (5/10) → allowed=true, limit=10
- BASIC à la limite (10/10) → allowed=false, reason=QUOTA_EXCEEDED
Les tests migration exigent un schéma aligné via db push (hors scope CI).
Trois fichiers unitaires importaient @playwright/test par erreur.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Sidebar: dynamic brand-accent colors, brainstorm section restyled
- AI chat general: popup panel with expand/collapse, hides when contextual AI open
- AI chat contextual: tabs reordered (Actions first), X close button, height fix
- Settings: all tabs restyled, 6 new color presets (sage, terracotta, iron, etc.)
- Global color cleanup: emerald/orange hardcoded → brand-accent dynamic
- Brainstorm page: orange → brand-accent throughout
- PageEntry animation component added to key pages
- Floating AI button: bg-brand-accent instead of hardcoded black
- i18n: all 15 locales updated with new AI/billing keys
- Billing: freemium quota tracking, BYOK, stripe subscription scaffolding
- Admin: integrated into new design
- AGENTS.md + CLAUDE.md project rules added
- Remove BMAD framework, IDE configs, dev screenshots, test files,
internal docs, and backup files
- Rename keep-notes/ to memento-note/
- Update all references from keep-notes to memento-note
- Add Apache 2.0 license with Commons Clause (non-commercial restriction)
- Add clean .gitignore and .env.docker.example