Repository navigation
fix(client-contract): state the series_left_out rule the vectors pin and cap a refused failed poll's Retry-After - #42
Merged
Conversation
…and cap a refused failed poll's Retry-After The README said a fetch warns series_left_out only for the rolling anchor's left-out series. The rule, its vectors and test_rules warn for any manifest's left_out and for left_out_complete false. LongBuild.polled decided whether to repost after an operation_failed refused poll with retryable(), so a Retry-After over the 60-second cap reposted at once. tries_again now decides for every refused poll. The CHANGELOG counts 148 active refusal codes in actions.json.
…nce under the cap
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.
Three corrections to the client contract.
python/client-contract/README.mdsaid a fetch of derived members warnsseries_left_outonly whenRecipe.anchor.left_out(the rolling anchor) is non-empty.rules/README.md,rules/series-left-out.jsonandtest_rules.series_left_outwarn when any member's manifest lists a series inleft_outthat a recipe step dropped for a data gap, or saysleft_out_completefalse. The README now states that rule and names the vectors that pin it (growth-left-series-out,list-incomplete,incomplete-with-none-listed).tools/validate_client_contract.py:LongBuild.polleddecided whether to post again after a refused poll with codeoperation_failedwithretryable(), so aRetry-AfterpastRETRY_AFTER_MAX_Sposted the build again at once, where every other refused poll raises.tries_againnow decides for every refused poll.test_a_broken_long_build_is_reportedgainsrefused-failed-operation-past-retry-after-cap(Retry-After: 300), which failed before the change, andtest_a_long_build_record_is_validgains the under-cap control. A running operation'sretry_after_msis a wait the server asks for and stays uncapped. Under the cap, the build is posted again at once, as before, and the README now says so.The SDK's Python
_poll_failedand TypeScript#pollFailedstill post the build again on a refusedoperation_failedpoll whoseRetry-Afterpasses the cap. No scenario pins the over-cap case yet, so their replays stay green; a scenario for it lands with the SDK change.python/client-contract/CHANGELOG.md:actions.jsonholds 148 active refusal codes, not 106.No registry entry, action row or vector changes, so apis and ai keep their pin.
Testing:
uv run tools/validate_client_contract.py(148 action rows, 126 scenarios) anduv run tools/validate_registry.py(265 entries) pass, andpytest tools/testspasses (617).