November 12, 2026 | macOS | Python 3.14.9 Fictional practice inputs. Commands run from the extracted practice packs. $ python3 csv_delivery.py compare duplicate.csv changes-after.csv blocked --key record_id Exit 1 STOP: Duplicate key: 002 If an output folder was created, do not use it without a completed summary.json. $ python3 csv_delivery.py compare changes-before.csv changes-after.csv forward --key record_id Exit 0 { "status": "PASS", "operation": "compare", "key_column": "record_id", "before_sha256": "911f58ca80b93f197a2b5450cfc4c60ea88f8d00cb6ca92e606a3d25ca191f13", "after_sha256": "971f77997cd8000801c7e459f12e1e62da3bdb4f1b748d74695d78c716182d91", "before_records": 7, "after_records": 7, "counts": { "added": 1, "removed": 1, "changed": 4, "unchanged": 2 }, "changed_fields": 5, "comparison": "exact decoded strings; case and whitespace significant" } $ python3 csv_delivery.py compare changes-after.csv changes-before.csv reverse --key record_id Exit 0 { "status": "PASS", "operation": "compare", "key_column": "record_id", "before_sha256": "971f77997cd8000801c7e459f12e1e62da3bdb4f1b748d74695d78c716182d91", "after_sha256": "911f58ca80b93f197a2b5450cfc4c60ea88f8d00cb6ca92e606a3d25ca191f13", "before_records": 7, "after_records": 7, "counts": { "added": 1, "removed": 1, "changed": 4, "unchanged": 2 }, "changed_fields": 5, "comparison": "exact decoded strings; case and whitespace significant" } forward • rows for 002: [['002', 'status', 'open', 'paid'], ['002', 'amount', '20.00', '25.00']] reverse • rows for 002: [['002', 'amount', '25.00', '20.00'], ['002', 'status', 'paid', 'open']]