0.9.7-rc2: a strategy-generated dashboard blocks the panel behind an on-screen prompt after upgrade #133
Description
Upgrading a panel from 0.9.6 to 0.9.7-rc2 left it on the "Entity filter needs attention" screen with no dashboard for 2.75 days, until I answered the prompt through the API. The panel is a Sonoff NSPanel Pro 120P, firmware 3.8.0, Android 8.1, built-in renderer, home_dashboard unset (follow the account default).
The blocking issue from GET /api/v1/dashboard/entities/issues:
{
"type": "unbounded_selector",
"severity": "error",
"blocking": true,
"would_block": true,
"rule_summary": "Dashboard strategy generates entity dependencies at runtime",
"reason": "The selector has no structural bound that can be converted into a safe subscription set.",
"recommendation": "Add an explicit entity ID, entity pattern, domain, area, floor, or label constraint.",
"source_locations": ["dashboard.strategy"],
"view_path": "dashboard"
}While held, the bootstrap watchdog resynced the whole entity catalog every 5 minutes without ever making progress — 794 times:
08-29 11:28:46.495 W/ha-paneld/dashboard: entity bootstrap held 237616126ms — watchdog resync 794, next in 300000ms
Why I think this is broader than my panel. The selector it cannot bound is a dashboard strategy, and a strategy-generated dashboard is what Home Assistant serves by default. Any panel whose home dashboard follows the account default lands on this screen on upgrade. On my fleet that is all 16.
The recovery path is the problem as much as the block itself. The three offered choices all need a hand on the glass, and a wall panel that is mounted, unattended and set to self-update goes dark and stays dark until someone walks up to it. POST /api/v1/dashboard/entities/issues {"fingerprint":"...","ignored":true} cleared it remotely and the filter then applied normally at 347 entities out of 3055, so the filtering itself works fine on this dashboard once it is allowed to proceed — the safety check is refusing a case it could handle.
Suggestions, in the order I would want them:
- Don't hold the dashboard indefinitely on an unbounded selector. Open it unfiltered with the warning surfaced, or auto-ignore after a bounded number of failed verifications, so a panel converges on its own.
- Treat
dashboard.strategyas a known bounded-unknown rather than anerror, given it is the default dashboard shape. - Whatever the decision, the watchdog should stop resyncing a catalog that is blocked on a human answer. 794 full resyncs is a lot of write traffic for a state that cannot change on its own.
Happy to test a build on the same panel — it reproduces on every upgrade of a panel with a default dashboard, and I have 15 more that have not been upgraded yet.
Activity
maxlyth commentedon Aug 30, 2026
This is a release blocker. A panel which was working before an upgrade must not disappear behind a prompt indefinitely, particularly when the decision can only be made on the panel itself.
The strategy-generated dashboard is one problem; the 794 full catalogue retries while the panel waited for a person are another. Please do not update the other panels yet. I am investigating both before the next release candidate, and your offer to test the result on this fleet will be useful.
maxlyth commentedon Sep 9, 2026
rc3 is out, and it changes how this recovers. An account-default dashboard can now resume its previous entity filter after an update, but only while the whole catalogue that filter referenced is still valid. If anything in it has changed, you still get the safety question rather than a silent guess.
So upgrade one panel first rather than the whole set. If it comes back to its dashboard without stopping at the prompt, the rest should follow. If it still stops, send me the diagnostic dump from that panel, because then something is invalidating the catalogue that I have not reproduced.
Sorry for leaving you frozen this long.
cb2206 commentedon Sep 15, 2026
0.9.7 final self-updated my 16 panels on 2026-09-14. 15 of them came up on the "Entity filter needs attention" hold; only the one that already had the strategy issue ignored from rc2 did not. They stayed dark for ~27 h until I answered: two at the panel, 13 through the API. So the rc3 upgrade recovery didn't cover this fleet; my guess is there was no retained filter for it to restore.
The resync loop is fixed. A held panel now logs an hourly "dashboard change probe" instead of resyncing the catalogue.
The hold was also right about something. After ignoring it, the Areas dashboard renders with controls missing.
cover.window_primary,cover.window_kyra,cover.window_hannahand 7 other covers never entered the filter. The strategy only draws what the panel receives, so those tiles never render and runtime learning never sees them. The unfiltered panel shows them. Ignoring the check silently loses controls on a strategy dashboard, and nothing on the panel says so.Diagnostic dump from one of the held panels (captured while held)
maxlyth commentedon Sep 21, 2026
Fixed in 0.9.7.
Your third point is implemented as written: a scan waiting only on a decision no longer resyncs. It polls for an actual dashboard change on a widening 5-minute-to-hourly interval instead.
Your first is handled on the upgrade path. A panel following the account default now restores the filter it was already running, so it comes back unattended. Only if the complete previous set is still valid; otherwise it keeps asking rather than silently showing you less.
I did not take the second. On a dashboard that has never been scanned there is no evidence to fall back on and the derived set can legitimately be empty, so the hold is all that stands between that and a blank screen. The automatic path is therefore limited to panels that had already accepted a filter.
I could reproduce your hold here but not the automatic recovery, since my own default dashboards are not strategy-generated. If you upgrade one of the panels still on 0.9.6 and it returns without prompting, that confirms the last piece.
cb2206 commentedon Sep 21, 2026
No panel left to test that on — the whole fleet self-updated straight to 0.9.7 final on 2026-09-14, so there's no 0.9.6 survivor to run the one-panel upgrade test against. Would a deliberate downgrade-then-upgrade be a valid test, or does the recovery path only matter on the next release from here? Happy to try either once I know what data it'd need to leave behind.
On point 2/"second" — to be clear, I wasn't asking for automatic recovery on a never-scanned dashboard. The ask was narrower: when Ignore is chosen on a strategy dashboard, entities missing from the filter silently never render, and the panel gives no indication that's happening. That part's still open regardless of the upgrade-recovery work. Right now I'm mitigating it by hand-pinning the 10 affected covers on every panel; that's fine as a workaround but it's a silent-data-loss trap for anyone who doesn't know to check against an unfiltered panel.
maxlyth commentedon Sep 26, 2026
No need to downgrade. The upgrade recovery runs on the next update from here, so that update is the real test. If a panel comes back to its dashboard without stopping at the prompt, that confirms it; if it stops, a /diag from that panel is what I need.
You are right about Ignore, and the next prerelease makes it visible. When a strategy dashboard runs with that check ignored, the Configure page says some dashboard cards may be missing, and the Entities page explains why and how to pin what is missing. It cannot name the missing entities itself: the strategy never asks for anything the filter leaves out, so the panel never sees their names. Comparing against the same dashboard on another device, as you did, is still how to find them.
feat: say when a strategy dashboard runs with its entity check allowed (
maxlyth commentedon Sep 27, 2026
0.9.8 is out with the Ignore notice: on a strategy dashboard with that check ignored, Configure says some dashboard cards may be missing, and the Entities page explains why and how to pin them.
This update is also the real test of the upgrade recovery. If any panel stops at the entity filter prompt after updating, reopen this with a /diag from that panel. Otherwise I think we are done here, so I am closing it.
feat: say when a strategy dashboard runs with its entity check allowed (