Skip to content

feat: support filter-only batch issue unassignment - #286

Merged
ruby-automation merged 6 commits into
mainfrom
ext-68-filter-only-unassign
Sep 27, 2026
Merged

ruby-automation merged 6 commits into
mainfrom
ext-68-filter-only-unassign

Conversation

@ruby-automation

@ruby-automation ruby-automation commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add filter-only issue unassign with assignee, team, project, state, status, and label selectors.
  • Resolve profile/project defaults safely and reject empty or mixed ID/filter requests.
  • Confirm filtered mutations, support --yes/--dry-run, and process one page of up to 100 matches with a truncation warning.
  • Skip already-unassigned issues in filter mode so repeated runs reach later assigned issues.
  • Expose the capped first-page read through an Ash generic action and keep the README and Ash ERD current.

Verification

  • mise exec -- mix setup
  • mise exec -- mix ci (root 52 tests; app 596 tests including one doctest)
  • mise exec -- mix test test/linear_cli/cli/commands/issues/mutations_test.exs from app/ (79 passed)
  • Hosted PR checks pass for the latest commit.

Linear issue: EXT-68

@ruby-automation

Copy link
Copy Markdown
Contributor Author

Rework for the implementation-review feedback is pushed in 8902fd1.

  • Filtered unassignment now confirms with Unassign N issue(s)?; -y/--yes bypasses the prompt and --dry-run lists matches without mutations.
  • Strict project resolution keeps exact matches non-interactive and prompts for partial matches; no-match input still fails before the issue query.
  • Assignee filters resolve exact names/display names without prompting, prompt for partial matches, and send an assignee.id filter.
  • The README, Ash ERD, and module-structure documentation describe the new scope and controls; redundant empty-list handling was removed.
  • mise exec -- mix ci passes locally (root 52 tests; app 595 tests including one doctest), and PR CI for 8902fd1 is green. No new GitHub review comments were present after the rework push.

@ruby-automation

Copy link
Copy Markdown
Contributor Author

Rework for the reporter's latest implementation-review direction is pushed in a715d5f.

  • Filter-only unassignment now requests one 100-record issue page, never follows the cursor, and warns when hasNextPage is true that only the first 100 will be processed.
  • JSON output remains valid because the truncation warning goes to stderr.
  • Added regression coverage for the single-page request, 100-match cap, warning, first-page errors, and the pagination helper; updated the README and Ash ERD.
  • mise exec -- mix ci passes locally (root 52 tests; app 597 tests including one doctest), and hosted PR checks for a715d5f pass. No new GitHub review comments are present.

@ruby-automation

Copy link
Copy Markdown
Contributor Author

Rework for the latest code-review findings is pushed in 981cf86.

  • Filter-only unassignment now passes assigned_only: true; with --no-mine and no explicit assignee, the API filter includes assignee: {null: false} so reruns skip already-unassigned issues. Ordinary issue list --no-mine still sends no assignee clause.
  • Replaced the plain Linear.issues_first_page/1 domain helper with the Ash Issue.list_first_page generic action and issues_first_page code interface.
  • Removed the unused fetch_all_pages/:infinity path and unreachable name-based assignee filter. Updated the README, ERD, and regression tests.
  • mise exec -- mix ci passes locally (root 52 tests; app 596 tests including one doctest). Hosted PR checks for 981cf86 pass; the Burrito regression remains skipped because the change does not affect Burrito inputs.

The JSON prompt and workspace-wide lookup follow-ups remain out of scope for this narrow rework. No new GitHub review comments are present.

@ruby-automation

Copy link
Copy Markdown
Contributor Author

Follow-up to the rework summary: 35ebee8 adds the exact regression invocation requested by review, issue unassign --no-profile --no-mine --team ENG --yes, and asserts the outgoing assignee: {null: false} clause. The preserved issue list --no-mine assertion remains in the domain tests.

The commit hook and final mise exec -- mix ci pass (root 52 tests; app 596 tests including one doctest). Hosted checks for 35ebee8 also pass, with the unrelated Burrito regression job skipped. No GitHub review objects are present.

@ruby-automation
ruby-automation merged commit 3608a53 into main Sep 27, 2026
3 checks passed
@ruby-automation
ruby-automation deleted the ext-68-filter-only-unassign branch September 27, 2026 22:44
bougyman added a commit that referenced this pull request Sep 28, 2026
…#290)

* fix(stokowski): never rewrite a pushed branch in before_run

The hook rebased every clean branch onto origin/main. On a PR branch
that already contains a merge from main (EXT-68's PR #286 after "Update
branch"), that dropped the merge commit and replayed the feature commits,
leaving the workspace "ahead 5, behind 6" of the PR on every dispatch.

A branch with an upstream (main, or a pushed PR branch) is now only
fast-forwarded to that upstream with `git pull --ff-only`. Only an
unpushed local branch still rebases onto origin/main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(stokowski): accept "Accept" as a follow-up approval

EXT-68's approval read "Accepted: G1, G2, and G3". It has no "Approve",
so under the prompt's own rule nothing should have been created, yet
improvement created all three: the outcome was right but the agent broke
its rule to get there. The rule now accepts a word starting with
"Approve" or "Accept", and the report must quote the approval comment it
used, so a reviewer can check the match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: bougyman's bot <ruby-automation@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: bougyman <bougyman@users.noreply.github.com>
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.

2 participants