feat(validation): sensible defaults — min_rows=1, NOT NULL inference, column type sanity, PAQA score, warn_only mode#399
Conversation
… column type sanity, warn_only mode
Integra pa_csv_quality.assess_quality() nel validation flow CLEAN: - Dopo validate_promotion(), legge il primo CSV raw - Campione a 15MB (stessa soglia CI sample-bytes) - Usa encoding/delim/skip dal raw_profile come hint - Aggiunge paqa_score, paqa_verdict, paqa_semantic, paqa_sampled alle stats del run record - Critical fail produce warning nel validation report - Eccezioni silenziose (skip) — non blocca mai la pipeline Test: 1107 pass, 0 fallimenti
Sample mode tronca i dati (sample-bytes per raw, sample-rows per clean). Il calo righe raw->clean e' un falso positivo sistematico. Disabilitiamo max_row_drop_pct, lasciamo warn_removed_columns attivo.
Fix applicati (commit fa05abe)1. NOT NULL inference spostata prima di L'inferenza ora fa una pre-DESCRIBE del parquet clean per ottenere le colonne, poi aggiorna 2. Usa Test: 1107 pass, CI riattivata. |
… (top 25) per NOT NULL inference
Fix applicato (commit d7d4ae8)Critical: NOT NULL inference basata su
Profilo raw: |
…ente in null_counts con pct=0) + PAQA da clean metadata
Fix applicati (commit 08356c2)Critical: NOT NULL inference ora è positivaPrima: Ora: inferisce NOT NULL solo se:
Se Medium: PAQA score ora usa il file CSV correttoPrima: Ora: legge il file CSV effettivamente usato da clean dal |
Sintesi
Validazione automatica per tutti i dataset senza necessità di configurazione esplicita. Tre cambiamenti complementari:
Contesto collegato
Basato sulla gap analysis
_local/tasks/2026-06-13-pipeline-quality-certificate.md: i gap 2 (type check), 5 (PAQA score) e il problema dei falsi positivi nel transition check.Cosa cambia
Sensible defaults
min_rows=1validation.modestrictwarn_onlyper migrazione gradualePAQA score nei run record
paqa_score(0-100, qualità strutturale CSV)paqa_verdict(buona/accettabile/scarsa)paqa_semantic(0-100, euristico O+L)Fix
compare_layer_profiles()ora normalizza spazi/trattini/underscore nei nomi colonna prima del confronto. Risolve falsi positivicolumns removedper rinomine tipo'Tipo ufficio' → 'tipo_ufficio'.Impatto su contratti pubblici
dataset.yml— nuovo campo opzionalevalidation.mode: strict | warn_onlyNessun altro contratto pubblico modificato.
Verifica
pytest tests/ -x -q --ignore=tests/test_smoke_e2e_flow.py --ignore=tests/test_smoke_scout.py # 1107 passed, 13 deselectedpytest -m corepassaruff check .passamypy toolkit/passa (o motiva le eccezioni)Checklist PR
Note per chi revisiona
missingness_topdal raw profile (colonne con 0% null). Funziona sia per CSV che per Excel.--smoke), il transition row drop check è disabilitato perché il campione non è rappresentativo.