Skip to content

Conversation

@joshlf
Copy link
Member

@joshlf joshlf commented Feb 9, 2026


Latest Update: v10 — Compare vs v9

📚 Full Patch History

Links show the diff between the row version and the column version.

Version v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v8 v7 v6 v5 v4 v3 v2 v1 Base
v7 v6 v5 v4 v3 v2 v1 Base
v6 v5 v4 v3 v2 v1 Base
v5 v4 v3 v2 v1 Base
v4 v3 v2 v1 Base
v3 v2 v1 Base
v2 v1 Base
v1 Base
⬇️ Download this PR

Branch

git fetch origin refs/heads/Gc48bae5a713c0931a406c162369f4a30ddc1f2b3 && git checkout -b pr-Gc48bae5a713c0931a406c162369f4a30ddc1f2b3 FETCH_HEAD

Checkout

git fetch origin refs/heads/Gc48bae5a713c0931a406c162369f4a30ddc1f2b3 && git checkout FETCH_HEAD

Cherry Pick

git fetch origin refs/heads/Gc48bae5a713c0931a406c162369f4a30ddc1f2b3 && git cherry-pick FETCH_HEAD

Pull

git pull origin refs/heads/Gc48bae5a713c0931a406c162369f4a30ddc1f2b3

Stacked PRs enabled by GHerrit.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @joshlf, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly upgrades the terminal user interface and error reporting mechanisms within the hermes tool. It introduces interactive progress feedback, ensures comprehensive capture of diagnostic output, and refines how messages are displayed. These changes aim to provide a more informative and robust user experience, especially when dealing with complex or problematic build processes.

