Skip to content

GoldenMatch

v1.12.0 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

Published 2mo Data Pipelines & ETL
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

data-cleaning data-engineering data-matching data-quality deduplication entity-resolution
+14 more
fellegi-sunter fuzzy-matching knowledge-graph llm master-data-management mcp-server polars pprl python record-linkage rust splink typescript zero-config

Summary

AI summary

Updates What shipped, Spec + plan, and disagreement_penalties across a mixed release.

Full changelog

Highlights

v1.12.0 ships Path Y — extending negative-evidence scoring to exact matchkeys. DQbench composite jumps from 66.99 → 91.04 (+24.05pp), the largest single-release gain in the suite's history. T3 F1 lands at 85.5% (from 53.8%), within the diagnostic's 85-90% projection. T2 F1 jumps to 97.5% (from 69.0%) as a bonus from the same mechanism.

What shipped

  • _apply_negative_evidence_to_exact_pairs in core/scorer.py: post-filter helper called from core/pipeline.py after find_exact_matches. Score formula: final = max(0, 1.0 - sum(disagreement_penalties)); emit if final >= matchkey.threshold (default 0.5 when NE set + threshold None).
  • promote_negative_evidence extended to walk all matchkey types (was weighted-only in v1.11). Selectively skips _is_exact_matchkey_field gate on the exact-matchkey iteration branch — its v1.11 rationale doesn't apply when iterating an exact matchkey for itself. Sets default threshold=0.5 on threshold-None exact matchkeys after adding NE.
  • Spec amendment documented: v1.11 spec §Non-goals explicitly excluded NE on exact matchkeys ("Path Y rejected as semantic confusion"); v1.12 reverses this on Phase 7 diagnostic evidence showing Path X (clustered-guard demote) couldn't reach T3.

Benchmarks (zero-config, no LLM)

| Dataset | v1.11.0 | v1.12.0 | Δ |
|---|---|---|---|
| DBLP-ACM | 0.9641 | 0.9641 | flat |
| Febrl3 | 0.9443 | 0.9443 | flat |
| NCVR | 0.9719 | 0.9719 | flat |
| DQbench composite | 66.99 | 91.04 | +24.05pp |
| T1 F1 | 88.9% | 89.3% | +0.4pp |
| T2 F1 | 69.0% | 97.5% | +28.5pp |
| T3 F1 | 53.8% | 85.5% | +31.7pp |

How Path Y works

T3's adversarial pattern: same email shared across distinct entities with divergent phone+address. v0 produces an exact_email matchkey that emits 1.0 for these collision pairs. Pre-v1.12, NE only applied to weighted matchkeys, so exact_email's output was uncorrectable. Path Y wires _apply_negative_evidence_to_exact_pairs as a post-filter: when phone OR address strongly disagree on a same-email pair, the cumulative penalty drops the final score below 0.5 → pair filtered. True duplicates (agreeing phone+address) preserved.

Backward compat

None. Exact matchkey without negative_evidence preserves today's binary 1.0/0.0 emit. v1.10 + v1.11 cache entries deserialize cleanly with negative_evidence=None.

Spec + plan

  • v1.12 spec: `docs/superpowers/specs/2026-05-09-autoconfig-path-y-design.md`
  • v1.12 plan: `docs/superpowers/plans/2026-05-09-autoconfig-path-y.md`
  • T3 diagnostic that motivated Path Y: `.profile_tmp/v111_t3_diagnostic.txt` (gitignored)

Full diff: https://github.com/benzsevern/goldenmatch/compare/v1.11.0...v1.12.0

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

Track GoldenMatch

Get notified when new releases ship.

Sign up free

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]