Add TodoService method for resolving stale MR todos
## Goal Add the core service method for resolving stale todos without any integration points. This is pure business logic with no side effects. Related to #20637 ## Implementation Details ### Code Changes Add new method to `TodoService`: - **Location:** `app/services/todo_service.rb` - **Method:** `resolve_stale_todos_for_merge_request` - **Logic:** Find and resolve specific action types (ASSIGNED, REVIEW_REQUESTED, APPROVAL_REQUIRED, ADDED_APPROVER) for all users - **Note:** Synchronous for simplicity at this stage - **EE-safe:** Gracefully handle CE vs EE action type differences ### Target Action Types ```ruby STALE_ON_MR_COMPLETION = [ Todo::ASSIGNED, # 1 - Assignment is no longer actionable Todo::APPROVAL_REQUIRED, # 5 - (EE) Approval no longer needed Todo::REVIEW_REQUESTED, # 9 - Review no longer needed Todo::ADDED_APPROVER # 13 - (EE) Approval no longer needed ].freeze ``` **Excluded types:** MENTIONED, DIRECTLY_ADDRESSED (users may want these for context) ## Test Coverage Required Location: `spec/services/todo_service_spec.rb` - [ ] Resolves ASSIGNED todos for multiple users - [ ] Resolves REVIEW_REQUESTED todos - [ ] Does NOT resolve MENTIONED todos - [ ] Does NOT resolve DIRECTLY_ADDRESSED todos - [ ] Works when MR is merged - [ ] Works when MR is closed - [ ] Does NOT resolve when MR is still open - [ ] Updates user todo count caches - [ ] Works in CE (without EE action types) - [ ] Works in EE (with APPROVAL_REQUIRED and ADDED_APPROVER) - [ ] Handles empty results gracefully ## Files to Change - [ ] `app/services/todo_service.rb` (add method) - [ ] `spec/services/todo_service_spec.rb` (add tests) - [ ] `ee/spec/services/ee/todo_service_spec.rb` (add EE-specific tests) ## Acceptance Criteria - [ ] Method resolves only target action types - [ ] Method ignores mention/address todos - [ ] Method updates user todo count caches - [ ] Method works in both CE and EE - [ ] 100% test coverage for new method - [ ] No performance regressions in existing todo specs - [ ] Code review approved - [ ] All CI jobs pass ## Notes - This MR contains "dead code" until Phase 1b/1c hook it up - Safe to merge and deploy immediately - Provides foundation for following phases - No user-facing changes **Estimated Effort:** 2-3 days
issue