Skip to content

v1.23.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 16:09
· 6 commits to main since this release

Added

  • Support Enter key to close the live dashboard once a run has finished, and support g and G keys for first and last row navigation in the launcher.
  • Support Tab and Shift-Tab pane switching, Ctrl-W word deletion, and Ctrl-U line clearing while typing in the launcher review filter (gauntlet pick), and automatically focus the first matching review on Enter.
  • Support Page Up, Page Down, and Space keys in the live dashboard feed view and help overlay.
  • Support Page Up and Page Down keys (pgup, pgdown) in the interactive launcher (gauntlet pick) across reviews, agents, options, and filter search.
  • Ship template configuration files agents.example.json and .env.example with documented options and placeholder values.

Security

  • Require reload handoff state file paths via GAUNTLET_STATE to be absolute, preventing relative path resolution and deletion in the working tree.
  • Validate provider and model identifiers in dsh configuration overlays, preventing YAML injection and directory traversal.
  • Validate reload handoff state files before reading or removing, refusing non-regular files and symlinks via GAUNTLET_STATE.
  • Reject oversized responses in self-update checksum downloads instead of silently truncating.
  • Separate git branch names and patterns with -- across merge, rename, and branch deletion operations.
  • Isolate --usage-cmd process execution and PATH resolution from the reviewed
    working tree, running the probe in the system temporary directory with
    cwd-relative PATH entries dropped.
  • Constrain self-update asset downloads to HTTPS endpoints on authorized GitHub
    release hosts, preventing plaintext transfers or untrusted third-party hosts.
  • Validate HTTP redirect target URLs in self-update against authorized release hosts.
  • Strip authorization bearer tokens on self-update requests whenever redirected away from GitHub hosts to prevent token leakage.
  • Use constant-time comparison for self-update asset checksum verification against timing side-channels.
  • Reject unclean and path-traversal state file paths via GAUNTLET_STATE.
  • Shell-quote git conflict resolution hint commands with POSIX single-quoting to prevent shell injection via untrusted commit subjects.
  • Isolate agent, indexer, and dsh probe execution with absolute-only PATH environments and clean working directories to prevent relative binary resolution.

