goldenmatch v3.0.0
Immutable
release. Only release title and notes can be modified.
Changed
- BREAKING: result frames are now
pyarrow.Table.DedupeResult.golden/
.dupes/.uniqueandMatchResult.matched/.unmatchedreturn
pa.Tableinstead ofpl.DataFrame(Polars-eviction W5, spec
docs/superpowers/specs/2026-07-09-goldenmatch-polars-eviction-design.md).
Migration is a one-liner:pl.from_arrow(result.golden). Inputs are
unchanged (polars/pandas/arrow all accepted).to_csvand the notebook
_repr_html_render from Arrow natively. - The arrow ingest lane runs the expression stages (row-ids, standardize,
exact matchkeys) eagerly on the Frame seam; validation rules and auto-fix
are seam-routed with probed arrow twins (RE2 regex owned contract).
Added
- Experimental GOLDENMATCH_FRAME=arrow lane: file ingest via pyarrow with a polars-parity reader corpus and a frame-backend differential harness (Polars-eviction W1).
- Fused auto-routing at the golden + match seams (controller-driven). The pipeline now auto-routes covered slow-path runs to the fused Arrow-native kernels, byte-identically, with no config change and per-surface kill-switches. Golden routing is the broad, LIVE win: at the golden seam the pipeline tries
golden_fused.run_golden_fused_arrowby default on every covered slow-path config and reaches golden output at roughly 2x lower peak RSS; it declines to the classic builder (unchanged output) when the config is uncovered, the native kernel is absent, fullClusterProvenancelineage is requested, or the run is fast-path-eligible. Surfaced onDedupeResult.golden_fused_used; kill-switchGOLDENMATCH_GOLDEN_FUSED=0. Match routing is a documented DORMANT capacity-survival scaffold, not a live default. A controller post-step (maybe_route_fused_match) can short-circuit the match stage to the fused match kernel under an estimated-peak-RSS pressure gate, but the gate is deliberately narrow (auto_split=False, no identity/adaptive/memory/llm_boost/confidence_majority/full-provenance, not across-files-only, a covered weighted matchkey, and real memory pressure). Because zero-config auto-config commitsauto_split=Trueand explicit configs bypass the controller, it effectively never fires by default. When it does fire it is a capacity mode that shedsscored_pairs, cluster-confidence, and lineage to survive; markedDedupeResult.match_fused_capacity_modeand controller-telemetryrule_name+fused_match_post_step. Kill-switchGOLDENMATCH_MATCH_FUSED=0; the wake-up path (a postflight-threshold fast-follow, or an explicit opt-in) is a follow-up. New env knobs (core/fused_routing.py,ExecutionPlan.use_fused_match):GOLDENMATCH_GOLDEN_FUSED,GOLDENMATCH_MATCH_FUSED,GOLDENMATCH_FUSED_PRESSURE_FRACTION(default 0.65), and the est-RSS calibration coefficientsGOLDENMATCH_FUSED_RSS_SCALE/_BYTES_PER_PAIR/_BYTES_PER_CELL/_BLOCK_CONCURRENCY. No new native symbols (reuses thegolden_fused/match_fusedkernels), no new MCP tools / CLI commands / A2A skills. - Fused golden-record kernel (
golden_fused) - standalone, Arrow-native. A new one-FFI-call survivorship kernel (goldenmatch.core.golden_fused.run_golden_fused_arrow, gated bygolden_fused_ready) builds golden records byte-identically to the classicbuild_golden_records_batchpath at ~2x lower peak RSS (measured viascripts/bench_golden_fused_memcap.py+ thebench-golden-fused-memcapworkflow). It covers every Rust-portable survivorship rule in a single native call: scalar strategies (majority / unanimous / first_non_null / longest / source_priority / most_recent / most_complete), quality-weight tie-breaks,field_groupscorrelated survivorship, conditionalfield_rules(predicate AST lowered to a kernel RPN IR viagolden_fused_predicate.lower_predicate/predicate_lowerable),cluster_overrides, andconfidence_majority, plus per-fieldsource_row_idprovenance. Configs that need row-level validators, Python plugins, or LLM survivorship are declined (golden_fused_readyreturns False) and fall through to the classic path unchanged. Not yet wired into the pipeline - this ships as a standalone, benched kernel (composability + peak-RSS win), so no existing user-facing behavior changes. Requiresgoldenmatch-native0.1.13 (the depended-ongolden_fusedsymbol ships in that wheel); without a republished wheel,pip install goldenmatch[native]users transparently degrade to the classic golden path (not a correctness bug - byte-identical output either way). - MCP naming aliases for cross-language parity. The Python and TypeScript MCP servers previously exposed the same operations under different names (
find_duplicates/dedupe,match_record/match,explain_match/explain_pair,profile_data/profile, plus TS'sexplain_cluster). Both servers now answer to both names via non-breaking aliases, so an agent trained against either server can call the other. The Python server gainsdedupe/match/explain_pair/profile/explain_cluster; the TypeScript server gainsfind_duplicates/match_record/explain_match/profile_data. The API-parity gate enforces the nine names staysharedinparity/goldenmatch.yaml. Aliases are excluded from thegoldensuite-mcpaggregated surface so the suite'sprofilestill resolves to goldencheck's file-profiler.