Releases: marcoarnulfo/clickup-cli
Release list
v1.9.0 — Design system: adaptive colors, generated key footer, ? help
Install: brew install marcoarnulfo/tap/clup (macOS/Linux) · scoop bucket add clup https://github.com/marcoarnulfo/scoop-bucket && scoop install clup (Windows) · yay -S clup-bin (Arch) · or download a binary below.
Verify: cosign verify-blob --bundle checksums.txt.sigstore.json checksums.txt
v1.8.0 — Live time tracking
🇬🇧 English
v1.8 turns the timer into a live tracker and adds full time-entry management from the terminal.
⏱ Live ticking timer
- A running timer now shows as a global indicator on the Home screen (
⏱ running on <task> — HH:MM:SS (X.XXh)), ticking every second, no matter which task started it. - Press
con Home to jump straight to the timer and stop it; the timer screen ticks live too. - The indicator survives transient network blips (a failed refresh no longer clears it), and works with no API calls in demo mode.
🗂 Time-entry browser (edit · delete · history)
- Press
vfrom the report to open a per-entry browser (current range, filter-applied), newest first. - Edit (
e) an entry's duration, date/time, note and billable flag — the ClickUp description is preserved, and the start keeps its seconds when you don't change the minute. - Delete (
x) with a[y/N]confirmation. - History (
h) — read-only change history. - Edit and delete are restricted to your own entries; history is available on any entry.
🧪 Demo parity
CLICKUP_DEMO=1covers all of the above with no API calls — a ticking demo timer and a browser with editable/deletable demo entries. The demo GIF was regenerated.
🧱 Under the hood
- New client verbs
UpdateTimeEntry(PUT) /DeleteTimeEntry(DELETE) /TimeEntryHistory(GET); the pureinternal/report/internal/durationpackages stay pure.
📌 Deferred
- Editing an entry's tags is a follow-up (#125), out of scope for v1.8.
Install / upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest
Closes #91, #94, #98, #100. Milestone v1.8 (epic #33).
Full changelog: v1.7.0...v1.8.0
🇮🇹 Italiano
La v1.8 trasforma il timer in un tracker live e aggiunge la gestione completa delle time entry dal terminale.
⏱ Timer live
- Un timer in corso appare come indicatore globale su Home (
⏱ running on <task> — HH:MM:SS (X.XXh)), ticchetta ogni secondo, indipendentemente da quale task l'ha avviato. - Premi
csu Home per saltare al timer e fermarlo; anche la schermata timer ticchetta live. - L'indicatore sopravvive ai blip di rete (un refresh fallito non lo cancella più) e funziona senza chiamate API in demo.
🗂 Browser delle time entry (modifica · cancella · cronologia)
- Premi
vdal report per aprire il browser per-entry (range corrente, filtri applicati), dalla più recente. - Modifica (
e) durata, data/ora, nota e flag billable — la descrizione ClickUp viene preservata, e l'inizio mantiene i secondi se non cambi il minuto. - Cancella (
x) con conferma[y/N]. - Cronologia (
h) — storico modifiche in sola lettura. - Modifica e cancella sono limitate alle proprie entry; la cronologia è disponibile su qualsiasi entry.
🧪 Parità demo
CLICKUP_DEMO=1copre tutto quanto sopra senza chiamate API — timer demo che ticchetta e browser con entry demo modificabili/cancellabili. GIF demo rigenerato.
🧱 Sotto il cofano
- Nuovi verbi client
UpdateTimeEntry(PUT) /DeleteTimeEntry(DELETE) /TimeEntryHistory(GET); i package puriinternal/report/internal/durationrestano puri.
📌 Rimandato
- La modifica dei tag di una entry è un follow-up (#125), fuori scope per la v1.8.
Installazione / aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest
Chiude #91, #94, #98, #100. Milestone v1.8 (epic #33).
Changelog completo: v1.7.0...v1.8.0
v1.7.0 — Billing depth
🇬🇧 English
v1.7 turns the report engine into a billing engine — the moat feature. Per-list and per-member rates, rounding, multi-currency, budgets, timezone-correct periods, and non-fiscal invoice/HTML export. Plus a quiet update check and the standard OSS health files.
💰 Billing depth
- Rate overrides per list, per member and per (list, member), with precedence
(list, member) > member > list > default— set them in the new Billing settings screen (pfrom the report), four tabs: Lists, Members, Overrides, Rules. - Billable/non-billable split: entries carry a billable flag; filter to one or the other in the TUI or with
--billable. - Multi-currency: bill each list in its own currency, with per-currency subtotals. Amounts are never summed across currencies — a single overall total appears only when the whole report is single-currency.
- Rounding of billable hours before invoicing (
billing.rounding: increment, up/nearest, per-entry or per-day scope); non-billable hours are never rounded. - Budgets per list, checked against billed amounts, with a burn-down view in the TUI (
bfrom the report). - Money ledger: amounts round to 2 decimals at the billing unit and every total is a sum of already-rounded units, so the CSV invoice rows, the JSON subtotals and the HTML totals reconcile exactly (enforced by a cross-export test).
🕑 Timezone & weekly reports
- Optional
timezoneconfig field and a--tzflag anchor day/week/month boundaries to an IANA zone (headlessclup reportstill defaults to UTC unless overridden). - ISO-8601 week reporting:
--week YYYY-Wwwand awweek toggle in the TUI.
📤 Export & headless
- Export to self-contained HTML (
--format html, print to PDF) and a line-item CSV invoice (--format csv-invoice, one row per billing unit;qty_hoursat 6 decimals soqty_hours × ratereconciles toamount). - New
clup reportflags:--week,--billable,--tag(repeatable),--group tag,--tz,--format html|csv-invoice. The JSON output gainsschema_version,timezone,currency_subtotals,billable_hours,non_billable_hours,billed_hoursandlines, staying additive and backward-compatible (rate/currencykept as deprecated fields).
🔔 Update check (new)
clupnow tells you when a newer release exists — a discreet line on the TUI home, and forclup reporton stderr (never stdout, so--format jsonstays scriptable). It asks the GitHub releases API at most once a day (cached), the request is anonymous with no token sent, and it never self-updates. Disable withCLUP_NO_UPDATE_CHECK=1orupdate_check: false.- Free side effect:
clup --versionnow reports the real build version instead of a hardcodeddev.
🧱 Config schema v2 (additive)
- A new
billingblock (rate overrides, currencies, budgets, rounding) and atimezonefield are added alongside the existingrate/rates/currency, which keep their meaning. A v1 config is read as-is and stamped toschema_version: 2on the next save — nothing to change by hand.
📄 Project health
- Added
CHANGELOG.md(Keep a Changelog) andSECURITY.md(with the ClickUp-token threat model); enabled GitHub private vulnerability reporting.
Notes
internal/report/internal/durationremain pure; demo mode (CLICKUP_DEMO=1) exercises the whole billing model with zero I/O.- Out of scope (kept out deliberately): fiscal invoicing (VAT, numbering, legal PDF), estimated-vs-actual hours, and release binaries — installation stays
go install. - Milestone: v1.7 — Billing depth. Roadmap epic: #33.
Full changelog: v1.6.0...v1.7.0
🇮🇹 Italiano
La v1.7 trasforma il motore di report in un motore di fatturazione — la feature-moat. Tariffe per lista e per membro, arrotondamenti, multi-valuta, budget, periodi corretti per fuso orario, ed export fattura/HTML non fiscale. In più un avviso di aggiornamento discreto e i file standard di community OSS.
💰 Profondità di fatturazione
- Override delle tariffe per lista, per membro e per (lista, membro), con precedenza
(lista, membro) > membro > lista > default— si impostano nella nuova schermata Billing settings (pdal report), quattro tab: Lists, Members, Overrides, Rules. - Split billable/non-billable: le entry portano un flag billable; si filtra per l'uno o l'altro nella TUI o con
--billable. - Multi-valuta: ogni lista si fattura nella propria valuta, con subtotali per valuta. Gli importi non si sommano mai tra valute diverse — un totale unico compare solo quando l'intero report è mono-valuta.
- Arrotondamento delle ore fatturabili prima della fattura (
billing.rounding: incremento, up/nearest, scope per-entry o per-day); le ore non fatturabili non si arrotondano mai. - Budget per lista, confrontati con gli importi fatturati, con una vista burn-down nella TUI (
bdal report). - Ledger monetario: gli importi si arrotondano a 2 decimali sull'unità di fatturazione e ogni totale è la somma di unità già arrotondate, così le righe del CSV fattura, i subtotali JSON e i totali HTML coincidono esattamente (garantito da un test cross-export).
🕑 Fuso orario & report settimanali
- Campo di config
timezoneopzionale e flag--tzancorano i confini giorno/settimana/mese a una zona IANA (l'headlessclup reportresta su UTC salvo override). - Report per settimana ISO-8601:
--week YYYY-Wwwe un togglewnella TUI.
📤 Export & headless
- Export in HTML autoconsistente (
--format html, stampabile in PDF) e in CSV fattura a righe (--format csv-invoice, una riga per unità di fatturazione;qty_hoursa 6 decimali cosìqty_hours × ratetorna adamount). - Nuovi flag di
clup report:--week,--billable,--tag(ripetibile),--group tag,--tz,--format html|csv-invoice. L'output JSON guadagnaschema_version,timezone,currency_subtotals,billable_hours,non_billable_hours,billed_hourselines, restando additivo e retrocompatibile (rate/currencymantenuti come campi deprecati).
🔔 Avviso di aggiornamento (novità)
clupora avvisa quando esiste una release più recente — una riga discreta nella home della TUI e, perclup report, su stderr (mai su stdout, così--format jsonresta pilotabile da script). Interroga l'API delle release di GitHub al massimo una volta al giorno (in cache), la richiesta è anonima senza token, e non fa mai self-update. Disattivabile conCLUP_NO_UPDATE_CHECK=1oupdate_check: false.- Effetto collaterale gratuito:
clup --versionora riporta la versione reale della build invece deldevhardcoded.
🧱 Config schema v2 (additivo)
- Un nuovo blocco
billing(override tariffe, valute, budget, arrotondamento) e un campotimezonesi aggiungono accanto agli esistentirate/rates/currency, che mantengono il loro significato. Una config v1 viene letta così com'è e marcata aschema_version: 2al salvataggio successivo — nulla da cambiare a mano.
📄 Salute del progetto
- Aggiunti
CHANGELOG.md(Keep a Changelog) eSECURITY.md(con il modello di minaccia del token ClickUp); abilitato il private vulnerability reporting di GitHub.
Note
internal/report/internal/durationrestano puri; la modalità demo (CLICKUP_DEMO=1) esercita l'intero modello di fatturazione con zero I/O.- Fuori scope (tenuto fuori di proposito): fatturazione fiscale (IVA, numerazione, PDF legale), ore stimato-vs-effettivo, e i binari di release — l'installazione resta
go install. - Milestone: v1.7 — Billing depth. Epic roadmap: #33.
Changelog completo: v1.6.0...v1.7.0
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
v1.5.0 — Workspace list browser, faster lists & polish
🇬🇧 English
v1.5 — Reach any list. Browse the whole workspace, plus perf and polish.
Highlights
- 🗂️ Workspace list browser (#13) — pick ANY list, not just recent/config ones, via a lazy Space → Folder → List drill-down. From the guided log picker a "🔍 Browse all workspace lists…" entry opens it; from the per-list rates screen the
bkey opens the same browser (and adds the chosen list as a row). Fetched lazily per space and session-cached (↑/↓move ·Enteropen/select ·Escup/back). Demo mode browses fixture data with no API calls. - ⚡ Faster list-name resolution (#12) — a report load now resolves list names concurrently (bounded), instead of one sequential
GET /list/{id}per list — no more creeping toward the timeout on months with many lists. - 🧹 Polish (#28) — the custom date-range editor prefills From/To and supports
Tab/Shift+Tab; report filters auto-adjust when the date range changes; more test coverage; docs corrections.
No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
🇮🇹 Italiano
v1.5 — Raggiungi qualunque lista. Naviga tutto il workspace, più perf e rifiniture.
In evidenza
- 🗂️ Browser liste workspace (#13) — scegli QUALUNQUE lista, non solo quelle recenti/config, con un drill-down lazy Space → Folder → List. Dal picker guidato del log una voce "🔍 Browse all workspace lists…" lo apre; dalla schermata tariffe per lista il tasto
bapre lo stesso browser (e aggiunge la lista scelta come riga). Fetch lazy per space e cache di sessione (↑/↓muovi ·Enterapri/seleziona ·Escrisali/indietro). La demo naviga dati fittizi senza chiamate API. - ⚡ Risoluzione nomi lista più veloce (#12) — il caricamento del report risolve i nomi lista in parallelo (con concorrenza limitata), invece di una
GET /list/{id}sequenziale per lista — niente più avvicinamento al timeout nei mesi con molte liste. - 🧹 Rifiniture (#28) — l'editor del range date custom pre-compila From/To e supporta
Tab/Shift+Tab; i filtri report si adattano al cambio range; più copertura test; correzioni docs.
Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
v1.4.0 — Member selection, date range & report filters
🇬🇧 English
v1.4 — Scope your report. Two features to narrow the hours report to exactly what you need.
Highlights
- 👥 Team member selection (#3) — in
teamscope, pressfon Home to multi-select which workspace members the report covers (instead of aggregating everyone). New per-member grouping in thegcycle; Home showsMembers: k/n. - 🗓️ Custom date range (#2) — press
don Home to pick a preset (This month, Last month, Last 7 days, Last 30 days, This week) or a customFrom/Torange. The report is no longer limited to a whole month; title and export filename follow the period. - 🔎 Report filters (#2) — press
fon the Report for a sectioned Lists / Tags / Statuses filter (OR within a dimension, AND across). Tags load with the entries; statuses are fetched lazily on first open (per-task, session-cached). Filters compose with member selection and the date range; the title shows· filtered. - 🧮 Per-list rates, amounts and grouping recompute over the selected/filtered set. Demo mode (
CLICKUP_DEMO=1) honors ranges, filters and statuses with no API calls.
No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
🇮🇹 Italiano
v1.4 — Restringi il tuo report. Due funzionalità per limitare il report ore esattamente a ciò che ti serve.
In evidenza
- 👥 Selezione membri team (#3) — nello scope
team, premifin Home per selezionare (multi) quali membri del workspace includere nel report (invece di aggregare tutti). Nuovo raggruppamento per membro nel ciclog; la Home mostraMembers: k/n. - 🗓️ Range di date custom (#2) — premi
din Home per scegliere un preset (This month, Last month, Last 7 days, Last 30 days, This week) o un rangeFrom/Tocustom. Il report non è più limitato a un mese intero; titolo e nome file export seguono il periodo. - 🔎 Filtri report (#2) — premi
fdal Report per un filtro a sezioni Lists / Tags / Statuses (OR dentro una dimensione, AND tra dimensioni). I tag arrivano con le entry; gli status recuperati lazy alla prima apertura (per task, cache di sessione). I filtri si compongono con la selezione membri e il range; il titolo mostra· filtered. - 🧮 Tariffe per-lista, importi e raggruppamento si ricalcolano sul set selezionato/filtrato. La demo (
CLICKUP_DEMO=1) rispetta range, filtri e status senza chiamate API.
Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
v1.3.0 — English UI, demo mode & open-source polish
🇬🇧 English
Consolidation release: the app is now English-first and much friendlier to newcomers and contributors.
Highlights
- 🌍 English UI — the whole terminal interface (and error/export output) is now in English.
- 🎬 Demo mode —
CLICKUP_DEMO=1 clickupruns the TUI on fixture data, no ClickUp account needed. Powers the new README demo GIF. - 📖 Onboarding & community — revamped bilingual README (badges, features, requirements, quick start),
CONTRIBUTING,CODE_OF_CONDUCT, issue/PR templates,good first issuelabels. - 🧹 Modernization —
slices/cmpoversort;staticcheckadded to CI. - 🧑💻 Codebase fully in English (comments, tests).
No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
🇮🇹 Italiano
Release di consolidamento: l'app è ora English-first e molto più accogliente per nuovi utenti e contributor.
In evidenza
- 🌍 UI in inglese — tutta l'interfaccia da terminale (e output di errori/export) è ora in inglese.
- 🎬 Demo mode —
CLICKUP_DEMO=1 clickupavvia la TUI su dati fittizi, senza account ClickUp. Alimenta il nuovo GIF demo del README. - 📖 Onboarding & community — README bilingue rinnovato (badge, feature, requisiti, quick start),
CONTRIBUTING,CODE_OF_CONDUCT, template issue/PR, labelgood first issue. - 🧹 Modernization —
slices/cmpal posto disort;staticcheckin CI. - 🧑💻 Codebase interamente in inglese (commenti, test).
Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest
v1.2.0 — Log hours from the TUI / Log ore da TUI
🇬🇧 English
Log hours from the TUI. The CLI can now create time entries on ClickUp directly from the terminal (it used to be read-only). New Log hours screen, opened with n from Home and Report, with three modes:
- Guided — pick a known list (current report ∪ config) → a task → form.
- Task ID/URL — paste a task ID or a ClickUp URL → form.
- Timer — start/stop a stopwatch; on stop the entry is recorded. A timer already running when you open the screen is shown for stopping.
The form has a flexible duration parser (2h30, 2h30m, 1.5h, 1,5h, 90m, 45 = hours), today-by-default editable date, and an optional note. After saving, press r to reload the report. You always log your own hours.
Under the hood: new pure internal/duration package; client methods CreateTimeEntry, ListTasks, timer Start/Stop/Current, ExtractTaskID; shared POST helper. Docs are now bilingual (English-primary README.md + README.it.md).
Closes #1.
🇮🇹 Italiano
Log ore dalla TUI. La CLI ora crea time entry su ClickUp direttamente da terminale (prima era sola lettura). Nuova schermata Log ore, aperta col tasto n da Home e Report, con tre modalità:
- Guidato — scegli una lista nota (report corrente ∪ config) → un task → form.
- Task ID/URL — incolli un ID task o un URL ClickUp → form.
- Timer — avvii/fermi un cronometro; allo stop la voce viene registrata. Un timer già in corso all'apertura viene mostrato per lo stop.
Il form ha un parser durata flessibile (2h30, 2h30m, 1.5h, 1,5h, 90m, 45 = ore), data default oggi (editabile) e nota opzionale. Dopo il salvataggio, r ricarica il report. Si loggano sempre le proprie ore.
Sotto il cofano: nuovo package puro internal/duration; metodi client CreateTimeEntry, ListTasks, timer Start/Stop/Current, ExtractTaskID; helper POST condiviso. La documentazione è ora bilingue (README.md inglese primario + README.it.md).
Chiude #1.
v1.1.1 — Cleanup & UX tariffe
Rilascio di cleanup dal backlog (issue #7–#11). Nessuna feature nuova: refactor interno e rifiniture UX della schermata tariffe.
Novità
- ⌨️ Schermata tariffe più coerente —
Escora annulla (scarta le modifiche non salvate) e torna al report, come nella schermata export;ssalva. Prima entrambi salvavano. - 🔢 Campo tariffa numerico — accetta solo cifre e separatore decimale; la virgola è trattata come punto (comodo per la tastiera italiana).
- 🧹 Config più pulita — le tariffe impostate uguali al default non vengono più salvate come override ridondanti.
- 🔧 Refactor interno — rimosso stato duplicato in
homeModel(meno rischio di drift); aggiunta copertura di test per lo scope "team".
Aggiornamento
go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latestChiude le issue #7, #8, #9, #10, #11. Roadmap e backlog: https://github.com/marcoarnulfo/clickup-cli/issues
v1.1.0 — Tariffe per lista
Prima feature dopo la base: tariffe orarie per lista/progetto ClickUp.
Novità
- 💶 Tariffe per lista — imposta una tariffa oraria diversa per ogni Lista ClickUp; le liste senza override usano la tariffa di default. L'importo da fatturare è ora calcolato con la tariffa giusta per ogni voce (corretto anche raggruppando per task o giorno, con tariffe miste).
- 🏷️ Nomi lista leggibili — le liste sono mostrate col loro nome (risolto via API, con cache), non più con l'id numerico, sia nel report sia nella schermata tariffe.
- ⌨️ Schermata tariffe (tasto
p) — dalla vista report premipper aprire la schermata Tariffe:↑/↓navighi,Entermodifichi la tariffa di una lista,dla riporti al default,s/Escsalvi e torni al report (ricalcolato al volo).
Configurazione
Le tariffe si salvano in ~/.config/clickup-cli/config.yml:
rate: 45 # tariffa di default
rates:
"111": 60 # tariffa per la lista 111
"222": 30La mappa rates la compili comodamente dalla TUI con p — non serve conoscere gli id a mano.
Aggiornamento
go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latestRetrocompatibile: una config esistente senza rates continua a funzionare come prima (tutto alla tariffa di default).
Roadmap e note: docs/BACKLOG-v1.1.md