Repository navigation
Conversation
… sync may run 15 minutes A request has its own timeout (60 s default, a CLI may set a longer one with its measurement) and only a read that failed in transit is retried: 1, 3 and 10 s waits with jitter, each retry a request of the budget and none past the deadline, an item of a batch that fails is asked for once more and then left for the next run, and the transport's own code is kept as cause_code. WC-LIFE-5: a cooperative command that declares partial gets 15 minutes at a terminal (owner's choice); other cooperative commands keep 5 minutes and MCP keeps 45 seconds. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This branch has not been deployed
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.
Task
Draft standard for two things the owner asked for after a real mail sync failed on Yandex 360: a rule for per-request timeouts and transient retries (none existed), and a longer CLI deadline for a resumable sync. Draft: not to be merged until the owner rules on the numbers.
Why
Real runs on a 253,024-message INBOX ([email protected], Yandex 360): the server answered single messages with
* NO [UNAVAILABLE] UID FETCH ... failure due to backend errorand then closed the connection; every later command failed with imapflowNoConnection. It was not the socket timeout (it failed at 94 s and 197 s with a 600 s limit). A header FETCH of 200 messages took from 5 s to over 130 s, minute to minute. Each CLI invents its own handling, so the owner wants one standard.What
New WC-LIFE-17 (read it in the diff):
requestMs, with the measurement (mail-cli: 90 s).NO [UNAVAILABLE], 429/THROTTLEDwith a named wait. Never a write (staysoutcome_unknown, WC-OUT-20), never a refused login or another 4xx.details.cause_code(plain code, at most 40 characters, never the server's text); a run records it (error.cause_code, cli-core).WC-LIFE-5 (the numbers for the owner to rule on): a
cooperativecommand that also declarespartial(a resumable sync) gets a deadline of 15 min at a terminal instead of 5. Other cooperative commands stay at 5 min, MCP stays at 45 s. The owner chose 15 min on 2026-10-29 (option C); the trade-offs below are for the record.requestMs10 s--timeoutor MCP (45 s) avoid itsyncand any cooperative commandpartial(calendarsyncand mailsync); the calendar sync's 5 min becomes 15Also: the "Who follows" list and the WC-LIFE-16 exceptions name mail-cli's sync (request budget from the cli-core release that follows 0.472.0);
mail-cliis added to the repositoriesEnforced bymay name; index count and CHANGELOG are updated.Testing
pnpm docs:check(docs, rule ids, "Enforced by" lines),pnpm docs:lint,pnpm docs:spell,pnpm lint. The enforcing tests are in cli-core (#2144, merged) and mail-cli.🤖 Generated with Claude Code