Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@

---

## 🗺️ 26 septembre 2026 — La roadmap publique dit ce qui existe vraiment

*Page d'accueil · `llms.txt` · `docs/ROADMAP.md`*

Thierry a demandé de vérifier la roadmap affichée sur la page d'accueil. Chaque ligne a été comparée au code, et plusieurs promettaient plus que ce qui existe.

- **LTI 1.3 était annoncé comme disponible.** Le code n'est qu'une maquette technique, désactivée en production. L'intégration aux plateformes d'école (Moodle, Canvas…) passe dans « Plus tard ».
- **OpenAI était annoncé comme fournisseur du tuteur IA.** L'API d'OpenAI refuse les appels venant d'un navigateur, et l'application le signale déjà à l'élève. La roadmap et les fichiers lus par les moteurs IA (`llms.txt`) citent maintenant OpenRouter, Anthropic et Gemini, et précisent qu'OpenRouter donne accès aux modèles d'OpenAI.
- **« WCAG 2.2 AAA » surestimait l'accessibilité.** Seules les cibles tactiles visent ce niveau. La ligne cite désormais ce qui est réellement fait : cibles de 44 px, focus visible, zones sûres de l'iPhone.
- **La colonne « En cours » montrait des chantiers gelés ou déjà livrés.** Elle montre maintenant le vrai travail : la fidélité du terminal à un vrai shell, la théorie vérifiée commande par commande, et la page Référence.
- **La FAQ lue par Google et les moteurs IA** annonçait aussi LTI « en cours de finalisation » et un tableau de bord enseignant « prévu pour juin 2026 », alors qu'il existe déjà. Elle plaçait enfin la base de données à Francfort : elle est en Irlande (région eu-west-1), comme le dit la politique de confidentialité. Un test compare désormais les deux.
- Les compteurs suivent : 2 700+ tests, 21 agents d'audit.

---

## 🧭 26 septembre 2026 — Les agents de vérification remis à jour, et un nouvel agent qui compare le simulateur à un vrai shell

*21 agents (13 Opus, 8 Sonnet) · nouvel agent `terminal-fidelity-auditor` · nouvelle commande `npm run theory:gaps`*
Expand Down
4 changes: 3 additions & 1 deletion docs/ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Roadmap — Terminal Learning

> **Last updated:** 24 September 2026 CEST — 🩺 **Full check-up (resumed)**: P0 shipped — #383 dependencies (react-router 7.18.4, npm audit 41 → 24, 0 critical) + #384 THI-340 (age proof stamped on every OAuth return path). P1 terminal fidelity (THI-353) in progress — #385 per-lesson starting state, #386 monospace ligatures off (checked on a real iPhone, THI-354), #387 scripts / `$PROFILE` / ExecutionPolicy / `chmod`: exercises validating despite an error **44 → 3**. Next: redirections (`2>`, `>`, `tee`), theory ↔ terminal gaps, then the "no validation on error" guard.
> **Last updated:** 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).
>
> **Previous update (24 September 2026 CEST)**: 🩺 **Full check-up (resumed)**: P0 shipped — #383 dependencies (react-router 7.18.4, npm audit 41 → 24, 0 critical) + #384 THI-340 (age proof stamped on every OAuth return path). P1 terminal fidelity (THI-353) in progress — #385 per-lesson starting state, #386 monospace ligatures off (checked on a real iPhone, THI-354), #387 scripts / `$PROFILE` / ExecutionPolicy / `chmod`: exercises validating despite an error **44 → 3**. Next: redirections (`2>`, `>`, `tee`), theory ↔ terminal gaps, then the "no validation on error" guard.
>
> **Previous update (6 June 2026 CEST)**: full pre-pause audit (security-auditor 9.4/10, 0 CRITICAL) — see CHANGELOG.
>
Expand Down
3 changes: 2 additions & 1 deletion docs/plan.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Terminal Learning — Plan de lancement public

