# 03 — Packaging : la vision complète des packages

**Statut : accepté · Phase : transverse · Mis à jour : 02/11/2026.**

Ce document est l'**inventaire exhaustif**. Il couvre tout ce qui existe aujourd'hui (le framework
de sites, presentation-engine, emaki), ce qu'on garde, renomme ou supprime, ce qu'on crée, et les
noms réservés sans être utilisés. Aucun projet du workspace ne doit exister sans une ligne dans ce
document.

Légende des décisions :

- ✅ **garder** tel quel ;
- ✏️ **renommer** ou déplacer ;
- 🆕 **créer** ;
- 🗑️ **supprimer** ;
- 🔒 **réserver** le nom npm sans code ;
- 📅 **planifié** dans une phase ultérieure. Certains ont déjà un squelette privé `0.0.0`
  (`export {}`) créé en P1 : `packages/{data,time}` et
  `packages/formats/{report,toon,book,roadmap,calendar,stories,paged}` ; le code arrive dans la
  phase.

## 1. Découpage en sous-projets

Le monorepo est découpé en **groupes**. Chacun est un dossier qui correspond à un glob pnpm :

| Groupe                          | Dossier                                                         | Rôle                                                                                                                                                                                                                                                                                                                                                             | Publié sur npm                       |
| ------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| **Socle du framework de sites** | `packages/site/`                                                | cœur du framework de sites forké, le seul vestige du dépôt d'origine                                                                                                                                                                                                                                                                                             | non                                  |
| **Fondations**                  | `packages/{core,theme,components,data,time,form,geo,scenario}/` | modèle `Story`, parseur, config, thèmes, **composants partagés par tous les formats**, données. Ne dépend d'aucun format ni de `@recit/paged`. Acceptées le 24/10 (plans 10, 13, 14) : `form` (P10), `geo` (P6), `scenario` (P16) ; `pixel` réservé sans package                                                                                                 | oui                                  |
| **Formats**                     | `packages/formats/*`                                            | un package par format : `deck`, `motion` (+ `motion-blocks`, `motion-render`), `report`, `toon`, `book`, `roadmap`, `calendar`, `stories`. Acceptés le 24/10 : `directory` (P9, déclare deux formats, `glossary` et `directory`, qui partagent leur modèle, règle B11), `atlas` (P15). Un format expose une vue imprimable et ne dépend jamais de `@recit/paged` | oui                                  |
| **Intégrations**                | `packages/integrations/*`                                       | branchements vers des hôtes : `@recit/site` aujourd'hui (plus tard Next, Astro, VS Code…)                                                                                                                                                                                                                                                                        | oui                                  |
| **Distribution**                | `packages/{cli,recit,create-recit,mcp}/`                        | ce que l'utilisateur installe ou lance                                                                                                                                                                                                                                                                                                                           | oui                                  |
| **Outils**                      | `packages/tools/*`                                              | `paged` (chaîne d'impression Node, importée par la CLI seulement, P6), `app` (coquille Tauri 2 des sites, `18-mobile-desktop.md`), `studio` (squelette, import différé), `site-kit` : outillage interne ou spécialisé                                                                                                                                            | `paged` et `app` oui, les autres non |
| **Sites**                       | `sites/*`                                                       | un site par sous-domaine (voir `07-domaines.md`)                                                                                                                                                                                                                                                                                                                 | non                                  |
| **Exemples**                    | `examples/*`                                                    | projets minimaux, gabarits de `create-recit` et fixtures e2e                                                                                                                                                                                                                                                                                                     | non                                  |
| **Tests transverses**           | `e2e/`                                                          | Playwright sur les sites et les exemples                                                                                                                                                                                                                                                                                                                         | non                                  |
| **Marque**                      | `brand/`                                                        | logos, icônes, générateurs (voir `01-assets.md`) ; `brand/tools` est le projet privé `@recit/brand-tools` (scripts du logo)                                                                                                                                                                                                                                      | non                                  |

`pnpm-workspace.yaml` cible :

```yaml
packages:
  - packages/*
  - packages/formats/*
  - packages/integrations/*
  - packages/tools/*
  - sites/*
  - examples/*
  - brand/tools
  - "!**/dist/**"
  - "!**/dist"
```

On retire les globs `scripts`, `examples/**`, `website` et `docs`. emaki est copié directement dans
ces dossiers (voir `05-video.md`), sans glob temporaire.

## 2. Arborescence finale

```
recit/
├─ packages/
│  ├─ site/                      site (privé)            ← framework de sites, code de Récit
│  ├─ core/                        @recit/core
│  ├─ data/                        @recit/data               (données et graphiques, P6)
│  ├─ time/                        @recit/time               (dates, fuseaux, récurrences, ICS, P9)
│  ├─ geo/                         @recit/geo                (bloc ::map, lot P6, complet en P15)
│  ├─ form/                        @recit/form               (bloc :::form, lot P10, complet en P13)
│  ├─ scenario/                    @recit/scenario           (bible et attributs de scénario, P16)
│  ├─ theme/                       @recit/theme
│  ├─ components/                  @recit/components         (composants partagés par tous les formats)
│  ├─ cli/                         @recit/cli                (binaire `recit`)
│  ├─ recit/                       recit                     (alias sans scope)
│  ├─ create-recit/                create-recit              (npm create recit)
│  ├─ mcp/                         @recit/mcp
│  ├─ formats/
│  │  ├─ deck/                     @recit/deck               (+ @recit/deck/runtime)
│  │  ├─ motion/                   @recit/motion
│  │  ├─ motion-blocks/            @recit/motion-blocks
│  │  ├─ motion-render/            @recit/motion-render
│  │  ├─ report/                   @recit/report             (P6)
│  │  ├─ toon/                     @recit/toon               (webtoon, P7)
│  │  ├─ book/                     @recit/book               (P8)
│  │  ├─ roadmap/                  @recit/roadmap            (P9)
│  │  ├─ calendar/                 @recit/calendar           (P10)
│  │  ├─ stories/                  @recit/stories            (P11)
│  │  ├─ directory/                @recit/directory          (glossary et directory, lot P9, complet en P14)
│  │  └─ atlas/                    @recit/atlas              (P15)
│  ├─ integrations/
│  │  └─ site/                   @recit/site-stories
│  └─ tools/
│     ├─ paged/                    @recit/paged              (chaîne d'impression Node, P6 ; le stub de packages/formats/paged y est déplacé en PDF1)
│     ├─ app/                      @recit/app                (coquille Tauri 2 : un site en application desktop et mobile, Node, importée par la CLI seulement ; `18-mobile-desktop.md`)
│     ├─ studio/                   @recit/studio             (privé, squelette ; import d'emaki différé)
│     └─ site-kit/                 @recit/site-kit           (privé : en-tête et pied communs aux sites)
├─ sites/
│  ├─ www/                         recit.dev
│  ├─ docs/                        docs.recit.dev            (ex-`docs/` du framework de sites, déplacé)
│  ├─ components/                  components.recit.dev
│  ├─ presentation/                presentation.recit.dev
│  ├─ motion/                      motion.recit.dev
│  ├─ report/                      report.recit.dev          (P6)
│  ├─ webtoon/                     webtoon.recit.dev         (P7)
│  ├─ book/                        book.recit.dev            (P8)
│  ├─ roadmap/                     roadmap.recit.dev         (P9)
│  ├─ calendar/                    calendar.recit.dev        (P10)
│  ├─ story/                       story.recit.dev           (P11)
│  ├─ form/                        form.recit.dev            (site d'outil, P13)
│  ├─ directory/                   directory.recit.dev       (P14)
│  ├─ maps/                        maps.recit.dev            (P15)
│  └─ ai/                          ai.recit.dev              (site d'outil, P16)
├─ examples/
│  ├─ deck-starter/  deck-tech-talk/  deck-showcase/  deck-pitch/  deck-course/  deck-mdx/
│  ├─ motion-hello/  motion-saas/
│  ├─ report-quarterly/  report-study/  toon-episode/  book-novella/
│  ├─ roadmap-product/  calendar-meetups/  calendar-course/  stories-launch/
│  ├─ site-embed/                (récits intégrés dans une doc du framework de sites)
│  ├─ site-i18n/                 (doc du framework de sites multilingue, fixture de `e2e/site-i18n.spec.ts`)
│  └─ with-config/                 ✅ fixture des tests du cœur du framework de sites (gardée, voir §3.1)
├─ e2e/                            deck-features.spec.ts, deck-render.spec.ts, site-*.spec.ts, site-embed.spec.ts, site-i18n.spec.ts
├─ brand/
├─ sites/plans/pages/                           ce plan
├─ README.md  LICENSE.md  AGENTS.md  CLAUDE.md (lien vers AGENTS.md)
└─ biome.jsonc  nx.json  package.json  pnpm-workspace.yaml  vitest.config.ts  playwright.config.ts  lefthook.yml
```

## 3. Inventaire du le framework de sites : ce qu'on garde, ce qu'on supprime

### 3.1 Projets du workspace

| Projet actuel                                                                               | Nom npm               | Décision                         | Raison                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------- | --------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `packages/site`                                                                             | `@recit/site` 0.93.0  | ✅ garder, **privé**, non publié | socle de tous les sites et de `@recit/site-stories`, code de Récit ; sa publication est la décision D2 de [22](/22-alpha)                                                                         |
| `packages/create-site`                                                                      | `create-site`         | 🗑️ supprimer                     | remplacé par `packages/create-recit` (on s'en inspire avant suppression, voir P0)                                                                                                                 |
| `packages/plugin-graphql`                                                                   | `plugin du framework` | 🗑️ supprimer                     | doc d'API GraphQL : hors sujet. Le cœur `@recit/site` garde sa dépendance `graphql` interne (Pothos), qui n'a rien à voir                                                                         |
| `packages/plugin-search-algolia`                                                            | `plugin du framework` | 🗑️ supprimer                     | Récit utilise Pagefind (intégré au cœur)                                                                                                                                                          |
| `docs/`                                                                                     | `docs`                | ✏️ `git mv` vers `sites/docs`    | la doc du framework de sites sert de base à docs.recit.dev (config, déploiement, vérification des liens, historique). Son contenu est remplacé par la doc Récit en P2. Patch n° 2 d'`UPSTREAM.md` |
| `examples/with-config`                                                                      | `with-config`         | ✅ garder                        | fixture de `packages/site/src/vite/config.test.ts`. La supprimer casserait les tests du cœur                                                                                                      |
| `examples/cosmo-cargo`                                                                      | `cosmo-cargo`         | 🗑️ supprimer                     | démo OpenAPI, utilisée par `e2e/cosmo-cargo.spec.ts` et la CI du framework de sites. Remplacée par `sites/docs` et nos e2e                                                                        |
| `examples/api-identity-plugin`, `api-key-service` et les exemples de monétisation           | —                     | 🗑️ supprimer                     | clés d'API et monétisation                                                                                                                                                                        |
| `examples/auth-firebase`, `auth-supabase`, `with-auth0`                                     | —                     | 🗑️ supprimer                     | authentification de portail développeur. Les providers restent disponibles dans le cœur                                                                                                           |
| `examples/aws-lambda-ssr`, `cloudflare-ssr`                                                 | —                     | 🗑️ supprimer                     | à réécrire si un site Récit passe en SSR (voir les notes de `llm/`)                                                                                                                               |
| `examples/graphql`, `many-apis`, `with-openapi-json`, `with-openapi-yaml`, `search-algolia` | —                     | 🗑️ supprimer                     | OpenAPI, GraphQL ou Algolia                                                                                                                                                                       |
| `examples/mermaid`, `with-base-path`, `with-vite-config`                                    | —                     | 🗑️ supprimer                     | couverts par nos exemples. `base-path` est à retester dans un `e2e/site-*.spec.ts` (pas encore fait)                                                                                              |
| `scripts/` (`check-admonitions.mjs`)                                                        | —                     | ✏️ garder et adapter             | vérifie les admonitions des pages MDX : globs `sites/**/pages/**` au lieu de `docs/` et `examples/`                                                                                               |
| `website` (glob sans dossier)                                                               | —                     | 🗑️ retirer du workspace          | n'existe pas                                                                                                                                                                                      |

### 3.2 Fichiers racine et CI

| Fichier                                                                                      | Décision                                                                                                                                                          |
| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `LICENSE.md`                                                                                 | ✅ MIT, copyright de Récit et d'emaki (voir `NOTICE.md`)                                                                                                          |
| `NOTICE.md`, `UPSTREAM.md`                                                                   | 🆕 créés (racine)                                                                                                                                                 |
| `README.md`                                                                                  | ✏️ réécrit pour Récit, avec une section « Fork of the site framework » (exigence de `NOTICE.md`)                                                                  |
| `CHANGELOG.md`                                                                               | 🗑️ celui du framework de sites. Un `CHANGELOG.md` racine **unique** est recréé par `nx release` à la première version Récit                                       |
| `CONTRIBUTING.md`                                                                            | ✏️ réécrit (workflow Récit, synchronisation upstream)                                                                                                             |
| `AGENTS.md` / `CLAUDE.md`                                                                    | ✏️ mis à jour en fin de P1. Les conventions de code restent, et une section pointe vers `context.md` et `sites/plans/pages/`                                      |
| `assets/github-hero.png`                                                                     | 🗑️ remplacé par `brand/social/`                                                                                                                                   |
| `llm/` (notes SSR du framework de sites)                                                     | ✅ garder : référence utile pour patcher le cœur                                                                                                                  |
| `graphql.config.yml`, `patches/`, `llm/`, `.nxignore`, `.cspell.json`, `.vscode/launch.json` | 🗑️ supprimés le 25/10 (inutiles pour Récit ; liste des chemins supprimés d'`UPSTREAM.md`)                                                                         |
| `nx.json`                                                                                    | ✏️ `release.projects` : `["site", "create-site"]` → la liste explicite des packages publiés (§10)                                                                 |
| `playwright.config.ts`                                                                       | ✏️ serveur web : `cosmo-cargo` → `sites/docs` et `examples/deck-showcase`                                                                                         |
| `package.json` racine                                                                        | ✏️ `name: "root"` → `"recit-monorepo"`. On retire `release:pre` / `release:minor` (workflows du framework de sites) et on ajoute `recit:*` (aucun pour l'instant) |
| `.github/workflows/build.yaml`                                                               | ✏️ réécrit : `pnpm check`, `nx affected -t build test typecheck`, e2e. Sans publication canary de `@recit/site`                                                   |
| `.github/workflows/main.yaml` (release du framework de sites, identité du bot d'origine)     | 🗑️ remplacé par `release.yaml` Récit                                                                                                                              |
| `.github/workflows/preview-build.yaml` (verdaccio + cosmo-cargo)                             | 🗑️ supprimer                                                                                                                                                      |
| `.github/workflows/release-monetization.yaml` (déclenche un dépôt privé)                     | 🗑️ supprimer                                                                                                                                                      |
| `.github/workflows/dependabot.yaml`, `.github/dependabot.yml`, `.github/release.yaml`        | 🗑️ `dependabot.yaml` (auto-approbation) et `release.yaml` supprimés le 25/10 ; ✏️ `dependabot.yml` sans `packages/site` (audit ST-19)                             |

### 3.3 À l'intérieur de `packages/site` : on ne supprime rien

Les plugins internes (`openapi`, `api-catalog`, `api-keys`, `search-inkeep`, `search-pagefind`,
`markdown`, `custom-pages`), les providers d'authentification et le code propre à l'éditeur
d'origine **restent**. Les supprimer créerait des conflits à chaque synchronisation upstream. Ils ne
sont simplement pas activés par les sites Récit, et le tree-shaking de Vite les écarte du bundle.
S'ils pèsent quand même sur la taille ou la sécurité, on les désactive par configuration, jamais par
suppression de code.

## 4. Inventaire de presentation-engine

| Package actuel                                           | Devient                                                                                                                                       | Dossier                                        |
| -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `@presentation/core`                                     | ✏️ `@recit/core`                                                                                                                              | `packages/core`                                |
| `@presentation/theme`                                    | ✏️ `@recit/theme`                                                                                                                             | `packages/theme`                               |
| `@presentation/components`                               | ✏️ découpé : `slides/` et `mdx/builtins` génériques → `@recit/components`, le reste (`deck/`, `hooks/`, `tools/`, `MdxSlide`) → `@recit/deck` | `packages/components`, `packages/formats/deck` |
| `@presentation/runtime`                                  | ✏️ fusionné dans `@recit/deck` (sous-chemin `./runtime`)                                                                                      | `packages/formats/deck/src/runtime`            |
| `@presentation/cli`                                      | ✏️ `@recit/cli`                                                                                                                               | `packages/cli`                                 |
| `@presentation/site-extension`                           | ✏️ `@recit/site-stories`                                                                                                                      | `packages/integrations/site-stories`           |
| `@presentation/docs`                                     | ✏️ découpé en `sites/docs` (documentation) et `sites/presentation` (galerie et démos)                                                         | `sites/*`                                      |
| `examples/{starter,tech-talk,showcase,pitch,course,mdx}` | ✏️ `examples/deck-*`                                                                                                                          | `examples/`                                    |
| `examples/site-integrated`                               | ✏️ `examples/site-embed`                                                                                                                      | `examples/`                                    |
| `website/` (ancien site)                                 | 🗑️ non repris                                                                                                                                 | —                                              |

## 5. Inventaire d'emaki

| Package actuel                                       | Devient                                                                                                                                                          | Dossier final                            |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| `@emaki/schema` + `@emaki/core` + `@emaki/extract`   | ✏️ `@recit/motion` (`extract` fusionné ici, sans React ; la commande `recit extract` reste)                                                                      | `packages/formats/motion`                |
| `@emaki/blocks` + `@emaki/ui`                        | ✏️ `@recit/motion-blocks`                                                                                                                                        | `packages/formats/motion-blocks`         |
| `@emaki/themes`                                      | ✏️ d'abord dans `@recit/motion-blocks`, puis dans `@recit/theme` (V7)                                                                                            | `packages/theme/src/motion`              |
| `@emaki/render`                                      | ✏️ `@recit/motion-render`                                                                                                                                        | `packages/formats/motion-render`         |
| `@emaki/mcp`                                         | ✏️ `@recit/mcp` (étendu au deck)                                                                                                                                 | `packages/mcp`                           |
| `@emaki/cli`                                         | ✏️ fusionné dans `@recit/cli`                                                                                                                                    | `packages/cli`                           |
| `@emaki/studio` (privé)                              | 📅 squelette `@recit/studio` (privé) ; import différé tant que le studio est simulé (`journal.md` §5)                                                            | `packages/tools/studio`                  |
| `fixtures/*.deck.json`, `fixtures/assets`            | ✏️ `packages/formats/motion/fixtures/`                                                                                                                           | —                                        |
| `fixtures/goldens/*.png` (16)                        | ✏️ `packages/formats/motion-render/fixtures/goldens/`                                                                                                            | —                                        |
| `scripts/` (goldens, write-agents, write-readmes)    | ✏️ `goldens.mjs` dans `packages/formats/motion-render/scripts/`, `write-agents.ts` dans `packages/mcp/scripts/` ; `write-readmes` non repris                     | —                                        |
| `templates/`                                         | ✏️ gabarits `motion` de `create-recit`                                                                                                                           | `packages/create-recit/templates/motion` |
| `PUBLISHING.md`, `README.md`, `AGENTS.md`, `PLAN.md` | non archivés : ils restent dans le dossier emaki d'origine (`sites/plans/pages/archive/emaki/` abandonné) ; `AGENTS.md` régénéré dans `packages/formats/motion/` | —                                        |
| `@emaki/*` déjà publiés sur npm                      | 🗑️ `npm deprecate` vers `@recit/motion`                                                                                                                          | —                                        |

## 6. Tous les packages Récit

| Package                | Groupe                                            | Statut            | Publié  | Source                                               | Contenu                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | Dépendances notables                                                                                                                                                                                                                                      |
| ---------------------- | ------------------------------------------------- | ----------------- | ------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `@recit/core`          | fondations                                        | 🆕 P1             | oui     | `@presentation/core`                                 | parseur (`scanner`, `split-scenes`, `frontmatter`, `markdown-ast`, `unified-pipeline`), `compileStory`, plugins rehype, MDX, config (`defineConfig`, `mergeConfig`, `theme-css`), règles, types `Story` / `Scene`. Sous-chemins `./browser`, `./config`, `./schema` (schémas zod et JSON Schema de chaque format), `./i18n` (langues, repli, packs d'interface) : voir `09-langues-et-json.md`. Sous-chemin `./print` (contrat d'impression, code navigateur : `?print=1`, `recitReady`, `whenPrintable()`) ; schémas des options PDF et `ExportManifestSchema` (manifeste `exports.json` commun à tous les exports) : voir `15-export-pdf.md`. Sous-chemin `./jsonld` (P10, fonctions pures partagées par calendar et directory, `12-glossaire-annuaire.md` D11). Le plugin `:term` n'est pas ici : il vit dans `@recit/components` (règle B4)                                                                                                                                                                                                                                                                                                                                      | unified, remark-parse/gfm/directive/math, rehype-katex/raw/sanitize, @shikijs/rehype + shiki 4.5, @mdx-js/mdx, yaml. zod 4 (catalogue)                                                                                                                    |
| `@recit/theme`         | fondations                                        | 🆕 P1             | oui     | `@presentation/theme`, puis `@emaki/themes`          | `tokens.css`, `fonts.css`, `deck.css`, `page.css`, `print.css`, `reset.css` (copie du preflight de Tailwind 4.3.3, MIT, plan 19 STY5c : la base des sites, des decks et de Storybook), tokens TS, thèmes `default`, `warm-editorial`, `saas-product`. `tailwind.css` et `site-compat.css` retirés par le plan 19                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | aucune (peer `tailwindcss` retiré, plan 19)                                                                                                                                                                                                               |
| `@recit/components`    | fondations                                        | 🆕 P1             | oui     | `@presentation/components/src/{slides,mdx/builtins}` | composants par défaut, **les mêmes dans tous les formats** : `Callout`, `CodeBlock`, `CodeGroup`, `Grid`, `Media`, `Mermaid`, `Points`, `Quote`, badge, kbd… Un format fournit la mise en page, jamais ses propres versions de ces composants. Un module CSS par composant, compilé en `./styles.css` (plan 19). Vitrine : components.recit.dev                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | react 19 (peer), `@recit/theme`. Jamais `@recit/site` (privé)                                                                                                                                                                                             |
| `@recit/deck`          | formats                                           | 🆕 P1             | oui     | `@presentation/components` + `runtime`               | `Presentation`, `SlideStage`, `SlideFrame`, `PresenterView`, hooks, `HtmlSlide`, `MdxSlide`, outils (télécommande, HUD, annotations), i18n fr/en. `./runtime` (`DeckApp`, `mount`) et `./page-data`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | react 19 (peer), motion, mermaid, qrcode, katex. shiki en import dynamique (`CodeBlock`), à déplacer côté build                                                                                                                                           |
| `@recit/motion`        | formats                                           | 🆕 P4             | oui     | `@emaki/schema` + `core` + `extract`                 | schéma `Deck` zod, `parseDeck`, ops, timing, chargeur `.md`/`.json`, `storyToHandover`, `deckToMarkdown`. `extract` fusionné ici : handover vers Deck, extraction depuis une URL ou une app (commande `recit extract`)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | zod 4                                                                                                                                                                                                                                                     |
| `@recit/motion-blocks` | formats                                           | 🆕 P4             | oui     | `@emaki/blocks` + `ui`                               | blocs `title`, `chapter`, `statement`, `stat`, `list`, `compare-bars`, `ui-mock`, `ui-scene`. Moteur de lecture navigateur                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | react 19, motion (unifié avec le deck)                                                                                                                                                                                                                    |
| `@recit/motion-render` | formats                                           | 🆕 P4             | oui     | `@emaki/render`                                      | rendu MP4 et GIF via Remotion                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | remotion 4, @remotion/bundler, @remotion/renderer, Chrome Headless Shell (environ 93 Mo). Remotion tire zod 4.4.3 dans l'arbre de ce seul package (`05-video.md`)                                                                                         |
| `@recit/report`        | formats                                           | 📅 P6             | oui     | —                                                    | rapports de données : layout continu, sommaire, `:::kpi`, HTML et PDF (spec : `08-formats.md` §1)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | `@recit/data`, `@recit/core` (vue imprimable ; `@recit/paged` n'est importé que par la CLI)                                                                                                                                                               |
| `@recit/data`          | fondations                                        | 📅 P6             | oui     | —                                                    | sources CSV/JSON/YAML, agrégations, `:value`, `::chart` (d3 sans DOM, SVG au build : question 10 de `06-roadmap.md`, tranchée le 24/10), `::table`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | d3-dsv, d3-scale, d3-shape (déjà dans le lockfile), partagés avec `@recit/geo`                                                                                                                                                                            |
| `@recit/paged`         | outils (`packages/tools/paged`, tag `scope:tool`) | 📅 P6             | oui     | logique PDF de `@recit/cli`                          | **Node uniquement, importé par la CLI seulement** (et les outils de rendu Node). Chaîne d'impression de tous les formats qui s'impriment (`15-export-pdf.md`) : sous-export `./runner`, seul module « lancer Chromium, servir un build, attendre prêt, mesurer, imprimer ou capturer » (PDF, tranches du toon, images, cartes) ; `PrintEngine` (`chromium` pour tous, `pagedjs` pour book en P8 et en option du report), `pageCss(options)`. Table des matières numérotée avec Paged.js (P8). Le stub actuel (`packages/formats/paged`) est déplacé en PDF1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | `@recit/core` ; Playwright en pair optionnelle (`playwright-core` pour les types) ; `pagedjs` chargé à la demande (P8, après le spike PDF3.0)                                                                                                             |
| `@recit/app`           | outils (`packages/tools/app`, tag `scope:tool`)   | 📅 APP1 (plan 18) | oui     | —                                                    | **Node uniquement, importé par la CLI seulement.** Coquille Tauri 2 commune à tous les sites (`18-mobile-desktop.md`) : `tauriConfig()`, `materializeShell()` vers `<site>/.recit/app/`, `serveLikeTauri()`, `runTauri()`, `isPortInUse()` ; le `dist/` prérendu est embarqué et servi hors ligne, desktop (`.deb`, `.AppImage`, `.dmg`, `.msi`) puis Android et iOS ; la section `app:` est typée dans `@recit/core`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | `@recit/core` ; `@tauri-apps/cli`, seule dépendance nouvelle, épinglée au catalogue de `pnpm-workspace.yaml` ; aucun import de `@recit/site`                                                                                                              |
| `@recit/toon`          | formats                                           | 📅 P7             | oui     | —                                                    | webtoons : cases, bulles, encarts, sfx, lecteur au scroll, traductions par scène, découpe en tranches, vue imprimable (PDF coupé entre les cases), pont vers motion (spec : `08-formats.md` §2)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | react 19, motion, sharp (découpe). Pas `@recit/paged` : la CLI capture par `@recit/paged/runner`, puis appelle la découpe du toon                                                                                                                         |
| `@recit/book`          | formats                                           | 📅 P8             | oui     | —                                                    | livres : multi-fichiers, notes, renvois, index, HTML intermédiaire partagé par le PDF et l'EPUB, PDF imprimable, EPUB 3, édition web via `@recit/site-stories` (spec : `08-formats.md` §3)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | `@recit/core` (pas `@recit/paged` : seule la CLI l'importe), fflate, hast-util-to-html                                                                                                                                                                    |
| `@recit/roadmap`       | formats                                           | 📅 P9             | oui     | —                                                    | roadmaps : pistes, éléments, jalons, vues now-next-later, frise, kanban, exports ICS, RSS et PDF (spec : `08-formats.md` §4)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | `@recit/time`, `@recit/core` (PDF par la CLI et `@recit/paged`)                                                                                                                                                                                           |
| `@recit/calendar`      | formats                                           | 📅 P10            | oui     | —                                                    | calendriers : événements, récurrences, fuseaux, vues mois, semaine, agenda et année, ICS abonnable, JSON-LD (spec : `08-formats.md` §5)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | `@recit/time`                                                                                                                                                                                                                                             |
| `@recit/stories`       | formats                                           | 📅 P11            | oui     | —                                                    | stories web : cartes `9:16`, lecteur tap et swipe, CTA, export d'images, pont avec motion (spec : `08-formats.md` §6)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | react 19, motion, `@recit/motion-blocks` (peer optionnel)                                                                                                                                                                                                 |
| `@recit/time`          | fondations                                        | 📅 P9             | oui     | —                                                    | dates, trimestres, fuseaux, `rrule`, ICS (lecture et écriture), formatage `Intl`. Utilisé par roadmap et calendar ; le report (P6) s'en passe (axes temporels par `Intl` et l'échelle temporelle de `d3-scale`)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | rrule, polyfill Temporal                                                                                                                                                                                                                                  |
| `@recit/form`          | fondations                                        | 📅 P10            | oui     | —                                                    | accepté le 24/10 (`10-formulaires.md`) : bloc `:::form`, client de soumission, contrat « Récit Form Submission API v1 », handler de référence `./server` (P13), `./openapi` plus tard                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | `@recit/core`, `@recit/components`, zod/mini. Aucune nouvelle                                                                                                                                                                                             |
| `@recit/directory`     | formats                                           | 📅 P9             | oui     | —                                                    | accepté le 24/10 (`12-glossaire-annuaire.md`) : formats `glossary` et `directory`, vues A–Z, fiches, tableau. Lot avancé en P9, complet en P14                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | `@recit/core`, `@recit/components`, `@recit/data` (import, plus tard)                                                                                                                                                                                     |
| `@recit/geo`           | fondations                                        | 📅 P6             | oui     | —                                                    | accepté le 24/10 (`13-cartes.md`) : bloc `::map`, projections, assets Natural Earth, `GeoMap`. Lot avancé en P6, choroplèthe en P15                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | d3-geo, d3-scale, d3-scale-chromatic (déjà dans le lockfile, via mermaid)                                                                                                                                                                                 |
| `@recit/atlas`         | formats                                           | 📅 P15            | oui     | —                                                    | retenu (P15), accepté le 24/10 (`13-cartes.md`) : format `atlas`, une scène = une vue de carte, lecture au défilement                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | `@recit/geo`                                                                                                                                                                                                                                              |
| `@recit/scenario`      | fondations                                        | 📅 P16            | oui     | —                                                    | accepté le 24/10 (`14-ia-scenario.md`) : bible de personnages (`kind: "bible"`), attributs de scène `cast`, `set`, `pose`, `prompt`, provenance des images (`kind: "asset"`), seulement si l'exemple du lot P7 en montre le besoin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `@recit/core`. Aucune nouvelle                                                                                                                                                                                                                            |
| `@recit/pixel`         | —                                                 | 🔒                | réservé | —                                                    | `11-images.md` : pas de package pour l'instant (tranché le 24/10). Le module pixel vit dans `@recit/components` (P11), extrait ici seulement au second consommateur                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | —                                                                                                                                                                                                                                                         |
| `@recit/site-stories`  | intégrations                                      | 🆕 P1             | oui     | `@presentation/site-extension`                       | `recitVitePlugin` (`./vite`), `recitPlugin`, `StoryEmbed`, `StoryGallery`, index Pagefind, `./styles.css` (jetons préfixés, `deck.css`, feuilles des paquets et modules, limitée au wrapper)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | `@recit/site` (peer), vite 8 (peer)                                                                                                                                                                                                                       |
| `@recit/cli`           | distribution                                      | 🆕 P1             | oui     | `@presentation/cli` + `@emaki/cli`                   | **Liste unique des commandes** (une commande par besoin, règle B9). P1 : `init`, `dev`, `build`, `export <file>` (PDF par défaut, `--html` pour le HTML autonome : pas de sous-commande `export html`), `validate`, `convert`. P3 : `convert --to json\|md`, `validate` sur un JSON, `i18n status\|extract\|check`, `--locale` (sur `dev`, `build`, `export` et `convert`). P4 : `render` (avec `--all-locales`), `dur`, `extract`, `mcp serve`. P6 : `export --to pdf` (par `@recit/paged`, avec `--all-locales`). P7 : `export --to images`. P8 : `export --to epub`. P9 et P10 : `export --to ics`, `export --to rss`. **Une seule règle (audit DO-8)** : `export <file>` avec `--to <format>`, jamais de sous-commande par format ; `--html` reste l'alias de `--to html`. P12 : `migrate`. P13 : `form check-endpoint` ; plus tard `form schema`. P14 : `convert --to directory` (CSV), puis `validate --links`. P16 : `prompts build`, `assets register`, `skills export`, contrôles de scénario dans `validate --strict` ; Fountain par `convert` (`--to fountain`, ou depuis un `.fountain`). Après P8, en option : `export --to pdf --site` (PDF4). Après la v1 : `geocode` | commander, esbuild (bundle JS et feuille d'un deck, plus de Tailwind depuis le plan 19), ws, qrcode, `@recit/paged` (runner ; Playwright en pair optionnelle, plus de lanceur de Chromium local), `@recit/motion-render` (optionnel, chargé à la demande) |
| `recit`                | distribution                                      | 🆕 P1             | oui     | —                                                    | alias sans scope (`npx recit dev`). Réexporte `@recit/cli` et `defineConfig`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | `@recit/cli`                                                                                                                                                                                                                                              |
| `create-recit`         | distribution                                      | 🆕 P5             | oui     | modèle : `create-site`                               | `npm create recit`, gabarits `deck`, `motion`, `docs`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | —                                                                                                                                                                                                                                                         |
| `@recit/mcp`           | distribution                                      | 🆕 P4             | oui     | `@emaki/mcp`                                         | outils motion (`build_deck`, `apply_ops`, `render`…), outils deck (`build_story`), `describe_format(format)` (JSON Schema et spec Markdown du format, `09-langues-et-json.md` §7), guides `recit://guide/*`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | @modelcontextprotocol/sdk, zod 4                                                                                                                                                                                                                          |
| `@recit/studio`        | outils                                            | 🆕 P4 (squelette) | non     | `@emaki/studio` (import différé)                     | squelette seulement : l'import du studio d'emaki attend qu'il ne soit plus simulé (`journal.md` §5). Puis éditeur et prévisualisation (Monaco), motion puis deck                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | monaco-editor (à l'import)                                                                                                                                                                                                                                |
| `@recit/site-kit`      | outils                                            | 🆕 P2             | non     | —                                                    | en-tête inter-sites (Récit ▸ un lien par site ouvert, dans l'ordre de `07-domaines.md` §4 : Presentation · Motion · Report · Webtoon · Book · Roadmap · Calendar · Story · Docs, puis les sites acceptés à leur ouverture), pied de page, logos, tokens, config du framework de sites partagée (`createSiteConfig`), composants de site de format (`07-domaines.md` §4), dont l'`ExportPanel` unique, qui lit `exports.json` (`ExportManifestSchema` de `@recit/core`, tous les `kind`). **Porte tous les composants des sites** (`src/components/`, avec leurs modules) : un site n'est que Markdown et config (plan 19, TST4b, `scripts/biome-plugins/sites-markdown-only.grit`)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `@recit/site-stories`, `@recit/site`, `@recit/core`                                                                                                                                                                                                       |
| `@recit/brand-tools`   | marque (`brand/tools`)                            | 🆕 P0             | non     | —                                                    | scripts de génération du logo et des signes (`logo`, `logo:signs`)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | opentype.js, @fontsource (dev)                                                                                                                                                                                                                            |
| `@recit/docs`          | —                                                 | 🔒                | réservé | —                                                    | pas de package : le format `docs` est porté par `@recit/site-stories`. Nom réservé contre l'usurpation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | —                                                                                                                                                                                                                                                         |

Noms npm à réserver en P0, même sans code : `recit`, `create-recit`, `@recit/core`, `@recit/data`,
`@recit/time`, `@recit/paged`, `@recit/report`, `@recit/toon`, `@recit/book`, `@recit/roadmap`,
`@recit/calendar`, `@recit/stories`, `@recit/docs`, et ceux des plans 10 à 14 (paragraphe suivant).
C'est la liste de P0.1 dans `06-roadmap.md`. Pas de `@recit/video` : « video » n'est qu'une
redirection de domaine vers motion (voir `07-domaines.md`).

Noms ajoutés par les plans 10 à 14 (ordre accepté le 24/10/2026), à réserver : `@recit/form`,
`@recit/directory`, `@recit/geo`, `@recit/atlas`, `@recit/scenario`, et `@recit/pixel` (nom réservé
seulement, sans package pour l'instant). Les commandes CLI qu'ils prévoient sont uniques par besoin
et figurent dans la ligne `@recit/cli` ci-dessus : `recit form check-endpoint` (P13),
`recit validate --links` (P14, une option plutôt qu'un verbe), `recit validate --strict`,
`recit prompts build`, `recit assets register` et `recit skills export` (P16), et `recit geocode`
après la v1 seulement (`06-roadmap.md`, règle B9).

## 7. Renommage complet

À appliquer partout : code, tests, docs, exemples, CSS, config, messages d'erreur, i18n.

### 7.1 Packages et dossiers

| Ancien                         | Nouveau                                     |
| ------------------------------ | ------------------------------------------- |
| `@presentation/core`           | `@recit/core`                               |
| `@presentation/theme`          | `@recit/theme`                              |
| `@presentation/components`     | `@recit/components` + `@recit/deck`         |
| `@presentation/runtime`        | `@recit/deck/runtime`                       |
| `@presentation/cli`            | `@recit/cli`                                |
| `@presentation/site-extension` | `@recit/site-stories`                       |
| `@presentation/docs`           | `sites/docs` + `sites/presentation`         |
| `@emaki/schema`, `@emaki/core` | `@recit/motion`                             |
| `@emaki/blocks`, `@emaki/ui`   | `@recit/motion-blocks`                      |
| `@emaki/themes`                | `@recit/theme` (export `./motion`)          |
| `@emaki/render`                | `@recit/motion-render`                      |
| `@emaki/extract`               | `@recit/motion` (commande `recit extract`)  |
| `@emaki/mcp`                   | `@recit/mcp`                                |
| `@emaki/cli`                   | `@recit/cli`                                |
| `@emaki/studio`                | `@recit/studio` (squelette, import différé) |
| `presentation-example-*`       | `recit-example-deck-*`                      |

### 7.2 Commandes, fichiers et config

| Ancien                                         | Nouveau                                                                                                                                                                            |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| commande `presentation`, commande `emaki`      | `recit` (`emaki render` → `recit render`, `emaki convert` → `recit convert`…)                                                                                                      |
| `recit.config.ts` / `recit.config.tsx` (sites) | `recit.config.ts` (fichier unique, options du framework de sites et options Récit au même niveau, voir `02-architecture.md` §5). L'ancien nom est encore lu, avec un avertissement |
| `presentation.config.ts`                       | `recit.config.ts` (l'ancien nom est encore lu, avec un avertissement, jusqu'à la 0.2)                                                                                              |
| `slides.md`                                    | `slides.md` ou `story.md` (les deux sont reconnus)                                                                                                                                 |
| `*.deck.json` (emaki)                          | `*.deck.json` (inchangé, format machine) et `*.story.md`                                                                                                                           |
| `<!-- type: …, id: … -->` (spec emaki)         | `--- type=… id=…` (commentaire accepté en alias)                                                                                                                                   |
| frontmatter `aspect` (emaki)                   | `aspectRatio` (`aspect` reste accepté en alias)                                                                                                                                    |
| frontmatter `theme`, `wordsPerSecond` (emaki)  | `theme`, `wordsPerSecond`, à plat dans le frontmatter (`08-formats.md`) ; section `motion: { theme, wordsPerSecond }` dans `recit.config.ts`                                       |
| MCP `claude mcp add emaki …`                   | `claude mcp add recit -- recit mcp serve`                                                                                                                                          |
| ressource MCP `emaki://guide`                  | `recit://guide/motion`, `recit://guide/deck`                                                                                                                                       |

### 7.3 API et identifiants

| Ancien                                                                        | Nouveau                                                                       |
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `compileDeck`, `CompiledDeck`, `CompiledSlide`                                | `compileStory`, `Story`, `Scene` (alias dépréciés)                            |
| `split-slides.ts`, `splitSlides`                                              | `split-scenes.ts`, `splitScenes`                                              |
| `presentationVitePlugin`, `presentationPlugin`                                | `recitVitePlugin`, `recitPlugin`                                              |
| `PresentationPluginOptions`, `SitePresentationPlugin`                         | `RecitPluginOptions`, `RecitStoriesPlugin`                                    |
| `virtual:presentation-decks`                                                  | `virtual:recit-stories`                                                       |
| `${file}.presentation-slide-N.jsx`                                            | `${file}.recit-scene-N.jsx`                                                   |
| `PresentationEmbed`, `PresentationGallery`, `PresentationViewer`              | `StoryEmbed`, `StoryGallery`, `StoryViewer` (anciens noms en alias)           |
| `.site-presentation-wrapper`, `RECIT_WRAPPER_CLASS`                           | `.recit-wrapper`, `RECIT_WRAPPER_CLASS`                                       |
| custom properties `--slide-*`, `--slide-*`, `--card-*`…                       | inchangées (aucun nom de marque, pas de rupture pour les thèmes utilisateurs) |
| `data-deck`                                                                   | `data-story`                                                                  |
| libellés i18n « Présentation », `deckNotFound` « … presentationVitePlugin … » | « Récit » / `recitVitePlugin`                                                 |
| route par défaut `/presentations` (option du plugin)                          | `/stories`. Les sites utilisent `/present`                                    |
| `getDecks()`, `findDeck()`, `getLoadedDecks()`                                | `getStories()`, `findStory()`, `getLoadedStories()`                           |

### 7.4 Identité et infrastructure

| Ancien                                                | Nouveau                                    |
| ----------------------------------------------------- | ------------------------------------------ |
| dépôt `vguerand/recit`                                | `recit-dev/recit` (transfert, à confirmer) |
| package racine `root`                                 | `recit-monorepo`                           |
| logos du framework de sites, `assets/github-hero.png` | `brand/` (marque **Q07**)                  |
| le site d'origine (doc du fork)                       | docs.recit.dev                             |
| identité Git de la CI d'origine                       | bot Récit, ou `github-actions[bot]`        |

Méthode : un commit de renommage par package, puis
`grep -rniE "presentation|emaki|site-presentation" packages sites examples` doit être vide (hors
alias documentés et `sites/plans/pages/archive/`).

## 8. Exports

Chaque package expose `exports` avec trois conditions :

- `types` ;
- `@recit/source`, vers `src/*.ts` (consommer les sources sans build en dev). **Pas** `development`
  : webpack et Next l'activent par défaut et livreraient notre TypeScript à un utilisateur qui ne le
  transpile pas (audit ST-3) ;
- `default`, vers `dist/*.js`.

Les `vite.config.ts` des sites et des exemples ajoutent `resolve.conditions: ["@recit/source"]`.

```jsonc
// packages/core/package.json
"exports": {
  ".":         { "types": "./dist/index.d.ts",   "@recit/source": "./src/index.ts",   "default": "./dist/index.js" },
  "./browser": { "types": "./dist/browser.d.ts", "@recit/source": "./src/browser.ts", "default": "./dist/browser.js" },
  "./config":  { "types": "./dist/config.d.ts",  "@recit/source": "./src/config/index.ts", "default": "./dist/config.js" }
  // … même forme pour ./schema, ./i18n (P3), ./print (P6) et ./jsonld (P10), voir §6
}
```

`@recit/site-stories` expose en plus `./vite` et `./styles.css` (CSS limitée au wrapper, construite
par `scripts/build-css.mjs`).

**Feuilles de style publiées (plan 19).** Plus de Tailwind dans aucun paquet. Chaque paquet qui
dessine publie une feuille unique, `./styles.css`, compilée de ses modules CSS par Lightning CSS
(`scripts/build-css-modules.js`, table de classes typée `X.module.css.ts` à côté de chaque module) :
`@recit/components`, `@recit/deck`, `@recit/motion-blocks`, `@recit/site-stories`. `@recit/theme`
publie ses feuilles de base (`tokens.css`, `fonts.css`, `deck.css`, `page.css`, `print.css`) et
`reset.css`, que le site importe en couche `theme`, le deck en couche `base` et Storybook en couche
`theme`. La CLI assemble la feuille d'un deck avec esbuild : reset, jetons, feuilles du thème, des
paquets, modules de l'auteur, `theme.customCss`, dans cet ordre.

`@recit/core` expose aussi `./print` (contrat d'impression, code navigateur sans dépendance au DOM
hors garde `typeof window`). `@recit/paged` est **Node uniquement** et expose `./runner` ; aucun
format ne l'importe dans un bundle client (`15-export-pdf.md` §4).

**Règle de dépendances entre groupes.** Les formats et les intégrations dépendent des fondations.
Une intégration peut dépendre d'un format (`@recit/site-stories` → `@recit/deck`,
`@recit/motion-blocks`). Les fondations ne dépendent jamais d'un format. `@recit/paged`
(`scope:tool`) n'est importé que par la CLI et les outils de rendu Node : ni un format ni une
fondation n'en dépend, ils exposent une vue imprimable et rien d'autre (`15-export-pdf.md` §3.1).
Une capture (tranches du toon, PNG d'une carte, image d'une story) est donc lancée par la CLI à
travers `@recit/paged/runner`.

**Les tags.** Neuf, un par projet, dans `nx.tags` de son `package.json`. Cette liste est la seule
(`06-roadmap.md` en annonçait six, ce paragraphe quatre — audit ST-6).

| Tag                  | Projets                                                            |
| -------------------- | ------------------------------------------------------------------ |
| `scope:foundation`   | `core`, `theme`, `components`, `data`, `time`                      |
| `scope:format`       | `packages/formats/*` sauf `paged`                                  |
| `scope:integration`  | `packages/integrations/*`                                          |
| `scope:tool`         | `paged`, `app`, `site-kit`, `studio`, `mcp`, `brand/tools`         |
| `scope:distribution` | `cli`, `recit`, `create-recit`                                     |
| `scope:site`         | `sites/*`                                                          |
| `scope:example`      | `examples/*` de Récit                                              |
| `scope:test`         | `e2e`                                                              |
| `scope:vendor`       | `packages/site` et `examples/with-config`, qui viennent d'upstream |

**Ce que chaque groupe a le droit d'importer.** Une fondation ne voit que les fondations ; un format
voit les fondations et les formats ; une intégration y ajoute les intégrations ; un outil y ajoute
les outils ; la distribution y ajoute les outils et la distribution ; un site et un exemple voient
tout sauf la suite e2e ; `scope:test` voit tout. Les deux projets `scope:vendor` ne sont pas tagués
dans leur `package.json` : ce sont des fichiers d'origine externe, gardés tels quels (`NOTICE.md`).

`scripts/check-package-boundaries.js` lit ces tags et les dépendances `workspace:*`, refuse toute
arête hors du tableau, et tient la liste des violations connues : chacune porte le constat qui la
possède, et une entrée qui ne correspond plus à aucune arête échoue elle aussi. Il tourne dans
`pnpm check`. Une seule violation est tolérée aujourd'hui : `@recit/site-stories` → `@recit/cli`
(ST-5).

## 9. Outillage : on adopte celui du fork

| Sujet | presentation-engine | emaki | **Récit (fork)** |
Action | | ------------- | ---------------------------- | -------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------- | |
Orchestration | turbo 2.4 | turbo | **nx 23.3** | supprimer les `turbo.json`. Un `project.json` par
package (ou cibles inférées), tags de groupe | | Lint | oxlint 1.88 | — | **biome 2.5** | migrer les
règles utiles (`no-shadow`…) | | Format | oxfmt 0.73 | — | **oxfmt 0.36** | `"**/*.mdx"` dans
`ignorePatterns` (oxfmt casse le `.mdx`) | | Build | tsc (+ `build-css.mjs`) | tsc | **tsdown
0.23** | un `tsdown.config.ts` par package | | TypeScript | 5.7 | — | **6.0.3** | imports relatifs
en `.js` (convention `AGENTS.md`) | | Tests | vitest (88 unitaires, 7 e2e) | vitest + goldens PNG |
**vitest 4.1 + playwright 1.63** | `vitest.config.ts` racine :
`projects: ["packages/!(formats                                    | integrations | tools)", "packages/{formats,integrations,tools}/\*"]` | |
Hooks git | — | — | lefthook | rien à faire | | Node / pnpm | — | — | Node ≥ 22.22, pnpm ≥ 11 |
aligner les `engines` |

Versions du catalogue pnpm :

- `react` / `react-dom` 19.2.8, `zod` 4.6.5, `typescript` 6.0.3, `@types/node` 22.20.5 ;
- `vite` 8.1.5 (presentation-engine utilisait `^8.3.5`, à aligner) ;
- `shiki` 4.5.0, `@mdx-js/mdx` 3.1.1, `react-router` 8.4.0 ; `@mantine/*` 9.7.4 (plan 19, qui a
  retiré `tailwindcss`) ;
- `@recit/site` : 0.86 → **0.93** (workspace).

Points d'attention :

- `minimumReleaseAge: 4320` (3 jours) s'applique à Remotion et au SDK MCP (`@tailwindcss/oxide` est
  parti avec Tailwind, plan 19).
- `allowBuilds` : ajouter le compositor de Remotion si nécessaire.
- Les peers `react >=18` d'emaki passent à `>=19.2.7`.

## 10. Publication

- Versions `0.1.0-alpha.N`, **communes** à tous les packages publiés (une seule version,
  `nx release` avec `release.projects` = packages publiés de la section 6, listés un par un : un
  package y entre quand il devient public, `scripts/__tests__/release-workflow.spec.ts` le vérifie).
- Actions GitHub épinglées par SHA (Dependabot les met à jour), npm en version exacte dans le job
  qui publie. Le même test passe chaque commande `nx release` du workflow aux contrôles d'arguments
  de nx (`--print-config`).
- Un seul workflow `release.yaml`, déclenché à la main depuis `main`, sans publication canary de
  `@recit/site` : `build.yaml` rejoué, contrôle des version plans, dry run, puis job d'écriture
  derrière l'environnement `npm` à relecteur obligatoire (version, changelog, commit, tag, push,
  GitHub Release, npm, dans cet ordre).
- Version plans en 0.x : `preminor` à la première release d'une phase, `prerelease` ensuite, un seul
  bump par plan. Sur une version 0.x stable (`0.0.0`), au moins un plan en `preminor`.
  `scripts/check-version-plans.js` (dans `pnpm check`) refuse `patch`, `minor` et `major`, que
  semver publierait en stable malgré le `preid`.
- `publint` et `size-limit` (`.size-limit.json` : le runtime du deck et `examples/site-embed`).
- `@recit/site` est **privé** aujourd'hui, alors que `@recit/site-stories` (en peer, `>=0.93`),
  `recit-site` et `@recit/app` en dépendent : hors du dépôt, personne ne peut construire un site. Le
  publier avec l'alpha est la décision D2 de [22 · Alpha publique](/22-alpha), question ouverte.
- **Aucune publication npm sans validation explicite.**
