00.02 — Matrice stack / responsabilité / licence#

DépôtRôleLangageVersionStack principaleStack outillageDistributionLicence
ocarinaFramework de test e2e navigateurPython3.14+hatchling, python-docx (seule dépendance d’exécution), selenium + playwright (dev seulement)ruff (ALL), mypy strict, pytest, hypothesis, pytest-mypy-plugins, syrupy, prysk (cram), allure-pytest, pre-commit, twine, buildPyPI, v1.1.10MIT
ocarina-exampleSuite canonique e2e contre l’IgoristanPython3.14+ocarina, selenium ≥ 4.40, python-dotenv, dogpile.cache, redisruff, mypy, pre-commitSource uniquementMIT
ocarina-with-ai-exampleSuite e2e CURA Healthcare co-écrite par Claude CodePython3.14+ocarina ≥ 1.0.3, selenium ≥ 4.40ruff, mypy, mypy-extensions, typing-extensions, pre-commitSource uniquementMIT
igoristanSUT public, application web volontairement chaotiqueTypeScript6.0.xReact 19.2, Vike 0.4.258 (SSG), Vite 7.3, TailwindCSS 4 (alpha), valibot, react-hook-form, react-dropzone, usehooks-ts, throttleit, lucide-react, uuidpnpm 11, Node 24, wireit (orchestrateur), eslint 9 (flat), prettier 3.5, husky, lint-staged, commitlint, commitizen, terser, rollup-plugin-visualizer, vite-plugin-compression, @qalisa/vike-plugin-sitemapGitHub Pages (/igoristan/)aucune
tests-workersBackend OTP / Corsicadex pour exercer la parallélisation et les tests avec appels APITypeScript5.9.3Vercel Edge Functions (runtime: "edge"), @upstash/redis, otplib, types next (NextRequest)pnpm 11.x, @vercel/node (types)Vercel : https://tests-workers.vercel.appISC
ocarina-holy-bookDocumentation publique + skills IA + PDFTypeScript6.0.xVitePress 2 alpha, theme @sugarat/theme, vue 3.5, pagefind, vitepress-plugin-image-optimizepnpm 11, Node 24, eslint 9, prettier 3.8, husky, lint-staged, commitlint, sass-embeddedGitHub Pages (/ocarina-holy-book/)MIT

Python early adopter#

Apport Python 3.12+Utilisation dans Ocarina
PEP 695 (class Foo[T]:)Signature générique partout (TestSuite[Driver], Watcher[Driver], Test[Driver], Result[T], Ok[T], Thunk[T], etc.)
PEP 695 type aliases (type X = ...)Tous les alias : type Result[T] = Ok[T] | Fail, type Effect = Callable[[], None], type Thunk[T] = Callable[[], T], type Mode = Literal[...]
TypeGuard (Python 3.10+)is_ok, is_fail, is_test_result_ok, is_test_result_fail, is_test_result_skipped
Self (3.11+)Retours fluides des POMs, des loggers, des invariants
@final (3.8+)Verrouille les classes critiques (Watcher, Test, TestCycle, ChainRunner, Ok, Fail, …)
Unpack (3.11+)Signature de HumanizedDriver côté ocarina-example
Protocol (3.8+)ScreenshotDriver, SupportsWrite[str]
Literal (3.8+)Toutes les énumérations (SeleniumCliStoreKeys, LOGGERS_CHOICES, Mode)
Never (3.11+)Signature de _SilentArgumentParser.error

Conséquence pratique : il existe un workflow CI dédié unstable_python_full_build.yml qui pousse Python 3.15-dev mensuellement (cron: "0 3 1 * *"), parce qu’Ocarina veut être prêt pour le prochain interpréteur dès qu’il sort. Voir ../10-cicd/02-ocarina-workflows.md

Node, pnpm, navigateurs#

ComposantVersion utilisée
Node^24.xigoristan/package.json#engines, ocarina-holy-book/package.json#engines
pnpm11.x (Igoristan, Holy Book), 11.x (tests-workers)package.json#engines, packageManager
Firefoxdernière (via browser-actions/setup-firefox)CI ocarina-with-ai-example
geckodriver0.35.0 (CI ocarina-example), 0.36.0 (CI ocarina-with-ai-example)Téléchargement direct depuis GitHub Releases Mozilla
chromedrivermatché à la version Chrome ambient sur ubuntu-latestTéléchargement depuis storage.googleapis.com/chrome-for-testing-public

Pas de dépendances#

Le fait qu’Ocarina ne déclare qu’une seule dépendance d’exécution (python-docx) est un choix.

  • Tout le reste (Selenium, Redis, dotenv, dogpile…) appartient au projet utilisateur.
  • Ni Selenium ni Playwright (ajouté en 1.1.3) n’est une dépendance d’exécution d’Ocarina : les deux sont dans le groupe dev (utilisés par les tests et les adapters livrés, pas par le cœur de la lib).
  • Le seul plugin qui « coûte » une dépendance est generate_docx_proof (le seul à utiliser python-docx). Si ce plugin échoue à s’importer, le reste tourne.

Ce point est revendiqué dans le Holy Book :

Les seules dépendances externes sont dans les plugins post-exécution et si l’une d’elles ne passe pas, elle se retire sans que le reste ne casse.

Voir ../11-independence/02-auditability.md pour la portée de cette règle.