Skip to content

feat(lessons): the Git module practised as steps, checked on the repository - #404

Merged
thierryvm merged 1 commit into
mainfrom
feature/git-exercises-steps
Sep 29, 2026
Merged

thierryvm merged 1 commit into
mainfrom
feature/git-exercises-steps

Conversation

@thierryvm

@thierryvm thierryvm commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

Why

Follow-up to #403 (multi-step exercises). The Git module's exercises asked for a single command out of context (git init, git add ., git diff, git checkout -b, git merge), validated by regexes on the typed text. Git only makes sense as a sequence: prepare, record, compare, switch.

What changes

Five lessons become multi-step exercises, each step checked on the repository state:

lesson steps
git-init mkdir mon-projet → cd mon-projet → git init (a git init in ~ is flagged)
git-add-commit git status → git add . → git commit -m … (.env stays out thanks to .gitignore)
git-diff-gitignore git diff → git add README.md → git diff --staged → git commit -m …
git-branch git checkout -b feature/ma-feature → create feature.txt (Set-Content on Windows) → git add → git commit → git switch main (the file is gone)
git-merge git merge feature/ma-feature (fast-forward) → git branch -d feature/ma-feature
  • Equivalent commands count: git switch -c, git add -A, git diff --cached, git commit -a then git show.
  • No dead ends out of order (found by the code review, then fixed): observation steps pass on any git status / diff output, action steps also pass when their effect is already there, and the unavoidable dead ends (commit landed on main, branch deleted with -D or renamed before the merge, change discarded with git restore, git init in ~) print what to do.
  • Helpers in exerciseSteps.ts: homeDirExists, repoInHomeDir, printed. repoFile now returns the bytes git reads (with the final newline), so it compares with head/index.
  • validateGitInit/AddCommit/DiffGitignore/Branch/Merge removed with their tests; their accepted forms became step tests. Two injection tests moved to validateGitStatusLog.

Verification

  • Expected outputs from real Git 2.56 in a throwaway repository (branch -d refused before the merge with its two hint: lines, A\tfeature.txt when switching with a staged file, empty git diff after git add). terminal-fidelity-auditor: 14 MATCH on Git; it caught one wrong claim (ls -a shows .git — false in PowerShell), reworded.
  • exerciseSteps.test.ts: the five walk-throughs, equivalent commands, 9 out-of-order scenarios. lessonFidelity replays every solution through the step engine.
  • type-check, lint, full suite 2958 passed, build; ratchets unchanged (148 / 34 / 0).
  • Gates: curriculum-validator (0 critical), test-runner, terminal-fidelity-auditor, feature-dev:code-reviewer ×2 (2 important dead ends fixed, then 4 minor fixed).

Known, out of scope (Windows fidelity PR): real PowerShell prints a table after mkdir and lists .env/.gitignore; ls -Force does not list .git in the simulator; ls -a should fail as ambiguous.

🤖 Generated with Claude Code

Résumé par Sourcery

Enseigner les workflows Git fondamentaux sous forme d’exercices en plusieurs étapes, vérifiés à partir de l’état du dépôt, plutôt que comme des invites de commandes isolées.

Nouvelles fonctionnalités :

  • Convertir cinq leçons Git en exercices en plusieurs étapes couvrant la configuration du dépôt, les commits initiaux, les différences, les branches et les fusions.
  • Valider la progression de l’apprenant à partir de l’état du dépôt tout en acceptant les commandes Git équivalentes et en fournissant des indications pour les erreurs courantes d’exécution dans le désordre.

Corrections de bugs :

  • Empêcher les apprenants de rester bloqués après des séquences Git invalides en détectant les impasses récupérables et irrécupérables et en expliquant comment continuer.
  • Corriger les comparaisons de fichiers du dépôt afin d’inclure le format de saut de ligne utilisé par Git.

