Skip to content

fix(search): bind a constraint slot a reply leaves out as an open slot - #132

Merged
jm-rivera merged 1 commit into
devfrom
fix/bind-omitted-slots-v3
Oct 24, 2026
Merged

jm-rivera merged 1 commit into
devfrom
fix/bind-omitted-slots-v3

Conversation

@jm-rivera

@jm-rivera jm-rivera commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

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_bindings now 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_bindings and its two 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 excluding a table no longer mints a different identity from the plain question. _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 qualifier_not_bound refusal, 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 with SEARCH_RECORD_SCENARIOS, and 18 Jev goldens regenerated through the new SEARCH_UPDATE_JEV_GOLDEN path, where only expected.bind.bindings changed (20 sole_option values and 10 unbound nettingBasis drafts; the stored answers are untouched). ent-demonym-german-aid loses its known failure, so this PR's paired eval decides it. The UN shared-residence answer (test_un_tables_serving.py, [shared_residence]) binds Urban as a sole value, since every member asserts it, so it no longer shows the "no overall figure" notice or a closest_match departure; 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 in tests/engine/test_role_grid_search.py, test_aid_dataset_bind_e2e.py and test_membership_authority.py.

Testing: locally tests/engine, render, eval, datasets_api, live_refresh and contract passed on dev 273a270 (25,174 passed), re-recording the Jev goldens and place snapshots changed no file, and ruff, ty check and the eval corpus check passed.

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
@github-actions github-actions Bot removed the run-eval label Oct 24, 2026
@jm-rivera
jm-rivera merged commit e001577 into dev Oct 24, 2026
23 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refute a sole slot value claimed from a recall sample when the family holds other values Bind a constraint slot the binder leaves out as an open slot

1 participant