feat(top bar): EDIT decides live vs test on the primary button — the TEST button is gone
Creator ruling (2026-10-30): - EDIT off + ON-AIR armed → the primary button reads "Go Live" and runs the livestream. - EDIT on + ON-AIR armed → the same button reads "Test Stream" and runs the test broadcast. - REC armed (or nothing armed) → "Start Recording", whatever EDIT says; there is no test recording, and an unarmed start records locally rather than doing nothing. So the fifth button was redundant: `ShowTestButton` no longer feeds any control. The decision is a pure function (`Models/SessionStartDecision`) so the whole matrix is testable without a window; `PrimaryStartCommand` follows the same kind, so label and action cannot disagree. Guard: SessionStartDecisionTests pins the four cases, including the no-dead-ends fallback that my first version got wrong (unarmed returned Live instead of Record — the test caught it). Note for the v1 gate: the "hide TEST at v1" item is now satisfied by construction — the test path is a mode of the primary button, not a separate control.
This commit is contained in:
@@ -85,8 +85,12 @@ public partial class MainViewModel
|
||||
get => _editingActive;
|
||||
set
|
||||
{
|
||||
if (SetProperty(ref _editingActive, value))
|
||||
OnPropertyChanged(nameof(IsEditMode));
|
||||
if (!SetProperty(ref _editingActive, value)) return;
|
||||
OnPropertyChanged(nameof(IsEditMode));
|
||||
// EDIT decides whether the ON-AIR start is live or a test (creator ruling 2026-10-30).
|
||||
OnPropertyChanged(nameof(PrimaryStartKind));
|
||||
OnPropertyChanged(nameof(PrimaryStartButtonLabel));
|
||||
OnPropertyChanged(nameof(PrimaryStartCommand));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user