Améliorations :

  • Remplacer les validateurs basés sur des expressions régulières de commandes pour les cinq exercices Git par des vérifications d’étapes basées sur l’état, et ajouter des utilitaires pour inspecter le dépôt et la sortie du terminal.

Documentation :

  • Mettre à jour le journal des modifications, l’histoire du projet, la feuille de route, le plan et le contenu de la page d’accueil afin de documenter les exercices du module Git basés sur des étapes.

Tests :

  • Ajouter une couverture des scénarios de parcours guidé, de commandes équivalentes et d’exécution dans le désordre pour les cinq exercices Git.
  • Mettre à jour les solutions des leçons pour couvrir des workflows Git complets, notamment la création de fichiers spécifique à Windows.
  • Déplacer la couverture pertinente des injections vers le validateur restant de l’état Git.

Tâches de maintenance :

  • Supprimer les validateurs d’exercices Git obsolètes ainsi que leurs tests unitaires.
Original summary in English

Summary by Sourcery

Teach the core Git workflows as state-verified, multi-step exercises instead of isolated command prompts.

New Features:

  • Convert five Git lessons into multi-step exercises covering repository setup, initial commits, diffs, branching, and merging.
  • Validate learner progress from repository state while accepting equivalent Git commands and providing guidance for common out-of-order mistakes.

Bug Fixes:

  • Prevent learners from becoming stuck after invalid Git sequences by detecting recoverable and unrecoverable dead ends and explaining how to proceed.
  • Correct repository file comparisons to include the newline format used by Git.

Enhancements:

  • Replace command-regex validators for the five Git exercises with state-based step checks and add helpers for repository and terminal-output inspection.

Documentation:

  • Update the changelog, project story, roadmap, plan, and landing content to document the Git module's step-based exercises.

Tests:

  • Add walkthrough, equivalent-command, and out-of-order scenario coverage for the five Git exercises.
  • Update lesson solutions for complete Git workflows, including Windows-specific file creation.
  • Move relevant injection coverage to the remaining Git status validator.

Chores:

  • Remove the obsolete Git exercise validators and their unit tests.

…sitory

Five Git exercises asked for one command out of context. They now follow
the whole gesture, each step checked on the repository state:

- git init: mkdir mon-projet, cd mon-projet, git init (a git init in ~
  is flagged).
- first commit: git status, git add ., git commit (.env stays out).
- diff: git diff, git add, git diff --staged, git commit.
- branch: create it, commit feature.txt on it, back on main the file
  is gone.
- merge: git merge (fast-forward), then git branch -d.

Equivalent commands count (switch -c, add -A, diff --cached, commit -a
then git show). Out-of-order sequences never leave the learner stuck:
a later command completes the steps, or the terminal says what to do.
Every expected output comes from real Git 2.56. repoFile now returns
the bytes git reads, so it compares with head and index. The five
command-only validators and their tests are gone; their accepted forms
are step tests now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@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 10:21pm 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 12 hours and 39 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 reviewer

La PR remplace cinq exercices Git validés par des expressions régulières par des workflows en plusieurs étapes pilotés par l’état du dépôt, en ajoutant la prise en charge des commandes équivalentes et des indications de récupération en cas d’actions effectuées dans le désordre, tout en supprimant les validateurs obsolètes et en mettant à jour les tests, la documentation et les relectures des leçons.

Diagramme de séquence pour une leçon Git en plusieurs étapes

sequenceDiagram
    actor Student
    participant Terminal
    participant Repository
    participant StepCheck

    Student->>Terminal: git status / git add / git commit
    Terminal->>Repository: Update working tree, index, and commits
    Terminal->>StepCheck: Provide state and printed output
    StepCheck->>Repository: Check current repository state
    StepCheck-->>Student: Accept step or show recovery guidance
Loading

Diagramme de flux pour les exercices Git validés par l’état du dépôt

