v1.6.0 — Rebrand to clup & foundations
🇬🇧 English
v1.6 rebrands the binary to clup and lays the technical foundations for the whole roadmap. Almost none of it is visible in the TUI (the visual redesign lands in v1.9) — this release is about the plumbing.
⚠️ Rebrand: clickup → clup (non-breaking)
- The primary binary is now
clup:go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest. - The old
clickupbinary still works as a deprecated shim (prints a warning, forwards toclup) for a few releases. - Config moved to
…/clup/config.yml(macOS~/Library/Application Support/clup, Linux~/.config/clup), with a permanent read-fallback to the legacyclickup-clipath — existing configs keep working, and are migrated on first save (the legacy file is left as a pointer stub). Added aschema_versionfield. - The
CLICKUP_TOKEN/CLICKUP_DEMOenv vars are unchanged.
🚀 New: headless report
clup report --month 2026-06 --scope me --format json|csv|mdprints a report to stdout for cron/scripts/agents (all formats stream to stdout — use shell redirection).CLICKUP_DEMOis ignored byreport, and the JSON output is a stable scripting schema (safe to parse withjq).
🧱 Foundations (mostly internal)
- Extracted the report I/O pipeline into
internal/service(shared by the TUI and headless). - Unified the HTTP client into one
do()with a shared rate limiter (90/min, burst 30) that honorsRetry-Afterand retries 429 on all verbs. - Added
FilteredTeamTasks(paginatedGET /team/{id}/task); parallelized status enrichment. - Injected the clock into the root model; extracted a pure
CustomRange. - API errors now route back to Home with an inline message instead of a dead-end error screen (
retryableErrMsg); a 401 still relaunches the setup wizard.
🐛 Fixes
- Fixed a token-leak: in demo mode the client was built with the real token instead of the demo token.
- Fixed a silent token-wipe: the setup wizard could write an empty token to disk when the typed token equaled
CLICKUP_TOKEN. - Demo mode: the log-hours flow is now fully I/O-free (no more accidental real API calls under
CLICKUP_DEMO=1); regenerateddocs/demo.gif.
Notes
internal/report/internal/durationremain pure; demo mode does no I/O.- Milestone: v1.6 — Rebrand & foundations. Roadmap epic: #33.
Full changelog: v1.5.0...v1.6.0
🇮🇹 Italiano
La v1.6 ribrandizza il binario in clup e posa le fondamenta tecniche per l'intera roadmap. Quasi nulla è visibile nella TUI (il redesign estetico arriva con la v1.9) — questa release riguarda l'infrastruttura.
⚠️ Rebrand: clickup → clup (non-breaking)
- Il binario principale ora è
clup:go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest. - Il vecchio
clickupcontinua a funzionare come shim deprecato (stampa un warning, inoltra aclup) per qualche release. - La config si è spostata in
…/clup/config.yml(macOS~/Library/Application Support/clup, Linux~/.config/clup), con fallback di lettura permanente al vecchio pathclickup-cli— le config esistenti continuano a funzionare e vengono migrate al primo salvataggio (il file legacy resta come stub-puntatore). Aggiunto un camposchema_version. - Le env var
CLICKUP_TOKEN/CLICKUP_DEMOsono invariate.
🚀 Novità: report headless
clup report --month 2026-06 --scope me --format json|csv|mdstampa un report su stdout per cron/script/agenti (tutti i formati vanno su stdout — usa la redirezione della shell).CLICKUP_DEMOè ignorato dareport, e l'output JSON è uno schema di scripting stabile (parsabile conjq).
🧱 Fondamenta (perlopiù interne)
- Estratta la pipeline I/O del report in
internal/service(condivisa da TUI e headless). - Client HTTP unificato in un unico
do()con rate limiter condiviso (90/min, burst 30) che onoraRetry-Aftere ritenta i 429 su tutti i verbi. - Aggiunto
FilteredTeamTasks(GET /team/{id}/taskpaginato); arricchimento status parallelizzato. - Clock iniettato nel model radice; estratta una
CustomRangepura. - Gli errori API tornano alla Home con messaggio inline invece della schermata d'errore senza uscita (
retryableErrMsg); il 401 rilancia comunque il setup wizard.
🐛 Correzioni
- Corretto un leak del token: in demo il client veniva costruito col token reale invece che con quello demo.
- Corretto un wipe silenzioso del token: il setup wizard poteva scrivere un token vuoto su disco quando il token digitato coincideva con
CLICKUP_TOKEN. - Demo mode: il flusso log-ore ora è completamente senza I/O (niente più chiamate API reali accidentali con
CLICKUP_DEMO=1); rigeneratadocs/demo.gif.
Note
internal/report/internal/durationrestano puri; il demo mode non fa I/O.- Milestone: v1.6 — Rebrand & foundations. Epic roadmap: #33.
Changelog completo: v1.5.0...v1.6.0