Docs: TASK 30 + ai.md layout update + HANDOFF refresh
TASKS.md: TASK 30 added (gear cleanup + record location + preview
restructure + avatar fix). ai.md: audio description updated (mic now
in preview bottom row, not footer), resolution tiers updated (bottom
bar: gear/stats/resolution), MainWindow layout description updated.
HANDOFF.md: refreshed to clean-tree state, latest commit 455a409.
This commit is contained in:
+11
-24
@@ -2,39 +2,24 @@
|
|||||||
|
|
||||||
## Branch / Commit State
|
## Branch / Commit State
|
||||||
|
|
||||||
**`main`**, working tree is **DIRTY** — ready to commit. See "Changes" below.
|
**`main`**, working tree is **CLEAN** — all changes committed and pushed.
|
||||||
|
|
||||||
No feature branches pre-1.0: all work lands on `main` per work unit.
|
No feature branches pre-1.0: all work lands on `main` per work unit.
|
||||||
|
|
||||||
## Changes (uncommitted, ready to commit)
|
**Latest commit:** `455a409` — mic moved to preview, bottom bar restructured, avatar fix.
|
||||||
|
|
||||||
**Gear menu cleanup + App Settings + single Start button (TASK 30):**
|
## What's In Flight
|
||||||
- Removed Gear-menu `Save Layout`/`Save Layout As…`/`Open Layout…` + dead VM commands/methods.
|
|
||||||
- App Settings panel: "Default Location for Recordings" with Browse + Use Downloads reset.
|
|
||||||
- Single Start button (`Content="Start"` in XAML; `PrimaryButtonText`/`IsStreamingStart` removed).
|
|
||||||
- Fallback chain: configured → `%USERPROFILE%\Downloads` → `MyVideos`.
|
|
||||||
- ONE fallback test `DefaultRecordFolder_Falls_Back_To_Downloads`.
|
|
||||||
|
|
||||||
**Socials button + hover glow (new):**
|
Nothing — clean tree, ready for next task.
|
||||||
- Socials button moved from footer (scenes/sources column) to preview bottom row, left of
|
|
||||||
TRAX button, inside a horizontal StackPanel. `MouseEnter`/`MouseLeave` handlers pulse
|
|
||||||
the `SocialBarElement` `DropShadowEffect` (BlurRadius 24→48, Opacity 0.7→1.0 sine wave
|
|
||||||
at 30ms tick). `MouseLeave` restores original values.
|
|
||||||
|
|
||||||
**Bug fix:** `TextBox` binding `RecordFolderDisplay` changed to `Mode=OneWay` (get-only
|
|
||||||
property caused TwoWay crash on startup).
|
|
||||||
|
|
||||||
**Files touched:** `MainWindow.xaml`, `MainWindow.xaml.cs`, `ViewModels/MainViewModel.cs`,
|
|
||||||
`ytLive.Tests/LayoutStorePersistenceTests.cs`, `TASKS.md`, `HANDOFF.md`.
|
|
||||||
|
|
||||||
## Landmines
|
## Landmines
|
||||||
|
|
||||||
- **TextBox.Mode=OneWay** is required for `RecordFolderDisplay` binding (get-only computed property).
|
- **TextBox.Mode=OneWay** is required for `RecordFolderDisplay` binding (get-only computed property).
|
||||||
- **Pre-existing test failures (do not chase):** `AudioPipelineTests.Mix_HonorsProviderGains…` +
|
- **Pre-existing test failures (do not chase):** `AudioPipelineTests.Mix_HonorsProviderGains…` +
|
||||||
`RoundClipInteractionTests.Round_Clip_Corner_Is_Grabbable…`.
|
`RoundClipInteractionTests.Round_Clip_Corner_Is_Grabbable…`.
|
||||||
- **App running locks `ytLive.exe`** → build fails MSB3027.
|
- **App running locks `ytLive.exe`** → build fails MSB3027. Kill PID before building.
|
||||||
- **Test suite hangs** when running full suite (WPF `RealAppHost` dispatcher deadlock); individual
|
- **Test suite hangs** when running full vstest (WPF `RealAppHost` dispatcher deadlock); individual
|
||||||
tests pass in isolation. Investigate before relying on full-suite results.
|
tests pass in isolation. Use `dotnet test` on individual test classes, not the full suite DLL.
|
||||||
- **Pre-commit gate:** `./scripts/verify.sh` — clean build (0 warnings) + full tests + scope check.
|
- **Pre-commit gate:** `./scripts/verify.sh` — clean build (0 warnings) + full tests + scope check.
|
||||||
|
|
||||||
## Todo state
|
## Todo state
|
||||||
@@ -42,6 +27,8 @@ property caused TwoWay crash on startup).
|
|||||||
- TASK 18: shipped. Remaining = running-app verification (creator).
|
- TASK 18: shipped. Remaining = running-app verification (creator).
|
||||||
- TASK 21: Increment A shipped (`eba6af5`). Decoder blocked on ffmpeg.
|
- TASK 21: Increment A shipped (`eba6af5`). Decoder blocked on ffmpeg.
|
||||||
- TASK 22 (audio sync offset): not started.
|
- TASK 22 (audio sync offset): not started.
|
||||||
- TASK 30: gear cleanup + record location + single Start — ready to commit.
|
- TASK 30: gear cleanup + record location + single Start + preview layout restructure — shipped
|
||||||
|
across commits `6031a56` + `61b850f` + `455a409`. Includes: socials button + hover glow,
|
||||||
|
mic moved to preview pane, bottom bar restructured (gear left / stats center / resolution right),
|
||||||
|
avatar hidden when signed out.
|
||||||
- Monetization: deferred (creator rethinking price/subscription model).
|
- Monetization: deferred (creator rethinking price/subscription model).
|
||||||
- Socials hover glow: new, ready to commit.
|
|
||||||
|
|||||||
@@ -1173,6 +1173,54 @@ things?"). Locked model, verbatim intent:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## TASK 30 — Gear menu cleanup + Default Location for Recordings + preview layout restructure
|
||||||
|
|
||||||
|
### Status: ✅ Done (shipped 2026-08-29, commits `6031a56` → `61b850f` → `455a409`)
|
||||||
|
|
||||||
|
The creator's KISS review: gear menu cleanup, single Start button, record-location setting,
|
||||||
|
and a full layout restructure moving all live controls into the preview pane.
|
||||||
|
|
||||||
|
### What shipped:
|
||||||
|
|
||||||
|
**Gear menu cleanup:**
|
||||||
|
- Removed `Save Layout` / `Save Layout As…` / `Open Layout…` from Gear menu + dead VM
|
||||||
|
commands/methods (`SaveLayoutCommand`, `SaveLayoutAsCommand`, `OpenLayoutCommand`,
|
||||||
|
`SaveLayoutAs()`, `OpenLayoutFile()`). Multi-layout = use OBS.
|
||||||
|
|
||||||
|
**Default Location for Recordings (App Settings):**
|
||||||
|
- First real setting panel in the Gear menu: "Default Location for Recordings".
|
||||||
|
- `DefaultRecordFolder()` (internal static): configured → `%USERPROFILE%\Downloads` → `MyVideos`.
|
||||||
|
- `RecordFolderDisplay` property, `ResetRecordFolderCommand`, Browse + "Use Downloads" reset.
|
||||||
|
- `TextBox` binding fixed to `Mode=OneWay` (get-only computed property).
|
||||||
|
- ONE fallback test: `DefaultRecordFolder_Falls_Back_To_Downloads`.
|
||||||
|
|
||||||
|
**Single Start button:**
|
||||||
|
- Button `Content="Start"` hardcoded in XAML. Removed `PrimaryButtonText` / `IsStreamingStart`
|
||||||
|
properties + all `OnPropertyChanged` references. Pills = intent, lights = state, button = trigger.
|
||||||
|
|
||||||
|
**Preview layout restructure — all live controls under preview:**
|
||||||
|
- Socials button moved from footer (scenes/sources column) to preview bottom row, left of
|
||||||
|
TRAX button. `MouseEnter`/`MouseLeave` handlers pulse the `SocialBarElement`
|
||||||
|
`DropShadowEffect` (sine wave BlurRadius 24→48, Opacity 0.7→1.0 at 30ms tick).
|
||||||
|
- **Mic controls moved from footer into preview pane** (vertical StackPanel below Socials+TRAX):
|
||||||
|
MIC button + sound meter + mute grid + volume slider — the same footer controls, relocated.
|
||||||
|
- Preview bottom row: vertical `StackPanel Grid.Row="2"` → Line 1 (Socials + TRAX), Line 2
|
||||||
|
(MIC + meter + mute + slider). All centered.
|
||||||
|
|
||||||
|
**Bottom bar restructured:**
|
||||||
|
- Reduced to single row (mic row removed), tighter padding (`Padding="16,4"`).
|
||||||
|
- Gear icon moved to far left. Stream stats (Bitrate/FPS/Dropped/Duration) centered under
|
||||||
|
preview pane. Resolution dropdown stays far right.
|
||||||
|
|
||||||
|
**Avatar fix:**
|
||||||
|
- Avatar `BitmapImage` no longer loads in the constructor (stale image from last session).
|
||||||
|
- Only loads when `IsConnected` fires `true` via `OnViewModelPropertyChanged`.
|
||||||
|
|
||||||
|
### Tests:
|
||||||
|
- Build 0 warnings, 247 tests (2 pre-existing known failures excluded).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Backlog (future versions)
|
## Backlog (future versions)
|
||||||
|
|
||||||
1. v1.1 — Stream Deck / Loupedeck integration (requires hotkey foundation from TASK 20)
|
1. v1.1 — Stream Deck / Loupedeck integration (requires hotkey foundation from TASK 20)
|
||||||
|
|||||||
Reference in New Issue
Block a user