Skip to content

fix(landing): only list commands the terminal runs and the lessons teach - #401

Merged
thierryvm merged 2 commits into
mainfrom
fix/landing-reality
Sep 29, 2026
Merged

thierryvm merged 2 commits into
mainfrom
fix/landing-reality

Conversation

@thierryvm

@thierryvm thierryvm commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

Why

The landing page should only claim what exists. Its totals were already guarded by landingTotals.test.ts, but the hero lists commands per environment and level, and typing them in the terminal showed that 22 answered "commande introuvable" (systemctl, launchctl, caffeinate, defaults, xcode-select, Get-Service, New-PSDrive, Register-ScheduledTask…) and 4 more were taught in no lesson (pbcopy, pbpaste, Write-Host, Clear-Host).

What changes

  • ENV_LEVELS (hero): every command listed runs in that environment and appears as a word of its own in that environment's lesson code blocks or exercises. The macOS level 3 is no longer "Homebrew" (brew is only mentioned in lesson text, never practised).
  • Module section subtitle: "five levels, up to Git and AI" instead of "two levels, up to redirection"; module counts come from MODULE_PREVIEWS.length (share text, footer line).
  • Roadmap: real git branches (feat(terminal): real git branches, merges and conflicts, matching Git 2.56 #400), the app install guide (iOS / Android / desktop) and the explained reference examples (feat(reference): explained examples that run in the practice terminal #395) move to "Available"; "In progress" now names multi-step exercises and the taught commands the terminal does not simulate yet (find, sort, diff, tar…). Test count 2 700+ → 2 900+.
  • Terminal preview (hero animation): outputs as GNU bash, zsh and PowerShell 7 print them (ls sorted, no /; Get-Location with its Path table; Test-Path → True instead of bash-style listings under Windows); the prompt follows cd, blank lines keep their height, ls keeps its double spaces, long commands wrap at the edge like a terminal. New tests in terminalPreview.test.tsx.
  • docs/plan.md banner brought up to feat(terminal): real git branches, merges and conflicts, matching Git 2.56 #400; CHANGELOG and STORY.

Verification

  • landingTotals.test.ts: new checks run each hero command in processCommand for its environment and look for it as a whole word in the lessons (a substring search let top match "stop"); another ties the "N niveaux" subtitle to the highest module level, and the roadmap's module count to MODULE_PREVIEWS. Run against the previous landingContent.ts, the command checks fail (8 of 9 levels).
  • type-check, lint, full suite (2918 pass on the last run; an earlier run saw one live-Supabase integration test time out under load, 11/11 alone), build.
  • ui-auditor: clean (twice, including the preview). feature-dev:code-reviewer: one finding on the first pass (the substring check), fixed; none on the preview pass.
  • Local screenshots at 390 px of the preview in the three environments (reduced motion, final state).
  • landingContent.ts still imports neither the curriculum nor the engine (THI-118 bundle constraint).

Follow-ups

  • About 20 commands are explained in lessons without being simulated (find, sort, uniq, diff, sed, df, du, tar, which, Where-Object, Sort-Object…).
  • The engine's Windows output: Get-ChildItem prints a bash-style list instead of PowerShell's table, and New-Item -Type Directory my-app creates a folder named Directory.
  • The live-Supabase integration tests time out at 5 s under full-suite load (three different ones this session); they pass alone.

🤖 Generated with Claude Code

Résumé par Sourcery

Veiller à ce que la page d’accueil ne promette que des commandes de terminal et du contenu pédagogique actuellement disponibles.

Correctifs :

  • Aligner les listes de commandes d’environnement de la page d’accueil sur les commandes à la fois enseignées et prises en charge par le terminal.
  • Faire en sorte que l’aperçu du terminal principal reflète fidèlement la sortie de bash, zsh et PowerShell, et qu’il suive les changements de répertoire dans les invites de commande.
  • Mettre à jour la feuille de route de la page d’accueil, les messages des modules et les totaux des tests afin qu’ils correspondent à l’état actuel du produit.

Améliorations :

  • Ajouter des vérifications de régression pour s’assurer que les commandes annoncées s’exécutent dans leur environnement et apparaissent comme des mots entiers dans le contenu des leçons.
  • Améliorer le rendu de l’aperçu du terminal pour le tri, les lignes de sortie vides, le retour à la ligne des commandes, l’espacement et l’état final lorsque les animations réduites sont activées.

Documentation :

  • Mettre à jour le journal des modifications, l’histoire du projet et le plan de lancement afin de documenter les améliorations de précision de la page d’accueil et la feuille de route actuelle.

Tests :

  • Étendre les tests du contenu de la page d’accueil avec des vérifications de la prise en charge des commandes, de la couverture des leçons, du niveau et de la cohérence du nombre de modules.
  • Ajouter des tests de l’aperçu du terminal pour les invites tenant compte du répertoire et la conservation des lignes vides dans PowerShell.
Original summary in English

Summary by Sourcery

Ensure the landing page only promises terminal commands and learning content that currently exist.

Bug Fixes:

  • Align the landing page’s environment command lists with commands that are both taught and supported by the terminal.
  • Make the hero terminal preview accurately reflect bash, zsh, and PowerShell output and follow directory changes in prompts.
  • Update the landing page roadmap, module messaging, and test totals to match the current product state.

Enhancements:

  • Add regression checks ensuring advertised commands run in their environment and appear as whole-word lesson content.
  • Improve terminal preview rendering for sorting, blank output lines, command wrapping, spacing, and reduced-motion final state.

Documentation:

  • Update the changelog, project story, and launch plan to document the landing-page accuracy improvements and current roadmap.

Tests:

  • Extend landing content tests with command support, lesson coverage, level, and module-count consistency checks.
  • Add terminal preview tests for directory-aware prompts and preserved PowerShell blank lines.

The hero listed, per environment and level, 22 commands the simulator
did not know (systemctl, launchctl, Get-Service, New-PSDrive...) and 4
no lesson taught. Each listed command now runs in that environment and
appears as a word of its own in that environment's lesson code or
exercises; landingTotals.test.ts checks both, and fails on the old list.

- module subtitle: five levels, up to Git and AI (was "two levels")
- module counts from MODULE_PREVIEWS instead of a hardcoded 11
- roadmap: real git branches, the app install guide and the explained
  reference examples are available; in progress now names multi-step
  exercises and the taught commands not simulated yet (find, sort, diff)
- tests 2 700+ -> 2 900+; docs/plan.md banner brought up to #400
- CHANGELOG and STORY

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@vercel

vercel Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
terminal-learning Ready Ready Preview Sep 29, 2026 9:10pm UTC

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @thierryvm, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 2 hours and 30 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Sep 29, 2026

Copy link
Copy Markdown

Guide du réviseur

La PR rend les promesses de la page d’accueil exécutables et étayées par le programme pédagogique, ajoute des tests de détection de dérive pour les commandes principales, les niveaux et le nombre de modules, et met à jour la feuille de route ainsi que la documentation du projet afin de refléter l’état actuel du produit.

Diagramme de séquence pour valider les commandes de la page d’accueil

sequenceDiagram
    participant Test as landingTotals.test.ts
    participant Landing as ENV_LEVELS
    participant Engine as processCommand
    participant Lessons as Lesson content

    Test->>Landing: Read hero commands by environment and level
    loop Each displayed command
        Test->>Engine: processCommand(environment, command)
        Engine-->>Test: Command result
        Test->>Lessons: Search whole-word command usage
        Lessons-->>Test: Taught or missing
    end
    Test-->>Landing: Pass only when command runs and is taught
Loading

Diagramme de flux pour les contrôles de dérive du contenu de la page d’accueil

flowchart LR
    Modules[MODULE_PREVIEWS] --> Counts[Module counts and level subtitle]
    Env[ENV_LEVELS] --> Commands[Hero command lists]
    Commands --> Execute[processCommand by environment]
    Commands --> Curriculum[Lesson code blocks and exercises]
    Execute --> Valid[Executable promise]
    Curriculum --> Valid
    Counts --> Validated[Landing content verified]
    Valid --> Validated
Loading

Modifications au niveau des fichiers

Modification Détails Fichiers
Limiter les affirmations concernant les commandes principales aux commandes qui s’exécutent dans l’environnement sélectionné et qui sont enseignées par son programme pédagogique.
  • Suppression des commandes non prises en charge ou non enseignées des listes de niveaux Linux, macOS et Windows.
  • Renommage et réécriture des descriptions des niveaux concernés afin de les aligner sur le programme restant.
  • Ajout d’une couverture de régression qui exécute chaque commande affichée et vérifie sa présence en tant que mot entier dans les leçons, sans importer le programme pédagogique ni le moteur dans le contenu de la page d’accueil.
src/app/data/landingContent.ts
src/test/landingTotals.test.ts
Synchroniser les messages et les nombres de modules de la page d’accueil avec les données réelles des modules.
  • Mise à jour du sous-titre des modules afin de décrire le parcours en cinq niveaux consacré à Git et à l’IA.
  • Dérivation du texte de partage et du nombre de modules du pied de page à partir de MODULE_PREVIEWS.length.
  • Ajout de tests reliant le sous-titre au niveau de module le plus élevé et le nombre de la feuille de route à MODULE_PREVIEWS.
src/app/components/Landing.tsx
src/app/data/landingContent.ts
src/test/landingTotals.test.ts
Actualiser la feuille de route publique et la documentation relative à l’historique du projet afin de refléter le travail livré et les lacunes restantes en matière de simulation du terminal.
  • Déplacement des branches Git, des instructions d’installation et des exemples de référence expliqués vers la section Disponible.
  • Remplacement des éléments obsolètes de la feuille de route par des exercices en plusieurs étapes et des commandes enseignées mais non simulées dans la section En cours.
  • Mise à jour du nombre total de tests ainsi que de la bannière du plan de documentation, du journal des modifications et de l’historique du projet.
src/app/data/landingContent.ts
docs/plan.md
CHANGELOG.md
STORY.md

Conseils et commandes

Interagir avec Sourcery

  • Déclencher une nouvelle revue : commentez @sourcery-ai review sur la pull request.
  • Poursuivre les discussions : répondez directement aux commentaires de revue de Sourcery.
  • Générer une issue GitHub à partir d’un commentaire de revue : demandez à Sourcery de créer une issue à partir d’un commentaire de revue en y répondant. Vous pouvez également répondre à un commentaire de revue avec @sourcery-ai issue pour créer une issue à partir de celui-ci.
  • Générer un titre de pull request : écrivez @sourcery-ai n’importe où dans le titre de la pull request pour générer un titre à tout moment. Vous pouvez également commenter @sourcery-ai title sur la pull request pour générer ou régénérer le titre à tout moment.
  • Générer un résumé de pull request : écrivez @sourcery-ai summary n’importe où dans le corps de la pull request pour générer un résumé de PR à tout moment, exactement à l’endroit souhaité. Vous pouvez également commenter @sourcery-ai summary sur la pull request pour générer ou régénérer le résumé à tout moment.
  • Générer le guide du réviseur : commentez @sourcery-ai guide sur la pull request pour générer ou régénérer le guide du réviseur à tout moment.
  • Résoudre tous les commentaires de Sourcery : commentez @sourcery-ai resolve sur la pull request pour résoudre tous les commentaires de Sourcery. Cette commande est utile si vous avez déjà traité tous les commentaires et ne souhaitez plus les voir.
  • Ignorer toutes les revues de Sourcery : commentez @sourcery-ai dismiss sur la pull request pour ignorer toutes les revues existantes de Sourcery. Cette commande est particulièrement utile si vous souhaitez repartir de zéro avec une nouvelle revue. N’oubliez pas de commenter @sourcery-ai review pour déclencher une nouvelle revue !

Personnaliser votre expérience

Accédez à votre tableau de bord pour :

  • Activer ou désactiver des fonctionnalités de revue telles que le résumé de pull request généré par Sourcery, le guide du réviseur, et d’autres.
  • Modifier la langue de la revue.
  • Ajouter, supprimer ou modifier les instructions de revue personnalisées.
  • Ajuster les autres paramètres de revue.

Obtenir de l’aide

Original review guide in English

Reviewer's Guide

The PR makes landing-page promises executable and curriculum-backed, adds drift-detection tests for hero commands, levels, and module counts, and updates roadmap and project documentation to match the current product state.

Sequence diagram for validating landing-page commands

sequenceDiagram
    participant Test as landingTotals.test.ts
    participant Landing as ENV_LEVELS
    participant Engine as processCommand
    participant Lessons as Lesson content

    Test->>Landing: Read hero commands by environment and level
    loop Each displayed command
        Test->>Engine: processCommand(environment, command)
        Engine-->>Test: Command result
        Test->>Lessons: Search whole-word command usage
        Lessons-->>Test: Taught or missing
    end
    Test-->>Landing: Pass only when command runs and is taught
Loading

Flow diagram for landing-content drift checks

flowchart LR
    Modules[MODULE_PREVIEWS] --> Counts[Module counts and level subtitle]
    Env[ENV_LEVELS] --> Commands[Hero command lists]
    Commands --> Execute[processCommand by environment]
    Commands --> Curriculum[Lesson code blocks and exercises]
    Execute --> Valid[Executable promise]
    Curriculum --> Valid
    Counts --> Validated[Landing content verified]
    Valid --> Validated
Loading

File-Level Changes

Change Details Files
Constrain hero command claims to commands that both execute in the selected environment and are taught by its curriculum.
  • Removed unsupported or untaught commands from Linux, macOS, and Windows level lists.
  • Renamed and rewrote affected level descriptions to match the remaining curriculum.
  • Added regression coverage that runs each displayed command and verifies whole-word lesson coverage without importing curriculum or engine into landing content.
src/app/data/landingContent.ts
src/test/landingTotals.test.ts
Synchronize landing-page module messaging and counts with the actual module data.
  • Updated the module subtitle to describe the five-level path through Git and AI.
  • Derived share text and footer module counts from MODULE_PREVIEWS.length.
  • Added tests tying the subtitle to the highest module level and roadmap count to MODULE_PREVIEWS.
src/app/components/Landing.tsx
src/app/data/landingContent.ts
src/test/landingTotals.test.ts
Refresh public roadmap and project-history documentation to reflect delivered work and remaining terminal-simulation gaps.
  • Moved Git branches, installation guidance, and explained reference examples to Available.
  • Replaced outdated roadmap items with multi-step exercises and unsimulated taught commands under In progress.
  • Updated test totals and the docs plan banner, changelog, and project story.
src/app/data/landingContent.ts
docs/plan.md
CHANGELOG.md
STORY.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

ls sorts its names and adds no slash; PowerShell answers Get-Location
with its Path table and Test-Path with True, instead of bash-style
listings. The prompt follows cd (~/projects, C:\Users\user\projects),
blank output lines keep their height, ls keeps its double spaces, and
long commands wrap at the edge like a terminal, not after a hyphen.
Outputs captured from GNU bash and PowerShell 7.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@thierryvm
thierryvm merged commit 5a693cb into main Sep 29, 2026
4 checks passed
@thierryvm
thierryvm deleted the fix/landing-reality branch September 29, 2026 21:13
thierryvm added a commit that referenced this pull request Sep 29, 2026
Idea from @Thierry: the profile file, aliases and functions, a prompt
that shows the folder, the git branch and the Node version, colours,
then Starship and Oh My Posh, with the practice terminal showing the
learner's prompt live. Listed as planned on the public roadmap and in
docs/ROADMAP.md, whose banner is brought up to #401; CHANGELOG, STORY.

Co-authored-by: Claude Opus 5.5 <[email protected]>

This branch was successfully deployed

1 active deployment
Preview — 5202c9ab Deployed Sep 29, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant