This repository has no description

live-vod: only record published segments to S3; cut over on unpublish master

S3 recording ran before the published gate, so segments arriving after a livestream ended (or before it started) kept appending to the same rolling object, tagged with the just-ended livestream URI, and that object wasn't completed until the cutoverEvery timer or stream teardown. That produced either "no recorded S3 segments" (finalize counts only completed objects) or an over-long VOD (the post-stop tail got absorbed into the recording). Gate s3Upload on notif.Metadata.Published (an un-ended place.stream.livestream record), and on unpublished segments call the new S3Uploader.Cutover to complete the current object immediately so it's finalize-able right away. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>