Commit 2d21fac
authored
Fix live broadcast privacy promotion (#13)
## Summary
- align privacy-only `liveBroadcasts.update` requests with `part=status`
- preserve made-for-kids status and exact privacy readback verification
- add regression coverage and update the latest release notes
## Root Cause
The helper requested `part=status` but also sent `snippet` and
`contentDetails` in the resource body. YouTube rejected those extra
resource parts with HTTP 400 `unexpectedPart` after the broadcast had
already reached healthy `live` state. The supervisor therefore entered
cooldown without promoting the existing event from unlisted to public.
## Impact
Healthy managed broadcasts can now be promoted to the configured final
privacy without creating, completing, or replacing the event. The
mutation remains serialized and is still verified through a fresh remote
readback before stable state is recorded.
## Validation
- focused regression observed failing before the implementation and
passing afterward
- `pytest -q`: 198 passed
- `ruff check .`: passed
- production scripts compile with `python3 -m py_compile`
- `git diff --check`: passed
- Gemini 3.1 Pro high-effort code review: no findings
## Rollback
Restore the prior API helper artifact and restart the encoder service. A
successful visibility change is intentionally not reverted because
public visibility is the configured target; no broadcast identity
changes are introduced by this patch.
## Public-Safety Checklist
- [x] No OAuth client files, refresh tokens, stream keys, camera
credentials, broadcast IDs, or generated runtime state were committed.
- [x] Documentation was updated for the user-facing behavior change.
- [x] Local tests and independent review passed.1 parent 2fdc14b commit 2d21fac
4 files changed
Lines changed: 12 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
5 | 11 | | |
6 | 12 | | |
7 | 13 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
517 | 517 | | |
518 | 518 | | |
519 | 519 | | |
520 | | - | |
| 520 | + | |
521 | 521 | | |
522 | | - | |
523 | | - | |
| 522 | + | |
| 523 | + | |
524 | 524 | | |
525 | 525 | | |
526 | 526 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
921 | 921 | | |
922 | 922 | | |
923 | 923 | | |
924 | | - | |
925 | | - | |
926 | | - | |
927 | 924 | | |
928 | | - | |
929 | | - | |
930 | | - | |
931 | 925 | | |
932 | 926 | | |
933 | | - | |
934 | | - | |
935 | | - | |
936 | | - | |
937 | | - | |
938 | | - | |
939 | | - | |
940 | 927 | | |
941 | 928 | | |
942 | 929 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
741 | 741 | | |
742 | 742 | | |
743 | 743 | | |
744 | | - | |
| 744 | + | |
745 | 745 | | |
746 | 746 | | |
| 747 | + | |
| 748 | + | |
747 | 749 | | |
748 | 750 | | |
749 | 751 | | |
| |||
768 | 770 | | |
769 | 771 | | |
770 | 772 | | |
771 | | - | |
772 | | - | |
773 | 773 | | |
774 | 774 | | |
775 | 775 | | |
| |||
0 commit comments