You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is stacked on #464 because that PR separates a missing credential from a temporary storage failure. It also depends on basecamp/actioncable-client#9. Neither dependency should be merged through this PR.
Stops the Action Cable client from retrying reconnects when authentication definitively fails, so hey watch exits with the real auth error instead of retrying forever. Network failures, rate limits, and temporary credential storage failures stay retryable; terminal watch errors beat queued change notifications.
Mail and calendar watches surface the original stop reason to the TUI, including authentication errors, and retry temporary failures.
Bumps actioncable-go to v1.1.0 and updates the Nix vendor hash.
The reason will be displayed to describe this comment to others. Learn more.
Stale comment
Approved. Cursor Bugbot and Cursor Security Agent were not present after the first check poll, so those signals were skipped; no approval policy required human review. No reviewers were assigned.
Sent by Cursor Approval Agent: Pull Request Approver
[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
File
Description
internal/cmd/watch.go
Preserves authentication errors through watch shutdown.
Retry calendar watch startup failures caused by rate limits
internal/tui/tui.go:454
calendarWatchFailed delegates to retryableMailWatchError, which only accepts CodeNetwork. An initial ListWithChanges response classified as CodeRateLimit therefore drops the calendar watch permanently, whereas this path retried every startup failure before this change and the PR explicitly says rate limits remain retryable. Include rate-limit errors in the retry policy and cover the startup path with a test.
Preserve calendar watch retries for temporary credential-store failures
internal/tui/live.go:155
retryableWatchError also gates calendar startup failures, but temporary credential-store failures remain plain wrapped errors (credentialLoadError in internal/auth/auth.go:531-535). apierr.FromSDK therefore classifies them as a generic API error, so this returns false and calendarWatchFailed permanently drops a watch whose initial ListWithChanges hit a locked/unavailable keyring. Preserve retry behavior for storage failures (or have the calendar path stop only explicit authentication failures) and cover that case with a test.
Follow-up in 59a398c: calendar watches now stop only for explicit authentication failures. Rate limits, temporary credential-storage failures, network failures, and other transient startup errors keep the existing retry behavior. Added focused coverage for both rate limits and unavailable credential storage.
All changed files in this PR are exclusively about WebSocket/Action Cable connection lifecycle and authentication error propagation. No added or modified lines touch workspace paths, plugin/cache/tarball paths, git status paths, project or canvas paths, or any agent/MCP/tool-controlled filesystem inputs.
Dismissed the prior approval because Cursor Security Agent was present on this head but completed as skipped, so the required security-review signal did not finish successfully. Cursor Bugbot was not present after the first poll. No reviewers were assigned.
The reason will be displayed to describe this comment to others. Learn more.
Left a non-blocking comment; I did not approve and no reviewers were assigned. Cursor Bugbot was not present after the first poll, and the present Cursor Security Agent check completed as skipped, so this head does not meet the approval criteria. Human review is needed.
Sent by Cursor Approval Agent: Pull Request Approver
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
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.
What changed
hey watchand the TUI connection lifecycleValidation
make testmake lintThis is stacked on #464 because that PR separates a missing credential from a temporary storage failure. It also depends on basecamp/actioncable-client#9. Neither dependency should be merged through this PR.
Basecamp card
Summary by cubic
Stops the Action Cable client from retrying reconnects when authentication definitively fails, so
hey watchexits with the real auth error instead of retrying forever. Network failures, rate limits, and temporary credential storage failures stay retryable; terminal watch errors beat queued change notifications.actioncable-goto v1.1.0 and updates the Nix vendor hash.Written for commit e165bef. Summary will update on new commits.