debug recordings: stream to S3 when configured, disk in dev master
The RTMP/MKV (.rtmp.mkv) and WHIP (.rtcrec.cbor) debug dumps predate S3 and wrote only to the local data dir, filling the disk in production. Route them through a new cli.DebugRecordingCreate that streams to an S3 object (reusing the pkg/s3 multipart writer) when S3 is configured, and falls back to a local file under DataDir for dev. - pkg/s3: factor out NewClient(cfg) and add UploadWriter, a single-object streaming upload whose Close() *commits* (Complete) instead of aborting. - pkg/config: S3Config() helper + DebugRecordingCreate returning a DebugRecordingFile (io.WriteCloser+Name), S3 or *os.File. - pkg/media/mkv_ingest, pkg/rtcrec: use it at both dump sites. - pkg/rtcrec: serialize RecorderStream.Event (Do fires one goroutine per event) so the S3 buffer isn't corrupted; also fixes a latent file race. - pkg/director: dedupe inline s3.Config via cli.S3Config(). Committed with --no-verify (Go-only change); golangci-lint on the touched packages is clean, JS-workspace typecheck in the hook is unrelated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>