> Dernière mise à jour : **24 septembre 2026 CEST** — **🩺 Grand Check-up (reprise)** : P0 livré — #383 dépendances (react-router 7.18.4, npm audit 41 → 24, 0 critique) + #384 THI-340 (preuve d'âge posée sur tous les retours OAuth). P1 « fidélité du terminal » (THI-353) en cours — #385 état de départ par leçon, #386 ligatures monospace (vérifié sur iPhone, THI-354), #387 scripts / `$PROFILE` / ExecutionPolicy / `chmod` : exercices validés malgré une erreur **44 → 3**. Suite : redirections (`2>`, `>`, `tee`), écarts théorie ↔ terminal, puis garde « pas de validation si erreur ». Précédent : 6 juin 2026 — audit complet pré-pause (voir CHANGELOG).
> Dernière mise à jour : **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.
> Précédent (24 septembre 2026) : P0 livré — #383 dépendances (react-router 7.18.4, npm audit 41 → 24, 0 critique) + #384 THI-340 (preuve d'âge posée sur tous les retours OAuth). P1 « fidélité du terminal » (THI-353) en cours — #385 état de départ par leçon, #386 ligatures monospace (vérifié sur iPhone, THI-354), #387 scripts / `$PROFILE` / ExecutionPolicy / `chmod` : exercices validés malgré une erreur **44 → 3**. Suite : redirections (`2>`, `>`, `tee`), écarts théorie ↔ terminal, puis garde « pas de validation si erreur ». Précédent : 6 juin 2026 — audit complet pré-pause (voir CHANGELOG).
> 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).

