Skip to content

fix(terminal): reference examples all run, and the engine matches real shells (THI-353) - #396

Merged
thierryvm merged 1 commit into
mainfrom
fix/simulator-reference-gaps
Sep 29, 2026
Merged

thierryvm merged 1 commit into
mainfrom
fix/simulator-reference-gaps

Conversation

@thierryvm

@thierryvm thierryvm commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

Summary

Closes the last 32 /app/reference examples that failed in the practice terminal (THI-353 follow-up to #395). Every expected value in the new tests comes from a real shell run on 29 September 2026: GNU bash 5.3, PowerShell 7.6, git 2.56 and OpenSSH 10.5. None comes from the engine's own output.

Engine

  • New commands and options: cat -n, grep -r, date +FORMAT (strftime), Get-Content -TotalCount/-Head/-Tail/-Raw, Set-Content, Add-Content, Get-Date -Format/-UFormat, Get-History, Get-Help, tasklist, Get-ScheduledTask.
  • Select-String ignores case and prefixes file:line:. cat, type and history are routed to their cmdlets under PowerShell. $env:X += works. Windows session variables are defined (USERNAME, USERPROFILE…).
  • Variable expansion moved into parseArgs, so it applies to every command (cd $HOME, Get-Content $env:USERPROFILE\...), not only echo.
    • Single quotes stay literal. \$, a leading ~, $1–$9 and $PWD behave as in bash. $HOME and $PWD work under PowerShell.
    • cmdEcho and cmdExport no longer re-expand.
    • Values are capped at 1024 characters where they are stored (export, $env:X =) and where they are expanded (H3 anti-flooding).
  • ssh-keygen writes real files: ~/.ssh (700), private key (600), .pub (644, -C comment).
    • The fingerprint is the SHA-256 of the public blob, and the randomart uses OpenSSH's walk. Both are identical to OpenSSH on real keys (tests use real fingerprints, plus the FIPS test vector).
    • -l prints the fingerprint again. Options are parsed getopt-style (-lf, -N "").
    • Invalid input gets OpenSSH's messages and exit codes. Modes that are not simulated say so instead of generating a key.
  • parseArgs keeps an empty quoted word ("").
  • Fidelity fixes:
    • Select-String without a match succeeds.
    • An empty git commit prints git's short status and exits 1.
    • Get-Help no longer shows the bash syntax line.
    • git commit -am keeps its message.
    • cherry-pick A..B is supported, and rebase -i HEAD~N has git's bounds.
    • ssh-copy-id prints the missing INFO line.

Lessons (curriculum.ts)

  • Anatomie d'une commande on Windows: Get-Help Get-ChildItem.
  • cron on Windows: Get-ScheduledTask. crontab does not exist in PowerShell, and validateCron is now environment-aware.
  • SSH:
    • The key block shows OpenSSH's real dialogue instead of the made-up Enter file (.ssh/id_ed25519): [Entrée].
    • New Windows variants, including a replacement for ssh-copy-id, which Windows does not ship.
  • Variables d'environnement: one block per shell (a Linux learner no longer sees a PowerShell block).

Ratchets

  • Reference replay gaps: 32 → 0.
  • KNOWN_THEORY_GAPS: 160 → 158.
  • BASH_SHOWN_ON_WINDOWS_MAX: 37 → 34.

Reviews

  • feature-dev:code-reviewer: 0 CRITICAL. All 5 IMPORTANT findings are fixed with tests: -t constructor crash, unbounded -b, $env:Path = "$env:Path;…" wiping PATH, unbounded variable growth, -f <dir> replacing a folder. Most MINOR findings are fixed too.
  • terminal-fidelity-auditor: the variable expansion, ssh-keygen, Select-String and empty-commit cases match the real shells. Its extra findings on this scope are fixed (\$, ~, $HOME on Windows, ssh-keygen -l, ssh-copy-id spacing).
    • Pre-existing git gaps go to a dedicated git PR: untracked files, the root-commit summary, git add printing text.
  • Visual check (local dev server, own Chrome session, desktop 1280 and mobile 390): SSH, cron, command-anatomy and env-vars lessons in Linux and Windows. The exercises validate and there is no horizontal overflow.
    • Two pre-existing terminal display issues are left for the next UI PR: tables wrap inside the terminal, and blank lines are dropped.

Test plan

  • tsc --noEmit, eslint src, vitest run (2781 passed), vite build
  • npm run theory:gaps regenerated (ratchets only went down)
  • CI green, Vercel preview smoke test

🤖 Generated with Claude Code

Résumé par Sourcery

Alignez le terminal d’entraînement et les leçons sur le comportement réel de bash, PowerShell, Git et OpenSSH afin que chaque exemple de référence s’exécute correctement.

Nouvelles fonctionnalités :

  • Étendre la couverture du terminal avec les commandes Unix et PowerShell manquantes, les options, le formatage des dates, les opérations sur les fichiers, l’historique, l’aide, les processus et la prise en charge des tâches planifiées.
  • Simuler la génération de clés OpenSSH avec la persistance des fichiers de clés, les empreintes, les randomart, les commentaires, les permissions et la gestion des options prises en charge.

Corrections de bugs :

  • Reproduire le comportement des shells pour l’expansion des variables, les alias et les variables d’environnement PowerShell, les résultats de Select-String, les opérations de commit et d’historique Git, les utilitaires SSH et l’analyse des commandes.
  • Supprimer tous les échecs connus de rejouabilité des références en alignant la sortie du terminal, les statuts et la validation des leçons sur le comportement réel des shells.

Améliorations :

  • Adapter les exemples du programme au contexte de l’environnement afin que les apprenants Windows reçoivent des commandes spécifiques à PowerShell plutôt que des exemples uniquement Unix.
  • Ajouter des protections contre la croissance excessive des variables et les entrées de commandes invalides, tout en préservant la gestion des guillemets et des arguments vides compatible avec les shells.

Documentation :

  • Documenter les améliorations de fidélité du terminal et mettre à jour le contenu des leçons sur SSH, cron, les variables et l’anatomie des commandes afin de prendre en compte les comportements spécifiques aux plateformes.

Tests :

  • Ajouter des tests de fidélité des shells pour la rejouabilité des références de commandes, le formatage des dates, les empreintes et les randomart SSH, l’expansion des variables, les cmdlets PowerShell, le comportement de Git et les validateurs adaptés à l’environnement.
  • Réduire à zéro les écarts de rejouabilité des références et mettre à jour les seuils de régression théoriques.
Original summary in English

Summary by Sourcery

Align the practice terminal and lessons with real bash, PowerShell, Git, and OpenSSH behavior so every reference example runs successfully.

New Features:

  • Expand terminal coverage with missing Unix and PowerShell commands, options, date formatting, file operations, history, help, process, and scheduled-task support.
  • Simulate OpenSSH key generation with persisted key files, fingerprints, randomart, comments, permissions, and supported option handling.

Bug Fixes:

  • Match shell behavior for variable expansion, PowerShell aliases and environment variables, Select-String results, Git commit and history operations, SSH utilities, and command parsing.
  • Remove all known reference replay failures by aligning terminal output, statuses, and lesson validation with real shell behavior.

Enhancements:

  • Make curriculum examples environment-aware so Windows learners receive PowerShell-specific commands instead of Unix-only examples.
  • Add safeguards for variable growth and invalid command input while preserving shell-compatible quoting and empty arguments.

Documentation:

  • Document the terminal fidelity improvements and update SSH, cron, variables, and command-anatomy lesson content for platform-specific behavior.

Tests:

  • Add shell-fidelity tests for command reference replay, date formatting, SSH fingerprints and randomart, variable expansion, PowerShell cmdlets, Git behavior, and environment-aware validators.
  • Reduce reference replay gaps to zero and update theory-gap ratchets.

…l shells (THI-353)

Close the 32 /app/reference examples that still failed, checking every
expected value against GNU bash, PowerShell 7, git and OpenSSH 10.5.

- Engine: cat -n, grep -r, date +FORMAT, Get-Content -TotalCount/-Tail,
  Set-Content/Add-Content, Get-Date, Get-History, Get-Help, tasklist,
  Get-ScheduledTask, case-insensitive Select-String, PowerShell aliases
  routed to their cmdlets, $env:X += and Windows session variables.
- Variables expand in parseArgs for every command (runSimple, runFilter),
  outside single quotes; \$, a leading ~, $1-$9, $PWD, and PowerShell
  $HOME/$PWD. Values are capped (H3) where they are stored and expanded.
- ssh-keygen writes ~/.ssh keys (700/600/644); SHA-256 fingerprint and
  randomart identical to OpenSSH on real keys; -l prints it; getopt-style
  options; OpenSSH bounds and messages.
- Fidelity fixes: Select-String without a match succeeds, empty git commit
  prints git's status and exits 1, Get-Help no longer shows bash syntax,
  git commit -am keeps its message, cherry-pick A..B, rebase bounds.
- Lessons: Windows learners type Get-Help and Get-ScheduledTask (validateCron
  is env-aware), SSH shows OpenSSH's real dialogue and a Windows variant
  without ssh-copy-id, env-vars shows one shell per environment.
- Ratchets: reference gaps 32 -> 0, theory gaps 160 -> 158, bash shown on
  Windows 37 -> 34.

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 3:30pm 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 4 days and 20 hours 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 clôt les 32 échecs restants de rejeu de référence en étendant le moteur de terminal avec les comportements Unix, PowerShell, Git et OpenSSH manquants, en centralisant l’expansion sécurisée des variables du shell et en reproduisant les sorties, statuts, fichiers et permissions d’un shell réel. Elle met également à jour le programme pédagogique et les validateurs spécifiques à Windows, ajoute une couverture étendue de fidélité et de régression, et documente les améliorations du mécanisme de progression.

Diagramme de séquence pour l’expansion des variables PowerShell et l’exécution des cmdlets

sequenceDiagram
    actor Learner
    participant Engine
    participant Parser as parseArgs
    participant Cmdlet as PowerShell handler
    participant FS as Terminal filesystem

    Learner->>Engine: Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
    Engine->>Parser: parseArgs(command, expansionVars)
    Parser-->>Engine: Expanded file path
    Engine->>Cmdlet: handleWindows(Get-Content, args)
    Cmdlet->>FS: readFile(path)
    FS-->>Cmdlet: File content
    Cmdlet-->>Engine: Output lines and status
    Engine-->>Learner: PowerShell-compatible content
Loading

Diagramme de séquence pour la génération simulée d’une clé OpenSSH

sequenceDiagram
    actor Learner
    participant Engine
    participant Keygen as sshKeygen
    participant FS as Terminal filesystem
    participant Crypto as sha256 and randomart

    Learner->>Engine: ssh-keygen -t ed25519 -C comment
    Engine->>Keygen: keygenOptions(args)
    Keygen->>Crypto: Generate public blob and fingerprint
    Crypto-->>Keygen: SHA-256 fingerprint and randomart
    Keygen->>FS: Create ~/.ssh and write private/public keys
    FS-->>Keygen: Files with shell permissions
    Keygen-->>Engine: OpenSSH dialogue and key metadata
    Engine-->>Learner: Fingerprint, randomart, and saved paths
    Learner->>Engine: ssh-keygen -l
    Engine->>FS: Read public key
    FS-->>Engine: Public key content
    Engine-->>Learner: Matching fingerprint line
Loading

Diagramme de flux pour la validation des leçons tenant compte de l’environnement

flowchart TD
    Lesson[Lesson command] --> Environment{Terminal environment}
    Environment -->|Linux or macOS| UnixCron[crontab -l]
    Environment -->|Windows| WindowsTasks[Get-ScheduledTask]
    UnixCron --> Validator[validateCron]
    WindowsTasks --> Validator
    Validator --> Result[Exercise validation result]
Loading

Modifications au niveau des fichiers

Modification Détails Fichiers
Étend la couverture des commandes shell et aligne l’analyse des commandes et leur sortie sur les comportements de Bash, PowerShell, Git et OpenSSH.
  • Ajout d’options Unix et de cmdlets Windows pour le contenu des fichiers, le formatage des dates, la recherche, l’historique, l’aide, les processus et les tâches planifiées.
  • Déplacement de l’expansion des variables dans l’analyse des arguments, avec gestion des guillemets, du tilde, des variables automatiques, des variables d’environnement insensibles à la casse et des limites de taille.
  • Implémentation des alias PowerShell et des variables de session Windows, ainsi que de la sémantique d’affectation et d’ajout des variables d’environnement.
  • Mise à jour de l’analyse des options de commit Git, du statut des commits vides, des plages de cherry-pick et des limites du rebase interactif.
  • Ajout de la création simulée de fichiers par ssh-keygen, de la gestion des permissions, de l’analyse de style getopt, des empreintes, du randomart, de la liste, de la validation et de la gestion des modes non pris en charge.
  • Amélioration de la fidélité de Select-String, grep, cat, date, de la redirection et des erreurs/statuts spécifiques aux commandes.
src/app/data/terminalEngine.ts
src/app/data/commands/dateFormat.ts
src/app/data/commands/env.ts
src/app/data/commands/git.ts
src/app/data/commands/network.ts
src/app/data/commands/shellVars.ts
src/app/data/commands/sshKeygen.ts
src/app/data/commands/windows.ts
Rend le contenu du programme pédagogique et les validateurs sensibles à l’environnement afin que les apprenants Windows bénéficient de workflows PowerShell natifs.
  • Remplacement des exemples Bash Windows par des alternatives utilisant Get-Help, Get-ScheduledTask, les variables d’environnement PowerShell, SSH et la copie de clés SSH.
  • Mise à jour des solutions des leçons et de la validation de cron en fonction de l’environnement du shell.
  • Suppression des entrées correspondantes dans la théorie et dans les écarts de rejeu de référence.
src/app/data/curriculum.ts
src/app/data/validators.ts
src/test/lessonSolutions.ts
src/test/lessonTheoryGaps.ts
src/test/commandReferenceGaps.ts
Ajoute une large couverture de régression et ajuste les fixtures de rejeu de référence afin d’éliminer tous les écarts connus dans les exemples.
  • Ajout de tests unitaires de formatage des dates, de tests de hachage/randomart/empreinte OpenSSH, de tests de fidélité du shell et de cas de régression spécifiques aux commandes.
  • Initialisation de l’état de rejeu Git avec les commits et l’historique requis par les exemples de cherry-pick et de rebase.
  • Mise à jour des tests de prise en compte de l’environnement par le programme pédagogique et des tests des validateurs.
src/test/dateFormat.test.ts
src/test/terminalEngine.test.ts
src/test/commandReferenceReplay.ts
src/test/curriculumEnvAwareness.test.ts
src/test/validators.test.ts
Documente le travail terminé sur la fidélité du terminal de référence et la mise à jour des seuils de qualité.
  • Ajout d’entrées dans le changelog et le récit du projet décrivant la comparaison avec un shell réel et les changements de comportement visibles par l’utilisateur.
  • Indique que les écarts de rejeu de référence sont désormais à zéro et que les seuils relatifs à la théorie et à Bash sous Windows ont été réduits.
CHANGELOG.md
STORY.md

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 le titre d’une 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 le résumé d’une 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. Utile si vous avez déjà traité tous les commentaires et ne souhaitez plus les voir.
  • Rejeter toutes les reviews de Sourcery : commentez @sourcery-ai dismiss sur la pull request pour rejeter toutes les reviews Sourcery existantes. 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 les fonctionnalités de review, comme le résumé de pull request généré par Sourcery, le guide du reviewer, etc.
  • Modifier la langue de review.
  • Ajouter, supprimer ou modifier les 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 closes all 32 remaining reference replay failures by extending the terminal engine with missing Unix, PowerShell, Git, and OpenSSH behavior, centralizing safe shell-variable expansion, and matching real-shell output, statuses, files, and permissions. It also updates Windows-specific curriculum and validators, adds extensive fidelity/regression coverage, and documents the resulting ratchet improvements.

Sequence diagram for PowerShell variable expansion and cmdlet execution

sequenceDiagram
    actor Learner
    participant Engine
    participant Parser as parseArgs
    participant Cmdlet as PowerShell handler
    participant FS as Terminal filesystem

    Learner->>Engine: Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
    Engine->>Parser: parseArgs(command, expansionVars)
    Parser-->>Engine: Expanded file path
    Engine->>Cmdlet: handleWindows(Get-Content, args)
    Cmdlet->>FS: readFile(path)
    FS-->>Cmdlet: File content
    Cmdlet-->>Engine: Output lines and status
    Engine-->>Learner: PowerShell-compatible content
Loading

Sequence diagram for simulated OpenSSH key generation

sequenceDiagram
    actor Learner
    participant Engine
    participant Keygen as sshKeygen
    participant FS as Terminal filesystem
    participant Crypto as sha256 and randomart

    Learner->>Engine: ssh-keygen -t ed25519 -C comment
    Engine->>Keygen: keygenOptions(args)
    Keygen->>Crypto: Generate public blob and fingerprint
    Crypto-->>Keygen: SHA-256 fingerprint and randomart
    Keygen->>FS: Create ~/.ssh and write private/public keys
    FS-->>Keygen: Files with shell permissions
    Keygen-->>Engine: OpenSSH dialogue and key metadata
    Engine-->>Learner: Fingerprint, randomart, and saved paths
    Learner->>Engine: ssh-keygen -l
    Engine->>FS: Read public key
    FS-->>Engine: Public key content
    Engine-->>Learner: Matching fingerprint line
Loading

Flow diagram for environment-aware lesson validation

flowchart TD
    Lesson[Lesson command] --> Environment{Terminal environment}
    Environment -->|Linux or macOS| UnixCron[crontab -l]
    Environment -->|Windows| WindowsTasks[Get-ScheduledTask]
    UnixCron --> Validator[validateCron]
    WindowsTasks --> Validator
    Validator --> Result[Exercise validation result]
Loading

File-Level Changes

Change Details Files
Expands shell command coverage and aligns command parsing/output with Bash, PowerShell, Git, and OpenSSH behavior.
  • Added Unix options and Windows cmdlets for file content, date formatting, search, history, help, processes, and scheduled tasks.
  • Moved variable expansion into argument parsing with quote, tilde, automatic-variable, case-insensitive environment-variable, and size-limit handling.
  • Implemented PowerShell aliases and Windows session variables, plus environment assignment and append semantics.
  • Updated Git commit option parsing, empty-commit status, cherry-pick ranges, and interactive rebase bounds.
  • Added simulated ssh-keygen file creation, permissions, getopt-style parsing, fingerprints, randomart, listing, validation, and unsupported-mode handling.
  • Improved Select-String, grep, cat, date, redirection, and command-specific error/status fidelity.
src/app/data/terminalEngine.ts
src/app/data/commands/dateFormat.ts
src/app/data/commands/env.ts
src/app/data/commands/git.ts
src/app/data/commands/network.ts
src/app/data/commands/shellVars.ts
src/app/data/commands/sshKeygen.ts
src/app/data/commands/windows.ts
Makes curriculum content and validators environment-aware so Windows learners receive native PowerShell workflows.
  • Replaced Windows bash examples with Get-Help, Get-ScheduledTask, PowerShell environment-variable, SSH, and SSH key-copy alternatives.
  • Updated lesson solutions and cron validation by shell environment.
  • Removed the corresponding theory and reference replay gap entries.
src/app/data/curriculum.ts
src/app/data/validators.ts
src/test/lessonSolutions.ts
src/test/lessonTheoryGaps.ts
src/test/commandReferenceGaps.ts
Adds broad regression coverage and adjusts reference replay fixtures to eliminate all known examples gaps.
  • Added date-format unit tests, OpenSSH hashing/randomart/fingerprint tests, shell-fidelity tests, and command-specific regression cases.
  • Seeded Git replay state with the commits and history required by cherry-pick and rebase examples.
  • Updated curriculum environment-awareness and validator tests.
src/test/dateFormat.test.ts
src/test/terminalEngine.test.ts
src/test/commandReferenceReplay.ts
src/test/curriculumEnvAwareness.test.ts
src/test/validators.test.ts
Documents the completed reference-terminal fidelity work and updated quality ratchets.
  • Added changelog and project-story entries describing the real-shell comparison and user-facing behavior changes.
  • Records reference replay gaps at zero and reduced theory/Windows bash ratchets.
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

@thierryvm
thierryvm merged commit 1c52d0d into main Sep 29, 2026
4 checks passed
@thierryvm
thierryvm deleted the fix/simulator-reference-gaps branch September 29, 2026 15:32
thierryvm added a commit that referenced this pull request Sep 29, 2026
… button no longer hides keys (#397)

Found in the visual check of #396 on mobile, tablet and desktop:

- Lines laid out in columns (Get-Process, ps, ls -l, Get-History) are
  grouped by segmentOutput and shown unwrapped in TerminalColumns, which
  scrolls sideways with a right-edge fade and becomes a labelled focusable
  region only when it overflows. A lone line of names (ls, Tab completion)
  and git status entries keep wrapping.
- Blank output lines keep their height (an empty div collapsed to nothing).
- The touch key bar reserves its end for the AI tutor button, which covered
  the last keys (reserveKeyBarEnd, isAiTutorEnabled).
- The terminal input stays 16px on touch screens (iPad Safari focus zoom).

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

This branch was successfully deployed

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