Skip to content

Commit 922acb2

Browse files
committed
Release 5.8.2 beta 7 diagnostics fallback
1 parent b1dc951 commit 922acb2

21 files changed

Lines changed: 2246 additions & 165 deletions

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Changelog
22

3+
## 5.8.2-beta.7 - 2026-06-02
4+
5+
Targeted beta follow-up for issue #28, Diagnostic v3, and the phone Queue Flow entry point.
6+
7+
Release focus:
8+
9+
- Keeps HOMEii usable through the Home Assistant Music Assistant integration when HA exposes `music_assistant` services even if config entry lookup returns `not_loaded`.
10+
- Allows generic HA `media_player` entities as Music Assistant compatibility fallback targets only when the integration service signal exists.
11+
- Upgrades in-card and visual-editor diagnostics to Diagnostic v3 with integration signal, strict/fallback player counts, selected-player markers, queue providers, library providers, browser context, Direct API, and Sendspin checks.
12+
- Classifies browser-blocked Direct API failures such as CORS/preflight or `Failed to fetch` as optional access-path warnings when the HA integration is available.
13+
- Removes the phone Queue Flow button above the artwork and keeps Queue Flow available through Quick Actions.
14+
- Removes the invalid `limit` payload from the HA `music_assistant.get_queue` queue snapshot path.
15+
- Keeps diagnostics privacy redaction for external/private hostnames.
16+
17+
Validation:
18+
19+
- Targeted lint and runtime/settings regression tests were run before the release version bump.
20+
- Full lint, full Vitest, production build, and release artifact sync were run for the final beta package.
21+
322
## 5.8.2-beta.6 - 2026-06-02
423

524
Cache-busting beta rebuild for the Diagnostic v2 privacy and queue-artwork fixes from beta 5.

README.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ https://github.com/user-attachments/assets/a0076e6e-0352-40f8-ac37-35737e717a80
4747

4848
<p align="center">
4949
<a href="https://github.com/r11a/homeii-music-flow"><img alt="stable version" src="https://img.shields.io/badge/stable-5.8.1-gold"></a>
50-
<a href="https://github.com/r11a/homeii-music-flow/releases/tag/v5.8.2-beta.6"><img alt="beta version" src="https://img.shields.io/badge/beta-5.8.2--beta.6-8A63D2"></a>
50+
<a href="https://github.com/r11a/homeii-music-flow/releases/tag/v5.8.2-beta.7"><img alt="beta version" src="https://img.shields.io/badge/beta-5.8.2--beta.7-8A63D2"></a>
5151
<img alt="Home Assistant" src="https://img.shields.io/badge/Home%20Assistant-Dashboard-41BDF5">
5252
<img alt="Music Assistant" src="https://img.shields.io/badge/Music%20Assistant-required-7C5CFF">
5353
<img alt="Sendspin" src="https://img.shields.io/badge/Sendspin-browser%20player-18B6FF">
@@ -63,26 +63,24 @@ HOMEii Flow is a custom Home Assistant Dashboard card for Music Assistant. It tu
6363

6464
HOMEii Flow started from my own daily use of Home Assistant and Music Assistant. I wanted it to feel less like a technical dashboard widget and more like a real music app inside Home Assistant, so a lot of thought went into the flow, touch interactions, Hebrew/RTL comfort, wall-tablet behavior, mobile details, and the small moments that make choosing music feel natural at home.
6565

66-
## 5.8.2 Beta 6
66+
## 5.8.2 Beta 7
6767

68-
HOMEii Flow 5.8.2 Beta 6 is a cache-busting pre-release follow-up for Diagnostic v2 privacy, visual-editor diagnostics, queue-artwork diagnostics, and Home Assistant integration-first operation.
68+
HOMEii Flow 5.8.2 Beta 7 focuses on issue #28, Diagnostic v3, and a cleaner phone Queue Flow entry point.
6969

