Repository navigation
fix(search): bind a constraint slot a reply leaves out as an open slot - #132
Merged
Merged
Conversation
Every pass after the bind reads a slot only through its draft, so a slot the binder's reply left out was never read as open: declared defaults skipped it and no sole value was claimed. "German aid to Kenya" bound no aid type where "aid from Germany to Kenya" got DAC2aAidType206. _settle_bindings now drafts every omitted slot of the elected shape unbound first (_with_every_slot_drafted). Drafting every slot turns on sole-value claims the tests had never reached, and four places needed the claim judged on the right rows: - _validate_sole_option_bindings and its sibling readers read identity_member_facts, the family the identity denotes: the named dataset's rows for a named part, every dataset's rows for an unnamed one, so an exclusion no longer mints a different identity. - _sample_forces states its three readings and refutes a sibling across a split (_splits_without_value) for answers the walk cannot judge. - _bound_code_records, _stand_in_members and the no-data relaxation in grounding._suggest_nearest_real skip values the request never named (bind.sole_option_properties), so a sole value neither names a refusal, nor strikes out a sibling, nor is relaxed and re-probed. 70 expectations move: declared defaults (CRS education 434 to 257 members, DAC1AidType1010), sole values the walked family confirms, 15 place-scenario snapshots, and 18 Jev goldens regenerated through SEARCH_UPDATE_JEV_GOLDEN, where only expected.bind.bindings changed (20 sole_option values and 11 unbound drafts; stored answers untouched). ent-demonym-german-aid loses its known failure. Closes #99 Closes #101
This was referenced Oct 25, 2026
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.
Closes #99
Closes #101
Every pass after the bind reads a constraint slot only through its draft, so a slot the binder's reply left out was never read as open: declared defaults skipped it and no sole value was claimed, and the answer depended on how the model phrased its reply. "German aid to Kenya" bound no aid type where "aid from Germany to Kenya" got
DAC2aAidType206._settle_bindingsnow drafts every omitted slot of the elected shape unbound first (_with_every_slot_drafted), before the sole-value claims and the sampled-claim spans of #127.Drafting every slot reaches sole-value claims the tests never had, and four places needed the claim judged on the right rows.
_validate_sole_option_bindingsand its two sibling readers readidentity_member_facts, the family the identity denotes: the named dataset's rows for a named part, every dataset's rows for an unnamed one, so excluding a table no longer mints a different identity from the plain question._sample_forcesstates its three readings and refutes a sibling across a split (_splits_without_value) for answers the walk cannot judge._bound_code_records,_stand_in_membersand the no-data relaxation ingrounding._suggest_nearest_realskip values the request never named (bind.sole_option_properties), so a sole value neither names aqualifier_not_boundrefusal, nor strikes out a stand-in sibling, nor is relaxed and probed again.70 expectations move: declared defaults (CRS education 434 to 257 members,
DAC1AidType1010), sole values the walked family confirms (positionType,undata/RES-U, the GNI slots), 15 place-scenario snapshots re-recorded withSEARCH_RECORD_SCENARIOS, and 18 Jev goldens regenerated through the newSEARCH_UPDATE_JEV_GOLDENpath, where onlyexpected.bind.bindingschanged (20sole_optionvalues and 10unboundnettingBasisdrafts; the stored answers are untouched).ent-demonym-german-aidloses its known failure, so this PR's paired eval decides it. The UN shared-residence answer (test_un_tables_serving.py,[shared_residence]) bindsUrbanas a sole value, since every member asserts it, so it no longer shows the "no overall figure" notice or aclosest_matchdeparture; the bound slot is the disclosure, and whether the sentence names it is a rendering question this PR leaves alone.A reviewer should check
identity_member_facts,_splits_without_value, and the moved rows intests/engine/test_role_grid_search.py,test_aid_dataset_bind_e2e.pyandtest_membership_authority.py.Testing: locally
tests/engine,render,eval,datasets_api,live_refreshandcontractpassed on dev 273a270 (25,174 passed), re-recording the Jev goldens and place snapshots changed no file, and ruff,ty checkand the eval corpus check passed.