Skip to content

Review fixes: per-variant step 3, accurate firmware copy, stricter registry checks - #34

Merged
Bunton33 merged 4 commits into
mainfrom
claude/installer-repo-review-28c372
Oct 22, 2026
Merged

Bunton33 merged 4 commits into
mainfrom
claude/installer-repo-review-28c372

Conversation

@Bunton33

Copy link
Copy Markdown
Contributor

What does this change?

A full review of the installer: the registry was checked against every product repo, and the code, CI and docs were reviewed. Findings were verified independently before fixing. It's four commits, one per area.

Merge check on #20–#33: all landed correctly. Each merge tree equals its PR head, nothing was later reverted, and production devices.json matches main. The one leftover was a misplaced platformFor() comment from #29, now moved back. #32 must not be merged as-is: GitHub's own merge preview (refs/pull/32/merge) lists TEMP_PRO-1 twice, because #33 already added it. The new validator fails on that merge result.

Site (ee6ac17)

  • Step 3 follows the variant. A new standalone platform gives H-2/H-3 Basic (No Wi-Fi) a "nothing to add, restart it" step instead of "Add to Home Assistant". The restart matches the wiki's reflash pages.
  • "What's new" only shows a release that matches the manifest's version. Otherwise the box says "Installs build X". The M-1 WLED-MM variants were showing WLED-MM-M1's only release (25.7.14.1), whose assets are the Rev4 build, for builds 25.8.19.1 and 25.10.9.1. The check ignores URLs, so the "Full Changelog" compare link can't cause a false match. Release notes and manifests are memoized per session (unauthenticated GitHub API: 60 requests/hour).
  • Copy corrected against the product repos:
    • H-1 and H-2 Smart have no Bluetooth proxy; only H-3 has one, behind a switch.
    • Smart builds default Prevent Sleep to ON.
    • H-2 Smart has no improv_serial, so its note points to the open "Apollo H2 Hotspot".
    • M-1 gets revision notes.
    • R_PRO-1 gets an Ethernet note.
    • WLED OTA copy no longer sends Rev4 owners to the Rev6-only M-1_ota.bin.
    • Removed the wled.local hint, which no M-1 build answers.
    • The config hint now says the YAML !includes its folder and links the folder.
  • Layout and accessibility:
    • At 360px the header wrapped onto a 404px-wide page; it no longer overflows.
    • Phones show two cards per row, and card images are no longer cropped.
    • Dark-mode buttons go from 2.9:1 to 5.3:1 contrast.
    • Variant buttons show a visible focus ring, and the picker is a labelled group.
    • Each device page sets its own title and moves focus on navigation.
    • An unknown id shows a notice.
    • Fallback file links are https-only, escaped, and show their offsets.
  • Playwright stubs GitHub, manifests and configs, so it is hermetic. Tests go from 29 to 42, including one that walks every device and variant, and the fixed 2.5s sleeps are gone.

Validator and image script (4bbd1b6)

  • New offline checks:
    • unique lowercase-kebab ids
    • required fields
    • the image file exists
    • each manifest is on its own repo's Pages site
    • no two variants share a manifest
    • config keys exist in firmware
    • a new --offline mode
  • New network checks:
    • manifests and parts are readable cross-origin
    • chipFamily is a known value
    • the wiki page is reachable
    • each manifest is offered by the repo's classic installer page
  • Replayed on history: it flags TEMP-1: add Revision 1 options (support only) #32's duplicate and the pre-Add TEMP_PRO-1; flash Factory builds for AIR-1 and MSR-2 #33 AIR-1/MSR-2 builds without improv. It can't catch two of a page's builds swapped between variants; the docs say so.
  • fetch_images.py no longer replaces h-1.jpg with the full-size PNG. It writes atomically and accepts device ids.

CI (3059c8b)

  • Pages deploy: runs the offline checks before publishing and no longer cancels an in-flight deploy.
  • Validate:
    • runs on push to main too
    • uploads Playwright traces on failure
    • opens or updates an issue when the nightly check fails (needs issues: write)
  • Pinning: actions are pinned to the SHAs of the same major versions, with a monthly Dependabot for github-actions.

Docs (6b8db1f)

  • CONTRIBUTING has an "adding a device" checklist. Its first rule is to pick the build the classic installer flashes.
  • AGENTS.md documents the registry schema and standalone.
  • The PR template gets a firmware-mapping checkbox.
  • The M-1 note is corrected, and the original specs are marked historical.

