Skip to content

docs(brands): the icon is not in HACS, and the brands route is closed (#84) - #179

Merged
chriguschneider merged 1 commit into
masterfrom
claude/84-brands-hacs-reality
Aug 25, 2026
Merged

docs(brands): the icon is not in HACS, and the brands route is closed (#84)#179
chriguschneider merged 1 commit into
masterfrom
claude/84-brands-hacs-reality

Conversation

@chriguschneider

Copy link
Copy Markdown
Owner

Why

The maintainer noticed the MeteoSwiss Radar row in the HACS store list showing an "icon not available" box, having seen the icon working earlier the same day. Investigating it turned up two wrong statements in docs/brands-icon.md, both of which had shaped decisions on #84 and #85.

Wrong claim 1: "the icon appears on the integration page and in HACS"

It does not appear in HACS. Two surfaces, two sources:

Surface Fetches from Result
Settings → Devices & Services /api/brands/integration/{domain}/icon.png on the running instance ✅ our icon
HACS store list brands.home-assistant.io/_/{domain}/icon.png — the CDN ❌ placeholder

Measured on the live instance (core-2026.8.3, HACS 2.0.5):

/api/brands/integration/meteoswiss_radar/icon.png?placeholder=no    → 200  20232 bytes
/api/brands/integration/meteoswiss_radar/icon@2x.png?placeholder=no → 200  61849 bytes
/api/brands/integration/no_such_domain_xyz/icon.png?placeholder=no  → 404   (control)

https://brands.home-assistant.io/_/meteoswiss_radar/icon.png        → 200  3039 bytes

20232 and 61849 match the committed files byte for byte, so the integration side is healthy — the HACS v0.12.0 update did not remove the brand/ folder, which was the first hypothesis.

The reason this is easy to misdiagnose: the CDN does not 404 on that path. It returns 200 with a picture that reads "icon not available" — byte-identical (sha 37fb00d3…) to what voice_satellite_llm_tools, another brands-less integration in the same list, receives. There is no failed request in devtools. The placeholder is the successful response.

Known upstream, open since March 2026: hacs/frontend#936 (closed, root-caused to hacs-dashboard.ts calling brandsUrl({useFallback: true})), plus hacs/integration #5171, #5179, #5223, #5402. Fix in flight: hacs/integration#5388, unmerged, and the newest HACS release is 2.0.5 from January 2025.

Wrong claim 2: "That path still works, but it is no longer the one we take"

home-assistant/brands will not accept us at all:

  • Its PR template opens with "Pull requests for adding new custom components will no longer be accepted."
  • Its "Type of change" checklist has no fitting option — every entry concerns a core integration.
  • 15 PRs of exactly this shape were closed unmerged in the five days to 2026-08-25: #11016–#11021, #11023–#11031. Two were closed the same day they opened.
  • The last merged addition under custom_integrations/ was #10172 on 2026-04-20; everything since has been a removal or a move.

I had a branch prepared in a fork with both icons under custom_integrations/meteoswiss_radar/, diffing clean against upstream. It was not opened, and the branch is deleted — submitting it would only have joined that rejection queue.

So the brand/ folder is not a shortcut chosen over a review round. It is the only route that exists.

What this does not change

Nothing in the code. The icons are correct (256×256 and 512×512, PNG, 1:1) and render everywhere Home Assistant itself draws them. The HACS store page will show a placeholder until #5388 ships, and no action available to us changes that — which is worth knowing now, since #10323 will make that page the discovery surface for new users.

How verified

python -m pytest -q → 158 passed. Documentation-only change otherwise; every number above was measured, not inferred.

🤖 Generated with Claude Code

Two claims in docs/brands-icon.md were wrong, and both were load-bearing.

"After a Home Assistant restart the icon appears on the integration page
and in HACS" -- it does not appear in HACS. Only Home Assistant's own UI
reads the in-repo brand/ folder via /api/brands/. The HACS store list
fetches brands.home-assistant.io/_/{domain}/icon.png, which for an
unknown domain answers 200 with a picture that reads "icon not
available". No failed request exists to find: the placeholder *is* the
successful response, which is what made this look like a regression.

Measured live (core-2026.8.3, HACS 2.0.5): the proxy endpoint returns
20232 and 61849 bytes, matching the committed files exactly, while the
CDN returns the 3039-byte placeholder that every brands-less custom
integration gets.

"That path still works, but it is no longer the one we take" -- the
brands repository will not take us at all. Its PR template opens with
"Pull requests for adding new custom components will no longer be
accepted", its Type-of-change list has no option that fits, and 15 PRs
of this exact shape were closed unmerged in the five days to 2026-08-25.
The last merged addition under custom_integrations/ was 2026-04-20.

So the brand/ folder is not a shortcut chosen over a review round; it is
the only route that exists. The HACS gap is a known upstream limitation
(hacs/frontend#936, hacs/integration #5171 #5179 #5223 #5402) with a fix
in flight in hacs/integration#5388, unmerged.

Closes #84

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chriguschneider
chriguschneider merged commit 1b90b13 into master Aug 25, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant