This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+14 more
Summary
AI summaryEmbeddings are now first-class Fellegi‑Sunter scorers, fixing scalar/vector inconsistency and improving distributed/chunked lane scoring.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Embeddings become first-class Fellegi‑Sunter scorers for `embedding` and `record_embedding`. Embeddings become first-class Fellegi‑Sunter scorers for `embedding` and `record_embedding`. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Feature | Low |
Per‑field blocking transform chains supported via `BlockingKeyConfig.field_transforms`. Per‑field blocking transform chains supported via `BlockingKeyConfig.field_transforms`. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Performance | Low |
Memory‑bounded FS scoring processes one block at a time for strategy‑generated blocks. Memory‑bounded FS scoring processes one block at a time for strategy‑generated blocks. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Medium |
Term‑frequency (`tf_adjustment`) now applies consistently on scalar FS path. Term‑frequency (`tf_adjustment`) now applies consistently on scalar FS path. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Medium |
Distributed and chunked lanes correctly score probabilistic matchkeys using a shared `EMResult`. Distributed and chunked lanes correctly score probabilistic matchkeys using a shared `EMResult`. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Columnar pipeline no longer demotes FS to the batched path. Columnar pipeline no longer demotes FS to the batched path. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
FS bucket lane auto‑splits oversized blocks instead of scoring them whole. FS bucket lane auto‑splits oversized blocks instead of scoring them whole. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Missing values are treated as unobserved evidence in FS scoring. Missing values are treated as unobserved evidence in FS scoring. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Multi‑pass EM maintains the fixed prior per pair and blocking fields. Multi‑pass EM maintains the fixed prior per pair and blocking fields. Source: llm_adapter@2026-07-16 Confidence: high |
— |
| Bugfix | Low |
Splink converter maps mixed SUBSTR blocking rules exactly. Splink converter maps mixed SUBSTR blocking rules exactly. Source: llm_adapter@2026-07-16 Confidence: high |
— |
Full changelog
Added
- Embeddings as first-class Fellegi-Sunter scorers.
embedding/
record_embeddingfields train and score on the FS path (vectorized EM
E-step + block scoring); they were unusable before (both EM training and the
scalar scorer raisedUnknown scorer). Model-backed scorers always run
vectorized —GOLDENMATCH_FS_VECTORIZED=0only affects string scorers. The
TUI engine now routes probabilistic matchkeys through the block-scorer
selector, so it gets native/vectorized FS too.
Fixed
- Term-frequency (
tf_adjustment) now applies on the scalar FS path, matching
the vectorized path — the same config no longer scores differently depending on
route (a model-backed scorer orGOLDENMATCH_FS_VECTORIZED=0forces scalar). - Distributed and chunked lanes score probabilistic matchkeys. They
previously dropped FS pairs silently, then (mid-cycle) failed loudly. Both
lanes now score FS against ONE sharedEMResult: the distributed driver
trains once before dispatch (or loadsmk.model_pathdriver-side;
GOLDENMATCH_DISTRIBUTED_FS_TRAIN_ROWSbounds the training sample), and the
chunked lane trains once on the first chunk. The loud
NotImplementedErrorremains only for the bare scoring kernel invoked with
no model source. - Memory-bounded FS scoring for strategy-generated blocks. Probabilistic
matchkeys withlsh/ann/learned/canopy/sorted_neighborhood
blocking now score throughscore_probabilistic_external_blocks(one block
resident at a time, exclude-set Arc handle built once, oversized auto-split,
native/vectorized selection) instead of the batched scorer's all-units
accumulation.GOLDENMATCH_FS_DEFAULT_BUCKET=0still selects the legacy
batched scorer and now logs a warning (documented in tuning). - The columnar opt-in no longer demotes FS to the batched path. The
columnar branch is structurally weighted-only, so probabilistic matchkeys
keep the memory-bounded bucket route underGOLDENMATCH_COLUMNAR_PIPELINE=1. - FS bucket lane auto-splits oversized blocks (default
skip_oversized=Falsepath) instead of scoring them whole, and the
vectorized scorer refuses impossible dense allocations with an actionable
error (GOLDENMATCH_FS_VEC_MAX_ELEMS). - Missing values are unobserved evidence in FS scoring (null field values
carry no likelihood contribution instead of folding into total disagreement);
persisted v1 models without a training manifest are rejected on reuse. - Multi-pass EM conditions per pair and blocking fields keep the fixed
prior (repairs a recall collapse on near-unique blocking fields). - Per-field blocking transform chains (
BlockingKeyConfig.field_transforms);
the Splink converter maps mixed SUBSTR blocking rules exactly.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About GoldenMatch
All releases →Related context
Related tools
Earlier breaking changes
- v3.1.0 `GOLDENMATCH_FRAME=polars` now requires the `[polars]` extra; raises error without it.
- vgoldencheck-v3.0.0 `inferred_type` emits neutral dtype vocabulary (str/int/uint/float/date/datetime/bool/other) instead of raw Polars dtypes.
- vgoldencheck-v3.0.0 'inferred_type' now emits a neutral dtype vocabulary instead of raw Polars dtype strings.
- vgoldencheck-v3.0.0 `scan_file`, `scan_dataframe`, and CLI `check` now run without Polars, using Arrow-native pyarrow.Table.
- v3.0.0 Result frames now return pyarrow.Table instead of Polars DataFrame.
Beta — feedback welcome: [email protected]