Releases: nesszer/linear-cli
Releases · nesszer/linear-cli
Release list
v0.3.7 — Competitive Features
What's New
OAuth 2.0 Hardening
- Auth state hardening, double-check locking for token refresh
Custom Views CRUD
views create,views update,views deletecommands
Webhooks CRUD + Live Listener
- Full webhook management: create, update, delete, rotate-secret
webhooks listenwith HMAC-SHA256 signature verification
Power User Features
whoamialias forusers meapi query/mutatefor raw GraphQL access--since/--newer-thantime filters on issues list--mineflag for issues assigned to current user--labelfilter for issues list--group-by(state/priority/assignee/project) grouping--count-onlyflag for issues and projects- Milestones full CRUD (list, get, create, update, delete)
Issue Enhancements
--historyflag for activity timeline--commentsflag for inline comment displayopencommand to open issue in browser- Sub-issues display in issue get
- Markdown-stripped descriptions
- Enhanced interactive create wizard (labels, due date, estimate)
comment,link,assign,move,transfer,close/done,archive/unarchive
Other
- Teams
memberscommand - Users
getcommand - Cycles
getcommand - Labels
updatecommand - Projects
membersandadd-labelscommands - Auto-pager through
lesson Unix (--no-pagerto disable) - 8MB stack size fix for Windows debug builds
- 372 tests (245 unit + 127 integration)
v0.3.6
v0.3.6 — Bug Fix
Fix
- Fixed runtime panic when using subcommands with
--colorflag (documents create, projects create, labels create). The global--colorarg (enum type) collided with subcommand--colorargs (hex string type), causing a clap TypeId downcast mismatch. Renamed global flag to--color-mode.
Full Changelog: v0.3.5...v0.3.6
v0.3.5
v0.3.5 — Safety & CRUD Expansion
Safety Hardening
- Replace bare
.unwrap()with.expect()in interactive mode menu selection
New Subcommands
notifications archive— Archive a single notificationnotifications archive-all— Batch archive all notifications (bounded concurrency)cycles create— Create a new cycle (--team,--name,--description,--starts-at,--ends-at)cycles update— Update an existing cycle (--name,--description,--starts-at,--ends-at,--dry-run)
Tests
- 8 new integration tests (triage, notification archive, cycle create/update)
- 233 total tests (167 unit + 66 integration), 0 warnings
Docs
- README: added cycles and notifications examples
- Updated help text for cycles and notifications commands
Full Changelog: v0.3.4...v0.3.5
v0.3.4 - Feature Expansion & Hardening
What's New
CRUD Expansion (5 new subcommands)
roadmaps create/roadmaps update— Full mutation support with--dry-runinitiatives create/initiatives update— With--statusand--dry-rundocuments delete— With--forceand confirmation prompt
Watch Expansion
watch project <ID>— Poll project state and progress changeswatch team <KEY>— Poll team with active cycle info
Error Hardening
- Replaced
unwrap()calls in export paths with safe alternatives - Moved regex initialization to
OnceLockpattern
Documentation
- Improved
--filterhelp text: dot-notation,~=operator, case-insensitivity, AND logic - Updated help examples for roadmaps, initiatives, documents, and watch commands
Test Coverage
- 225 total tests (167 unit + 58 integration), up from 213
- 12 new integration tests for new subcommands
- 0 warnings
Install
cargo install linear-cliv0.3.3 - Typed API Models & Test Coverage
Typed API Models & Test Coverage
Completes typed API model adoption across all 13 command handlers and significantly expands test coverage.
Typed API Model Adoption (7 handlers)
All command handlers now use typed structs from types.rs for display paths instead of raw serde_json::Value indexing:
- cycles.rs —
Cyclestruct for list and current cycle display - notifications.rs —
Notificationstruct withIssueReffor notification list - time.rs —
TimeEntrystruct (addeddurationfield) for time entry list - relations.rs —
IssueRelationandIssueRef(with newstatefield) for parent/children/relations display - favorites.rs —
Favoritestruct for remove lookup - roadmaps.rs —
Roadmapstruct for list display - initiatives.rs —
Initiativestruct (addedstatus/sort_orderfields) for list display
Previously completed (v0.3.1): teams, users, projects, labels, comments, documents
Type System Enhancements
IssueRefgainsstate: Option<WorkflowState>for relations displayInitiativegainsstatus: Option<String>andsort_order: Option<f64>TimeEntrygainsduration: Option<i64>for minutes-based time tracking
Test Coverage Expansion
- 41 new unit tests (126 → 167): 26 type deserialization tests + 11 notification type formatter tests + 4 relation type tests
- 14 new integration tests (32 → 46): help text and alias tests for time, relations, favorites, roadmaps, initiatives, documents, context
- Total: 213 tests, all passing, 0 warnings
Stats
- 9 files changed, +846 lines
v0.3.2 - Performance Optimizations
Performance Optimizations
13 performance improvements across caching, API efficiency, and data processing:
Cache Infrastructure
- Per-key cache timestamps — individual entries expire independently instead of whole-file TTL
- TTL on read path — cache reads now respect configured TTL, not just writes
- Memoized config/cache paths —
OnceLockavoids repeated filesystem lookups
API & Network
- Streaming downloads — large file downloads stream directly to disk/stdout instead of buffering in memory
- Pagination variable optimization — immutable base variables with per-page construction eliminates clone overhead
- Removed unused
fetch_bytes— dead code cleanup after streaming adoption
Command-Level Optimizations
- Bulk state cache — resolves
team:statepairs once per unique combo, not per-issue - Parallel comment fetching —
buffer_unordered(10)for concurrent multi-issue comment retrieval - Trimmed notification queries — removed unused fields from notification list GraphQL query
print_json_owned— takesValueownership to eliminate large payload cloning- O(n) sync comparison —
HashMap-based matching replaces nested O(n²) iteration - Round-trip reduction — cycles/statuses use team cache instead of extra API calls
- Projects & labels caching — list results cached with mutation-triggered invalidation
Stats
- 30 files changed, 547 insertions, 356 deletions
- 126 unit tests + 32 integration tests passing
- 0 warnings
v0.3.1 - Bug Fixes, Reliability & Typed API Models
v0.3.1 - Bug Fixes, Reliability & Typed API Models
This release includes 14 improvements across correctness, reliability, consistency, and code quality.
Bug Fixes (6)
- Time tracking error propagation -
Err(_)branches now bail with proper errors instead of silently printing success messages - Identifier resolution for teams/projects -
getcommands now accept names and keys, not just UUIDs (viaresolve_team_id/resolve_project_id) - State name resolution -
--state "In Progress"now works in issue create/update (viaresolve_state_id) - Pagination for notifications - Replaced hardcoded
first: 100with properpaginate_nodes(all: true)for count and mark-all-as-read - Cache projects type - Added missing
"projects" => CacheType::Projectsto cache clear - Credential profile switching -
set_api_key()now uses the actual workspace name instead of hardcoded"default"
Reliability (3)
- Bounded concurrency - Replaced unbounded
join_allwithbuffer_unordered(10)in all bulk operations and notification mark-all - Typed ErrorKind enum - Replaced raw
u8exit codes withErrorKindenum (General,NotFound,Auth,RateLimited) - Stderr diagnostics - Added
OnceLock<bool>quiet mode; diagnosticeprintln!calls now respect--quiet
Consistency (2)
- CLI naming - Binary name in clap now matches actual binary (
linear-cli) - Upload streaming - File downloads now stream via
fetch_to_writer()instead of buffering entire files in memory
Quality (3)
- Dead code suppression - Added
#[allow(dead_code)]onmod typesfor gradual adoption - Test coverage - Added 51 new tests (94→126 unit, 13→32 integration), covering config, pagination, output, CLI aliases, and help text
- Typed API response models - Adopted typed structs in 6 command handlers (teams, users, projects, labels, comments, documents), replacing raw
Valueindexing withfrom_value::<T>()deserialization. AddedSerializeto all types and missing fields.
Stats
- 126 unit tests, 32 integration tests, 0 warnings
- 7 files changed for typed model adoption (+171, -111)