70-
- Upgrades Settings > Music Assistant > Diagnostics to Diagnostic v2 with browser, viewport, access path, Direct MA, Sendspin, queue, library, and artwork checks.
71-
- Adds a Diagnostics button to the Home Assistant visual editor near the version label.
72-
- Keeps diagnostics visible with green OK, red FAIL, yellow WARN, and blue INFO rows, plus a copyable report for GitHub issues.
73-
- Redacts external/private hostnames in diagnostics output by default while keeping protocol, host type, port, and path category for troubleshooting.
74-
- Adds queue-artwork diagnostics alongside the existing library-artwork checks.
75-
- Adds a close button to the visual-editor diagnostics panel.
76-
- Treats the Home Assistant Music Assistant integration as the primary supported path, so the card can keep working normally even when Direct MA access is not configured.
77-
- Avoids broken artwork placeholders caused by Music Assistant `/imageproxy` paths when the browser cannot directly reach Music Assistant.
78-
- Keeps the Beta 1 through Beta 5 artwork, Music Assistant compatibility, Danish localization, diagnostics, and performance fixes.
70+
- Lets the card keep working through the Home Assistant Music Assistant integration even when the MA config entry lookup reports `not_loaded` but HA still exposes `music_assistant` services.
71+
- Uses generic HA `media_player` entities as compatibility fallback targets only when Music Assistant services exist.
72+
- Improves diagnostics to Diagnostic v3 with integration signals, strict/fallback player markers, queue providers, library providers, browser-blocked Direct API classification, and the existing privacy redaction.
73+
- Treats browser-blocked Direct API/CORS failures as optional when the HA integration path is available, instead of making the whole card look broken.
74+
- Removes the phone Queue Flow button above the artwork and keeps Queue Flow available only as a Quick Action option.
75+
- Removes the invalid `limit` parameter from the HA `music_assistant.get_queue` diagnostic path.
76+
- Keeps the Beta 1 through Beta 6 artwork, Music Assistant compatibility, Danish localization, diagnostics, and performance fixes.
7977