---
Expand Down
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -240,15 +240,15 @@
"name": "Terminal Learning est-il adapté aux enseignants et aux établissements scolaires ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. Terminal Learning est conçu pour être utilisable en classe : ressource gratuite, sans inscription obligatoire pour les élèves, progression locale par navigateur, contenu pédagogique structuré niveau A1 à C1 (CEFR informatique). L'intégration LTI 1.3 est en cours de finalisation pour Moodle, Smartschool et les LMS standards (Phase 7c). Un Admin Panel pour le suivi enseignant est prévu pour juin 2026."
"text": "Oui. Terminal Learning est conçu pour être utilisable en classe : ressource gratuite, sans inscription obligatoire pour les élèves, progression locale par navigateur, contenu pédagogique structuré niveau A1 à C1 (CEFR informatique). Un enseignant peut créer une classe, partager un code d'invitation et suivre la progression de ses élèves ; un établissement peut regrouper plusieurs enseignants. L'intégration aux plateformes d'école (LTI 1.3 : Moodle, Canvas…) est prévue pour plus tard."
}
},
{
"@type": "Question",
"name": "Les données des utilisateurs sont-elles protégées (RGPD) ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Oui. Terminal Learning respecte le RGPD européen. Aucune donnée personnelle n'est collectée par défaut — la progression est stockée localement dans votre navigateur. Si vous créez un compte (optionnel), seul votre email et un identifiant sont stockés sur Supabase EU-west-1 (Frankfurt). Aucun tracking publicitaire, aucun cookie tiers, aucune revente de données. Détails complets dans notre politique de confidentialité."
"text": "Oui. Terminal Learning respecte le RGPD européen. Aucune donnée personnelle n'est collectée par défaut — la progression est stockée localement dans votre navigateur. Si vous créez un compte (optionnel), votre compte et votre progression sont stockés chez Supabase, dans l'Union européenne (région eu-west-1, Irlande). Aucun tracking publicitaire, aucun cookie tiers, aucune revente de données. Détails complets dans notre politique de confidentialité."
}
},
{
Expand Down
6 changes: 3 additions & 3 deletions public/llms-full.txt
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ All role-based queries are enforced by **Supabase Row Level Security (RLS)** pol

An optional, opt-in conversational tutor available on lesson pages, the dashboard, and the command reference. Designed to help when the learner is stuck without giving away the answer.

- **BYOK only**: users supply their own API key for one of the supported providers — **OpenRouter**, **Anthropic**, **OpenAI**, or **Google Gemini**. No key is ever stored or proxied through any Terminal Learning server. There is no shared backend cost and no rate-limiting beyond what the upstream provider applies to the user's key.
- **BYOK only**: users supply their own API key for one of the supported providers — **OpenRouter**, **Anthropic** or **Google Gemini**. OpenAI models are reached through OpenRouter, because OpenAI's API refuses direct browser calls (CORS). No key is ever stored or proxied through any Terminal Learning server. There is no shared backend cost and no rate-limiting beyond what the upstream provider applies to the user's key.
- **Client-side storage**: keys are stored in **encrypted IndexedDB** (AES-GCM via the Web Crypto API, PBKDF2 key derivation) or, if the user prefers ephemerality, in session-scoped localStorage. The user can revoke and forget the key at any moment from the tutor settings page.
- **Lesson-grounded context**: the model is told which lesson the learner is on, what command(s) the lesson covers, and what target environment (Linux/macOS/Windows) is active.
- **Defense in depth against prompt injection**: input sanitizer (heuristic + length cap), system prompt v1.1.0 with XML-delimited untrusted blocks, post-filter on model output, audited by a dedicated `prompt-guardrail-auditor` agent before every release.
Expand All @@ -235,7 +235,7 @@ An optional, opt-in conversational tutor available on lesson pages, the dashboar
- **Progress tracking**: localStorage (no account) + Supabase PostgreSQL (optional cloud sync)
- **Auth**: Supabase Auth — GitHub OAuth + Google OAuth + email/password
- **Access control**: Role-Based Access Control (RBAC) with 5 roles — student, teacher, pending_teacher, institution_admin, super_admin — enforced by Supabase Row Level Security (RLS) policies
- **AI tutor (optional)**: BYOK (Bring Your Own Key) — client-side only, supports OpenRouter / Anthropic / OpenAI / Google Gemini. Keys are encrypted in IndexedDB (AES-GCM via WebCrypto) or stored session-scoped in localStorage. Streaming via Server-Sent Events. Input/output sanitizers + post-filter for prompt injection defense
- **AI tutor (optional)**: BYOK (Bring Your Own Key) — client-side only, supports OpenRouter / Anthropic / Google Gemini (OpenAI models via OpenRouter). Keys are encrypted in IndexedDB (AES-GCM via WebCrypto) or stored session-scoped in localStorage. Streaming via Server-Sent Events. Input/output sanitizers + post-filter for prompt injection defense
- **Hosting**: Vercel (EU region, GDPR compliant) — HSTS preload, Content Security Policy, automatic DDoS mitigation
- **Tests**: Vitest unit + integration tests + Playwright E2E suites (accessibility, mobile, SEO)

Expand All @@ -259,7 +259,7 @@ Yes. The app is fully responsive and works on phones and tablets.
Yes, optionally. Sign in with GitHub or Google to sync progress across devices. Fully GDPR compliant.

**Is there an AI tutor?**
Yes, optional and BYOK (Bring Your Own Key). Bring your own OpenRouter, Anthropic, OpenAI, or Google Gemini API key — it stays on your device (encrypted IndexedDB or session-scoped localStorage) and never transits any Terminal Learning server. The tutor is grounded in the current lesson context and refuses requests that try to bypass that scope.
Yes, optional and BYOK (Bring Your Own Key). Bring your own OpenRouter, Anthropic or Google Gemini API key (OpenAI models are available through OpenRouter) — it stays on your device (encrypted IndexedDB or session-scoped localStorage) and never transits any Terminal Learning server. The tutor is grounded in the current lesson context and refuses requests that try to bypass that scope.

**Can teachers create classrooms?**
Yes. Approved teachers can create classes, share an invitation code, list enrolled students, and monitor per-student progress. Institutions can group multiple teachers and classes under an institution administrator. Cross-institution data is blocked at the database layer (Row Level Security).
Expand Down
2 changes: 1 addition & 1 deletion public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ Every lesson covers **Linux**, **macOS**, and **Windows** (PowerShell) with envi
- No account required to start — progress saved in localStorage
- Optional cloud sync via GitHub or Google OAuth (Supabase Auth)
- Multi-role classroom (RBAC): students, teachers (class management + invitation codes), institution administrators, super admin — Row Level Security enforced at the database layer
- Optional AI tutor (BYOK — Bring Your Own Key): contextual help on the current lesson via OpenRouter, Anthropic, OpenAI, or Google Gemini. Keys are stored client-side only (encrypted IndexedDB or session-scoped localStorage), never relayed through any Terminal Learning server
- Optional AI tutor (BYOK — Bring Your Own Key): contextual help on the current lesson via OpenRouter, Anthropic or Google Gemini (OpenAI models through OpenRouter: OpenAI's API refuses direct browser calls). Keys are stored client-side only (encrypted IndexedDB or session-scoped localStorage), never relayed through any Terminal Learning server
- GDPR/RGPD compliant, hosted on Vercel (EU region)
- Fully open source — contributions welcome

Expand Down
Loading
Loading