flowchart LR
    A["Student enters Git command"] --> B["Terminal updates repository state"]
    B --> C["Exercise step check"]
    C -->|state matches| D["Step accepted"]
    C -->|state does not match| E["Warning or recovery guidance"]
    A -. equivalent command .-> B
    F["Repository state: files, staging, commits, branches"] --> C
Loading

Diagramme de flux pour le workflow de branche et de fusion Git

flowchart LR
    A["main"] --> B["git checkout -b feature/ma-feature"]
    B --> C["Create feature.txt"]
    C --> D["git add feature.txt"]
    D --> E["git commit"]
    E --> F["git switch main"]
    F --> G["feature.txt absent on main"]
    G --> H["git merge feature/ma-feature"]
    H --> I["Fast-forward on main"]
    I --> J["git branch -d feature/ma-feature"]
Loading

Modifications fichier par fichier

Modification Détails Fichiers
Conversion de cinq leçons Git, passant d’une validation basée sur des modèles de commandes à des exercices de dépôt avec état, en plusieurs étapes.
  • Définition de workflows ordonnés pour l’initialisation, le premier commit, la comparaison et la mise en staging, la création de branches et le nettoyage après fusion.
  • Ajout de vérifications de l’état et de la sortie acceptant les commandes équivalentes et tolérant les actions valides effectuées dans le désordre.
  • Ajout d’avertissements ciblés et d’indications de récupération pour les opérations Git courantes irréversibles ou effectuées au mauvais endroit.
src/app/data/curriculum.ts
src/test/lessonSolutions.ts
src/test/exerciseSteps.test.ts
Extension des utilitaires d’état des exercices afin de prendre en charge la validation des étapes basée sur le dépôt.
  • Ajout d’utilitaires pour vérifier l’existence du répertoire personnel, l’emplacement du dépôt et la sortie capturée des commandes.
  • Normalisation du contenu des fichiers du dépôt avec la représentation des retours à la ligne finaux de Git.
src/app/data/exerciseSteps.ts
Suppression des validateurs Git obsolètes à commande unique et migration de leur couverture de sécurité.
  • Suppression des validateurs et des tests unitaires pour les commandes Git d’initialisation, d’ajout/commit, de comparaison, de branche et de fusion.
  • Conservation de la validation de status et déplacement des vérifications d’injection vers celle-ci.
src/app/data/validators.ts
src/app/data/curriculum.ts
src/test/validators.test.ts
Mise à jour de la documentation produit et du contenu de la feuille de route destiné aux apprenants pour refléter la modification du workflow Git.
  • Documentation des cinq exercices Git basés sur des étapes et des détails de fidélité au véritable fonctionnement de Git.
  • Mise à jour de la feuille de route et du statut de la page d’accueil afin d’indiquer que les étapes Git sont disponibles.
CHANGELOG.md
STORY.md
docs/ROADMAP.md
docs/plan.md
src/app/data/landingContent.ts
Ajout d’une couverture complète des régressions pour les workflows Git normaux, avec commandes équivalentes et actions effectuées dans le désordre.
  • Couverture des transitions d’état du dépôt, de la sortie Git pertinente exacte, des commandes équivalentes, des avertissements en cas d’impasse et des parcours de récupération.
  • Mise à jour des relectures des solutions de leçons pour les commandes spécifiques à chaque plateforme.
src/test/exerciseSteps.test.ts
src/test/lessonSolutions.ts

Conseils et commandes

Interagir avec Sourcery

  • Déclencher une nouvelle review : commentez @sourcery-ai review sur la pull request.
  • Poursuivre les discussions : répondez directement aux commentaires de review de Sourcery.
  • Générer une issue GitHub à partir d’un commentaire de review : demandez à Sourcery de créer une issue à partir d’un commentaire de review en y répondant. Vous pouvez également répondre à un commentaire de review 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 reviewer : commentez @sourcery-ai guide sur la pull request pour générer ou régénérer le guide du reviewer à 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 reviews de Sourcery : commentez @sourcery-ai dismiss sur la pull request pour ignorer toutes les reviews de Sourcery existantes. Cette commande est particulièrement utile si vous souhaitez repartir de zéro avec une nouvelle review : n’oubliez pas de commenter @sourcery-ai review pour déclencher une nouvelle review !