Highlights

  • Enhanced Terminal UI with Progress Indicators: The hermes tool now utilizes the indicatif crate to display a dynamic spinner and compilation progress messages, providing better visual feedback during long-running operations.
  • Improved Error Handling and Output Capture: A safety_buffer has been implemented to capture stderr output from child processes, preventing 'silent death' scenarios where critical error messages might be lost. This buffer is dumped to eprintln! if the process fails.
  • Flexible Diagnostic Output: The render_miette function in diagnostics.rs has been refactored to accept a generic printer closure, allowing diagnostic messages to be routed to various output destinations beyond the default eprintln!.
  • New Integration Tests for UI Robustness: A comprehensive suite of new integration tests has been added to validate the terminal UI behavior under diverse conditions, including noisy build scripts, hanging processes, phantom successes, silent panics, and large volumes of compiler output.
  • Dependency Updates for Terminal Control: New crates such as console, indicatif, regex, strip-ansi-escapes, unicode-segmentation, and vte have been added to the project's dependencies to support the enhanced terminal UI and text processing capabilities.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • tools/Cargo.lock
    • Added new dependencies: console, indicatif, regex, strip-ansi-escapes, unicode-segmentation, and vte.
  • tools/hermes/Cargo.toml
    • Added indicatif and console as direct dependencies.
    • Added regex and strip-ansi-escapes as dev-dependencies.
  • tools/hermes/src/charon.rs
    • Piped stderr output from child processes.
    • Implemented a safety_buffer to store stderr content, preventing loss of error messages.
    • Integrated indicatif to display a progress spinner and update messages during compilation.
    • Modified error handling to print the safety_buffer content upon process failure.
  • tools/hermes/src/diagnostics.rs
    • Updated render_miette to accept a printer closure, enabling custom output for diagnostic messages.
  • tools/hermes/tests/fixtures/env_interleaved_stdout/expected_stderr.txt
    • Removed specific 'Line from charon' messages from expected stderr, reflecting new buffering behavior.
  • tools/hermes/tests/fixtures/ui_build_script_noise/expected_status.txt
    • Added new test fixture for noisy build scripts, expecting 'failure' status.
  • tools/hermes/tests/fixtures/ui_build_script_noise/expected_stderr.regex.txt
    • Added new test fixture for noisy build scripts, expecting any stderr output.
  • tools/hermes/tests/fixtures/ui_build_script_noise/hermes.toml
    • Added new test fixture for noisy build scripts, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_build_script_noise/mock_charon_output.json
    • Added new test fixture for noisy build scripts, including mock Charon output.
  • tools/hermes/tests/fixtures/ui_build_script_noise/source/Cargo.toml
    • Added new test fixture for noisy build scripts, defining a test package.
  • tools/hermes/tests/fixtures/ui_build_script_noise/source/src/lib.rs
    • Added new test fixture for noisy build scripts, with a basic foo function.
  • tools/hermes/tests/fixtures/ui_hanging_build/expected_status.txt
    • Added new test fixture for hanging builds, expecting 'success' status.
  • tools/hermes/tests/fixtures/ui_hanging_build/expected_stderr.regex.txt
    • Added new test fixture for hanging builds, expecting empty stderr.
  • tools/hermes/tests/fixtures/ui_hanging_build/hermes.toml
    • Added new test fixture for hanging builds, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_hanging_build/source/Cargo.toml
    • Added new test fixture for hanging builds, defining a test package with a build script.
  • tools/hermes/tests/fixtures/ui_hanging_build/source/build.rs
    • Added new test fixture for hanging builds, with a build script that sleeps for 2 seconds.
  • tools/hermes/tests/fixtures/ui_hanging_build/source/src/lib.rs
    • Added new test fixture for hanging builds, with a basic foo function.
  • tools/hermes/tests/fixtures/ui_phantom_success/expected_status.txt
    • Added new test fixture for phantom success, expecting 'success' status.
  • tools/hermes/tests/fixtures/ui_phantom_success/expected_stderr.regex.txt
    • Added new test fixture for phantom success, expecting stderr containing 'unused variable'.
  • tools/hermes/tests/fixtures/ui_phantom_success/hermes.toml
    • Added new test fixture for phantom success, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_phantom_success/source/Cargo.toml
    • Added new test fixture for phantom success, defining a test package.
  • tools/hermes/tests/fixtures/ui_phantom_success/source/src/lib.rs
    • Added new test fixture for phantom success, with an unused variable and a warning attribute.
  • tools/hermes/tests/fixtures/ui_silent_panic/expected_status.txt
    • Added new test fixture for silent panics, expecting 'failure' status.
  • tools/hermes/tests/fixtures/ui_silent_panic/expected_stderr.regex.txt
    • Added new test fixture for silent panics, expecting stderr containing 'Boom'.
  • tools/hermes/tests/fixtures/ui_silent_panic/hermes.toml
    • Added new test fixture for silent panics, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_silent_panic/source/Cargo.toml
    • Added new test fixture for silent panics, defining a test package with a build script.
  • tools/hermes/tests/fixtures/ui_silent_panic/source/build.rs
    • Added new test fixture for silent panics, with a build script that panics.
  • tools/hermes/tests/fixtures/ui_silent_panic/source/src/lib.rs
    • Added new test fixture for silent panics, with a basic foo function.
  • tools/hermes/tests/fixtures/ui_the_flood/expected_status.txt
    • Added new test fixture for a flood of compiler artifacts, expecting 'failure' status.
  • tools/hermes/tests/fixtures/ui_the_flood/expected_stderr.regex.txt
    • Added new test fixture for a flood of compiler artifacts, expecting stderr containing 'dep_49'.
  • tools/hermes/tests/fixtures/ui_the_flood/hermes.toml
    • Added new test fixture for a flood of compiler artifacts, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_the_flood/mock_charon_output.json
    • Added new test fixture for a flood of compiler artifacts, including mock Charon output with many compiler artifacts.
  • tools/hermes/tests/fixtures/ui_the_flood/source/Cargo.toml
    • Added new test fixture for a flood of compiler artifacts, defining a test package.
  • tools/hermes/tests/fixtures/ui_the_flood/source/src/lib.rs
    • Added new test fixture for a flood of compiler artifacts, with a basic foo function.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/expected_status.txt
    • Added new test fixture for visual ghosting, expecting 'failure' status.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/expected_stderr.regex.txt
    • Added new test fixture for visual ghosting, expecting stderr containing 'Dep A', 'The Error', and 'Dep B'.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/hermes.toml
    • Added new test fixture for visual ghosting, with empty dependencies.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/mock_charon_output.json
    • Added new test fixture for visual ghosting, including mock Charon output with interleaved compiler artifacts and messages.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/source/Cargo.toml
    • Added new test fixture for visual ghosting, defining a test package.
  • tools/hermes/tests/fixtures/ui_visual_ghosting/source/src/lib.rs
    • Added new test fixture for visual ghosting, with a basic foo function.
  • tools/hermes/tests/integration.rs
    • Set HERMES_FORCE_TTY and FORCE_COLOR environment variables for integration tests.
    • Modified stderr assertion logic to use regex matching and strip ANSI escape codes for more robust terminal output testing.
  • tools/vendor/strip-ansi-escapes/.cargo-checksum.json
    • Added checksums for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/.cargo_vcs_info.json
    • Added VCS info for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/.github/workflows/rust.yml
    • Added GitHub Actions workflow for strip-ansi-escapes.
  • tools/vendor/strip-ansi-escapes/Cargo.lock
    • Added Cargo.lock for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/Cargo.toml
    • Added Cargo.toml for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/Cargo.toml.orig
    • Added original Cargo.toml for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/LICENSE-APACHE
    • Added Apache License for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/LICENSE-MIT
    • Added MIT License for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/README.md
    • Added README.md for vendored strip-ansi-escapes crate.
  • tools/vendor/strip-ansi-escapes/examples/strip-escapes.rs
    • Added example for strip-ansi-escapes.
  • tools/vendor/strip-ansi-escapes/src/lib.rs
    • Added source code for vendored strip-ansi-escapes crate.
  • tools/vendor/unicode-segmentation/.cargo-checksum.json
    • Added checksums for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/.cargo_vcs_info.json
    • Added VCS info for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/COPYRIGHT
    • Added copyright information for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/Cargo.toml
    • Added Cargo.toml for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/Cargo.toml.orig
    • Added original Cargo.toml for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/LICENSE-APACHE
    • Added Apache License for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/LICENSE-MIT
    • Added MIT License for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/README.md
    • Added README.md for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/benches/chars.rs
    • Added benchmarks for character segmentation in unicode-segmentation.
  • tools/vendor/unicode-segmentation/benches/word_bounds.rs
    • Added benchmarks for word boundary segmentation in unicode-segmentation.
  • tools/vendor/unicode-segmentation/benches/words.rs
    • Added benchmarks for word segmentation in unicode-segmentation.
  • tools/vendor/unicode-segmentation/scripts/unicode.py
    • Added script for generating Unicode tables for unicode-segmentation.
  • tools/vendor/unicode-segmentation/scripts/unicode_gen_breaktests.py
    • Added script for generating Unicode break tests for unicode-segmentation.
  • tools/vendor/unicode-segmentation/src/grapheme.rs
    • Added grapheme segmentation logic for unicode-segmentation.
  • tools/vendor/unicode-segmentation/src/lib.rs
    • Added main library file for vendored unicode-segmentation crate.
  • tools/vendor/unicode-segmentation/src/sentence.rs
    • Added sentence segmentation logic for unicode-segmentation.
  • tools/vendor/unicode-segmentation/src/word.rs
    • Added word segmentation logic for unicode-segmentation.
  • tools/vendor/unicode-segmentation/tests/test.rs
    • Added tests for unicode-segmentation.
  • tools/vendor/vte/.builds/linux.yml
    • Added Linux CI workflow for vendored vte crate.
  • tools/vendor/vte/.cargo-checksum.json
    • Added checksums for vendored vte crate.
  • tools/vendor/vte/.cargo_vcs_info.json
    • Added VCS info for vendored vte crate.
  • tools/vendor/vte/CHANGELOG.md
    • Added changelog for vendored vte crate.
  • tools/vendor/vte/Cargo.lock
    • Added Cargo.lock for vendored vte crate.
  • tools/vendor/vte/Cargo.toml
    • Added Cargo.toml for vendored vte crate.
  • tools/vendor/vte/Cargo.toml.orig
    • Added original Cargo.toml for vendored vte crate.
  • tools/vendor/vte/LICENSE-APACHE
    • Added Apache License for vendored vte crate.
  • tools/vendor/vte/LICENSE-MIT
    • Added MIT License for vendored vte crate.
  • tools/vendor/vte/README.md
    • Added README.md for vendored vte crate.
  • tools/vendor/vte/examples/parselog.rs
    • Added example for vte.
  • tools/vendor/vte/rustfmt.toml
    • Added rustfmt.toml for vte.
  • tools/vendor/vte/src/ansi.rs
    • Added ANSI terminal stream parsing logic for vte.
  • tools/vendor/vte/src/lib.rs
    • Added main library file for vendored vte crate.
  • tools/vendor/vte/src/params.rs
    • Added parameter parsing logic for vte.
