# 04 — Ce qu'on copie depuis presentation-engine

**Statut : fait · Phase : P1 · Mis à jour : 24/10/2026.**

Source : the presentation-engine repository. Le code est commité en `4b86797`. Seuls les fichiers de
marque ne sont pas commités : ils sont copiés dans `brand/` et versionnés ici. presentation-engine
n'est pas modifié.

## 1. Méthode

- **Copie, pas `git subtree`.** L'historique de presentation-engine est court (5 commits) et chaque
  fichier change de nom ou de package. On copie l'état `4b86797`, et le dépôt d'origine est archivé
  en lecture seule. Le commit d'import cite le SHA source.
- Un commit par package : `feat(core): import from presentation-engine@<sha>`, puis un commit de
  renommage, puis un commit d'adaptation à l'outillage (biome, tsdown, TS 6). Chaque commit doit
  passer `pnpm check` et les tests du package.
- Renommages systématiques, appliqués au code, aux tests et à la doc :

| Ancien                                                                               | Nouveau                                                                                                       |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
| `@presentation/core` / `components` / `runtime` / `theme` / `cli` / `site-extension` | `@recit/core` / `@recit/deck` / `@recit/deck/runtime` / `@recit/theme` / `@recit/cli` / `@recit/site-stories` |
| commande `presentation`                                                              | `recit`                                                                                                       |
| `presentation.config.ts`, `defineConfig`                                             | `recit.config.ts` (ancien nom lu avec un avertissement de dépréciation), `defineConfig`                       |
| `compileDeck`, `CompiledDeck`                                                        | `compileStory`, `Story` (alias conservés)                                                                     |
| `presentationVitePlugin`, `presentationPlugin`                                       | `recitVitePlugin`, `recitPlugin`                                                                              |
| `virtual:presentation-decks`                                                         | `virtual:recit-stories`                                                                                       |
| `PresentationEmbed`, `PresentationGallery`                                           | `StoryEmbed`, `StoryGallery` (anciens noms exportés en alias)                                                 |
| `.site-presentation-wrapper`                                                         | `.recit-wrapper`                                                                                              |
| `${file}.presentation-slide-N.jsx`                                                   | `${file}.recit-scene-N.jsx`                                                                                   |
| route `/present/<slug>`                                                              | inchangée                                                                                                     |

## 2. Inventaire

### 2.1 Packages, à copier

| Source                                                                                                                                      | Destination                           | Notes                                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `packages/core/src/parser/*` (`scanner`, `split-slides`, `frontmatter`, `markdown-ast`, `unified-pipeline`)                                 | `packages/core/src/parser/`           | `split-slides` → `split-scenes`. Garder `normalizeDirectiveFences` (directives `:::` imbriquées)             |
| `packages/core/src/compile/*` (`compile-deck`, `rehype-plugins`, `mdx`)                                                                     | `packages/core/src/compile/`          | `compileStory`. Ajouter `scene.id`, `scene.source`, `scene.attrs`, `scene.mdast` (voir `02-architecture.md`) |
| `packages/core/src/config/*` (`schema`, `theme-css`)                                                                                        | `packages/core/src/config/`           | migrer la validation vers zod 4                                                                              |
| `packages/core/src/rules/*` (`accessibility`, `anti-overload`, `speech-time`)                                                               | `packages/core/src/rules/`            | —                                                                                                            |
| `packages/core/src/browser.ts`, `types/`                                                                                                    | idem                                  | entrée navigateur sans Shiki                                                                                 |
| `packages/components/src/{slides,mdx/builtins.tsx}` (sauf `Cover`, `HtmlSlide`)                                                             | `packages/components/src/`            | composants génériques, réutilisés par tous les formats (`03` §6, `@recit/components`)                        |
| `packages/components/src/{deck,hooks,tools,animations,i18n.ts}`, `mdx/MdxSlide.tsx`, `slides/{Cover,HtmlSlide}.tsx`                         | `packages/formats/deck/src/`          | propre au deck                                                                                               |
| `packages/runtime/src/**`                                                                                                                   | `packages/formats/deck/src/runtime/`  | sous-chemin `@recit/deck/runtime`                                                                            |
| `packages/theme/src/*.css`, `index.ts`                                                                                                      | `packages/theme/src/`                 | `site-compat.css` reste ici                                                                                  |
| `packages/cli/src/**` (`commands/`, `bundle/`, `config/`, `render/`, `templates/`, `assets.ts`, `diagnostics.ts`, `paths.ts`, `project.ts`) | `packages/cli/src/`                   | `commander`. Ajouter les sous-commandes motion en phase vidéo                                                |
| `packages/site-extension/src/**`, `scripts/build-css.mjs`                                                                                   | `packages/integrations/site-stories/` | adapter au framework de sites 0.93                                                                           |
| `packages/*/src/__tests__/**`                                                                                                               | à côté de chaque source               | 88 tests unitaires à garder verts                                                                            |

### 2.2 Site, exemples, tests et CI

