fix(stream): health poll crashed on every start — parse the real healthStatus object shape
startup.log 2026-09-22 (via the user's run of the new build): every session
start logged 'Stream health poll failed: The requested operation requires an
element of type String, but the target element has type Object'.
Root cause: GetStreamHealthAsync did status.healthStatus.GetString(), but the
real API nests it as status.healthStatus = {status, lastUpdateTimeSeconds,
configurationIssues[]} — an OBJECT, per the liveStreams reference
https://developers.google.com/youtube/v3/live/docs/liveStreams (checked the
docs before fixing, per derivative-work rule). Our flat-string fixture was the
wrong assumption since TASK 9; the report-by-exception health banner had been
silently dead.
Fix: read the nested healthStatus.status + nested configurationIssues[], tolerating
the legacy flat-string shape so nothing else breaks. Tests flipped to the real
object shape (the Good Dog for this change). Full suite 315/315, build 0 warnings.
Also recorded in MyMistakes.md (API-shape recipe) and ai.md/Services index. End-of-session
transition(complete) 403 invalidTransition (enableAutoStop fallback) observed on all three
2026-09-22 stops — separate racy-design issue, carried, not in this change.
This commit is contained in:
@@ -15,6 +15,21 @@
|
||||
|
||||
## 🔬 Recipes registry
|
||||
|
||||
### YOUTUBE liveStreams LIST: healthStatus IS AN OBJECT, NOT A STRING (RECIPE)
|
||||
|
||||
YouTube Data API v3 `liveStreams.list` nests health under
|
||||
`status.healthStatus = {status, lastUpdateTimeSeconds, configurationIssues[]}` —
|
||||
the `healthStatus` element is an **OBJECT**, and `configurationIssues[]` lives
|
||||
INSIDE it, not directly under `status`. Reading `healthStatus.GetString()` throws
|
||||
System.Text.Json's `The requested operation requires an element of type 'String',
|
||||
but the target element has type 'Object'` — the exact log line seen 2026-09-22 on
|
||||
every live health poll (two test sessions). The parse must read
|
||||
`healthStatus["status"]` (and nested `healthStatus["configurationIssues"]`).
|
||||
Something like REST-shape drift is a good reason to grep the API reference
|
||||
(https://developers.google.com/youtube/v3/live/docs/liveStreams) before writing
|
||||
parsers against a "remembered" shape — our own flat-string fixture was the wrong
|
||||
assumption the whole time.
|
||||
|
||||
### WINRT RESOURCE-ALLOCATION CALLS: WRAP PER-CALL, DEGRADE TO NEXT OPTION (RECIPE)
|
||||
|
||||
Creator callout (2026-09-15): WinRT/COM calls that allocate or start a resource — `InitializeAsync`,
|
||||
|
||||
Reference in New Issue
Block a user