Account zone is world-independent: avatar stays in Record world

Creator on the live build: 'why do you make the youtube user icon go away?'
The TASK 42 one-surface bar had scoped the account zone to Stream only
('Record world has no YouTube identity at all'), so arming REC dropped the
avatar and the bar height bounced with it ('really fucking annoying').

Fix: ShowSignInButton / ShowAvatarButton are now plain !IsConnected /
IsConnected — app-level identity, present in both worlds, so the right
column never pops in/out and the bar height stays pinned. Test remains a
child of Stream (still stream-armed AND signed-in).

TopBarModeTests updated to the new contract: signed-out Record world shows
Sign In; flipping back to REC keeps the avatar. PillRadioTests untouched
(it only exercises the ON-AIR face). Docs corrected in-place (ai.md state
model, TASK 42 scope). Gate: clean build 0-warnings, 316/316, scope passed.
This commit is contained in:
2026-09-23 16:53:25 -07:00
parent cb750660c3
commit 3a4e17c735
5 changed files with 53 additions and 42 deletions
+10 -9
View File
@@ -195,21 +195,22 @@ public partial class MainViewModel : ViewModelBase
public bool RunningVisible => IsLive || IsRecording;
/// <summary>Record world: the switch sits on REC and Go says "Start Recording".
/// No account zone, no Test — YouTube doesn't exist here.</summary>
/// No Test — YouTube's stream actions don't exist here. The account zone IS
/// here: it's app-level identity, not a stream-world widget (creator 2026-09-23).</summary>
public bool ShowRecordAction => ShowIdleWorld && !OnAirPillOn;
/// <summary>Stream world: the switch sits on ON-AIR; Go says "Go Live" and Test
/// appears. The account zone belongs to this world because login is a step in
/// THIS sequence.</summary>
/// appears.</summary>
public bool ShowStreamActions => ShowIdleWorld && OnAirPillOn;
/// <summary>Sign In appears on the right only inside the Stream world, signed-out
/// — the pending step of the stream sequence, made visible exactly when it's next.</summary>
public bool ShowSignInButton => ShowStreamActions && !IsConnected;
/// <summary>Account zone is WORLD-INDEPENDENT (creator 2026-09-23): Sign In /
/// avatar stay put in Record and Stream worlds alike, so the right column never
/// pops in and out — which pins the bar height (no more bounce between worlds).</summary>
public bool ShowSignInButton => !IsConnected;
/// <summary>The avatar confirms WHICH account is about to stream — only in the
/// Stream world, signed-in. Right-click for Change Account / Logout.</summary>
public bool ShowAvatarButton => ShowStreamActions && IsConnected;
/// <summary>The avatar — right-click Change Account / Logout. Always visible when
/// signed in, Record or Stream.</summary>
public bool ShowAvatarButton => IsConnected;
/// <summary>The reality word: TEST while a test broadcast runs, LIVE while on the
/// air, REC during a local-record session.</summary>