The fix review showed the var regex flagged the word in comments and strings and
missed var/*c*/x and var {x}. The test now uses the acorn parser Node ships
(--expose-internals; it skips if a Node ever drops it) to find real var
declarations, and reads the page with html.parser so it checks inline classic
scripts only: no src, and no module or JSON data type.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
From the fix review:
- The hero's Install skipped installing whenever a job existed, including one
that had failed, so it only opened the details. It now tries again after a
failure, and still only opens the details while installing or once installed.
- Declaring a var twice is legal, so the strict-mode check couldn't see it. The
page's one var (a block-local in the capture code) is now let, and the test
rejects var outright (CSS var() in strings is fine). It also checks every
inline script, whatever its attributes.
- Clear filters still set the removed source filter.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
From the independent review of this PR:
- After installing the featured app, the hero's Install on the Frame took the
installed branch and launched it on the headset. It now opens the details,
whose button says Open in Steam, without acting.
- The duplicate-name test matched declarations at column zero only, so an
indented second loadPanels (the bug it was written for) passed, and so did
classes, destructuring and later declarators. It now compiles both inline
scripts as one strict-mode block, where V8 rejects any name declared twice
in the shared scope, with fixtures for each case and for same-named helpers
in different functions (which are fine).
- A card's "Won't run" overstated the check's "Might not work"; it now says
May not run.
- Removed styles and the source-filter state that nothing used any more.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Apps without a banner or screenshot show their icon on a blurred wash of
itself, or a VR or app glyph, rather than a giant letter. Every card says
whether it will run on the Frame (works, should install, not checked yet,
won't run), in place of "Free" on every card.
The featured app isn't repeated in the rows below, and no row repeats
another. Its buttons stay in the app: Install on the Frame opens the details
with the install under way, and Details opens them. It's chosen from apps
that can run, with real artwork, VR first.
The stray "Browse SideQuest" link goes; the Sources dialog lists SideQuest
with a link to its website instead of a switch that did nothing. The "All
sources" drop-down goes too, as the Sources dialog already chooses them.
The copy is plain and British ("Apps and games for the Frame", no "Find
your next favorite"), and Games and Android point at each other.
Two functions were each declared twice across the page's scripts, so the
later one silently replaced the earlier everywhere: the store's details
dialog opened empty (the Devices tab's renderDetail ran instead), and Home's
Desktop view never found the headset's panels (the panel switcher's loader
ran instead). They're renamed, and a test
fails on any top-level name declared twice.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>