Cutover
A fail-closed toolkit for moving a legacy export into a new system: validate against reviewed rules, map columns, reconcile source against target field by field, upload to S3 with hash verification, and sign off with a runbook. It repairs nothing and blocks the handoff on any failure.
34 automated tests · two worked examples (a property-management tenant export, a legacy parts list into a cloud table) · independent code review · byte-for-byte field comparison and SHA-256 checksums
PS> python validate.py tenants_appfolio_200.csv --rules rules/tenants.yaml --out run-01 Exit code: 1 row,rule,why 17,R001,unit is required; it is blank. 42,D001,move_in_date must be an exact YYYY-MM-DD date. 88,E001,"status must be exactly active, notice, or vacant." 131,U001,Duplicate unit and name; also in CSV record(s): 132. … 12 rejections. No clean.csv written. No checksum. Human review required. PS> python reconcile.py run-02/clean.csv run-02/target.csv --key unit --out run-02 Verdict: PASS (14 checks, 0 failed)