Skip to content

feat(cli): add favorite teams/projects, filtering list views by them - #61

Merged
bougyman merged 4 commits into
mainfrom
60-favorite-teams-projects
Aug 11, 2026
Merged

feat(cli): add favorite teams/projects, filtering list views by them#61
bougyman merged 4 commits into
mainfrom
60-favorite-teams-projects

Conversation

@bougyman

Copy link
Copy Markdown
Member

Summary

Closes #60.

Full design in documents/phase-10-plan.adoc.

This is the prerequisite for #59 (bare issue numbers resolved via favorited teams, Phase 11) - not part of this PR.

Test plan

  • mix test - full suite green apart from one pre-existing, unrelated flake in LinearCli.GitTest (confirmed it fails identically on main before this branch's changes)
  • mix format --check-formatted - clean
  • New tests: LinearCli.FavoritesTest (data layer) and LinearCli.CLI.FavoritesCommandsTest (10 tests, full LinearCli.CLI.main/2 invocations - favorite/unfavorite for both teams and projects, favorites-only-by-default filtering, --all override, and the zero-favorites case explicitly asserted unchanged)
  • Readme.adoc documents the new commands

… bare issue numbers

Refs #60, #59.

Phase 10 (#60): favorite teams/projects, stored in a new favorites
table in the same local sqlite file profiles (#56) already use.
team list/project list default to favorites-only once any exist for
that kind, with --all to see everything - invisible to anyone who's
never favorited anything.

Phase 11 (#59, depends on Phase 10): bare issue numbers
(lc issue develop 1234) resolve their team via the active profile,
then favorited teams, then a prompt across every team - never a hard
error. Supersedes this issue's original active-profile-only design.
Refs #60.

LinearCli.Favorites: a new favorites table in the same local sqlite
file LinearCli.Profiles (#56) already uses, storing resolved team keys
and project ids (not raw search text, so filtering never needs
re-fuzzy-matching). New lc team favorite/unfavorite and lc project
favorite/unfavorite.

team list/project list default to favorites-only once any favorite of
that kind exists; --all opts back out to today's full list. Invisible
to anyone who's never favorited anything - covered explicitly by a
test asserting the zero-favorites case is unchanged.

This is the prerequisite for #59 (bare issue numbers resolved via
favorited teams).
Copilot AI lite review requested due to automatic review settings August 11, 2026 15:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a favorites feature to the CLI, persisting favorited teams/projects locally (in the existing profiles SQLite DB) and using those favorites to filter team list / project list by default once favorites exist.

Changes:

  • Introduces LinearCli.Favorites with a favorites SQLite table and CRUD-like helpers (add/2, remove/2, list/1).
  • Adds lc team favorite|unfavorite <TEAM> and lc project favorite|unfavorite <PROJECT>, plus favorites-based default filtering with a new --all override.
  • Adds tests and updates user documentation and phase plan docs.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
Readme.adoc Documents the new favorite/unfavorite commands and favorites-based list filtering.
documents/phase-10-plan.adoc Adds the Phase 10 design/decisions doc for favorites + list filtering.
documents/phase-11-plan.adoc Adds the Phase 11 plan doc that will build on favorites (bare issue numbers).
app/lib/linear_cli/favorites.ex Implements favorites persistence in the shared local SQLite file.
app/lib/linear_cli/cli/commands.ex Wires favorites into team list / project list and adds favorite/unfavorite command handlers.
app/lib/linear_cli/cli.ex Adds new CLI subcommands and --all flags to the Optimus spec + dispatch.
app/test/linear_cli/favorites_test.exs Adds unit tests for LinearCli.Favorites.
app/test/linear_cli/cli/favorites_commands_test.exs Adds end-to-end CLI tests for favorite/unfavorite and filtering behavior.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread app/test/linear_cli/favorites_test.exs
Comment thread Readme.adoc Outdated
Comment thread app/lib/linear_cli/cli.ex
Comment thread app/lib/linear_cli/cli.ex
team list only has --no-mine (no literal --mine); project list only
has --mine/--team (no --no-mine). The --all flag help text and Readme
wording previously implied both --mine and --no-mine existed on both
commands, which isn't true - name the actual flag per command instead.
@bougyman
bougyman merged commit 6c858d9 into main Aug 11, 2026
2 checks passed
@bougyman
bougyman deleted the 60-favorite-teams-projects branch August 11, 2026 16:30
bougyman pushed a commit that referenced this pull request Aug 11, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.8.4](v0.8.3...v0.8.4)
(2026-08-11)


### Features

* **cli:** add favorite teams/projects, filtering list views by them
([#61](#61))
([6c858d9](6c858d9))
* **cli:** add profiles - default team/project stored in local SQLite
([#57](#57))
([554e336](554e336))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
This was referenced Aug 11, 2026
bougyman pushed a commit that referenced this pull request Aug 11, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.0.0](v1.0.0...v1.0.0)
(2026-08-11)


### ⚠ BREAKING CHANGES

* graduate to 1.0.0 - disable pre-major version bumping
([#70](#70))
* **cd:** parallelize Burrito target builds and fix Trivy/Podman image
scanning ([#68](#68))
* **ci:** rename release.yaml to main.yaml, workflow name to "main"
([#38](#38))
* add Readme/LICENSE, feat: wire up the issue list --project picker
([#12](#12))

### Features

* add mix githooks.install to activate the repo's git hooks
([#51](#51))
([9b35472](9b35472))
* **api:** add LinearCli.Api GraphQL client (Phase 1)
([723f3f6](723f3f6))
* **ci:** add a full SBOM - app deps, OTP/Elixir runtime, container OS
packages ([#54](#54))
([e296fdd](e296fdd))
* **cli:** add favorite teams/projects, filtering list views by them
([#61](#61))
([6c858d9](6c858d9))
* **cli:** add issue create/develop/pr/take/update write commands (Phase
6)
([1649618](1649618))
* **cli:** add profiles - default team/project stored in local SQLite
([#57](#57))
([554e336](554e336))
* **cli:** add project update - post a status update to a project
([#43](#43))
([30dc6dc](30dc6dc))
* **cli:** make version respect --output json
([#33](#33))
([b160aad](b160aad))
* **cli:** resolve bare issue numbers via active profile, favorited
teams, or a team prompt
([#65](#65))
([8b183da](8b183da))
* **cli:** support Ruby's short subcommand aliases
([#15](#15))
([9fca6b5](9fca6b5))
* initial commit with ash submodule
([c2ceafb](c2ceafb))
* **linear:** add Ash domain resources for
Issue/Project/Team/User/Label/WorkflowState/Comment (Phase 2)
([e2a27f3](e2a27f3))
* **oban:** add scheduled monthly project rollover (Phase 7)
([11afb43](11afb43))
* phase 4 from initial plan -&gt; complete
([012866e](012866e))
* phase 8 - packaging, releasing, and CI
([#1](#1))
([905c238](905c238))
* scaffold Elixir port and enforce conventional commits
([a4d03a0](a4d03a0))


### Bug Fixes

* **ci:** consolidate the release pipeline into one workflow/DAG
([ba821bb](ba821bb))
* **ci:** create releases as drafts so assets survive Immutable Releases
([#19](#19))
([8572623](8572623))
* **ci:** package release binaries with the wrapper scripts
([#24](#24))
([5fb24a4](5fb24a4))
* **ci:** rebuild the release pipeline to stop the version-bump runaway
loop ([#30](#30))
([c311fd4](c311fd4))
* **ci:** relabel the release PR as tagged after we tag it ourselves
([ab1408e](ab1408e))
* **ci:** skip commit-subject validation in the post-merge pipeline
([#41](#41))
([3d00a85](3d00a85))
* **cli:** reject unrecognized flags instead of treating them as issue
ids ([#2](#2))
([#4](#4))
([e697ff6](e697ff6))
* **deps:** update ash to a non-vulnerable version
([#63](#63))
([b838e2a](b838e2a))


### Performance Improvements

* **linear:** fan out find-by-ids and per-team project fetches (Phase 5)
([fb00153](fb00153))


### Documentation

* add Readme/LICENSE, feat: wire up the issue list --project picker
([#12](#12))
([eb42c69](eb42c69))


### Miscellaneous Chores

* **ci:** rename release.yaml to main.yaml, workflow name to "main"
([#38](#38))
([2581a40](2581a40))
* graduate to 1.0.0 - disable pre-major version bumping
([#70](#70))
([87a65ae](87a65ae))


### Continuous Integration

* **cd:** parallelize Burrito target builds and fix Trivy/Podman image
scanning ([#68](#68))
([5cc829a](5cc829a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Favorite teams/projects, and filter list views by them

2 participants