Problema
Un candidate con tutte le tabelle mart dichiarate mart.tables[].years (multi-year) non può completare il run: il multi-year mart non viene mai eseguito.
Riproduzione
candidates/iva-regionale (dataset-incubator, branch feat/iva-regionale-mart-standard): 3 tabelle mart, tutte con years: [2015..2024].
toolkit run -c candidates/iva-regionale/dataset.yml
Risultato: ogni anno run=ok validate=failed, e nessun output multi-year a data/mart/{dataset}/{name}.parquet.
Causa (analisi del flusso)
cmd_run.py:324: il layer mart per-anno viene eseguito solo se cfg.has_single_year_mart → con solo mart multi-anno è skippato (corretto).
- Ma la validazione mart per-anno non viene registrata:
validations["mart"] resta {} in run_context.
cmd_run.py:993-995: all_passed = all(ctx.validations.get(layer, {}).get("passed", False) ...) → validations["mart"]["passed"] = False (default) → run marcato failed.
cmd_run.py:1016: il multi-year parte solo se results["status"] == "passed" → mai raggiunto.
Loop: il multi-year (che produrrebbe le mart mancanti) è condizionato a un run "passed" che richiede proprio quelle mart.
Fix atteso
Quando has_single_year_mart è False (tutte le mart multi-year):
- la validazione mart per-anno deve risultare
passed (skippata, non fallita), oppure
run() deve considerare "passed" senza la validazione mart per-anno quando non ci sono mart per-anno da validare.
Suggerimento: in run_year, quando il layer mart è skippato perché not has_single_year_mart, registrare set_validation("mart", {"passed": True, "skipped": True, ...}) — così all_passed resta coerente e il multi-year parte.
Impatto
Blocca l'uso del pattern mart.tables[].years (documentato in config-schema.md §"output multi-anno", sostituto di cross_year). Nessun candidate lo usava prima — iva-regionale è il primo.
Riferimenti
toolkit/cli/cmd_run.py: righe 324, 993-995, 1016
toolkit/core/run_context.py: set_validation
toolkit/tests/test_mart_multi_year.py: test esistente usa tabelle miste (single + multi) — non copre il caso "solo multi-year"
- Candidate:
candidates/iva-regionale/ (branch feat/iva-regionale-mart-standard)
Problema
Un candidate con tutte le tabelle mart dichiarate
mart.tables[].years(multi-year) non può completare il run: il multi-year mart non viene mai eseguito.Riproduzione
candidates/iva-regionale(dataset-incubator, branchfeat/iva-regionale-mart-standard): 3 tabelle mart, tutte conyears: [2015..2024].Risultato: ogni anno
run=ok validate=failed, e nessun output multi-year adata/mart/{dataset}/{name}.parquet.Causa (analisi del flusso)
cmd_run.py:324: il layer mart per-anno viene eseguito solo secfg.has_single_year_mart→ con solo mart multi-anno è skippato (corretto).validations["mart"]resta{}inrun_context.cmd_run.py:993-995:all_passed = all(ctx.validations.get(layer, {}).get("passed", False) ...)→validations["mart"]["passed"]=False(default) → run marcatofailed.cmd_run.py:1016: il multi-year parte solo seresults["status"] == "passed"→ mai raggiunto.Loop: il multi-year (che produrrebbe le mart mancanti) è condizionato a un run "passed" che richiede proprio quelle mart.
Fix atteso
Quando
has_single_year_martè False (tutte le mart multi-year):passed(skippata, non fallita), oppurerun()deve considerare "passed" senza la validazione mart per-anno quando non ci sono mart per-anno da validare.Suggerimento: in
run_year, quando il layer mart è skippato perchénot has_single_year_mart, registrareset_validation("mart", {"passed": True, "skipped": True, ...})— cosìall_passedresta coerente e il multi-year parte.Impatto
Blocca l'uso del pattern
mart.tables[].years(documentato inconfig-schema.md§"output multi-anno", sostituto dicross_year). Nessun candidate lo usava prima —iva-regionaleè il primo.Riferimenti
toolkit/cli/cmd_run.py: righe 324, 993-995, 1016toolkit/core/run_context.py:set_validationtoolkit/tests/test_mart_multi_year.py: test esistente usa tabelle miste (single + multi) — non copre il caso "solo multi-year"candidates/iva-regionale/(branch feat/iva-regionale-mart-standard)