80-
Beta download: [v5.8.2-beta.6](https://github.com/r11a/homeii-music-flow/releases/tag/v5.8.2-beta.6)
78+
Beta download: [v5.8.2-beta.7](https://github.com/r11a/homeii-music-flow/releases/tag/v5.8.2-beta.7)
8179

8280
Stable users can remain on 5.8.1. Beta users should hard refresh Home Assistant or use:
8381

8482
```text
85-
/local/community/homeii-music-flow/homeii-music-flow.js?v=5.8.2-beta.6
83+
/local/community/homeii-music-flow/homeii-music-flow.js?v=5.8.2-beta.7
8684
```
8785

8886
## 5.8.1 Hotfix Release
@@ -1026,7 +1024,8 @@ src/core/ extracted foundation helpers
10261024
src/config/ config validators
10271025
tests/ regression coverage
10281026
scripts/release.mjs release sync tooling
1029-
RELEASE_NOTES_5.8.2-beta.6.md detailed GitHub release notes for the current beta
1027+
RELEASE_NOTES_5.8.2-beta.7.md detailed GitHub release notes for the current beta
1028+
RELEASE_NOTES_5.8.2-beta.6.md previous beta release notes
10301029
RELEASE_NOTES_5.8.2-beta.5.md previous beta release notes
10311030
RELEASE_NOTES_5.8.2-beta.4.md previous beta release notes
10321031
RELEASE_NOTES_5.8.2-beta.3.md previous beta release notes
@@ -1051,7 +1050,7 @@ npm run lint
10511050
npm test
10521051
```
10531052

1054-
Current packaged version: `5.8.2-beta.6`
1053+
Current packaged version: `5.8.2-beta.7`
10551054

10561055
## Release Readiness
10571056

@@ -1105,6 +1104,7 @@ Credit and thanks:
11051104

11061105
- [Local deployment guide](./LOCAL_DEPLOYMENT.md)
11071106
- [Publishing checklist](./PUBLISHING.md)
1107+
- [5.8.2 Beta 7 release notes](./RELEASE_NOTES_5.8.2-beta.7.md)
11081108
- [5.8.2 Beta 6 release notes](./RELEASE_NOTES_5.8.2-beta.6.md)
11091109
- [5.8.2 Beta 5 release notes](./RELEASE_NOTES_5.8.2-beta.5.md)
11101110
- [5.8.2 Beta 4 release notes](./RELEASE_NOTES_5.8.2-beta.4.md)

RELEASE_NOTES_5.8.2-beta.7.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# HOMEii Music Flow 5.8.2-beta.7
2+
3+
This beta focuses on issue #28, Diagnostic v3, and a cleaner phone Queue Flow entry point.
4+
5+
## Fixed
6+
7+
- Keeps the card usable through the Home Assistant Music Assistant integration when `music_assistant` services are available even if the config entry lookup reports `not_loaded`.
8+
- Uses generic HA `media_player` entities as compatibility fallback targets only when Music Assistant services are exposed by Home Assistant.
9+
- Treats browser-blocked Direct API failures such as CORS/preflight or `Failed to fetch` as optional Direct/Sendspin access-path warnings when the HA integration can still run core card features.
10+
- Removes the invalid `limit` payload from the HA `music_assistant.get_queue` queue snapshot path.
11+
- Removes the phone Queue Flow button above the artwork. Queue Flow remains available from Quick Actions.
12+
13+
## Added
14+
15+
- Upgrades in-card and visual-editor diagnostics to Diagnostic v3.
16+
- Adds integration signal reporting, strict/fallback player counts, selected-player marker details, queue provider checks, and library provider checks.
17+
- Keeps privacy redaction for Home Assistant, Music Assistant, Sendspin, and artwork hostnames.
18+
19+
## Testing Notes
20+
21+
After installing, hard refresh the Home Assistant dashboard and make sure the Lovelace resource URL/cache key is updated to:
22+
23+
```text
24+
/local/community/homeii-music-flow/homeii-music-flow.js?v=5.8.2-beta.7
25+
```
26+
27+
For artwork/queue/library issues, open the card, go to Settings > General, set Settings Source to In-card Settings, then run Settings > Music Assistant > Diagnostics and paste the copied Diagnostic v3 report into the GitHub issue.

dist/config/editor-element.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,20 @@ return class HomeiiBaseMusicEditor extends HTMLElement {
391391
return raw?.result ?? raw;
392392
}
393393

394+
_editorDirectApiFailureDetail(error = null) {
395+
const detail = String(error?.message || error || "").trim();
396+
const lower = detail.toLowerCase();
397+
if (lower.includes("failed to fetch") || lower.includes("networkerror") || lower.includes("cors") || lower.includes("preflight")) {
398+
return "Direct Music Assistant API is blocked by the browser before HOMEii receives a response. This is usually CORS/preflight or local-network browser access. Core playback can still work through the Home Assistant integration; leave ma_url empty unless you need Direct API or Sendspin.";
399+
}
400+
return detail || "Direct API request failed.";
401+
}
402+
394403
_editorDiagnosticsReportText(items = []) {
395404
const maUrl = this._editorMaBrowserUrl();
396405
const lines = [
397406
"HOMEii Music Flow Editor Diagnostics",
398-
"Diagnostics: v2",
407+
"Diagnostics: v3",
399408
`Version: ${HOMEII_CARD_VERSION}`,
400409
`Generated: ${new Date().toISOString()}`,
401410
"Source: visual editor",
@@ -467,18 +476,21 @@ return class HomeiiBaseMusicEditor extends HTMLElement {
467476
const entities = this._hass?.entities || {};
468477
const players = Object.values(states)
469478
.filter((entity) => HomeiiPlayersFoundation.isMusicAssistantPlayer(entity, entities?.[entity.entity_id]));
479+
const genericPlayers = Object.values(states)
480+
.filter((entity) => entity?.entity_id?.startsWith?.("media_player."));
470481
const pinned = HomeiiMobileSettingsFoundation.normalizePinnedPlayerEntityList(this._config?.pinned_player_entities);
471482
const excluded = HomeiiMobileSettingsFoundation.normalizePinnedPlayerEntityList(this._config?.excluded_player_entities);
472483

473484
add("ok", "Editor version", "Visual editor runtime is loaded.", HOMEII_CARD_VERSION);
474-
add("ok", "Diagnostics version", "Diagnostic v2 is active.", "v2");
485+
add("ok", "Diagnostics version", "Diagnostic v3 is active.", "v3");
475486
add("info", "Browser", this._editorBrowserSummary());
476487
add("info", "Viewport", this._editorViewportSummary());
477488
add("info", "Diagnostic privacy", "External/private hostnames are redacted in visible and copied diagnostic output.");
478489
add(this._hass ? "ok" : "fail", "Home Assistant frontend", this._hass ? "Editor has a Home Assistant frontend object." : "Editor does not have a Home Assistant frontend object.");
479490
add(services.length ? "ok" : "fail", "Music Assistant services", services.length ? `${services.length} service(s) are exposed by Home Assistant.` : "No music_assistant services are exposed by Home Assistant.");
480491
add(services.length ? "ok" : "warn", "Integration mode", services.length ? "Core card features can run through Home Assistant. HTTP/HTTPS only affects optional Direct/Sendspin browser access." : "Home Assistant does not expose music_assistant services.");
481-
add(players.length ? "ok" : "warn", "Music Assistant players", `${players.length} player(s) visible in HA state.`);
492+
add(services.length || maUrl ? "ok" : "fail", "Integration signal", `services ${services.length ? "yes" : "no"}, direct ${maUrl ? "configured" : "empty"}`);
493+
add(players.length ? "ok" : (services.length && genericPlayers.length ? "warn" : "fail"), "Music Assistant players", players.length ? `${players.length} strict MA player(s), ${genericPlayers.length} generic HA media_player(s).` : `${genericPlayers.length} generic HA media_player(s), but no strict Music Assistant player markers were detected.`);
482494
add("info", "Player filters", `${pinned.length} pinned, ${excluded.length} excluded.`);
483495

484496
if (this._hass?.connection?.sendMessagePromise) {
@@ -515,7 +527,7 @@ return class HomeiiBaseMusicEditor extends HTMLElement {
515527
const count = Array.isArray(rawPlayers) ? rawPlayers.length : (Array.isArray(rawPlayers?.players) ? rawPlayers.players.length : 0);
516528
add("ok", "Direct Music Assistant API", `Direct API responded with ${count} player(s).`);
517529
} catch (error) {
518-
add("fail", "Direct Music Assistant API", error?.message || "Direct API request failed.");
530+
add(services.length ? "warn" : "fail", "Direct Music Assistant API", this._editorDirectApiFailureDetail(error));
519531
}
520532
} else {
521533
add("info", "Direct Music Assistant API", maUrl ? "Skipped because ma_url needs attention." : "Skipped because ma_url is empty.");

dist/config/editor-forms.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ export function getMobileEditorTexts() {
184184
{ value: "like", label: homeiiEditorI18n("ui.like_2") },
185185
{ value: "lyrics", label: homeiiEditorI18n("ui.lyrics") },
186186
{ value: "queue", label: homeiiEditorI18n("ui.queue_2") },
187+
{ value: "queue_flow", label: homeiiEditorI18n("ui.mobile_queue_flow", {}, "Fast queue wheel") },
187188
{ value: "radio", label: homeiiEditorI18n("ui.quick_mix") },
188189
{ value: "voice", label: homeiiEditorI18n("ui.flow_assistant", {}, "FLOW ASSISTANT") },
189190
{ value: "history", label: homeiiEditorI18n("ui.history") },
@@ -229,6 +230,7 @@ export function getMobileEditorTexts() {
229230
mobile_compact_widget_mode: homeiiEditorI18n("ui.compact_widget_mode", {}, "Compact widget style"),
230231
mobile_compact_edge_to_edge: homeiiEditorI18n("ui.compact_edge_to_edge", {}, "Compact edge-to-edge expand"),
231232
mobile_layout_mode: homeiiEditorI18n("ui.mobile_layout_mode", {}, "Phone layout mode"),
233+
mobile_cover_flow: homeiiEditorI18n("ui.mobile_cover_flow", {}, "Artwork cover flow"),
232234
mobile_swipe_mode: homeiiEditorI18n("ui.artwork_swipe"),
233235
mobile_footer_search_enabled: homeiiEditorI18n("ui.footer_search"),
234236
mobile_mic_mode: homeiiEditorI18n("ui.microphone_2"),
@@ -323,6 +325,7 @@ export function getMobileEditorTexts() {
323325
mobile_compact_widget_mode: homeiiEditorI18n("ui.choose_when_compact_mode_uses_the_two_row_mobile_widget", {}, "Choose when compact mode uses the smaller two-row mobile widget."),
324326
mobile_compact_edge_to_edge: homeiiEditorI18n("ui.compact_edge_to_edge_helper", {}, "When disabled, compact expand opens as a floating window so Home Assistant navigation remains visible."),
325327
mobile_layout_mode: homeiiEditorI18n("ui.mobile_layout_mode_helper", {}, "Auto uses the available card space. Full keeps the phone player inline and requests a tall Sections slot. Compact always uses the compact tile."),
328+
mobile_cover_flow: homeiiEditorI18n("ui.mobile_cover_flow_helper", {}, "Adds the experimental vertical 3D cover flow to the main artwork area."),
326329
mobile_swipe_mode: homeiiEditorI18n("ui.choose_whether_artwork_swipe_changes_track_or_browses_covers"),
327330
mobile_footer_search_enabled: homeiiEditorI18n("ui.enable_or_disable_the_footer_search_button"),
328331
mobile_mic_mode: homeiiEditorI18n("ui.matches_the_microphone_setting_from_the_in_card_settings_screen"),
@@ -645,6 +648,7 @@ export function getMobileCardConfigForm() {
645648
column_min_width: "220px",
646649
schema: [
647650
{ name: "mobile_swipe_mode", selector: { select: { mode: "dropdown", options: t.options.mobile_swipe_mode } } },
651+
{ name: "mobile_cover_flow", selector: { boolean: {} } },
648652
{ name: "mobile_mic_mode", selector: { select: { mode: "dropdown", options: t.options.mobile_mic_mode } } },
649653
{ name: "mobile_home_shortcut", selector: { boolean: {} } },
650654
{ name: "mobile_home_shortcut_path", selector: { text: {} } },

dist/config/validators.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ export function validateMobileCardEditorConfig(config) {
144144
assertValueInList(config.mobile_compact_widget_mode, "mobile_compact_widget_mode", ["auto", "full", "mini"]);
145145
assertBooleanIfDefined(config.mobile_compact_edge_to_edge, "mobile_compact_edge_to_edge");
146146
assertValueInList(config.mobile_layout_mode, "mobile_layout_mode", ["auto", "full", "compact"]);
147+
assertBooleanIfDefined(config.mobile_cover_flow, "mobile_cover_flow");
148+
assertBooleanIfDefined(config.mobile_queue_flow, "mobile_queue_flow");
147149
assertBooleanIfDefined(config.mobile_show_up_next, "mobile_show_up_next");
148150
assertStringIfDefined(config.pinned_player_entity, "pinned_player_entity");
149151
assertStringArrayIfDefined(config.pinned_player_entities, "pinned_player_entities");

0 commit comments

Comments
 (0)