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
This commit is contained in:
Antigravity
2026-06-28 07:32:57 +00:00
parent 902fe95a69
commit 96e7902f01
169 changed files with 5382 additions and 1527 deletions

View File

@@ -11,11 +11,11 @@
## Contexte
Momento dispose d'un moteur IA, d'un éditeur riche, de carnets, et d'un système de quotas. Mais aucun utilisateur nouveau n'est guidé vers l'expérience "Aha!" décrite dans le GTM :
Memento dispose d'un moteur IA, d'un éditeur riche, de carnets, et d'un système de quotas. Mais aucun utilisateur nouveau n'est guidé vers l'expérience "Aha!" décrite dans le GTM :
> *"Tapez une question. Retrouvez une note que vous aviez oubliée."*
Sans onboarding, le taux d'activation sera faible même avec un produit excellent. Un utilisateur qui arrive sur `/home` sans notes ne comprend pas ce que Momento fait. Le wizard doit :
Sans onboarding, le taux d'activation sera faible même avec un produit excellent. Un utilisateur qui arrive sur `/home` sans notes ne comprend pas ce que Memento fait. Le wizard doit :
1. Créer des **données de démo** (5 notes exemple dans sa langue) si l'utilisateur arrive avec un carnet vide
2. Guider vers la **Recherche Sémantique** en 2 clics (l'effet "Aha!")
@@ -60,12 +60,12 @@ model User {
### US-ONBOARDING-2 : Wizard 3 étapes
**En tant que** nouvel utilisateur,
**Je veux** un guide en 3 étapes courtes qui me montre la valeur de Momento,
**Je veux** un guide en 3 étapes courtes qui me montre la valeur de Memento,
**Afin de** comprendre pourquoi je devrais utiliser ce produit plutôt qu'un autre.
#### Étape 1 — "Bienvenue" (10 secondes)
- Titre : *"Votre mémoire augmentée par l'IA"*
- Sous-titre : *"Momento se souvient de ce que vous oubliez."*
- Sous-titre : *"Memento se souvient de ce que vous oubliez."*
- CTA : `"Commencer →"` + lien `"Passer l'intro"`
#### Étape 2 — "Vos notes" (30 secondes)
@@ -85,7 +85,7 @@ model User {
- FA : *"یادداشت‌های بهره‌وری"* (RTL)
- L'utilisateur clique sur Rechercher → les résultats apparaissent
- Afficher badge : `"✨ 1 recherche utilisée sur 30 (Starter Pack)"`
- CTA final : `"Je comprends — Explorer Momento"`
- CTA final : `"Je comprends — Explorer Memento"`
#### Critères d'acceptation généraux :
- Wizard rendu en overlay (`position: fixed`, z-index élevé) avec fond semi-transparent
@@ -177,7 +177,7 @@ model User {
{
"onboarding": {
"welcome_title": "Your AI-augmented memory",
"welcome_subtitle": "Momento remembers what you forget.",
"welcome_subtitle": "Memento remembers what you forget.",
"welcome_cta": "Get started",
"skip": "Skip intro",
"step_notes_title": "Your notes",
@@ -189,7 +189,7 @@ model User {
"step_aha_title": "Find what you forgot",
"step_aha_subtitle": "Type a question. Find a note you forgot.",
"step_aha_placeholder": "notes about productivity...",
"step_aha_cta": "Explore Momento",
"step_aha_cta": "Explore Memento",
"progress": "{current} of {total}"
},
"starterPack": {