Fixed

  • Reject explicit empty --agents, --bin, and --agent-cmd flags with a usage error rather than silently ignoring them or falling back to auto-detection.

  • List scheduled and available reviews across all target directories under --list when multiple directories are configured via --dirs, and search all target trees for --show-prompt.

  • Adapt agent lane column widths for narrower terminals (<90 cols) so metrics are not clipped off in the live dashboard.

  • Document the Escape reset shortcut (esc:live) in the dashboard footer whenever the feed is paused at the live edge.

  • Show :change instead of :open/close for arrow keys in the launcher footer when focused on the options pane.

  • Prevent space and arrow keys from modifying inactive options (suggest agent when suggest is off, merge target when commits are off) in the launcher.

  • Explain that no agents are installed when viewing the agents pane hint with an empty agent pool.

  • Abort git rebase on pull conflicts to avoid leaving repositories in an uncleaned mid-rebase state.

  • Fall back to subsequent agents in the pool when command building fails for an agent candidate.

  • Preserve error context when resolving binary paths and checking baseline revisions during trailer stripping.

  • Strip trailing carriage returns in git status porcelain parsing, worktree cleanup, and UI block padding to prevent path corruption and rendering issues with CRLF line endings.

  • Expand tildes and environment variables in custom agent executable paths at launch, and reject unresolvable variables.

  • Validate that GAUNTLET_HOME and --prompt-dir name directories and --log names a file at startup.

  • Align documented GIT_SSH_COMMAND default in .env.example with the runtime default (ssh).

  • Reject mismatched placeholders across custom agent model, effort, stream, and continue configurations.

  • Do not count opt-in agents launchable only via bunx (dsh) as usable auto-detectable CLIs in the doctor report, correctly reporting missing agents and exiting 1.

  • Separate revision arguments and branch names with -- across git worktree operations, diff statistics, trailer stripping, and commit subject extraction to prevent option injection and file name collision ambiguity.

  • Validate JSON key types when decoding custom agent definitions (agents.json), returning an error on non-string keys instead of panicking on type assertion.

  • Handle incomplete octal escape sequences without consuming invalid digits or malforming bytes in git filename unquoting (unquoteC).

  • Populate line metrics, review status, and subjects when recovering stacked PR layers.

  • Serialize stream sink and token usage callbacks during agent execution, retry interrupted lock note updates on EINTR, and synchronize watcher teardown during runner shutdown.

  • Normalize custom agent names and definition keys to NFC, rejecting duplicate keys across NFC and NFD spellings and aligning lookup forms.

  • Handle non-positive column budgets and 1-column cuts in terminal cell trimming, reserving width for the ellipsis and returning empty strings on non-positive bounds.

  • Use canonical review names when expanding review sets and displaying review prompts, preventing unnormalized names from reaching prompt composition.

  • Block the launcher (gauntlet pick) from starting an unconstrained run when an active review filter matches no reviews, displaying a clear warning.

  • Reject unresolvable environment variable references in GAUNTLET_HOME at startup and degrade gauntlethome.Dir safely instead of resolving unexpanded paths against the working tree.

  • Reject empty argument strings in custom agent model, effort, stream, and continue configurations, and reject whitespace-only usage suffixes.

  • Normalize available review names to NFC in suggestion parsing, matching decomposed names against agent suggestions.

  • Normalize pull request body text to NFC before rune truncation, preserving combining characters on decomposed filenames and descriptions.

  • Recognize Unicode whitespace when stripping agent output noise, gutters, and trailing spacing in the line normalizer, and in launcher filter word trimming.

  • Distinguish complete Unicode replacement characters from incomplete multi-byte sequences at process output chunk boundaries.

  • Surface Escape cancel and live-feed reset keys in the dashboard footer and help overlay, and display active filter queries and clear shortcuts in the narrow launcher fallback.

  • Prevent Escape from abruptly terminating an active run when quit is armed in the dashboard; Escape now cancels the quit prompt and resets paused or scrolled feeds to live output.

  • Make git worktree removal idempotent on already-removed checkouts, and prune git metadata when the checkout directory has already been deleted.

  • Clean orphaned worktree directories and prune stale metadata during worktree preparation, ensuring worktree creation and removal converge across interrupted runs.

  • Strip UTF-8 byte-order marks (BOM) when loading custom agent definitions (agents.json), preventing parse errors on Windows-formatted files.

  • Pad clipped lines with trailing spaces in dashboard panel formatting when multi-column wide characters are truncated, preventing misaligned panel borders.

  • Count Unicode code points instead of bytes when checking for short-flag misses, preventing single non-ASCII flags from triggering typo suggestions.

  • Normalize file paths to NFC when correlating file notes to git changes in stacked PR summaries and commit subjects, matching decomposed macOS filenames with NFC text.

  • Strip relative build directory paths from release SBOM inventory headers to match asset filenames, and clean scratch files and stray binaries on make clean.

  • Prevent auto-update from repeatedly re-applying the already-installed release tag during an active run.

  • Unlock git worktrees before removal during merge cleanup, preventing leftover locked worktrees on failure.

  • Format branch listings cleanly when deleting matching review branches.

  • Derive journal date shards from the run ID timestamp instead of the local clock so midnight UTC crossings place journals in the matching shard, and validate run IDs on open.

  • Synchronize stacked PR head and publication state with the runner mutex, guard worktree branch renaming, and force-kill stalled command groups on drain timeout.

  • Check write errors on command output streams across subcommands (gauntlet doctor, gauntlet runs, gauntlet show, and gauntlet pick), exiting 1 on failure instead of reporting success.

  • Propagate cancellation exit code 130 when the interactive launcher or review planning is interrupted by context cancellation.

  • Record loop line changes in parallel worktree mode (--jobs > 1) and preserve line metrics on pull request events in stacked-PR mode (--stacked-prs) across the journal, history, and dashboard.

  • Correct documentation in CLI and runs reference for --usage-cmd execution directory, custom agent definition fields and validation rules, and missing --check and --limit option tables.

  • Reject empty string arguments for --show-prompt, --merge-into, --pr-base, --suggest-agent, --usage-cmd, and --exclude at startup instead of silently accepting them.

  • Enforce placeholder validation on custom agent definitions (model requires {model}, effort requires {effort}, and forbid {prompt} in stream or continue).

  • Abort and reset in-progress merges cleanly even when interrupted by a cancelled context, preventing unmerged index state from persisting.

  • Preserve the underlying error on retry failure when removing git worktrees.

  • Include unmerged-path inspection error context when squashing conflicted branches.

  • Warn on snapshot worktree cleanup failures and guard against nil repository references.

  • Abort prompt discovery directory traversal early when context is cancelled.

  • Parse duration flags with 64-bit integer precision so values above 2^31-1
    nanoseconds parse without overflow on 32-bit platforms.

  • Format missing run start timestamps as n/a instead of 0001-01-01 in
    gauntlet runs.

  • Generated commit subjects clip at whole grapheme boundaries within the 72-rune
    limit, preserving combining accents, flags, and emoji sequences.

  • Filenames in generated commit subjects strip C1 controls, bidi overrides,
    zero-width spaces, and Unicode line breaks, preventing terminal spoofing.

  • Display text sanitization strips Unicode line and paragraph separators (U+2028
    and U+2029), preserving line integrity in output feeds and summaries.

  • Distinguish internal prompt read failures from bad review arguments in
    --show-prompt, exiting 1 on I/O error instead of 2.

  • Distinguish interactive launcher runtime errors from usage errors in
    gauntlet pick, exiting 1 on TUI failure instead of 2.

  • Exit 1 on directory lock acquisition errors other than existing locks instead
    of reporting them as usage errors.

  • Ensure flag-requested help is rendered to stdout when flag.ErrHelp is returned
    during parsing.

  • Reject empty model specifications when a colon delimiter is provided in agent
    specifications, and reject colons for tools that do not support models.

  • Validate custom agent definitions to require exactly one {prompt} placeholder
    in argv, forbid {prompt} inside model or effort options, and reject
    empty directory entries in usage.roots.

  • Expand leading ~ and environment variables in GAUNTLET_HOME, and treat
    whitespace-only values as unset.

  • Recognize boolean false values (false, no, off, 0) in GAUNTLET_NO_ANIMATION,
    CLICOLOR_FORCE, and FORCE_COLOR instead of treating them as truthy.

  • Resolve the defined executable rather than the custom agent name when validating
    and auto-detecting custom agents, allowing custom agents whose names differ from
    their binary to run without "tool not found" errors.

  • Correct the installed agent count in gauntlet doctor so custom agent binaries,
    override paths, and fallback launchers are counted accurately in the inventory.

  • Preserve --prompt-dir in the composed command line generated by gauntlet pick.