- Rust (stable toolchain)
- GitHub CLI (
gh) installed and authenticated
git clone https://github.com/akunzai/gistui.git
cd gistui
cargo buildRun without a TTY to verify gh is ready:
cargo run -- --checkAll four must pass before every commit:
cargo fmt --check # or: cargo fmt
cargo test
cargo check
cargo clippy --all-targets -- -D warningscargo build --releaseThe optimized binary is target/release/gistui. It bundles no assets, but still requires
the gh CLI on PATH at runtime (gh is not vendored). Optionally shrink it with
strip target/release/gistui.
Coding agents: read AGENTS.md first (index), then
docs/agents/architecture.md for the deep-dive.
Key points:
- Pure modules (
domain,config,ranking,local,diff,actionsplanner/guard): unit-tested, no IO. - Thin IO boundaries (
gh,actionsexecute helpers,tui::run_loop): not unit-tested by design. AppState::handle_keyis pure — it mutates state and returns aKeyOutcome; all IO runs inrun_loop.- Tests must never call the real
ghor the network. Fixtures live intests/fixtures/gh/.
- Fork and create a branch (
feat/my-featureorfix/issue-123). - Keep commits focused; follow Conventional Commits (
feat:,fix:,docs:,chore:). - Open a PR against
main; the CI gate must be green. - Label the PR so it lands in the right release-note section (
.github/release.yml):enhancement(🚀 Features),bug(🐛 Bug Fixes),documentation(📚 Documentation),dependencies(⬆️ Dependencies), orskip-changelogto omit it. Unlabeled PRs fall under "🧰 Maintenance".
Maintainers: see RELEASING.md for the release and crates.io publish process.
Use the bug report or feature request templates.