No feature branches pre-1.0: all work on main
This commit is contained in:
@@ -7,16 +7,18 @@ memory as a linked map of markdown files — read it before doing anything.
|
|||||||
|
|
||||||
BEFORE any planning or coding, follow this rule:
|
BEFORE any planning or coding, follow this rule:
|
||||||
|
|
||||||
> ONE integration test per branch, ONE test per PR.
|
> ONE integration test per change.
|
||||||
|
|
||||||
When the user asks for changes that would involve multiple integration tests:
|
When the user asks for changes that would involve multiple integration tests:
|
||||||
1. Identify the ONE specific use case/test they want to work on
|
1. Identify the ONE specific use case/test they want to work on
|
||||||
2. Do NOT create branches or PRs for multiple tests
|
2. Focus ONLY on the single use case until it's complete and tests pass
|
||||||
3. Focus ONLY on the single use case until it's complete and tests pass
|
|
||||||
|
|
||||||
> *A good dog learns one trick perfectly before learning the next.*
|
> *A good dog learns one trick perfectly before learning the next.*
|
||||||
>
|
|
||||||
> PRs that address multiple integration tests will be REJECTED.
|
**No feature branches pre-1.0 (decided 2026-08-24):** solo dev, pre-1.0 — all
|
||||||
|
work lands directly on `main`, committed and pushed per work unit. No
|
||||||
|
`taskNN-*` branches, no PRs. The scope discipline above is about test focus,
|
||||||
|
not git mechanics.
|
||||||
|
|
||||||
MUST read the architecture guide before planning or modifying the codebase:
|
MUST read the architecture guide before planning or modifying the codebase:
|
||||||
[`ai.md`](ai.md) (+ [`schema.md`](schema.md) for the memory-map conventions).
|
[`ai.md`](ai.md) (+ [`schema.md`](schema.md) for the memory-map conventions).
|
||||||
|
|||||||
+9
-17
@@ -1,21 +1,14 @@
|
|||||||
# HANDOFF — Session State
|
# HANDOFF — Session State
|
||||||
|
|
||||||
## Branch
|
## Branch
|
||||||
`task26-webcam-menu-gate` @ `ef710c5` — TASK 26 committed (not pushed). Working tree now carries **TASK 27, NOT yet committed** (commit on your word). Parent chain: `task25-backgrounds` @ `7dd140a` (pushed), still unmerged to main.
|
**`main`** @ `708b336` — committed and pushed, working tree clean. **No feature branches pre-1.0
|
||||||
|
(decided 2026-08-24): all work lands on `main` per work unit; every `taskNN-*` branch deleted**
|
||||||
|
(TASK 24/25/26+27 fast-forwarded into main; stale `social-bar`/`webcam-validation` removed too).
|
||||||
|
|
||||||
## Shipped: TASK 27 — YouTube Chat layer gate + legacy label heal
|
## Shipped (this session, now all on main)
|
||||||
|
- TASK 26 — webcam (+) menu gates on the app-wide identity (`CanAddWebcam` = staged != null && `_webcam == null`; XAML binding + tooltip; test `WebcamMenuGateTests`).
|
||||||
Creator follow-up to TASK 26: "do the same thing with the YouTube chat layer" + make the Layers-row label match the (+) picklist.
|
- TASK 27 — YouTube Chat layer one-per-layout gate (`CanAddYouTubeChat`, AddSource refuses a second) + legacy label heal ("Chat" → "YouTube Chat" on LoadLayout; creator renames untouched; test `ChatLayerGateTests`). Creator's ask: "do the same thing with the YouTube chat layer" + make the Layers row match the (+) picklist.
|
||||||
|
- Suite: 225 total, 224 pass — only failure is the known pre-existing `AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback`. Build 0 warnings. Docs (ai.md/TASKS rows 27-28/HANDOFF) shipped in the same commits.
|
||||||
1. **Gate:** `CanAddYouTubeChat` = `StagedScene != null && !Scenes.Any(s => s.Elements.OfType<Source>().Any(e => e.Type == SourceType.ChatBox))` — one chat layer per layout; the (+) item greys out while any scene carries one. Raised in the StagedScene setter + `OnElementsChanged`; `AddSource` refuses a second as defense in depth. XAML `IsEnabled` + tooltip "One chat layer at a time — it's already in your stream".
|
|
||||||
2. **Label heal:** layers added by commit `65641d8` were named "Chat"; LoadLayout heals exactly that un-renamed default to "YouTube Chat" so the Layers row matches the picklist. Creator renames untouched; idempotent.
|
|
||||||
3. **Test (Good Dog Rule — ONE):** `ChatLayerGateTests.LegacyChatName_Heals_And_CanAddYouTubeChat_Gates_On_The_Existing_Layer` — real window + temp DB with a legacy "Chat" ChatBox row in Starting: healed on load, persisted on save, greyed cross-scene + in-scene, re-enabled after `RemoveSourceCommand`.
|
|
||||||
4. **Suite: 225 total, 224 pass** — only failure is the known pre-existing `AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback`. Build 0 warnings.
|
|
||||||
5. **Docs same commit:** ai.md (chat rule + heal next to the webcam gate), TASKS.md TASK 3 row 28, this file.
|
|
||||||
|
|
||||||
## Shipped: TASK 26 — webcam (+) menu gates on the app-wide identity
|
|
||||||
|
|
||||||
`CanAddWebcamToStagedScene` → **`CanAddWebcam`** = `StagedScene != null && _webcam == null` (`MainViewModel.cs:308`), raised at StagedScene setter / `ReacquireWebcam` / `OnElementsChanged` / `_webcam` create / last-config removal; XAML binding renamed, tooltip verbatim. ONE integration test `WebcamMenuGateTests.CanAddWebcam_Gates_On_The_AppWide_Webcam_Identity`. Committed `ef710c5` with ai.md/TASKS row 27/HANDOFF docs.
|
|
||||||
|
|
||||||
## ⚠️ Landmines
|
## ⚠️ Landmines
|
||||||
|
|
||||||
@@ -28,9 +21,8 @@ Creator follow-up to TASK 26: "do the same thing with the YouTube chat layer" +
|
|||||||
- **Dead code flagged, not touched:** `ShowWebcamCommand` / `CanShowWebcamInStagedScene` are wired in the VM but bound nowhere — audit item, separate branch if wanted.
|
- **Dead code flagged, not touched:** `ShowWebcamCommand` / `CanShowWebcamInStagedScene` are wired in the VM but bound nowhere — audit item, separate branch if wanted.
|
||||||
|
|
||||||
## Next steps
|
## Next steps
|
||||||
1. Commit TASK 27 (code + docs, one commit), push both branches.
|
1. Creator visual pass on Windows: add YouTube Chat to any scene → (+) item greys everywhere; legacy "Chat"-named row (if present) shows as "YouTube Chat"; remove → re-enables. Same for the webcam row.
|
||||||
2. Creator visual pass on Windows: add YouTube Chat to any scene → (+) item greys everywhere; legacy "Chat"-named row (if present) shows as "YouTube Chat"; remove → re-enables.
|
2. Relaunch app once so the real `%APPDATA%` DB self-heals (backgrounds + chat label).
|
||||||
3. Merge `task25-backgrounds` + `task26-webcam-menu-gate` + this branch to main per Good Dog Rule (one integration test each ✓); relaunch app once so the real `%APPDATA%` DB self-heals (backgrounds + chat label).
|
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -84,7 +84,8 @@ WSL can't run net8.0-windows tests:
|
|||||||
dotnet.exe vstest "C:\...\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll"
|
dotnet.exe vstest "C:\...\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll"
|
||||||
```
|
```
|
||||||
|
|
||||||
Good Dog Rule: ONE integration test per branch, ONE test per PR. Current: TokenStore DPAPI
|
Good Dog Rule: ONE integration test per change (no feature branches pre-1.0 — work lands on
|
||||||
|
`main`, see AGENTS.md). Current: TokenStore DPAPI
|
||||||
roundtrip/corrupt/missing/clear, OAuth exchange/refresh/ClearSession, CameraManager refcount +
|
roundtrip/corrupt/missing/clear, OAuth exchange/refresh/ClearSession, CameraManager refcount +
|
||||||
frame pump + failure handling (fakes for the WinRT seams), real-`MainWindow` round-clip
|
frame pump + failure handling (fakes for the WinRT seams), real-`MainWindow` round-clip
|
||||||
interaction test, LayoutStore delete roundtrip, LayoutStore pre-round-rect-dims roundtrip,
|
interaction test, LayoutStore delete roundtrip, LayoutStore pre-round-rect-dims roundtrip,
|
||||||
|
|||||||
Reference in New Issue
Block a user