Python + PostgreSQL · Raw → Bronze → Gold
.env, print config values — confirm no errors.extract(), print first 5 rows and row count, confirm _extracted_at column exists.load_raw(), query raw table, confirm row count grows on each run (history retained).transform_bronze(), query bronze table, check for nulls, duplicates, and correct types.transform_gold(), query gold table, manually verify one aggregation against bronze source.main() end-to-end, review pipeline.log, confirm all phases logged with row counts.SELECT COUNT(*) FROM raw — count must increase each run.