From a5a10fb0b0fab456da9874d3dc7371ffe6631d82 Mon Sep 17 00:00:00 2001 From: gramps Date: Thu, 12 Nov 2026 15:38:35 -0800 Subject: [PATCH] =?UTF-8?q?feat(topbar):=20the=20output=20stage=20?= =?UTF-8?q?=E2=80=94=20Output=20[YouTube]=20[Local=20MP4]=20One=20output?= =?UTF-8?q?=20at=20a=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unit B (creator ruling 2026-11-12). Pressing Record / Go Live now changes the bar: the REC/ON-AIR pill pair becomes two labelled switches with glyphs (the YouTube mark, the record dot), under an "Output" label and beside "One output at a time". Build world shows nothing but its own segment. Two things this exposed that were not cosmetic: - **Local MP4 was not actually the default.** Both pills started unarmed, so the stage opened with no output selected; the old screen got away with it because the primary button inferred "record" from "nothing armed". RecordPillOn now starts true, which is what "pos = ON (default)" means in code. - **The stage gates the whole idle cluster, not just the switch.** Gating only the switch left the start button visible in the Build world — a Start with no output chosen. ShowOutputStage (output world, idle, not recording) wraps the cluster, so a running session hides the stage too: its output cannot change. Exclusivity stays in the view model (arming one drops the other); the XAML merely reflects it. TopBarWorldTests pins the stage's visibility and the radio pair starting at Local MP4. 680 pass, 0 warnings. Next: unit C (output-dependent primary action, End labels). Scope justification: Assets/starting-background.jpg is outside this unit — the creator's replacement art, still awaiting their visual check. --- Controls/TopBar.xaml | 36 ++++++++++++++++++++------- ViewModels/MainViewModel.Streaming.cs | 4 ++- ViewModels/MainViewModel.TopBar.cs | 5 ++++ docs/ai/ui-surface.md | 9 +++++-- ytLive.Tests/TopBarWorldTests.cs | 34 +++++++++++++++++++++++++ ytLive.Tests/UiShellTests.cs | 8 ++++++ 6 files changed, 84 insertions(+), 12 deletions(-) diff --git a/Controls/TopBar.xaml b/Controls/TopBar.xaml index a99e39d..5635797 100644 --- a/Controls/TopBar.xaml +++ b/Controls/TopBar.xaml @@ -109,24 +109,42 @@ + + Visibility="{Binding ShowOutputStage, Converter={StaticResource BoolToVis}}"> + - - + IsChecked="{Binding OnAirPillOn}"> + + + + - + IsChecked="{Binding RecordPillOn}"> + + + + +