| Source                                                                                                                                     | Destination                                                             | Notes                                                                                                                           |
| ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `docs/recit.config.tsx` (devient `recit.config.ts`), `sidebar.ts`, `vite.config.ts`, `site.theme.css`, `tsconfig.json`                     | `sites/docs/` (base de la config partagée `@recit/site-kit`)            | docs.recit.dev. Onglets : Documentation, Formats (deck, motion…), Components, Theme. Les démos partent sur `sites/presentation` |
| `docs/pages/{documentation,components,theme}/**` → `sites/docs/pages/`. `docs/pages/demos/**` et `index.mdx` → `sites/presentation/pages/` | voir `07-domaines.md`                                                   | déjà en anglais et en Lorem Ipsum. Remplacer « Presentation » par « Récit » dans les textes visibles                            |
| `docs/src/components/*` (`Cards`, `Tutorial`, `SourceFile`, `ExampleHeader`)                                                               | `packages/tools/site-kit/src/components/` (partagés par tous les sites) | —                                                                                                                               |
| `docs/public/logo-light.svg`, `logo-dark.svg`                                                                                              | remplacés par `brand/logo/recit-*.svg`                                  | voir `01-assets.md`                                                                                                             |
| `examples/{starter,tech-talk,showcase,pitch,course,mdx}`                                                                                   | `examples/deck-{…}`                                                     | renommer les paquets `recit-example-*`                                                                                          |
| `examples/site-integrated`                                                                                                                 | `examples/site-embed`                                                   | test d'intégration du plugin                                                                                                    |
| `e2e/deck.e2e.ts`, `vitest.e2e.config.ts`                                                                                                  | `e2e/recit/`                                                            | à aligner sur le `playwright.config.ts` racine du fork                                                                          |
| `.github/workflows/ci.yml`                                                                                                                 | jobs ajoutés à la CI du fork (fichier `recit.yaml`)                     | lint, format, typecheck, test, build, e2e, limités aux projets Récit (`nx affected`)                                            |
| `Makefile`                                                                                                                                 | non copié                                                               | remplacé par des scripts racine `recit:*` et `nx`                                                                               |

### 2.3 Documents et marque

| Source                                                      | Destination                                                                | Notes                                                                                        |
| ----------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| `idee.md`                                                   | `sites/plans/pages/archive/idee.md`                                        | historique du nom                                                                            |
| `FORK.md`                                                   | adapté en `NOTICE.md` et `UPSTREAM.md` à la racine (phase 0 de la roadmap) | remplacer « Presentation » par « Récit »                                                     |
| `docs/_archives/*` (spec Markdown, architecture, standards) | `sites/plans/pages/archive/`                                               | à relire : la spec Markdown complète sert de base à `sites/docs/pages/documentation/writing` |
| `proposal-*.png`, `docs/public/logo-proposals/recit/**`     | `brand/`                                                                   | voir `01-assets.md`                                                                          |

### 2.4 Ce qu'on ne copie pas

- `node_modules`, `.turbo`, `dist`, `pnpm-lock.yaml` (régénéré par le fork), `turbo.json`,
  `.oxlintrc.json`, `.oxfmtrc.json` (le fork a déjà sa config, mais on y reporte l'exclusion
  `**/*.mdx`), `.changeset/`.
- `docs/undefined/`, un dossier parasite produit par un build.
- `docs/dist/`.
- `website/` : ancien site, non repris (remplacé par `sites/*`).
- `docs/public/logo-proposals/*` hors `recit/` (anciennes pistes), qui restent dans l'archive.

## 3. Adaptations obligatoires

1. **le framework de sites 0.86 → 0.93** :
   - relire les types de plugins exportés par `@recit/site`
     (`packages/site/src/lib/core/plugins.ts`) ;
   - vérifier `getRoutes`, `getMdxComponents`, `handle.layout`, l'API `navigation` (onglets,
     `filter`) et le format de `logo`.
2. **TS 6 et convention du fork** : imports relatifs en `.js`, `import type`, types plutôt
   qu'interfaces, composants en fonctions anonymes. Adopter ces conventions pour les nouveaux
   fichiers. Pour le code importé, un passage biome suffit, sans réécriture manuelle.
3. **biome** : corriger les erreurs. Désactiver localement (avec justification) les règles qui
   cassent le parseur, par exemple les regex du scanner.
4. **oxfmt** : ajouter `"**/*.mdx"` aux `ignorePatterns` du fork, sans quoi oxfmt casse les pages
   MDX.
5. **Vite 8.1.5** (catalogue du fork) au lieu de `^8.3.5` : vérifier que `recitVitePlugin` n'utilise
   aucune API plus récente.
6. **Condition `development`** dans les `exports` et `resolve.conditions` des sites et des exemples.
7. **Tests** : intégrer au `vitest.config.ts` racine (projets `@recit/core`, `@recit/deck`…). Les
   e2e passent par le Playwright racine.

## 4. Critère de sortie

Depuis la racine du fork :

```
pnpm install
nx run-many -t build -p '@recit/*' 'sites/*'
nx run-many -t test -p '@recit/*'
pnpm check
nx run docs:dev                 # docs.recit.dev en local, decks sur /present/<slug>
nx run presentation:dev         # presentation.recit.dev en local
pnpm exec recit dev examples/deck-showcase/slides.md
pnpm exec recit export --to pdf examples/deck-showcase/slides.md
```

On doit retrouver les 88 tests unitaires et les 7 e2e, et `sites/docs` + `sites/presentation`
doivent reprendre visuellement `presentation-engine/docs`.
