initial commit with actual code

No `traps`? If we're writing files out then we should trap exit to cleanup the half written stuff.