Contexte
Constats UX convergents sur la fonction centrale (aucun n'est un bug isolé — c'est le design d'ensemble) :
- 17 paramètres à plat, dont 5 de pur passe-plat vers
pointblank::interrogate() (extract_failed, get_first_n, sample_n, sample_frac, sample_limit) et 1 actif sur un seul chemin (duckdb_memory_limit).
- Franglais : argument
data_reference (EN) mais champ retour $reponse (FR, sans accent) au milieu de champs anglais ; messages 100 % anglais mais rapport par défaut en français.
- Redondances du retour :
all_passed en 3 exemplaires ($all_passed, $summary$all_passed, pointblank::all_passed($reponse)) ; $agent non interrogé (et factice sur le fast-path all-pass) sans usage utilisateur identifié.
warn_at/stop_at identiques (1e-14, écrits en littéral décimal de 14 zéros) : WARN et STOP se déclenchent toujours ensemble — le niveau WARN n'apporte rien en l'état ; et la reconstitution warn/stop du rapport suppose des seuils fractionnaires alors que pointblank interprète ≥ 1 comme un compte absolu.
- Messages laconiques :
message("key is missing") à chaque comparaison positionnelle légitime ; contraste avec les excellents warnings doublons/type_mismatch (contexte + exemples + action).
- Nom :
compare_datasets_from_yaml alors que le YAML est optionnel depuis 0.1.5 — un alias compare_datasets() refléterait l'usage réel.
ref_suffix expose un détail d'implémentation ; write_rules_template() a 19 paramètres au nommage incohérent (na_equal_default vs numeric_abs) et écrit par défaut rules.yaml dans le répertoire courant.
Proposition (à discuter)
compare_datasets(reference, candidate, key = NULL, rules = NULL,
extract = extract_opts(first_n = NULL, sample_n = NULL, ...),
engine = engine_opts(duckdb_memory_limit = "8GB", ...),
lang = getOption("datadiff.lang", "en"), ...)
# retour de classe datadiff_result : $passed, $coverage, $summary, $report (lazy), print() dédié
# compare_datasets_from_yaml() conservé en alias rétrocompatible
Critères de succès
Contexte
Constats UX convergents sur la fonction centrale (aucun n'est un bug isolé — c'est le design d'ensemble) :
pointblank::interrogate()(extract_failed,get_first_n,sample_n,sample_frac,sample_limit) et 1 actif sur un seul chemin (duckdb_memory_limit).data_reference(EN) mais champ retour$reponse(FR, sans accent) au milieu de champs anglais ; messages 100 % anglais mais rapport par défaut en français.all_passeden 3 exemplaires ($all_passed,$summary$all_passed,pointblank::all_passed($reponse)) ;$agentnon interrogé (et factice sur le fast-path all-pass) sans usage utilisateur identifié.warn_at/stop_atidentiques (1e-14, écrits en littéral décimal de 14 zéros) : WARN et STOP se déclenchent toujours ensemble — le niveau WARN n'apporte rien en l'état ; et la reconstitution warn/stop du rapport suppose des seuils fractionnaires alors que pointblank interprète ≥ 1 comme un compte absolu.message("key is missing")à chaque comparaison positionnelle légitime ; contraste avec les excellents warnings doublons/type_mismatch (contexte + exemples + action).compare_datasets_from_yamlalors que le YAML est optionnel depuis 0.1.5 — un aliascompare_datasets()refléterait l'usage réel.ref_suffixexpose un détail d'implémentation ;write_rules_template()a 19 paramètres au nommage incohérent (na_equal_defaultvsnumeric_abs) et écrit par défautrules.yamldans le répertoire courant.Proposition (à discuter)
Critères de succès
reponse→reportavec alias déprécié), objets d'options, sort de$agent, aliascompare_datasets().warn_at/stop_at: sémantique documentée, défauts distincts ou paramètre uniquefail_at.