Repository navigation
Conversation
A no_data part becomes a gap of its reason's gap_kind whatever diagnostics.timed_out says. Search marks every part it left unresolved at its time limit with the reason timed_out, so a part it answered before the limit keeps its reason, its message and its choices. answer-timed-out now carries reason timed_out on the unfinished part, and answer-timed-out-keeps-reasons pins a resolved part that keeps variable_not_resolved under a timed-out answer. The validator's answer_gaps reads the part's reason alone, and a new validator test pins that a diagnostics that is not an object holds no warnings.
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.
A no_data part now becomes a gap of its own reason's
gap_kind, whatever the answer'sdiagnostics.timed_outsays. The old rule turned every no_data part of a timed-out answer into atimed_outgap. That made sense when Search reported an unfinished part asvariable_not_resolved. Search now marks each part it left unresolved at its time limit with the reasontimed_out(dfo-apissrc/search/engine/fanout.py,_placeholder_no_data), so the override only erased the reason, message and choices of parts Search did answer. The SDK e2e testers saw anentity_ambiguouschoice reduced to atimed_outgap with no options.python/client-contract/README.mdstates the new rule.answer-timed-outis re-derived so its unfinished part carries reasontimed_outand the message dfo-apis renders for it, and the expected gap staystimed_out. The new syntheticanswer-timed-out-keeps-reasonskeepsvariable_not_resolvedunderdiagnostics.timed_out: trueand expects anot_understoodgap.tools/validate_client_contract.pyanswer_gapsreads the part's reason alone, andtools/capture_client_contract.pyderives both scenarios.The test row
diagnostics-not-an-object-readrelied on the old rule, so it is replaced bytest_diagnostics_that_is_not_an_object_holds_no_warnings, which pins the README clause through the replay reader with a string, a list and an object control.Downstream, dfo-apis pins this package and the SDK's
contract/SOURCEmust sit at or behind that pin. A follow-up bumps both, and the SDK drops its timed-out override in the same change.Testing:
uv run tools/validate_client_contract.pyreports 121 scenarios valid;pytest tools/tests530 passed;python/client-contractpytest 78 passed, ruff check and format clean.