Skip to content

fix(web): fake installed models list, and unusable phone navigation - #472

Merged
jamesbrink merged 1 commit into
mainfrom
fix/web-audit-top
Jul 21, 2026
Merged

fix(web): fake installed models list, and unusable phone navigation#472
jamesbrink merged 1 commit into
mainfrom
fix/web-audit-top

Conversation

@jamesbrink

Copy link
Copy Markdown
Member

The two highest-impact findings from the web parity audit, both one-liners.

Models → Installed showed 97 models as installed; two are actually on disk. useCatalog assigned fetchModels() unfiltered, so the whole manifest rendered as an installed shelf with sizes. MachineDetailPage already filtered the same endpoint correctly and showed 2 — same page load, two different answers. Filtered now to downloaded generation models via the existing isStandaloneGenerationModel. This also repairs the landing-tab heuristic, which keyed off installed.length > 0 and therefore always sent even a model-less user to a fake Installed shelf instead of Discover.

The phone navigation rendered as a 52px sliver. SheetPanel is position: absolute; inset: 0, and it was mounted inside the position: relative compact header, so it resolved against the 52px bar — the entire mobile menu was unusable. It now anchors to the viewport while open, and adds no overlay when closed so it can't swallow page clicks. This is the third instance of the same root cause (after the Create Advanced sheet and the model detail drawer), so the test asserts the anchoring rather than just the open prop.

Gates: web tests, prettier, build — all exit 0.

🤖 Generated with Claude Code

Models → Installed listed all 97 manifest entries as if they were on
disk; only two are. The list is now filtered to downloaded generation
models, the way host detail already did it — which also fixes the tab
heuristic that always landed a user on a shelf of models they don't
have.

The mobile nav sheet rendered as a 52px sliver: SheetPanel is
absolute-positioned against its nearest positioned ancestor, and it was
mounted inside the relative compact header, so the entire phone
navigation was unusable. It now anchors to the viewport when open and
adds no overlay when closed.
Copilot AI review requested due to automatic review settings July 21, 2026 09:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses two high-impact web parity issues in the Mold web UI: it corrects the “Installed” models shelf to only show models actually present on disk, and fixes the mobile navigation sheet so it renders full-screen instead of being constrained to the compact header.

Changes:

  • Filter useCatalog “installed” models to downloaded && isStandaloneGenerationModel(...), which also fixes the initial Models tab landing heuristic.
  • Anchor the phone navigation sheet to the viewport while open by hosting it in a fixed inset-0 container.
  • Add a regression test asserting the sheet is hosted in a viewport-fixed container when opened.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
web/src/composables/useCatalog.ts Fixes the Installed models list (and default tab heuristic) by filtering /api/models to truly installed generation models.
web/src/components/shell/AppNav.vue Fixes mobile navigation usability by ensuring the sheet overlay is viewport-anchored when open.
web/src/components/shell/AppNav.test.ts Adds a regression test to lock in the viewport-anchoring behavior for the mobile nav sheet.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

// the whole manifest (97 rows here, 2 downloaded), so an unfiltered
// assignment renders the entire catalog as if it were installed — and
// the tab heuristic below then always lands on a shelf of models the
// user does not have. Host detail already filters this way.
Comment on lines +311 to +313
installed.value = (await fetchModels()).filter(
(m) => m.downloaded && isStandaloneGenerationModel(m),
);
Comment on lines +156 to +157
describe("mobile nav sheet anchoring", () => {
it("mounts the sheet in a viewport-fixed host, not inside the 52px bar", async () => {
@jamesbrink
jamesbrink merged commit aad0007 into main Jul 21, 2026
8 checks passed
@jamesbrink
jamesbrink deleted the fix/web-audit-top branch July 21, 2026 09:23
jamesbrink added a commit that referenced this pull request Jul 21, 2026
Unblocks the release job, which failed on `CHANGELOG.md has no notes for
[0.20.2]`.

#472 merged without a changelog entry, so `[Unreleased]` was empty when
`scripts/release/sync-release-pr.sh` promoted it — producing a version
section with no notes, which the script correctly refuses.

Adds the two entries for what #472 actually fixed.
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.

2 participants