Status & roadmap#

pw_ghish: GitHub CLI-like interface for Gerrit code reviews and CI checks

This document summarizes the current status of pw_ghish (./gh) and the remaining work required before the tool can be used outside upstream Pigweed.

Warning

EXPERIMENTAL: pw_ghish is experimental for upstream Pigweed and is not ready for other projects yet. While multi-project profile hooks exist in the codebase, non-Pigweed Gerrit and CI workflows are not yet supported.

Current status: what works today#

Capability

Status

Summary

Code Review (./gh pr)

Experimental (Pigweed)

Create, push, view, diff, edit, review, comment on, and merge Gerrit CLs. See Code review (gh pr).

CI & Tryjobs (./gh run, pr checks)

Experimental (Pigweed)

Watch tryjobs, inspect recipe step trees, fetch failure logs, and rerun builders. See CI & tryjobs (gh run).

Issue Tracking (./gh issue)

Experimental (Pigweed)

List, view, create, branch, edit, comment on, and close Buganizer issues. See Issues (gh issue).

Authentication (./gh auth)

Experimental (Pigweed)

Check Gerrit, LUCI, and Buganizer credentials in googler and community modes. See Authentication (gh auth).

Hooks (./gh hook)

Experimental (Pigweed)

Install and run coding agent PreToolUse guards and Gerrit Git hooks. See Hooks (gh hook).

Worktrees (./gh wt)

Very Experimental

Pool warm Git/Bazel worktree slots and sync Antigravity (Jetski) IDE projects. See Worktrees (gh wt).

Project Profiles

Working (Code-defined)

Go profiles for pigweed, fuchsia, and generic hosts. See Project setup.

Declarative Config (.ghish.toml)

Experimental

Configure Gerrit host, project, shortlinks, CI buckets, and issue trailers via .ghish.toml and git config ghish.*. See Project setup.

Alternative SCM (jj)

Under Evaluation

Evaluate interoperability with Jujutsu (jj) branchless workflows.

Roadmap: planned capabilities#

Multi-project policy decoupling#

While pw_ghish includes built-in project profiles (pigweed, fuchsia, and generic), project policies and several Pigweed-specific defaults still live in Go code.

Planned work to support external Gerrit and LUCI repositories:

  • Declarative project configuration: Support repository-level configuration files (e.g. .ghish.toml or Git configuration) defining project behavior without modifying Go code.

  • Removing remaining Pigweed-isms: Extract hardcoded Pigweed defaults (such as bootstrapped CIPD binary paths, default GCP quota projects, and slot prefixes) into project configuration.

  • Configurable gating labels: Allow projects to declare custom Commit-Queue votes and gating labels (e.g. Presubmit-Verified, Integration-Verified) alongside automatic auto-submit label detection.

  • Dynamic Buildbucket & Buganizer mapping: Configure LUCI bucket names, builder classification rules, and default Buganizer component IDs per repository.

  • Project-specific URL templates: Support custom shortlink resolvers and web UI links for private or downstream Gerrit instances.

Alternative SCM evaluation (Jujutsu / jj)#

Evaluating support for alternative source control management systems, notably Jujutsu (jj):

  • Anonymous branchless commits: Resolve active changes and issues in repositories using jj’s change-based model where named Git branches are optional.

  • Change-Id and trailer handling: Ensure jj describe and automated commit rewrites preserve Gerrit Change-Id: and Bug: trailers.

  • Worktree interoperability: Evaluate how ./gh wt warm Bazel slot pooling interacts with jj workspace checkouts.

Dry-run and local presubmit options#

  • Universal dry-run mode: Expand --dry-run across mutating commands (pr create, pr push, pr edit, pr merge, issue create, issue edit) matching run rerun --dry-run and wt gc --dry-run.

  • Local pre-push checks: Allow pr push and pr create to optionally run fast local formatting or lint checks before uploading patchsets.