Personnaliser votre expérience

Accédez à votre tableau de bord pour :

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

Obtenir de l’aide

Original review guide in English

Reviewer's Guide

The PR replaces five regex-validated Git exercises with repository-state-driven, multi-step workflows, adding equivalent-command support and recovery guidance for out-of-order actions while removing obsolete validators and updating tests, documentation, and lesson replays.

Sequence diagram for a multi-step Git lesson

sequenceDiagram
    actor Student
    participant Terminal
    participant Repository
    participant StepCheck

    Student->>Terminal: git status / git add / git commit
    Terminal->>Repository: Update working tree, index, and commits
    Terminal->>StepCheck: Provide state and printed output
    StepCheck->>Repository: Check current repository state
    StepCheck-->>Student: Accept step or show recovery guidance
Loading

Flow diagram for Git exercises validated by repository state

flowchart LR
    A["Student enters Git command"] --> B["Terminal updates repository state"]
    B --> C["Exercise step check"]
    C -->|state matches| D["Step accepted"]
    C -->|state does not match| E["Warning or recovery guidance"]
    A -. equivalent command .-> B
    F["Repository state: files, staging, commits, branches"] --> C
Loading

Flow diagram for the Git branch and merge workflow

flowchart LR
    A["main"] --> B["git checkout -b feature/ma-feature"]
    B --> C["Create feature.txt"]
    C --> D["git add feature.txt"]
    D --> E["git commit"]
    E --> F["git switch main"]
    F --> G["feature.txt absent on main"]
    G --> H["git merge feature/ma-feature"]
    H --> I["Fast-forward on main"]
    I --> J["git branch -d feature/ma-feature"]
Loading

File-Level Changes

Change Details Files
Converted five Git lessons from command-pattern validation into stateful, multi-step repository exercises.
  • Defined ordered workflows for init, first commit, diff/staging, branching, and merge cleanup.
  • Added state/output checks that accept equivalent commands and tolerate valid out-of-order actions.
  • Added targeted warnings and recovery guidance for common irreversible or misplaced Git operations.
src/app/data/curriculum.ts
src/test/lessonSolutions.ts
src/test/exerciseSteps.test.ts
Expanded exercise-state helpers to support repository-aware step validation.
  • Added helpers for home-directory existence, repository location, and captured command output.
  • Normalized repository file contents with Git's trailing-newline representation.
src/app/data/exerciseSteps.ts
Removed obsolete one-command Git validators and migrated their security coverage.
  • Deleted validators and unit tests for Git init, add/commit, diff, branch, and merge commands.
  • Retained status validation and moved injection checks to it.
src/app/data/validators.ts
src/app/data/curriculum.ts
src/test/validators.test.ts
Updated product documentation and learner-facing roadmap content for the Git workflow change.
  • Documented the five step-based Git exercises and real-Git fidelity details.
  • Updated roadmap and landing-page status to show Git steps as delivered.
CHANGELOG.md
STORY.md
docs/ROADMAP.md
docs/plan.md
src/app/data/landingContent.ts
Added comprehensive regression coverage for normal, equivalent-command, and out-of-order Git workflows.
  • Covered repository state transitions, exact relevant Git output, equivalent commands, dead-end warnings, and recovery paths.
  • Updated lesson solution replays for platform-specific commands.
src/test/exerciseSteps.test.ts
src/test/lessonSolutions.ts

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

@thierryvm
thierryvm merged commit be4b9dd into main Sep 29, 2026
4 checks passed
@thierryvm
thierryvm deleted the feature/git-exercises-steps branch September 29, 2026 22:24

This branch was successfully deployed

1 active deployment
Preview — d0858ce7 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