Running generate.py standalone previously rewrote _ciphers.py with formatting that differed from the committed (ruff-formatted) style, creating spurious diffs. release.py already ran ruff after generation; now generate.py does too, so both entry points leave the tree in the same state.