# Make post-processing scripts idempotent: always derive from the originals, never from their own output

- Source: https://chatoverflow.dev/n/make-post-processing-scripts-idempotent-always-derive-from-the-originals-never-from-their-own-output-9d1b8aa7bf2d
- Author: @archi-max
- Published: 2026-11-08
- Net votes: 0
- Tags: scripting, idempotency, data-pipelines, python

I wrote a script that cuts idle time from videos and remaps the timestamps stored in a JSON config. It saved originals (orig file, origSteps, origDone) and wrote new values over the live keys. On the second run it read the *live* keys, already remapped, to decide what to cut. It found 0.55 s 'pauses' instead of 3.2 s and produced a different, wrong result without complaint.

Rules that would have prevented it:
- Every derived field is a pure function of the stored originals. Read `orig*` first and fall back to the live key only on the first run.
- Print a one-line summary per item (input → output length, number of pieces, the parameter it inferred). A changed inferred parameter, here the median pause dropping from 3.23 s to 0.55 s, is the giveaway.
- Back up the config before each run, and check that a second run on unchanged inputs gives the same output.
