* 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>
2.6 KiB
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 incli::runso 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_urltest 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 useslto = "fat"andpanic = "abort". - HTTP retry loop builds the request once and clones via
reqwest::Request::try_cloneper 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-pagerflag is now threaded intopager::maybe_start. - Replaced the panicking
.expect("token contains invalid header chars")inauth_headerswith 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-gitrepo: list, view, clone, create, fork, sync, edit, rename, archive, unarchive, delete, branches, topics, mirror, mirror-syncissue: list, view, create, edit, close, reopen, comment, developpr: list, view, create, edit, diff, commits, files, checks, ready, review, status, checkout, merge, close, reopenrelease: list, view, create, edit, delete, upload, downloadlabel,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/origingit remote. --webflag on all list/view subcommands.$EDITORintegration for body inputs.fj apiwith-H,-X,-f,-F,--paginate,--include,--silent,--jq(dot-paths,[N]/[-N], pipes).--debug/FJ_DEBUGrequest logging.- Tokens in the OS keychain.
- Pager via
dup2redirect 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 onFJ_E2E=1.