OffMain reads GitHub less and pays more exactly
A repository is read once per covered account and only from the last pass on, failed deliveries replay, an issue close pays the closer, and signing out ends the session.
Accept a break sized to the time left in a windowaddedwhy
Accept a break sized to the time left in a window, so the last stretch before a window closes stops being a place where nothing is affordable. It is never longer than 60 minutes, and it costs one minute per minute like every other break.
Hold the background read back so the coverage screen keeps a budgetfixedwhy
Hold the background read back at 500 remaining GitHub requests, so the repository picker and the coverage screen keep a budget of their own. Both used to fall back to an empty list once a read had spent everything, which looked like having no repositories at all.
Stop grace topping up on top of a balance that was not emptyfixedwhy
Read the balance at the day boundary from the ledger’s own running total, so the grace allowance stops topping up on top of a day that was not empty. An account that had ever overspent read as empty at 4am, because the old sum still carried a debt the zero floor had already removed.
Pay an issue close to the closer, from the poll as well as the webhookchangedwhy
Pay an issue close to the person who closed it whether the event arrives by webhook or by the installation poll, and only when the issue was closed as completed. The poll used to pay whoever opened the issue and used to pay closes marked not planned or duplicate, so the same work was priced two ways.
Hold a repeat recalculate behind a 10-minute waitchangedwhy
Hold a repeat recalculate behind a 10-minute wait and answer with the seconds left, rather than letting a failed one be tapped again straight away. An account already read once now reads only what is new since that read, instead of a fresh 90 days every time.
End the session on the server when you sign outsecuritywhy
End the session on the server when you sign out, and require a signed token on every route that touches an account. Signing out used to clear the phone alone and tell the backend nothing, so the sign-in stayed valid on the server after the tap.
Skip a repository OffMain cannot read instead of failing the whole passfixedwhy
Skip a repository OffMain cannot read instead of failing the whole pass over it. One refused repository used to hold the mark back for every account it covers, so the read window grew a day at a time until page caps started dropping events from the repositories that were fine.
Report what the 120-minute cap took on each of the last 30 daysaddedwhy
Report how many minutes the 120-minute cap took on each of the last 30 days, beside what you earned and spent. A day that starts at the cap earns 0, so until now a day of real work and an idle day read exactly the same.
Read each repository once per covered account, not once per personchangedwhy
Read each repository once per covered account instead of once for every person who works in it, and start from where the last pass stopped rather than re-reading the whole day. A team sharing one covered organization no longer splits a single GitHub rate budget, and the worst case for one repository falls from 179 requests to about 19.
Replay the GitHub deliveries that failed instead of waiting for a full readaddedwhy
Replay the deliveries GitHub tried to hand over and could not, so work found that way lands without waiting for the next full read of your repositories. A delivery is asked for again only when no record of it ever arrived, and it comes back through the same door as any other, so nothing is paid twice.
Stop the GitHub reads that fail part way through a parallel pullfixedwhy
Stop the GitHub reads that fail part way through a parallel pull. Every request in flight now holds its own connection instead of sharing one, and a read that faults mid-flight is tried once more before it gives up.