Repository navigation
Spec: wait out GitHub quota exhaustion instead of failing (Quota wait) - #2004
Draft
JacobStephens2 wants to merge 29 commits into
Draft
JacobStephens2 wants to merge 29 commits into
JacobStephens2 wants to merge 29 commits into
Conversation
Share machine-local GitHub Quota waits with the Inbox
Skip every Pass during GitHub Quota waits
Preserve Pass admission alongside running Command quota recovery. Keep admission probes from waiting, reconcile quota and Security privacy fixtures with admission, and wait for the asynchronous Inbox refresh in its quota-resume test.
The issue-1994 merge into main added base_ci_skipped alongside the quota History selector. Preserve the Kind-based activity_write interface so that clean textual merge compiles, while named Process quota waits still select their own history. Fixes #2012.
Quota warnings expire with the clock before the background read necessarily completes. The CI regression raced that expiry against the GraphQL call-count assertion. Change the fake pull request to merged and wait for its Console row to reach Resolved, keeping the pre-reset no-read check and resumed-read assertion intact.
Fix inherited CI failures on the Quota wait branch
Keep the quota-reset regression synchronized with the observed GitHub state and preserve the Activity log Kind interface alongside named Process quota history. Validated with cargo check, focused Console and recording tests, cargo fmt --check, all 190 Console browser tests, and scripts/affected-tests origin/issue-1994 (site and full Rust suites).
Wait out GitHub quota exhaustion in running Commands
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.
Summary
Passes, running Commands and the Inbox share machine-local GitHub Quota waits, separated by GitHub host, authenticated user and resource. Scheduled work preserves a 500-unit reserve; active work survives primary exhaustion and explains the wait in its Run notification.
Primary waits resume after the reset plus one minute and 0–60 seconds of jitter, within a two-hour budget shared with child Runs. Completion work, including Claim cleanup after Stop, retains its completion policy. Waiting overlays the stage without resetting Slow's timing. Activity skips are deduplicated, including alternating Custom processes. The guide, Glossary and public site explain the shared quota across hosts.
Whole-Spec review also fixed Custom-process quota recovery before issue validation, branch selection and Claim creation, and made admission retain a valid low-quota observation when login discovery fails. Duplicate regression setup was consolidated.
Closes #1994
Evidence
Execution evidence
Testing seams: the
thirdshiftbinary against fakegh, observed through CLI outcomes, Activity and Command records, notifications and Console HTTP; the Quota wait module's injected clock and random source.cargo test --test process issue_branch_process_retries_quota_during_branch_selection -- --exact --nocapturefailed withgh pr list failed: GraphQL: API rate limit exceeded (HTTP 403)andleft: Some(1), right: Some(0).After: the same command passed:
1 passed; 0 failed. The regression's fake implementation session also supplies its required final message so the recovered Process can finish Delivery.cargo test --test pass_quota exhausted_quotas_skip_even_when_login_cannot_be_probed -- --exact --nocapturefailed its quota-skip assertion, printingno Ready issue on acme/widgetsafter observing zero quota.After: the same command passed:
1 passed; 0 failed.scripts/affected-tests refs/remotes/origin/main: site tests passed (94.39s), locked build passed (0.47s), and the complete Console browser rerun passed all 190 tests (196.52s). Rust coverage completed in segments after the unrelated assertion below; all 101 integration targets were accounted for, alongside the binary's unit suite.Inbox row Dismiss works in ready for review with JavaScript on a phone. The exact focused reproduction,node --test --test-name-pattern='^Inbox row Dismiss works in ready for review with JavaScript on a phone$' console/tests/inbox.test.cjs, passed (1 passed; 0 failed); the complete Console rerun also passed.tests/experiments/process.rs:111found421inside a generated directory hash (...ca842103...), rather than private PR data.cargo test --test experiments process::process_session_evidence_check_all_private_fix_identifiers_and_abbreviated_commits -- --exact --nocapturethen passed (1 passed; 0 failed, 9.67s). All remaining 81 integration targets passed usingcargo test --test <target>selectors; the exact expanded command is retained inremaining-rust.log. The initial Rust run took 1,465.08s, including 3m04s compilation; the resumed targets took 1,234.48s with eight test threads. The affected-test entry point did not finish green in one invocation; both unrelated failures and their passing reruns are recorded here.Visual evidence
Matched Inbox captures use Chromium with the same fixture and expanded Last fired Passes, at 1440×900 desktop and 390×844 phone viewports. Before uses
refs/remotes/origin/main; After shows the shared Quota wait beside the Pass information. The capturing machine's hostname is anonymized. Screenshots are retained with the Session evidence; this session does not push evidence or repository branches.Review coverage
Independent Standards and Spec reviewers inspected all 53 original changed paths and reviewed the fixes, including the additional
src/processes/source.rschange. Both axes cover all 54 final changed paths. Unread changed files: none. Generated-output exclusions: none; the generated manual's changed hunks were read directly. Reports and counts are retained in.thirdshift-review-Ddsd5K/standards.md,spec.mdandsummary.json.The fixed point was pinned when review began:
refs/remotes/origin/mainat09f0c6c49e2c056230c38053b8d86a42d9a214f5. That remote-tracking ref advanced during the long validation run; review coverage remains against the pinned commit.Unaddressed findings
Standards
None. The one duplication finding was addressed by one regression scenario covering both Custom-process name pairs.
Spec
None. Both behavioral findings were reproduced, fixed and retained as regressions. No finding requires a Day shift or Spec decision.
Merge Danger
Door: two-way. Reverting restores the previous quota handling; machine-local quota and wait-total sidecars contain no token and require no migration.
Blast Radius: factory. Every Pass and thirdshift-owned GitHub call shares this policy. Stop, completion cleanup, account separation, notification privacy and Inbox recovery are covered by regressions. The branch remains a draft for thirdshift's remaining review and publication steps.