For reviewers

  • No hardware was flashed. The manifest URLs in devices.json are unchanged; only notes and platforms were added.
  • The new "Validate" workflow steps (push trigger, issue on nightly failure) have only run locally until this PR's CI.

Found upstream, not fixed here

  • TEMP_PRO-1: firmware-names still uses _ETH/_W. The shared workflow now keys on 1_ETH/1_W, so the next publish would wipe firmware-w/ and firmware-e/. Its YAMLs also fail to compile (.state needs to become current_option()). Land both fixes in one merge.
  • H-2: improv_serial was dropped in "Drop Bluetooth".
  • H-1: the firmare-d typo means the Basic build is never published, and the update URL 404s. The fix is on H-1 beta, but its release PR was closed unmerged.
  • WLED-MM-M1: needs releases for 25.8.19.1 and 25.10.9.1.
  • TEMP-1: its classic page lists Revision 1 first.
  • Repo settings: no required status checks.

Checklist

  • Playwright tests pass locally (cd tests && npx playwright test): 42 passed, also with CI=1
  • Any new runtime file/dir is added to the cp list in .github/workflows/pages.yml: none added
  • No new build step, framework, or runtime CDN dependency
  • If devices.json changed: python scripts/validate_registry.py passes ("Registry OK: all manifests live and complete."), plus 73 + 14 Python unit tests
  • If a firmware or config URL changed: none changed

🤖 Generated with Claude Code

Bunton33 and others added 4 commits October 22, 2026 13:24
Step 3 now follows the selected variant: a new `standalone` platform gives
the H-2/H-3 Basic (No Wi-Fi) builds a "nothing to add" step instead of
"Add to Home Assistant", with the restart the wiki calls for.

"What's new" only shows a release that matches the manifest's version;
otherwise the page says which build it installs. The M-1 WLED-MM variants
were showing an older release whose assets are the Rev4 pinout. Release
notes and manifests are memoized per page session to stay under GitHub's
60 requests/hour limit.

Registry copy corrected against the product repos: H-1/H-2 have no
Bluetooth proxy, Smart builds stay awake by default, H-2 Smart has no
improv (point to its hotspot), M-1 revision notes, R_PRO-1 Ethernet note,
and WLED OTA copy that no longer steers Rev4 boards to a Rev6 file.

Also: header no longer overflows on phones, two cards per row on small
screens, uncropped card images, readable dark-mode buttons, visible focus
ring on variant buttons, labelled picker group, per-device title and
focus on navigation, unknown-id notice, https-only escaped fallback file
links with offsets, and a hermetic Playwright suite (29 -> 42 tests).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New offline checks: unique lowercase-kebab ids, required fields, the image
file, manifests on their own repo's GitHub Pages site, no two variants on
one manifest, config keys that exist in firmware, and a --offline mode.
New network checks: manifests and parts readable cross-origin, known
chipFamily, wiki reachable, and every manifest offered by the repo's
classic installer page. Replayed on history, it flags PR #32's duplicate
TEMP_PRO-1 and the pre-#33 AIR-1/MSR-2 builds without improv.

fetch_images.py keeps a hand-made image whose extension differs from the
source (re-running it replaced h-1.jpg with the full-size PNG), writes
atomically, keeps non-ASCII text readable, and takes device ids.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pages deploy runs the validator unit tests and offline checks before
publishing, and no longer cancels an in-flight deploy. Validate also runs
on push to main, keeps Playwright traces on failure, and opens or updates
an issue when the nightly check fails. Actions are pinned to SHAs with
Dependabot to bump them; Playwright forbids test.only and never reuses a
server on CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CONTRIBUTING gets a step-by-step "adding a device" (pick the build the
classic installer flashes, default variant first, image rules), all the
local checks, Firefox, and the production URL. AGENTS.md documents the
registry schema and the standalone platform. The PR template asks about
firmware mapping. The M-1 note and both original specs are corrected or
marked historical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 22, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3f82ed34-a4f6-4225-92d4-5e90b36b7d78
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Bunton33
Bunton33 merged commit 07ad12a into main Oct 22, 2026
3 checks passed
@Bunton33
Bunton33 deleted the claude/installer-repo-review-28c372 branch October 25, 2026 17:37
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