Conversation
8925c36 to
d6f03f4
Compare
57fd85b to
7b2248c
Compare
d6f03f4 to
04630ba
Compare
Base automatically changed from
leanderrodrigues/iswf-1943-ensure-correct-permission-checks-for-displaying-seer-in
to
master
January 29, 2026 22:20
5a98db7 to
63be98d
Compare
289767d to
f77f00e
Compare
The autofix cache now stores a list of thread details instead of a single thread. When an alert triggers multiple Slack notifications (e.g., to different channels), each thread is tracked and receives autofix updates. Refs ISWF-1944 Co-Authored-By: Claude <noreply@anthropic.com>
Refactor thread updates to schedule individual tasks per thread instead of sending messages synchronously. This allows retries on failures and avoids blocking the autofix update handler. Refs ISWF-1944 Co-Authored-By: Claude <noreply@anthropic.com>
Return None from get_autofix_cache when no cache exists instead of returning a result with null payload. This simplifies caller logic and makes the types more accurate. Also fix duplicate thread entries by checking if thread already exists before appending. Co-Authored-By: Claude <noreply@anthropic.com>
Rename _update_existing_message to remove_autofix_button for clarity. Add error handling in send_thread_update to catch invalid integration errors and log appropriately instead of failing silently. Pass ephemeral_user_id to error handler so users see error feedback. Co-Authored-By: Claude <noreply@anthropic.com>
Add locking mechanism to prevent race conditions when triggering autofix from Slack (e.g., double-clicks). Also improve error handling: - Add JSON serialization validation before scheduling thread update tasks - Add warning log when integration is not found in task processing - Log integration_id instead of full install object to avoid leaking data - Fix logging key typo (threads_count -> thread_count) - Remove unused SeerOperatorCacheResult import Co-Authored-By: Claude <noreply@anthropic.com>
Update handle_prepare_autofix_update to use the public SeerOperatorAutofixCache.get() method instead of the now-private _get_pre_autofix_cache() method.
…dates Expand thread dict to explicit keys in logging context for proper serialization. Fix orjson exception catch from JSONDecodeError to JSONEncodeError since we're encoding, and use TypeError instead of ValueError for serialization failures.
- Make get_autofix_lock a static method with explicit parameters for use outside the entrypoint instance - Use NotificationDataDto for proper serialization/deserialization of task parameters instead of raw orjson - Add locking to handle_prepare_autofix_update to prevent race conditions when multiple threads update the cache concurrently
Add comprehensive tests for new and modified functions: - get_autofix_lock static method - process_thread_update Celery task with error handling cases - schedule_all_thread_updates for multi-thread dispatching - handle_prepare_autofix_update with thread merging and locking - on_autofix_update unsupported event type handling Co-Authored-By: Claude <noreply@anthropic.com>
Rename get_autofix_lock to get_autofix_lock_key and return just the lock key string. Callsites now create locks themselves via locks.get(), giving them control over lock duration and other parameters. Co-Authored-By: Claude <noreply@anthropic.com>
Add the slack entrypoint module to TASKWORKER_IMPORTS so its instrumented tasks can be discovered and processed by taskworker. Co-Authored-By: Claude <noreply@anthropic.com>
5bf087a to
e813a35
Compare
Contributor
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
GabeVillalobos
approved these changes
Jan 30, 2026
priscilawebdev
pushed a commit
that referenced
this pull request
Feb 2, 2026
…tes (#107280) Does a few things along with adding support for updates to be received in multiple threads (when triggered by automations) - Splits `_send_thread_update` into three smaller functions: - `send_thread_update`: most of the same business logic, used to make the update synchronously (for example, confirming a run has started) -- operates on one thread - `process_thread_update`: a task which takes serializable params to make a call to `send_thread_update`. -- operates on one thread - `schedule_all_thread_updates`: A helper function which accepts a list of threads, and schedules a `process_thread_update` task for each, with retries and what not. Done this way so that a failed message on thread 2 doesn't retry a successful message on thread 2. - Adding locks to trigger autofix call, further reducing the chance of repeated calls from the same thread. Resolves ISWF-1944, ISWF-1175 and ISWF-1155 --------- Co-authored-by: Claude <noreply@anthropic.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Does a few things along with adding support for updates to be received in multiple threads (when triggered by automations)
_send_thread_updateinto three smaller functions:send_thread_update: most of the same business logic, used to make the update synchronously (for example, confirming a run has started) -- operates on one threadprocess_thread_update: a task which takes serializable params to make a call tosend_thread_update. -- operates on one threadschedule_all_thread_updates: A helper function which accepts a list of threads, and schedules aprocess_thread_updatetask for each, with retries and what not. Done this way so that a failed message on thread 2 doesn't retry a successful message on thread 2.Resolves ISWF-1944, ISWF-1175 and ISWF-1155