Skip to content

release: apis dev to main - #142

Merged
jm-rivera merged 4 commits into
mainfrom
dev
Oct 25, 2026
Merged

jm-rivera merged 4 commits into
mainfrom
dev

Conversation

@jm-rivera

Copy link
Copy Markdown
Contributor

Releases dev at d340e158b to production: #127, #132, #133 and #134. Dev serves c9a1b9059 (#133); #134 changes one test only.

#127 makes a sole value claimed from a recall sample yield to every rule that runs before the member walk, so a declared or shape-slot default is no longer blocked by a claim the walk then refutes, and it makes a 202 never read done after dispatch (datasets_api/operation_store.py retries create_or_get under the advisory lock). #132 drafts every constraint slot the binder's reply leaves out as an open slot, so "German aid to Kenya" and "aid from Germany to Kenya" bind the same aid type. #133 adds python -m dataset_store.warning_formats, a read-only count of stored warnings that name refs, by old format; it runs as an execution of dfo-prod-datasets-migrate and is the precondition for migration 0039 in #135. #134 drives the enrichment deadline in test_deadline_cancelled_probe_preserves_primary_completion itself.

The deploy runs no migration and reads no new setting. pyproject.toml, uv.lock, the Dockerfile and the workflows are unchanged, so the spec-kit pin stays at 0d19172. No search/models file changes, so the search wire shape the website mirrors is the same.

Testing: CI and the eval gate passed on each PR into dev; CI and Eval nightly passed on d340e158b. The nightly Full grids job fails on dev on the I9 pinned-resubmit invariant, as it has on each of its last 30 runs. The production deploy waits for approval.

…ds done after dispatch (#127)

* fix(search): let every pre-walk rule read a sampled claim as open

A sole value claimed from a recall sample is provisional until the
walk judges it, but the rules that run before the walk read it as an
ordinary bound value. A claim blocked the declared or shape-slot
default, the walk then refuted it, and the slot ended unbound: birth
rate with only the live-birth series recalled answered total births.

Each pre-walk span in _settle_bindings, _vet_election and
_repair_bindings now runs its rules on without_sampled_claims and puts
the claims back (with_sampled_claims) only on slots the rules left
plain unbound, so a binding a rule writes replaces the claim and is
authoritative. Readers that _unbind_refuted_claims re-runs after a
refutation keep reading the claim. This replaces the special case
b70236e added to bind_shared_values.

* fix(datasets): build a submission's 202 from the row it recorded

A worker that finished during enqueue left the row done before
mark_dispatched returned it, and submit_over_budget put that state in
the 202, which then read done with no manifest. The 202 now comes from
the row create_or_get recorded, which is never done; dispatch_if_due
runs for its side effect only. A completion during dispatch leaves the
202 pending, and the client's first poll serves the manifest.

* fix: decide a reset again when its write matches nothing, and judge whole totals without sampled claims

LiveOperationStore.create_or_get ran its reset UPDATE and final SELECT
as separate statements, so under READ COMMITTED a claim and completion
landing between them returned a done row. The INSERT and the reset
UPDATE now RETURN the row they write; a write that matches nothing
decides again under the same advisory lock, up to three passes, then
raises DatasetsStoreUnavailable.

holds_whole_total and the breakdown decision read sampled claims as
bound and are not re-run after a refutation. _bind_query_places,
_settle_direction and _walk_assignment now judge a whole total on
without_sampled_claims, and _narrow_to_breakdown runs before the claims
are restored. _settle_bindings assigns its bindings once, after the
restore.
#132)

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
…mat (#133)

`python -m dataset_store.warning_formats` counts, in a read-only transaction, each stored
warning format that migration 0039 rewrites, and checks each stored `member_count` against its
trace's `resolved_stat_vars`. It runs as an execution of the datasets migration job with its
args overridden, so the counts are read before the deploy that applies 0039.
…on a wall-clock budget (#134)

`test_deadline_cancelled_probe_preserves_primary_completion` gave the whole request a 1 s
budget and relied on the fake fan-out finishing first. On a stalled CI runner the primary leg
itself missed the budget (1014 ms and 1068 ms), so `done.timed_out` was true. The test now
wraps `raw_text._stream_slot_options` to run with an expired deadline. That call starts only
after the response event, so the primary runs under the default request budget on any runner.
The probe blocks on a `threading.Event` the test releases, so no worker thread outlives it.
@jm-rivera
jm-rivera merged commit a11c027 into main Oct 25, 2026
32 of 33 checks passed

This branch was successfully deployed

1 active deployment
dev — d340e158 Deployed Oct 24, 2026 by jm-rivera via deploy / deploy #74
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.

1 participant