09.02 — I18n FR/EN/RU#

Every Holy Book page exists in three versions. EN at the root of docs/, FR under docs/fr/, RU under docs/ru/. VitePress routes automatically.

File structure#

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/
│           └── ...                                                 # shared EN+FR+RU images
│
└── .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
Home//fr//ru/
Pitch/what-is-it/fr/what-is-it/ru/what-is-it
Rant/first-feedbacks/fr/first-feedbacks/ru/first-feedbacks
Setup/setup/fr/setup/ru/setup

VitePress auto-builds the language switcher (top right). Clicking “FR” from /setup takes you to /fr/setup.

Frontmatter#

---
sticky: 1
pagefind-indexed: false
description: Test frameworks all made the same bad bet. Ocarina does the opposite. Learn why.
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
---
FieldRole
sticky: 1Obscure theme config, implementation detail (@sugarat/theme)
pagefind-indexed: falseExclude from the Pagefind index (often for “philosophy” pages we don’t want polluting technical search)
descriptionMeta description (SEO + Open Graph)
datePublication date (displayed + used for sort + drives chapter order in PDF generation)
head.meta.og:imageCover image (social previews / OG previews when shared in chats + article cards)

Human translation#

FR pages are not auto-translated from EN.
They are written separately, with:

  • Idiomatic phrasing.
  • Cultural references ("paquet de clopes", “r/AntiTaff”).
  • Original quotes kept as-is on both FR and RU (like “In the Lulzboat, salute, bitch, and show some respect.” stays in English).

The structure and technical substance are identical.

Pages#

index.md#

---
layout: home
blog:
  name: "The Ocarina Holy Book"
  minScreenAvatar: false
  pageSize: 6
  analysis: false
---

Layout home = blog landing (article cards). 6 cards per page. Strips some “fancy” theme features. No analytics.

what-is-it.md#

The manifesto:

  1. Yet another one!” (Them, Us)
  2. The cultural problem” (ISTQB)
  3. The real pain point” (creativity, science)
  4. Vision” (sovereign grammar, born in the field, adoption)

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

first-feedbacks.md#

The pamphlet:

  1. First grievances
  2. Ostentatious complexity
  3. Philosophy” (KISS, anti-narcissism, etc.)
  4. Secession” (anti-no-code, anti-startup-nation, anti-hype, anti-slipologues)
  5. First relevant interaction

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

setup.md#

The first onboarding tutorial:

  • Warning (“this manual helps you get familiar with ocarina-example, which remains the source of truth, but nothing replaces practice”).
    1. Project setup.
    1. The adapters (EnvGetters, Act, TestCampaign, TestSuite, MatchPage).
    1. Writing a first POM.
    1. Writing connectors.
    1. Writing a first scenario.
    1. Creating a suite.
    1. Creating a campaign.
    1. Creating a cycle.
    1. Bootstrapping the project.

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

scenarios-composability.md#

Another tutorial to help understand your “first scenarios”:

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

Digs deeper — framed as “First jutsus" — detailing what Ocarina does and doesn’t do:

  • Datasets (data-driven).
  • Smoke tests.
  • Setup and teardown.
  • Proxy pattern (HumanizedDriver).
  • Reactive programming: NO.
  • API calls and locks.
  • Browser profile.

handling-flakiness.md#

A field report — "First real-world hurdles" — focused on flakiness:

  • Server hazards (on_failure hook).
  • Test step hazards (POM-internal retries).
  • Selenium hazards (WebDriverException in transient_errors).
  • Discrete random errors (Watcher).
  • Concurrency heisenbugs (saturate_workers).

extensibility.md#

Zooms out to present “Extensibility”:

  • ValidationChain (invariant chaining, chainvalidations, custom assertions, _type safety).
  • Success and failure (handlers).
  • Post-exec plugins.
  • Extensible grammar ("the only extension-point constraint: return a ChainRunner”).

using-ocarina-with-ai.md#

Zooms out further — how to “Use Ocarina with AI”. Opens the road to vibe testing:

  • The three ancestral stones.
  • CLAUDE.md (full and slim).
  • skills/ (9 families, 40+ skills).
  • Recurring chains.
  • Discipline.
  • What this setup is not.
  • Exposed resources.