Changes in version 0.8.0 (2026-03-31) Multi-Backend Join Support - Join wrappers (left_join_spy(), join_strict(), etc.) now auto-detect input class and dispatch to the native join engine: tibble inputs use dplyr, data.table inputs use data.table, plain data.frames use base R merge() - New backend parameter for explicit override ("base", "dplyr", "data.table") - Class preserved through the full diagnose-repair-join cycle - Graceful fallback to base R with a warning if the detected backend package is not installed Documentation Overhaul - README reframed around string-level key diagnostics (whitespace, case, encoding, typos) as the primary value proposition - Three new vignettes: "Why Your Keys Don't Match" (real-world scenarios), "Joins in Production" (pipelines, logging, guards), "Working with Backends" (tibble/data.table/base R) - Existing vignettes (quickstart, common-issues) expanded from 850 to 4,500+ prose words Testing - 46 new backend tests covering auto-detection, explicit override, named by vectors, class preservation, and all three backends Changes in version 0.7.2 Testing & Quality - Improved test coverage from 65% to 94% - Added comprehensive tests for all exported and internal functions - Added .covrignore to exclude untestable Shiny addin from coverage calculation Changes in version 0.7.1 API Simplification - Removed plot_venn(): Use plot(report, file = "...") instead - Removed plot_summary(): Use summary(report, format = "markdown") instead - Enhanced plot(): Now accepts file, width, height, colors parameters - Enhanced summary(): Now accepts format parameter ("data.frame", "text", "markdown") CRAN Preparation - Added cph role and ORCID to DESCRIPTION - Added Language: en-US field - Quoted proper nouns in documentation Changes in version 0.7.0 Integration & Workflow - RStudio addin: addin_join_inspector() opens an interactive Shiny gadget for exploring join diagnostics - Logging & audit: log_report() writes reports to file (text/JSON/RDS format) - Automatic logging: set_log_file() / get_log_file() for session-wide logging configuration - Deferred access: last_report() retrieves diagnostics after silent joins - Silent mode: .quiet = TRUE parameter for all *_join_spy() wrappers Changes in version 0.6.0 Advanced Join Patterns - check_cartesian(): Detect and warn about cross-join / Cartesian product explosions - detect_cardinality(): Determine actual key relationship (1:1, 1:n, n:1, n:m) - analyze_join_chain(): Analyze cascading joins in multi-table workflows Changes in version 0.5.0 Visualization - plot_venn(): Venn diagram of key overlap with PNG/SVG/PDF export - plot_summary(): Summary tables in text, markdown, or data.frame format - S3 integration: plot() method for JoinReport objects Changes in version 0.4.0 Performance & Scale - Sampling mode: join_spy(x, y, by, sample = 10000) for large datasets - Memory estimation: Predict join result size before execution - Reproducible sampling: Optional seed parameter for consistent results Changes in version 0.3.0 Auto-Repair - join_repair(): Automatically fix common key issues - Trim leading/trailing whitespace - Standardize case (to lower/upper) - Remove invisible characters - Convert empty strings to NA - suggest_repairs(): Generate R code snippets to fix detected issues - Dry-run mode: Preview changes without modifying data Changes in version 0.2.0 Enhanced Detection Type & Format Issues - Type coercion warnings (character to factor, numeric-as-string to numeric) - Factor level mismatches between tables - Empty string vs NA distinction - Numeric precision warnings for floating-point keys Near-Match Detection - Fuzzy match candidates (Levenshtein distance ≤ 2) - Suggested matches for unmatched keys - Configurable similarity threshold Multi-Column Join Analysis - Per-column breakdown for composite keys - Problem column identification (lowest match rate) Changes in version 0.1.0 Initial release. Core Functions - join_spy() - Comprehensive pre-join diagnostic report - key_check() - Quick key quality assessment - key_duplicates() - Find and locate duplicate keys - join_explain() - Explain row count changes post-join - join_diff() - Before/after state comparison - join_strict() - Join with cardinality enforcement - left_join_spy(), right_join_spy(), inner_join_spy(), full_join_spy() - Join wrappers with diagnostics Issue Detection - Duplicate key detection with row locations - Whitespace detection (leading/trailing spaces) - Case mismatch detection - Encoding issue detection (UTF-8 vs Latin-1, invisible Unicode) - NA key detection - Cardinality analysis (1:1, 1:n, n:1, n:m) S3 Methods - print(), summary(), plot() methods for JoinReport objects Documentation - Getting started vignette - Common issues troubleshooting guide