The recurring job

A catalog operator receives a supplier CSV every month. Rows and columns may move, volatile notes change, and identifiers contain leading zeros. The operator needs to isolate material record changes, normalize the accepted delivery and retain evidence of what ran.

Compare by identity

Match records by the exact composite key sku + warehouse, independent of row order.

Ignore known noise

Exclude updated_at and import_note from material field changes.

Run explicit cleanup

Rename the status column, lowercase exact text, map pending to ready, and remove the delivery note.

Stop on a failed assertion

Require four output records before writing the cleaned file.

Verify independently

Check the committed comparison and run reports against their source artifacts.

The checked result

These are observations from the committed CLI and fixtures, enforced by npm run check:marketing-demo. They describe this small example only.

Comparison2 changed · 1 added · 1 removed · 1 unchanged
Recipe4 records read and written
Transformations5 cell applications · 1 rename · 1 removal
VerificationBoth evidence reports pass

Download the complete proof bundle

Inputsvendor-august.csv · vendor-september.csvFictional source deliveries
Recipevendor-cleanup.csvproof-recipe.jsonOrdered transformations and assertion
Comparison evidencevendor-change.csvproof-report.jsonAggregate, no-cell-values report
Run resultvendor-september-clean.csv · run reportClean output and privacy-safe evidence

The source and output CSVs contain only the published fictional fixture values. The evidence reports deliberately contain aggregate counts and hashes rather than source cell values.

Reproduce before repeating the claim

npm run check:marketing-demo

The repository check rebuilds the CLI, compares the deliveries, verifies both reports against their artifacts, checks the expected outcome, confirms that leading-zero SKUs remain present, and rejects selected source cell values if they leak into either report.

See how the full Mac workflow is positioned →