Activity
  • The pull request introduces a new approach to managing terminal UI, centralizing it within the hermes tool.
  • Several new external crates related to terminal interaction and text processing have been integrated.
  • The output handling for child processes has been significantly refactored to provide better user feedback and prevent loss of critical information.
  • A substantial number of new integration tests have been added to validate the robustness and correctness of the new UI features across various scenarios.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request significantly improves the terminal user interface for Hermes by introducing a progress spinner during compilation and better handling of stderr to prevent silent failures. The addition of a comprehensive set of UI-related integration tests is a great step towards ensuring robustness. The changes to the diagnostic rendering to support indicatif are well-implemented. I have a couple of suggestions to improve code clarity and robustness in the test suite and stderr handling.

Comment on lines +96 to +102
for line in reader.lines() {
if let Ok(line) = line {
if let Ok(mut buf) = safety_buffer_clone.lock() {
buf.push(line);
}
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The current implementation silently ignores errors when locking the safety_buffer, which can happen if another thread panics while holding the lock (a poisoned lock). This can lead to silent data loss in the buffer, making debugging harder. It's better to panic explicitly when the lock is poisoned to make such bugs immediately visible. This can be done by using .unwrap() on the lock result.

This applies to all places where safety_buffer is locked (here and on lines 148, 155, 171).

Also, the loop can be simplified using flatten() to handle Result from the lines() iterator.

A revised implementation for this loop could look like this:

for line in reader.lines().flatten() {
    // If the lock is poisoned, it's better to panic to surface the issue.
    safety_buffer_clone.lock().unwrap().push(line);
}

@codecov-commenter
Copy link

codecov-commenter commented Feb 9, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (Gd1a7f9c4436f266d37e83ebc2310f5a99a73d24d@6b62149). Learn more about missing BASE report.

Additional details and impacted files
@@                             Coverage Diff                              @@
##             Gd1a7f9c4436f266d37e83ebc2310f5a99a73d24d    #3020   +/-   ##
============================================================================
  Coverage                                             ?   91.87%           
============================================================================
  Files                                                ?       20           
  Lines                                                ?     6057           
  Branches                                             ?        0           
============================================================================
  Hits                                                 ?     5565           
  Misses                                               ?      492           
  Partials                                             ?        0           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

… errors

* Normalize paths between integration runner's
* Map cargo's absolute shadow output paths reliably by replacing temporary workspaces
* Inject  effectively through Charon driver
* Remove diagnostic prints and fallback to deterministic string-replacement for verification assertions
* Fix mapping of  outputs to use robust non-spanning fallbacks

gherrit-pr-id: Gd1a7f9c4436f266d37e83ebc2310f5a99a73d24d
gherrit-pr-id: Gc48bae5a713c0931a406c162369f4a30ddc1f2b3
@joshlf joshlf force-pushed the Gc48bae5a713c0931a406c162369f4a30ddc1f2b3 branch from eee41fb to 34f4c95 Compare February 10, 2026 00:50
@joshlf joshlf force-pushed the Gd1a7f9c4436f266d37e83ebc2310f5a99a73d24d branch from 0062c3c to 6b62149 Compare February 10, 2026 00:50
@joshlf joshlf force-pushed the Gd1a7f9c4436f266d37e83ebc2310f5a99a73d24d branch from 6b62149 to 8771c47 Compare February 10, 2026 20:31
@joshlf
Copy link
Member Author

joshlf commented Feb 10, 2026

Squashed into #3019

@joshlf joshlf closed this Feb 10, 2026
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.

2 participants