diff --git a/CLAUDE.md b/CLAUDE.md index 5382db6..67d4f29 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -76,6 +76,7 @@ App pédagogique pour apprendre le terminal. Bénévole, open source, 100% gratu - Phase 3.5 ✅ Landing upgrade + OAuth GitHub/Google + security hardening + sidebar auth (3 avril 2026) - Phase 4 ✅ Curriculum v2 + multi-environment (Linux/macOS/Windows) + terminal profiles (9 avril 2026) - Phase 5 🔄 Curriculum expansion — 11 modules, 66 leçons, 900 tests unitaires + 176 E2E Playwright (en cours) +- Phase 5d 🔜 Des bases au niveau intermédiaire — plan validé par @thierry le 1er octobre 2026 (`docs/strategy/2026-10-01-bases-vers-intermediaire.md`) : lots 0 à 9, une PR à la fois. Les outils de métier ne sont pas simulés : orientation vers des labos externes. - Phase 5.5 ✅ Terminal Sentinel — agents sécurité + contenus automatisés (PR #90, 12 avril 2026) - Phase 7 ✅ RBAC complet — student/teacher/institution_admin/super_admin + RLS + audit log (PR #92, 12 avril 2026) - THI-29 ✅ Module 11 — L'IA comme outil dev (12 leçons, `ai-help` + 11 sous-commandes, PR #103, 13 avril 2026) @@ -167,6 +168,8 @@ App pédagogique pour apprendre le terminal. Bénévole, open source, 100% gratu ### Après chaque modification de `curriculum.ts`, `terminalEngine.ts` ou `commands/*.ts` +- Suivre la liste de contrôle `docs/processes/curriculum-delivery-checklist.md`. Elle couvre les captures dans un vrai shell, les trois environnements, la page Référence, les compteurs publics (`landingContent.ts`, `index.html`, `llms*.txt`), CHANGELOG/STORY, les bandeaux, la preview et la prod. + - Invoquer l'agent **`test-runner`** → si VERDICT = ❌ Fix required, corriger avant de proposer un commit - Si une sortie de terminal (moteur ou exemple de leçon) change : invoquer **`terminal-fidelity-auditor`** sur les commandes touchées. Un attendu de test vient du vrai shell, jamais de la sortie du moteur. Idem quand un exercice en étapes (`steps`, `warn`, `restart`, `successMessage`) fait taper une commande ou décrit un comportement du shell (depuis #403). - Exercice en étapes : aucune impasse. Une étape d'observation passe dès que l'élève observe, une étape d'action passe aussi quand son effet est déjà là, et toute impasse restante a un `warn` qui dit quoi faire (leçon de #404). `feature-dev:code-reviewer` doit chercher les séquences dans le désordre. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index c74e3c2..a99d12f 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,8 @@ # Roadmap — Terminal Learning -> **Last updated:** 1 October 2026 CEST — 🩺 **Full check-up (P1 terminal fidelity, THI-353), continued**: #396 every reference example runs · #397 tables, blank lines and mobile keys · #398 the installed app clears iOS 26's edge blur · #399 git reads real files, outputs match Git 2.56 · **#400 real git branches** (commit graph, ids identical to real git, merges and real conflicts; two fidelity audits, two code reviews) · #401 the landing page only lists commands the terminal runs and the lessons teach, and its terminal preview prints what real shells print. Planned: a **customising the terminal** module (idea from @thierry, #402). **Multi-step exercises checked on the terminal state** (the conflict lesson now resolves a real conflict end to end; no more auto-advance, a « Suivant » button instead). **Git module as steps** (init, first commit, diff, branch, merge). **Remote repositories as in real git** (`push`, `pull`, `fetch`, `clone`, `remote`, branch tracking in `status` and `branch -vv`, #406). **A remote where a colleague pushes** (`fetch`/`pull` bring real commits, a push is rejected with "fetch first", `gh` says it is not simulated; theory gaps 146 → 120). **GitHub module as steps** (remote, push & pull, fetch, pull request, merge strategies, GitHub Actions; #410, theory gaps 120 → 90). **The top of the installed iPhone app is clear at last** (#411, confirmed on @thierry's iPhone). **#413 Windows fidelity** (`ls`/`Get-ChildItem` print PowerShell 7.6's real table, `rm`/`cp`/`mv` are the cmdlets with their parameters — `rm -rf` is refused —, PowerShell's error messages, reference page updated; bash shown on Windows 34 → 32). Next: the ~20 commands taught but not simulated yet (`find`, `sort`, `diff`, `tar`, `Where-Object`…) and the remaining Windows debt (`New-Item`'s table, case-insensitive paths). +> **Decision (1 October 2026, @thierry):** Terminal Learning becomes **the reference for learning the terminal from scratch up to an intermediate level**, within what a faithful simulation can do. Job-specific tools (offensive security, network analysis, OSINT) are not simulated; the site points to the free platforms that already teach them. Ordered plan: [Phase 5d](#phase-5d--from-the-basics-to-an-intermediate-level--planned-1-october-2026). Delivery checklist: [`docs/processes/curriculum-delivery-checklist.md`](processes/curriculum-delivery-checklist.md). +> +> **Previous update:** 1 October 2026 CEST — 🩺 **Full check-up (P1 terminal fidelity, THI-353), continued**: #396 every reference example runs · #397 tables, blank lines and mobile keys · #398 the installed app clears iOS 26's edge blur · #399 git reads real files, outputs match Git 2.56 · **#400 real git branches** (commit graph, ids identical to real git, merges and real conflicts; two fidelity audits, two code reviews) · #401 the landing page only lists commands the terminal runs and the lessons teach, and its terminal preview prints what real shells print. Planned: a **customising the terminal** module (idea from @thierry, #402). **Multi-step exercises checked on the terminal state** (the conflict lesson now resolves a real conflict end to end; no more auto-advance, a « Suivant » button instead). **Git module as steps** (init, first commit, diff, branch, merge). **Remote repositories as in real git** (`push`, `pull`, `fetch`, `clone`, `remote`, branch tracking in `status` and `branch -vv`, #406). **A remote where a colleague pushes** (`fetch`/`pull` bring real commits, a push is rejected with "fetch first", `gh` says it is not simulated; theory gaps 146 → 120). **GitHub module as steps** (remote, push & pull, fetch, pull request, merge strategies, GitHub Actions; #410, theory gaps 120 → 90). **The top of the installed iPhone app is clear at last** (#411, confirmed on @thierry's iPhone). **#413 Windows fidelity** (`ls`/`Get-ChildItem` print PowerShell 7.6's real table, `rm`/`cp`/`mv` are the cmdlets with their parameters — `rm -rf` is refused —, PowerShell's error messages, reference page updated; bash shown on Windows 34 → 32). Next: the ~20 commands taught but not simulated yet (`find`, `sort`, `diff`, `tar`, `Where-Object`…) and the remaining Windows debt (`New-Item`'s table, case-insensitive paths). > > **Previous update (26 September 2026 CEST)**: 🩺 **Full check-up (P1 terminal fidelity, THI-353)**: #389 a real shell layer (`;` `&&` `||`, pipelines, every redirection) — **198/198 exercises validate with no red line**; #390 output matches a real shell (`pwd`, `cd -`, `ls` in a pipe, `wc`, `apt`); #391 permanent replay of every lesson's theory (754 commands); #392 `cp`/`mv` into a directory (a `mv file .` wiped the home directory) and native Windows paths in PowerShell — theory gaps **174 → 162**, bash shown on Windows **39 → 37**; #393 audit agents refreshed (13 Opus / 8 Sonnet) + new `terminal-fidelity-auditor` (simulator vs real bash / PowerShell). Public landing roadmap corrected (LTI is a disabled spike, OpenAI BYOK blocked by CORS). Next: PowerShell error messages, `/app/reference` pedagogy, remaining theory gaps (Git history, `gh`, jobs). > @@ -157,6 +159,24 @@ Full-stack developer path — 11 modules ✅ (66 lessons, 1035 unit tests) - [ ] **Full dedicated courses** (long-term vision): Git deep-dive, Docker, shell scripting masterclass - [ ] **Customising the terminal** (idea from @thierry, 29 September 2026; after "Variables & Scripts"): the profile file (`$PROFILE`, `~/.bashrc`, `~/.zshrc`), aliases and functions, writing one's own prompt (`PS1`, PowerShell's `prompt` function) with the folder, the git branch and the Node version, ANSI colours, then Starship (one config for bash, zsh and PowerShell) and Oh My Posh. The practice terminal shows the prompt the learner builds, live; an "export my config" button gives the real profile to copy. Includes the security lesson of `curl … | sh` / `iex (irm …)` installers. Needs multi-step exercises validated on the terminal state first. Installing Starship or Nerd Fonts cannot happen in the browser: the lessons simulate the configuration's effect. +## Phase 5d — From the basics to an intermediate level 🔜 Planned (1 October 2026) + +Full rationale and scope: [`docs/strategy/2026-10-01-bases-vers-intermediaire.md`](strategy/2026-10-01-bases-vers-intermediaire.md) (FR). One PR at a time, each following the [delivery checklist](processes/curriculum-delivery-checklist.md). Expected outputs come from real shells: Git Bash, PowerShell 7 (en-US) and Ubuntu under WSL 2. + +- [ ] **Lot 0** — this plan, roadmap and delivery checklist +- [ ] **Lot 0b** — counter guards: `llms.txt`, `llms-full.txt` and `index.html` metadata checked by a test +- [ ] **Lot 1** — search and sort: `sort`, `uniq`, `cut`, `find`, `xargs`, `diff`, useful `wc`/`grep` options; PowerShell `Sort-Object`, `Where-Object`, `Select-Object` (3–4 PRs) +- [ ] **Lot 2** — archives and disk: `tar`, `gzip`, `zip`/`unzip`, `Compress-Archive`, `du`, `df`, `which`/`type`/`Get-Command` (1–2 PRs) +- [ ] **Lot 3** — `sed` and `awk`, the subset a beginner uses, with an honest note beyond it (1–2 PRs) +- [ ] **Lot 4** — "Investigating logs" module: fictional auth and web server logs, step-by-step missions without the answer (2–3 PRs) +- [ ] **Lot 5** — editors: `nano`, and surviving `vim` (1–2 PRs) +- [ ] **Lot 6** — Scripts module: a small bash interpreter (`if`/`test`, loops, functions, arguments, exit codes), then lessons, then a PowerShell subset (4–6 PRs) +- [ ] **Lot 7** — Linux system, only with outputs captured on WSL: `apt`, `systemctl status`, `journalctl`, `free` (1–2 PRs) +- [ ] **Lot 8** — final mission: a no-hint scenario across modules that unlocks what follows; can be taken directly to test out (1–2 PRs) +- [ ] **Lot 9** — bridges: the "Customising the terminal" module (with installing a real terminal and WSL) and a "What next?" page that points each job to free external labs (OverTheWire, picoCTF, TryHackMe free rooms…) (2–3 PRs) + +At every lot, not at the end: reference page, landing page (commands, counters, public roadmap; the landing tells the new path once Lots 4 and 8 ship), SEO and `llms*.txt`, CHANGELOG and STORY, plan and roadmap banners. + ## Phase 5b — Exercise Quality Uplift + CBE Foundation 🔮 - [ ] 3–5 exercises per lesson (currently 1) @@ -172,6 +192,8 @@ Full-stack developer path — 11 modules ✅ (66 lessons, 1035 unit tests) ## Phase 5c — Advanced Modules (fullstack → expert networks/servers) 🔮 +> **Reframed on 1 October 2026:** editors, scripting and system tools move into [Phase 5d](#phase-5d--from-the-basics-to-an-intermediate-level--planned-1-october-2026). Docker, security and server administration need a real environment and are not simulated; the Lot 9 "What next?" page points to external labs instead. + Full module track for senior fullstack + network/server expert + security fundamentals: | Module | Title | Level | @@ -378,6 +400,8 @@ Full module track for senior fullstack + network/server expert + security fundam ## Phase 11b — Career Branches + Open Credentials 🔮 > > Full professional track system + verifiable credentials for employers and institutions. +> +> **On hold since 1 October 2026:** internal career branches are replaced by the Phase 5d Lot 9 orientation page (jobs → external labs). Credentials wait for the final mission (Lot 8). To be reopened only if a partner (school, lab platform) brings a real environment. **6 Career Branches:** | Branch | Level | Target Audience | diff --git a/docs/plan.md b/docs/plan.md index c834383..ce3b923 100644 --- a/docs/plan.md +++ b/docs/plan.md @@ -1,6 +1,8 @@ # Terminal Learning — Plan de lancement public -> Dernière mise à jour : **1er octobre 2026 CEST** — **🩺 Grand Check-up, P1 « fidélité du terminal » (THI-353), suite** : #396 exemples de la Référence tous exécutables · #397 tableaux, lignes vides et touches du clavier mobile · #398 haut de l'app installée dégagé du flou d'iOS 26 · #399 git lit les vrais fichiers, sorties identiques à Git 2.56 · **#400 vraies branches Git** (graphe de commits, identifiants identiques au vrai Git, fusions et vrais conflits ; deux audits de fidélité et deux revues de code) · #401 page d'accueil : ne promet plus que des commandes simulées · #402 module « Personnaliser son terminal » annoncé · **exercices en plusieurs étapes vérifiés sur l'état du terminal** (le conflit Git se résout de A à Z, plus de saut automatique : bouton « Suivant »). · **module Git en étapes** (init, premier commit, diff, branche, fusion) · **dépôts distants identiques au vrai Git** (`push`, `pull`, `fetch`, `clone`, `remote`, suivi de branche dans `status` et `branch -vv`, #406) · **dépôt distant où un collègue pousse** (`fetch`/`pull` ramènent de vrais commits, push refusé « fetch first », `gh` dit qu'il n'est pas simulé ; écarts théorie 146 → 120) · **module GitHub en étapes** (remote, push & pull, fetch, Pull Request, stratégies de merge, GitHub Actions ; #410, écarts théorie 120 → 90) · **haut de l'app installée sur iPhone enfin net** (#411, confirmé sur l'iPhone de @thierry). **#413 fidélité Windows** (`ls`/`Get-ChildItem` affichent le vrai tableau de PowerShell 7.6, `rm`/`cp`/`mv` sont les cmdlets avec leurs paramètres — `rm -rf` refusé —, erreurs de PowerShell, page Référence à jour ; bash montré sous Windows 34 → 32). Suite : les ~20 commandes enseignées mais pas encore simulées (`find`, `sort`, `diff`, `tar`, `Where-Object`…) et la dette Windows restante (tableau de `New-Item`, chemins insensibles à la casse). +> **Décision du 1er octobre 2026 (@thierry)** : Terminal Learning devient **la référence pour apprendre le terminal de zéro jusqu'au niveau intermédiaire**, dans les limites d'une simulation fidèle. Les outils de métier (sécurité offensive, analyse réseau, OSINT) ne sont pas simulés : le site oriente vers les plateformes gratuites qui les enseignent. Plan ordonné : [`docs/strategy/2026-10-01-bases-vers-intermediaire.md`](strategy/2026-10-01-bases-vers-intermediaire.md) · procédure de livraison : [`docs/processes/curriculum-delivery-checklist.md`](processes/curriculum-delivery-checklist.md). +> +> Précédente mise à jour : **1er octobre 2026 CEST** — **🩺 Grand Check-up, P1 « fidélité du terminal » (THI-353), suite** : #396 exemples de la Référence tous exécutables · #397 tableaux, lignes vides et touches du clavier mobile · #398 haut de l'app installée dégagé du flou d'iOS 26 · #399 git lit les vrais fichiers, sorties identiques à Git 2.56 · **#400 vraies branches Git** (graphe de commits, identifiants identiques au vrai Git, fusions et vrais conflits ; deux audits de fidélité et deux revues de code) · #401 page d'accueil : ne promet plus que des commandes simulées · #402 module « Personnaliser son terminal » annoncé · **exercices en plusieurs étapes vérifiés sur l'état du terminal** (le conflit Git se résout de A à Z, plus de saut automatique : bouton « Suivant »). · **module Git en étapes** (init, premier commit, diff, branche, fusion) · **dépôts distants identiques au vrai Git** (`push`, `pull`, `fetch`, `clone`, `remote`, suivi de branche dans `status` et `branch -vv`, #406) · **dépôt distant où un collègue pousse** (`fetch`/`pull` ramènent de vrais commits, push refusé « fetch first », `gh` dit qu'il n'est pas simulé ; écarts théorie 146 → 120) · **module GitHub en étapes** (remote, push & pull, fetch, Pull Request, stratégies de merge, GitHub Actions ; #410, écarts théorie 120 → 90) · **haut de l'app installée sur iPhone enfin net** (#411, confirmé sur l'iPhone de @thierry). **#413 fidélité Windows** (`ls`/`Get-ChildItem` affichent le vrai tableau de PowerShell 7.6, `rm`/`cp`/`mv` sont les cmdlets avec leurs paramètres — `rm -rf` refusé —, erreurs de PowerShell, page Référence à jour ; bash montré sous Windows 34 → 32). Suite : les ~20 commandes enseignées mais pas encore simulées (`find`, `sort`, `diff`, `tar`, `Where-Object`…) et la dette Windows restante (tableau de `New-Item`, chemins insensibles à la casse). > Précédent : **26 septembre 2026 CEST** — **🩺 Grand Check-up, P1 « fidélité du terminal » (THI-353)** : #389 vraie couche shell (**198/198 exercices sans ligne rouge**) · #390 sorties d'un vrai shell · #391 rejeu permanent de la théorie · #392 `cp`/`mv` vers un dossier + chemins Windows natifs (écarts théorie **174 → 162**) · #393 agents d'audit remis à jour + `terminal-fidelity-auditor` · roadmap publique corrigée. Suite : messages d'erreur PowerShell, page Référence, écarts restants. > Statut global : **Phase 5 EN COURS** — Curriculum Expansion : 11 modules ✅, 66 leçons, **2500+ tests unitaires** + 176 E2E — **Vision consolidée** : LTI-first (ADR-001), BYOK OpenRouter 4-tiers (ADR-002), TTFR KPI central (ADR-003), Classroom Composer UI (ADR-004), AI Tutor V1 décisions gelées (ADR-005 — stockage, rate-limit, guardrails), Solo-sustainable practices (ADR-006), tuteur IA socratique dès A1, i18n FR/NL/EN — Architecture stratégique précédente (THI-35) : Terminal Sentinel (Phase 5.5) ✅, RBAC complet (Phase 7) ✅, Admin Panel (Phase 9), PWA avancée (Phase finale) — **Epic Web 2026 Compliance** (THI-96) : 6/8 sub-issues livrées (THI-97 → THI-102), reste Desktop a11y + CSS moderne 2026 — **Phase 7b (AI Tutor V1) ✅ COMPLETE + V1.5 SÉQUENCÉE** : THI-115 ✅, THI-109 ✅ (gate-zero guardrail), THI-110 ✅ (keyManager AES-GCM), THI-120 ✅ (Sentry scrubber), **THI-111 ✅ COEUR FONCTIONNEL** (PR #188 — sanitizer + 4 providers + panel + 287 AI tests, audits guardrail 9.4/10 + security 8.8/10 + ui A11y exemplary), **THI-147 ✅ FIX SAFE-AREA iPhone PWA** (PR #189), **panel actif en Production** (`VITE_AI_TUTOR_ENABLED=true` + `VITE_AI_TUTOR_OPENROUTER_MODEL=anthropic/claude-haiku-4-5` activés Production+Preview par @cowork) — **Sprint sécurité 1-2 mai 2026 ✅ CLOS** : audit security-auditor 8.1/10 → ~8.6/10 post-sprint, 11 PRs livrées (#168 à #178), 5 HIGH/MEDIUM Done (THI-133/134/135/137/140), 4 MEDIUM ciblés en backlog (THI-136/138/139/112), agent `route-attack-auditor` créé — **Session 4 mai 2026** : THI-111 livré + THI-147 livré + 5 tickets V1.5 backlog créés (THI-142 lessonContext renforcé HIGH, THI-143 frustration heuristic + détection sémantique user MEDIUM, THI-144 system prompt v1.1.0 + ADR-008 + eval suite MEDIUM, THI-145 chat assistant role-based Phase 9+ LOW, THI-146 modèle défaut Haiku HIGH déjà actif via env var, THI-148 extend tutor scope platform meta-questions V1.0.1 P1 1h30 estimé) — **Posture validée** : pas de rush deadline, qualité/scalabilité/perf non négociables, plan respecté en ordre, **mea culpa explicite** à chaque round trio @thierry / @cc-terminallearning / @cowork (estimation 30 min → 1h30, privacy `userProgress` retirée V1.0.1, hypothèse `transform` mobile réfutée par diagnostic Chrome DevTools MCP) — **Verdict empirique Haiku 4.5 (capturé 4 mai 21h par @cowork via Chrome MCP)** : 5 tests qualitatifs, score moyen **9.3/10** — Test 1 méta-plateforme 8/10, Test 2 fichiers cachés 9/10, Test 3 hallucination 9.5/10, Test 4 frustration 10/10 (Haiku bascule mode direct AUTONOMEMENT), Test 5 jailbreak 10/10. **Reprio backlog tranchée @cowork** : THI-146 ✅ SUCCÈS validé, **THI-142 → Low** (Haiku gère déjà bien le contexte leçon), **THI-143 → Low** (Haiku résout naturellement la frustration via compréhension contextuelle), **THI-148 P1 INCHANGÉ** (scope ≠ modèle prouvé Test 1, GO IMMÉDIAT), THI-144 P2 Medium (peut englober THI-148 + eval suite), THI-145 P3 Low (Phase 9+). **ROI méthode scientifique** : ~4-6h économisées (THI-142/143 reportés V2). **Next ordonné — décision @cowork 5 mai matin** : (1) **THI-150 EN COURS** (12ᵉ agent `mobile-responsive-auditor`, ex-brick 3a de THI-149 epic Done, 11 sections / ≥48 checkpoints + bonus Section 11 Desktop Preservation + checkpoints BUG-FAB-001 visibility/contrast/detachment), (2) THI-151 audit Playwright WebKit + matrice bugs (ex-brick 3b), (3) THI-152 mini-PRs fix séquentielles (ex-brick 3c, critère ABSOLU **ne pas casser desktop**), (4) THI-148 extend tutor scope méta-plateforme V1.0.1 (1h30 honnête, scope statique platformContext, bump v1.0.0→v1.0.1, audit guardrail Règle 10 obligatoire), (5) **THI-144 enrichi P1** system prompt v1.1.0 + ADR-008 + eval suite (intègre 5 micro-frictions identifiées par cross-validation ChatGPT sur session 8 tours @thierry — compound questions, sur-explication internal mechanics, indices répétés, platformContext absent confirme THI-148, conclusion ouverte), (6) THI-112 onboarding AiKeySetup + picker modèle curated, (7) THI-114 Web Worker isolation, (8) THI-145 chat role-based Phase 9+. **THI-142/143 reportés V2** (Haiku 9.3/10 résout 80% naturellement). @@ -243,8 +245,26 @@ Page `/privacy` créée. Vercel Analytics sans cookies → pas de bannière cook - **Module 9 + 10 — Git Fondamentaux + GitHub & Collaboration** (THI-28) : `init`, `add`, `commit`, branches, remotes, PRs, Issues, GitHub Actions - **Module 11 — L'IA comme outil dev** (THI-29) : Claude Code CLI, prompts contextuels, limites et risques +#### 🔜 Phase 5d — Des bases au niveau intermédiaire (plan validé le 1er octobre 2026) + +Détail, périmètre et justification : [`docs/strategy/2026-10-01-bases-vers-intermediaire.md`](strategy/2026-10-01-bases-vers-intermediaire.md). Une PR à la fois, chacune suit la [liste de contrôle de livraison](processes/curriculum-delivery-checklist.md). + +- [ ] **Lot 0** — plan, roadmap, procédure de livraison +- [ ] **Lot 0b** — garde-fous des compteurs (`llms.txt`, `llms-full.txt`, métadonnées d'`index.html`) +- [ ] **Lot 1** — chercher et trier : `sort`, `uniq`, `cut`, `find`, `xargs`, `diff` ; `Sort-Object`, `Where-Object`, `Select-Object` +- [ ] **Lot 2** — archives et disque : `tar`, `gzip`, `zip`, `Compress-Archive`, `du`, `df`, `which`/`Get-Command` +- [ ] **Lot 3** — `sed` et `awk` (sous-ensemble débutant) +- [ ] **Lot 4** — module « Enquêter dans les journaux » (missions sur des journaux fictifs) +- [ ] **Lot 5** — éditeurs : `nano`, survie dans `vim` +- [ ] **Lot 6** — module Scripts (mini-interpréteur bash, puis sous-ensemble PowerShell) +- [ ] **Lot 7** — système Linux capturé sur WSL : `apt`, `systemctl`, `journalctl`, `free` +- [ ] **Lot 8** — mission finale qui débloque la suite (passable directement) +- [ ] **Lot 9** — ponts : module « Personnaliser son terminal » et page « Et après ? » (métiers → labos externes) + #### 🔮 Couches additionnelles (backlog) +> Le 1er octobre 2026, les éditeurs et les scripts ont rejoint la Phase 5d ci-dessus. Docker, la sécurité et l'administration serveur ne sont pas simulés : la page « Et après ? » (lot 9) oriente vers des labos externes. + - **Monitoring & Outils système** : module dédié `htop`, `ps`, `lsof`, `df`/`du`, `free` - **Éditeurs de texte** : nano (éditions rapides) + vim/neovim (cours complet interactif avec exercices) - nano : bases, sauvegarder, quitter, rechercher diff --git a/docs/processes/curriculum-delivery-checklist.md b/docs/processes/curriculum-delivery-checklist.md new file mode 100644 index 0000000..dd30fe7 --- /dev/null +++ b/docs/processes/curriculum-delivery-checklist.md @@ -0,0 +1,61 @@ +# Livrer une commande, une leçon ou un module — liste de contrôle + +> Créée le 1er octobre 2026 avec le plan [« Des bases au niveau intermédiaire »](../strategy/2026-10-01-bases-vers-intermediaire.md). Elle s'applique à toute PR qui ajoute ou change une commande du simulateur, une leçon ou un module. Pour une release qui change de phase, voir aussi [`release-sync-checklist.md`](release-sync-checklist.md). +> +> Une case non cochée se signale dans la PR (« non fait, parce que… »). Elle ne disparaît jamais en silence. + +## 1. Avant d'écrire du code + +- [ ] Relire le lot visé dans le plan et cocher ce qu'il couvre. Une PR ne traite qu'un sujet. +- [ ] Lister les fichiers touchés et l'ordre des modifications, grâce à Grep et Glob. +- [ ] **Capturer les vraies sorties d'abord**, dans un dossier temporaire neuf : jamais à la racine du dépôt, toujours avec `-LiteralPath`/`-Value` sous PowerShell. + - Linux : Git Bash ; Ubuntu sous WSL pour ce que Git Bash n'a pas (`apt`, `systemctl`, `journalctl`). + - Windows : PowerShell 7 en culture en-US. Le français de la machine donne « Répertoire : » au lieu de « Directory: ». + - macOS : pas de référence locale. Documenter les écarts BSD connus, ne rien inventer. +- [ ] Si `curriculum.ts` change : lancer `curriculum-validator`. + +## 2. Pendant + +**Moteur** (`terminalEngine.ts`, `commands/*.ts`) + +- [ ] Chaque nouvelle commande a ses tests dans `src/test/terminalEngine.test.ts` (ou `shellLayer.test.ts` pour les pipes et les redirections). Les attendus viennent de la capture, jamais de la sortie du moteur. +- [ ] Les trois environnements sont traités : Linux, macOS et Windows (alias PowerShell, paramètres, messages d'erreur). +- [ ] Une option non simulée affiche une note honnête, et non un résultat faux ou un silence. + +**Leçons et exercices** (`curriculum.ts`, `lessonSetup.ts`, `exerciseSteps.ts`) + +- [ ] Chaque leçon a son exercice et sa solution pour chaque environnement (`src/test/lessonSolutions.ts`). +- [ ] Exercice en étapes : pas d'impasse. Une étape d'observation passe dès que l'élève observe, une étape d'action passe aussi quand son effet est déjà là, et chaque impasse restante a un `warn`. Essayer les étapes dans le désordre. +- [ ] Les blocs de théorie se rejouent dans le moteur. Lancer `npm run theory:gaps` : les cliquets `KNOWN_THEORY_GAPS`, `BASH_SHOWN_ON_WINDOWS_MAX` et `KNOWN_DESYNCS` ne peuvent que baisser. +- [ ] Pas de bash montré à un élève Windows : utiliser `contentByEnv` et `labelByEnv`. + +**Page Référence** (`commandCatalogue.ts`, `commandExamples.ts`) + +- [ ] La commande y figure avec ses variantes par environnement, des exemples exécutables (un test les rejoue) et ses erreurs fréquentes. + +**Ce que voit le public**, si un compteur ou la liste des commandes change : + +- [ ] `src/app/data/landingContent.ts` : compteurs, liste des commandes, feuille de route publique. +- [ ] `index.html` : métadonnées (description, Open Graph, Twitter) et FAQ en JSON-LD. +- [ ] `public/llms.txt` et `public/llms-full.txt`. +- [ ] `README.md`, `CLAUDE.md` (section Phases), `docs/ARCHITECTURE.md`, `docs/exports/README.md`. +- [ ] Les tests `docLessonCount`, `landingTotals` et `seo` doivent passer. Un échec signale un compteur à corriger partout, pas un test à ajuster. + +## 3. Avant la PR + +- [ ] Contrôles : `tsc`, `npm run lint`, `vitest`, `npm run build`, puis `git checkout -- public/sitemap.xml` (le build le régénère). +- [ ] `terminal-fidelity-auditor` sur les commandes touchées : 0 ENGINE-WRONG et 0 THEORY-WRONG non expliqués. +- [ ] Les auditeurs spécialisés que le périmètre désigne (`ui-auditor` pour un composant, etc.), puis `feature-dev:code-reviewer` en dernier sur le diff stabilisé. +- [ ] `CHANGELOG.md` : une entrée avec ce que l'élève voit de nouveau et les chiffres vérifiés. +- [ ] `STORY.md` : un court chapitre dans la partie en cours, avec ce qui a été appris ou décidé. +- [ ] Bandeau de `docs/plan.md` et de `docs/ROADMAP.md`, et la case du lot cochée dans le plan. +- [ ] Recherche de secrets dans le diff (`password`, `secret`, `token`, `key`, `sk-`) : zéro résultat. +- [ ] `git add` avec des chemins explicites, puis `git show --stat HEAD`. + +## 4. Après la PR + +- [ ] CI verte, Sourcery lu (SKIPPED accepté quand le quota est atteint). +- [ ] Preview : exercices joués de bout en bout dans les trois environnements, sur ordinateur et en 390px. Pas d'erreur console, pas de débordement horizontal. Regarder les captures d'écran, pas seulement les ✓. +- [ ] Merge, puis la même vérification en production, plus les pages principales en 200. +- [ ] Mémoire de session : ce qui est livré, la dette restante, le prochain lot. +- [ ] Les écarts trouvés et laissés pour plus tard sont notés dans le plan, avec leur raison. diff --git a/docs/processes/release-sync-checklist.md b/docs/processes/release-sync-checklist.md index 253d321..2e9c2e7 100644 --- a/docs/processes/release-sync-checklist.md +++ b/docs/processes/release-sync-checklist.md @@ -16,6 +16,8 @@ | 5 | `src/app/data/landingContent.ts` | `TRUST_BADGES` (compteur tests si évolué), `ROADMAP_AVAILABLE` / `ROADMAP_PLANNED` si phase bouge | | 6 | `CLAUDE.md` (projet) | Section "Phases" — ajouter la phase ou mettre à jour son statut ✅/🔄 | +> Pour une PR qui ajoute une commande, une leçon ou un module, voir aussi [`curriculum-delivery-checklist.md`](curriculum-delivery-checklist.md). Les compteurs publics vivent aussi dans `index.html` (métadonnées + FAQ JSON-LD), `public/llms.txt` et `public/llms-full.txt` (ajout du 1er octobre 2026). + ## Checklist opérationnelle Avant de clôturer la session de release : diff --git a/docs/strategy/2026-10-01-bases-vers-intermediaire.md b/docs/strategy/2026-10-01-bases-vers-intermediaire.md new file mode 100644 index 0000000..a5c3bf4 --- /dev/null +++ b/docs/strategy/2026-10-01-bases-vers-intermediaire.md @@ -0,0 +1,71 @@ +# Des bases au niveau intermédiaire — plan validé le 1er octobre 2026 + +> Décision de @thierry, 1er octobre 2026 : Terminal Learning devient **la référence pour apprendre les bases du terminal, jusqu'au niveau intermédiaire**, dans les limites d'une simulation fidèle. Les outils de métier (sécurité offensive, analyse réseau, OSINT) ne sont pas simulés. Pour ces métiers, le site oriente vers les plateformes gratuites qui les enseignent déjà. +> +> Procédure à suivre pour chaque livraison : [`docs/processes/curriculum-delivery-checklist.md`](../processes/curriculum-delivery-checklist.md). + +## Pourquoi + +Le constat date de la même soirée. Les 11 modules et 66 leçons font un très bon premier contact avec le terminal. Le simulateur est vérifié contre de vrais shells, il couvre Linux, macOS et Windows, et il est gratuit, en français et open source. + +Il manque encore une marche avant qu'un élève soit prêt à apprendre un métier : + +- traiter du texte : chercher, trier, filtrer, comparer ; +- écrire des scripts ; +- manipuler le système : archives, disque, paquets ; +- survivre dans un éditeur ; +- prouver ce qu'on sait sans être guidé. + +Simuler `nmap`, `wireshark` ou un vrai réseau donnerait un résultat faux ou un jouet. Cela irait contre la règle qui fait la valeur du projet : chaque sortie correspond à un vrai shell. OverTheWire, picoCTF et TryHackMe (salles gratuites) font déjà ce travail. On y renvoie plutôt que de le refaire. + +## Périmètre + +| Dans le périmètre (simulable fidèlement) | Hors périmètre | +| --- | --- | +| Commandes qui travaillent sur des fichiers et du texte | Outils d'attaque ou d'analyse réseau (`nmap`, `wireshark`, `tcpdump`) | +| Scripts bash (et un sous-ensemble PowerShell) | Vrai réseau entre plusieurs machines | +| Éditeurs `nano` et `vim` (survie) | OSINT sur de vraies personnes (RGPD) | +| Enquêtes sur des journaux fictifs | Exploitation de failles | +| `apt`, `systemctl`, `journalctl`, si leur sortie est capturée sur le vrai Ubuntu de WSL | Paquets réellement installés, services qui tournent vraiment | + +**Sources de vérité pour les sorties attendues :** + +- Git Bash : bash et coreutils GNU ; +- PowerShell 7.6, en culture en-US ; +- **Ubuntu sous WSL 2** (présent sur la machine de @thierry, vérifié le 1er octobre 2026) pour ce que Git Bash n'a pas. + +macOS reste sans référence locale. Ses écarts BSD sont documentés, pas inventés. + +## Ordre d'implémentation + +Une PR à la fois. Chaque lot respecte la procédure de livraison. Les estimations comptent les PR, pas les jours. + +| Lot | Contenu | PR (estimation) | Dépend de | +| --- | --- | --- | --- | +| **0** | Ce plan, la roadmap, la procédure de livraison | 1 | — | +| **0b** | Garde-fous des compteurs : `llms.txt`, `llms-full.txt` et les métadonnées d'`index.html` vérifiés par un test | 1 | — | +| **1** | Chercher et trier : `sort`, `uniq`, `cut`, `find`, `xargs`, `diff`, options utiles de `wc` et `grep` ; côté PowerShell : `Sort-Object`, `Where-Object`, `Select-Object` sur les objets de `Get-ChildItem` et les lignes de `Get-Content` | 3–4 | — | +| **2** | Archives et disque : `tar`, `gzip`, `zip`/`unzip`, `Compress-Archive`, `du`, `df`, `which`/`type`/`Get-Command` | 1–2 | — | +| **3** | `sed` et `awk` : ce qu'un débutant utilise (substitution, champs, `-F`, motifs simples), avec un message honnête au-delà | 1–2 | 1 | +| **4** | Module « Enquêter dans les journaux » : journaux fictifs (connexions, serveur web), missions en étapes sans réponse donnée | 2–3 | 1, 3 | +| **5** | Éditeurs : `nano` (ouvrir, modifier, enregistrer, quitter) et la survie dans `vim` (`i`, `Échap`, `:wq`, `:q!`) | 1–2 | — | +| **6** | Module Scripts : mini-interpréteur bash (`if`/`test`, `for`/`while`, fonctions, `$1`…`$#`, `$?`, `exit`), puis les leçons, puis un sous-ensemble PowerShell | 4–6 | 1 | +| **7** | Système Linux, uniquement avec des sorties capturées sur WSL : `apt`, `systemctl status`, `journalctl`, `free` | 1–2 | 6 | +| **8** | Mission finale : un scénario sans indice qui mélange les modules. Elle débloque la suite, et on peut la passer directement si on connaît déjà les bases | 1–2 | 1–6 | +| **9** | Ponts vers la suite : module « Personnaliser son terminal » (déjà planifié, avec l'installation d'un vrai terminal et de WSL) et page « Et après ? » qui oriente par métier vers les ressources externes | 2–3 | 8 | + +Le cœur (lots 1 à 6 et 8) représente environ **15 à 20 PR**, les lots 7 et 9 en ajoutent 3 à 5. L'ordre suit les dépendances. Le lot 1 vient d'abord, car les missions, les scripts et la mission finale s'appuient sur lui. + +## Ce qui évolue en même temps (à chaque lot, pas à la fin) + +- **Page Référence** : chaque nouvelle commande y entre, avec ses variantes Linux, macOS et Windows et des exemples exécutables. +- **Page d'accueil** : la liste des commandes disponibles, les compteurs et la feuille de route publique (`landingContent.ts`). Quand les lots 4 et 8 arrivent, l'accueil raconte le nouveau parcours : « des bases jusqu'au niveau intermédiaire », avec un exemple de mission d'enquête. +- **SEO et moteurs IA** : `index.html` (métadonnées, FAQ en JSON-LD), `llms.txt`, `llms-full.txt`, le sitemap. +- **CHANGELOG** pour les décideurs et **STORY** pour la communauté, à chaque PR de code. +- **ROADMAP et plan** : le bandeau en tête et la case cochée du lot. + +## Ce qui n'est pas décidé ici + +- **Les badges et certificats** (Phase 11b) restent en attente : ils supposent la mission finale (lot 8). +- **Les parcours métiers internes** (Phase 11b, « Career Branches ») sont remplacés par la page d'orientation du lot 9. On en reparlera si un partenaire (école, plateforme de labos) propose un vrai environnement. +- **Le mode histoire** (Phase 12) reste après le parcours principal.