feat(cli): add favorite teams/projects, filtering list views by them - #61
Merged
Conversation
… 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).
There was a problem hiding this comment.
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.Favoriteswith afavoritesSQLite table and CRUD-like helpers (add/2,remove/2,list/1). - Adds
lc team favorite|unfavorite <TEAM>andlc project favorite|unfavorite <PROJECT>, plus favorites-based default filtering with a new--alloverride. - 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.
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
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 -> 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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #60.
Full design in
documents/phase-10-plan.adoc.LinearCli.Favorites: a newfavoritestable in the same local sqlite fileLinearCli.Profiles(Add profiles: switchable default team/project stored in local SQLite #56/feat(cli): add profiles - default team/project stored in local SQLite #57) already uses - storing resolved team keys and project ids (not raw search text, so filtering never needs re-fuzzy-matching).lc team favorite/unfavorite <TEAM>andlc project favorite/unfavorite <PROJECT>.team list/project listdefault to favorites-only once any favorite of that kind exists;--allopts back out to today's full list. Invisible to anyone who's never favorited anything.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 inLinearCli.GitTest(confirmed it fails identically onmainbefore this branch's changes)mix format --check-formatted- cleanLinearCli.FavoritesTest(data layer) andLinearCli.CLI.FavoritesCommandsTest(10 tests, fullLinearCli.CLI.main/2invocations - favorite/unfavorite for both teams and projects, favorites-only-by-default filtering,--alloverride, and the zero-favorites case explicitly asserted unchanged)Readme.adocdocuments the new commands