09.02 — I18n FR/EN/RU#

Toutes les pages du Holy Book existent en trois versions. EN à la racine de docs/, FR sous docs/fr/, RU sous docs/ru/. VitePress route automatiquement.

Structure des fichiers#

docs/
├── index.md                                                        # EN home
├── what-is-it.md
├── first-feedbacks.md
├── setup.md
├── scenarios-composability.md
├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
├── handling-flakiness.md
├── extensibility.md
├── using-ocarina-with-ai.md
│
├── fr/
│   ├── index.md                                                    # FR home
│   ├── what-is-it.md
│   ├── first-feedbacks.md
│   ├── setup.md
│   ├── scenarios-composability.md
│   ├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
│   ├── handling-flakiness.md
│   ├── extensibility.md
│   └── using-ocarina-with-ai.md
│
├── ru/
│   ├── index.md                                                    # RU home
│   ├── what-is-it.md
│   ├── first-feedbacks.md
│   ├── setup.md
│   ├── scenarios-composability.md
│   ├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
│   ├── handling-flakiness.md
│   ├── extensibility.md
│   └── using-ocarina-with-ai.md
│
├── public/
│   ├── favicon.ico
│   ├── logo.png
│   ├── robots.txt
│   ├── .nojekyll
│   ├── .spa
│   └── assets/
│       └── content/
│           └── ...                                                 # images partagées EN+FR+RU
│
└── .vitepress/
    ├── config.mts
    ├── blog-theme.ts
    ├── shims.d.ts
    ├── plugins/
    │   ├── llm.ts
    │   ├── pub.ts
    │   ├── skills.ts
    │   └── webp.ts
    └── theme/
        ├── index.ts
        ├── style.css
        ├── user-theme.css
        ├── components/
        │   ├── Pagination.vue
        │   ├── BlogHomeBanner.vue
        │   └── NotFound.vue
        └── assets/
            └── bg.png

Routing#

PageURL ENURL FRURL RU
Page d’accueil//fr//ru/
Pitch/what-is-it/fr/what-is-it/ru/what-is-it
Coup de gueule/first-feedbacks/fr/first-feedbacks/ru/first-feedbacks
Setup/setup/fr/setup/ru/setup

VitePress crée automatiquement le switcher de langue (en haut à droite). Cliquer sur « FR » depuis /setup → /fr/setup.

Frontmatter#

---
sticky: 1
pagefind-indexed: false
description: Les frameworks de test ont tous fait le même mauvais pari. Ocarina fait le contraire. Apprenez pourquoi.
date: 2026-04-24
head:
  - - meta
    - property: og:image
      content: http://mojo-molotov.github.io/ocarina-holy-book/assets/content/what-is-it/creatives/the-children-tools-battle.png
---
ChampRôle
sticky: 1Configuration obscure du thème, détail d’implémentation (@sugarat/theme)
pagefind-indexed: falseExclusion de l’index Pagefind (souvent pour les pages concernant la “philosophie” qu’on ne veut pas voir polluer la recherche technique)
descriptionMeta description (SEO + Open Graph)
dateDate de publication (affichée + utilisée par le tri + déterminant l’ordre des chapitres à la génération en PDF)
head.meta.og:imageImage de couverture (réseaux sociaux/aperçus OG lors de partages dans des chats + cards d’article)

Traduction humaine#

Les pages FR ne sont pas auto-traduites de l’EN.
Elles sont écrites séparément, avec :

  • Des tournures idiomatiques.
  • Des références culturelles (« paquet de clopes », « r/AntiTaff »).
  • Des citations originales reprises telles quelles côté FR comme RU (comme « In the Lulzboat, salute, bitch, and show some respect. » qui reste en anglais).

La structure et le fond technique sont identiques.

Pages#

index.md#

---
layout: home
blog:
  name: "Le livre sacré d'Ocarina"
  minScreenAvatar: false
  pageSize: 6
  analysis: false
---

Layout home = page d’accueil de blog (cards d’articles). 6 cards par page. Retrait de certaines fonctionnalités « fancy » du thème. Pas d’analytics.

what-is-it.md#

C’est le manifeste :

  1. « Encore un ! » (Eux, Nous)
  2. « Le problème culturel » (ISTQB)
  3. « Le vrai point de douleur » (créativité, science)
  4. « Vision » (grammaire souveraine, né sur le terrain, adoption)

Cf. ../01-philosophy/01-flip-the-problem.md, ../01-philosophy/02-istqb-vs-pytest.md

first-feedbacks.md#

C’est le pamphlet :

  1. « Premiers griefs »
  2. « Complexité ostentatoire »
  3. « Philosophie » (KISS, anti-narcissisme, etc.)
  4. « Sécession » (anti-no-code, anti-startup-nation, anti-hype, anti-slipologues)
  5. « Première interaction pertinente »

Cf. ../01-philosophy/03-kiss-and-complexity.md, ../01-philosophy/05-political-stance.md

setup.md#

C’est le premier tutoriel d’onboarding :

  • Avertissement (« ce livre facilite la prise en main d’ocarina-example, qui reste la source de vérité, mais rien ne remplace la pratique »).
    1. Mise en place du projet.
    1. Les adapters (EnvGetters, Act, TestCampaign, TestSuite, MatchPage).
    1. Écrire un premier POM.
    1. Écrire des connectors.
    1. Écrire un premier scénario.
    1. Créer une suite.
    1. Créer une campagne.
    1. Créer un cycle.
    1. Bootstrapper le projet.

Cf. ../07-ocarina-example/02-adapters.md

scenarios-composability.md#

Un autre tutoriel pour aider à comprendre ses « premiers scénarios » :

  • « La fin des états invalides » (act, drive_page, match_page).
  • « Système immunitaire » (toutes les erreurs mypy qu’on a vues : ../02-ocarina/03-railway/02-action-chain-states.md).
  • « Répétitions » ([...] * 5).
  • « Fragments » (pre/post).
  • « Aliasing ».

datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md#

Encore un tutoriel pour creuser un peu plus sous la forme de « Premiers jutsus » et détailler ce qu’Ocarina fait et ne fait PAS :

  • Jeux de données (data-driven).
  • Tests de fumée.
  • Setup et teardown.
  • Proxy pattern (HumanizedDriver).
  • Programmation réactive : NON.
  • Appels API et verrous.
  • Profil navigateur.

handling-flakiness.md#

Un vrai retour terrain, « Premiers obstacles du monde réel », très focalisé sur les questions de flakiness :

  • Aléas serveur (hook on_failure).
  • Aléas de pas de test (retries internes au POM).
  • Aléas de Selenium (WebDriverException dans transient_errors).
  • Erreurs aléatoires discrètes (Watcher).
  • Heisenbugs de concurrence (saturate_workers).

extensibility.md#

Article pour pouvoir commencer à dézoomer, qui présente l’« Extensibilité » :

  • ValidationChain (chaînage d’invariants, chainvalidations, custom assertions, _type safety).
  • Success et failure (handlers).
  • Plugins post-exec.
  • Grammaire extensible (« la seule contrainte du point d’extension : retourner un ChainRunner »).

using-ocarina-with-ai.md#

C’est le dernier article, pour dézoomer encore, qui présente comment « Utiliser Ocarina avec l’IA ». Il ouvre la voie pour le vibe testing :

  • Les trois pierres ancestrales.
  • CLAUDE.md (complet et slim).
  • skills/ (9 familles, 40+ skills).
  • Chaînes récurrentes.
  • Discipline.
  • Ce que ce setup n’est pas.
  • Ressources exposées.