fj/CHANGELOG.md
Stephen Way d87a30bb29
docs: CLAUDE.md, CONTRIBUTING.md, CHANGELOG.md, docs/
* CLAUDE.md: project layout, key conventions, where to look first.
  Captures the non-obvious things a future session needs.
* CONTRIBUTING.md: build/test workflow, how to add a subcommand
  (concrete walkthrough), code style.
* CHANGELOG.md: history. 0.1.0 entry covers initial feature set;
  Unreleased captures stability + optimization batch.
* docs/architecture.md: module graph, layering rules, the HTTP funnel,
  pager + SIGINT, repo resolution, test strategy.
* docs/jq.md: --jq syntax cheatsheet (dot paths, brackets, negative
  indices, pipes, what's not supported).
* docs/troubleshooting.md: keychain re-prompts, debug logging, pager
  opt-out, alias precedence, hook bypass, common 401s.
* README.md: links into docs/ and updates binary size to 4 MB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:48:46 -07:00

2.6 KiB

Changelog

All notable changes will be recorded here. The format follows Keep a Changelog. Versions follow Semantic Versioning.

[Unreleased]

Added

  • tokio::signal::ctrl_c() race in cli::run so the pager guard drops cleanly on SIGINT.
  • 9 wiremock-backed HTTP client integration tests covering retry behavior, header forwarding, pagination, and panic-free error paths.
  • Client::for_base_url test constructor pointing at an arbitrary URL.

Changed

  • Trimmed dependencies (no more indicatif, futures-util, is-terminal, textwrap, tempfile). Dropped reqwest features we don't use (stream, brotli). Release profile now uses lto = "fat" and panic = "abort".
  • HTTP retry loop builds the request once and clones via reqwest::Request::try_clone per attempt (was rebuilding the full RequestBuilder each time).
  • Binary size: 5.94 MB → 4.15 MB stripped (-30%).

Fixed

  • Removed the unsafe std::env::set_var("FJ_NO_PAGER") from dispatch. The --no-pager flag is now threaded into pager::maybe_start.
  • Replaced the panicking .expect("token contains invalid header chars") in auth_headers with a typed error that tells the user how to recover.

0.1.0 — 2026-05-13

Initial release. Multi-host Forgejo CLI with feature parity to gh across the surface Forgejo exposes. Commands:

  • auth: login, status, logout, list, switch, token, refresh, setup-git
  • repo: list, view, clone, create, fork, sync, edit, rename, archive, unarchive, delete, branches, topics, mirror, mirror-sync
  • issue: list, view, create, edit, close, reopen, comment, develop
  • pr: list, view, create, edit, diff, commits, files, checks, ready, review, status, checkout, merge, close, reopen
  • release: list, view, create, edit, delete, upload, download
  • label, run, secret, variable, search, browse, status, org, ssh-key, gpg-key, alias, config, protect, hook, extension, gist, api, completion, man

Other highlights:

  • Repo auto-detection from upstream / origin git remote.
  • --web flag on all list/view subcommands.
  • $EDITOR integration for body inputs.
  • fj api with -H, -X, -f, -F, --paginate, --include, --silent, --jq (dot-paths, [N]/[-N], pipes).
  • --debug / FJ_DEBUG request logging.
  • Tokens in the OS keychain.
  • Pager via dup2 redirect to $FJ_PAGER / $PAGER / less -FRX.
  • Pre-push hook running fmt, clippy -D warnings, tests, and release build before any push. Live API smoke gated on FJ_E2E=1.