Releases: freeloio/freelo-cli
Releases · freeloio/freelo-cli
v1.2.0
Pre-production hardening release. Behavior is unchanged for the happy
path of every command — this release tightens what happens when something
goes wrong (network blip mid-write, schema drift, malformed input).
Highlights
Security / durability
- Atomic credential writes.
fileKeyringwrites via tempfile + chmod
0600 + Sync + Rename. A crash, full disk, or signal mid-write can no
longer wipe stored credentials. - Atomic downloads. Files write to a
.partialsibling and rename on
success; cleanup removes the partial on any error. Failed downloads no
longer leave truncated files under the final name. - Streaming uploads. Multipart body streams through
io.Pipe. Peak
RAM is ~32KB regardless of file size (was ~200MB for the 100MB ceiling). - Transactional credential store.
credstore.Storerolls back the
email key if the api_key write fails — never sits in a half-saved
state.
Fixed
- Decode helpers now surface JSON parse errors instead of silently
returning empty data on a non-JSON 2xx body. - TCP connection leak when SDK returned both a non-nil response and an
error:resp.Bodyis now closed on every transport error. freelo tasks show abc(non-numeric ID) returnstask-id must be a numberinstead of silently issuingGET /task/0. Same parse-and-
validate fix across 17 sites.printCountreturns0for non-array payloads (was misleadingly
returning1, including on error envelopes).printJSONsurfaces marshal errors to stderr instead of producing
empty output.config.Loadno longer callsos.Exit—--helpandversionwork
even with--devset butFREELO_DEV_URLmissing.tasklists listreturns a clear error ifproject.tasklistsis not
the expected array shape (was a silent empty success on schema drift).
Changed
- Command wiring rewritten — the lazy-wrapper indirection (24
*Lazy
constructors,wrapLazy,patchRunE) is gone. Plus removes a latent
name-collision bug in subcommand lookup. --pageis now 1-indexed with validation everywhere; help text
uniform. Pagination boilerplate consolidated into shared helpers.tracking statusreturns a clean{active, server}envelope.
Removed
freelo tasks list --worker— flag was parsed and silently dropped
because/all-taskshas noworker_idparameter. Use `--project- --tasklist` filtering instead.
See CHANGELOG.md
for the full list.
Install
Linux / macOS
# Apple Silicon
tar xzf freelo_1.2.0_darwin_arm64.tar.gz && sudo mv freelo /usr/local/bin/
# Linux x86_64
tar xzf freelo_1.2.0_linux_amd64.tar.gz && sudo mv freelo /usr/local/bin/From source
git clone git@github.com:freeloio/freelo-cli.git
cd freelo-cli && make install # → ~/bin/freeloGo install
go install github.com/freeloio/freelo-cli/cmd/freelo@v1.2.0Verify
freelo version # should print v1.2.0
freelo auth login # stores in OS keyring
freelo projects list # smokeSee INTERNAL_TESTING.md
for the internal-tester walkthrough (~30 min test plan).