Skip to content

feat(view): add browse-registry section to /wheels/packages (#2271 partial)#2277

Merged
bpamiri merged 11 commits into
developfrom
claude/fervent-brahmagupta-c9a826
Apr 24, 2026
Merged

feat(view): add browse-registry section to /wheels/packages (#2271 partial)#2277
bpamiri merged 11 commits into
developfrom
claude/fervent-brahmagupta-c9a826

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented Apr 24, 2026

Summary

  • Adds a "Browse registry" section to /wheels/packages listing packages available from wheels-dev/wheels-packages
  • Reuses the CLI's Registry component — same data source as wheels packages list, 24h app-scope cache
  • Dev/testing only; Public.cfc's $blockInProduction() gate plus a view-level env check keep this off production servers
  • No install-via-browser action; each row shows a copy-to-clipboard wheels packages install <name> snippet
  • Rows matching an installed package show a ✓ Installed badge instead of the snippet
  • Gracefully disabled in wheels new-generated user apps where the CLI isn't on the classpath — installed-packages table still renders normally

Scope

This is the in-app half of #2271. The wheels.dev/packages static-site work is deferred — original design assumed a live CFML app, but wheels.dev was migrated to four Astro static sites under web/sites/ with Cloudflare Pages deploys. That piece needs its own brainstorm against the new architecture (build-time fetch, repository_dispatch trigger from the registry repo, etc.). See the "Revision" note in docs/superpowers/specs/2026-04-23-wheels-packages-phase4-ui-design.md. #2271 stays open.

Changes

Three logical layers:

  1. CLIcli/lucli/services/packages/Registry.cfc: new listAll() returning [{name, description, tags, latestVersion, homepage}, ...]. Skips malformed manifests; propagates unavailability. Covered by new RegistryListAllSpec.cfc (3 it blocks).

  2. Framework helpervendor/wheels/Public.cfc: new $loadRegistryPackages() returning {packages, error}. Production short-circuit, memoized Registry on application.wheels.$packageRegistry, typed-only catches (Wheels.Packages.*) so real bugs bubble up, classpath-availability guard for user apps. Covered by new LoadRegistryPackagesSpec.cfc (4 it blocks) with FakeRegistry.cfc + PublicWithoutRegistry.cfc fixtures.

  3. Viewvendor/wheels/public/views/packagelist.cfm: new cfscript block + new section. 3-way conditional (error / empty / table). HTMLEditFormat on all DOM interpolations; JSStringFormat in the onclick; homepage links gated to ^https?://; aria-label on the Copy button.

Test plan

  • Full test suite green locally: bash tools/test-local.sh — 3324 pass, 0 fail, 0 error (Lucee 7 + SQLite)
  • Manual smoke: /wheels/packages on a local LuCLI server renders 200 with all 4 live registry packages and 4 install snippets
  • CI full matrix pass (waiting on PR CI)
  • Manual: install a package via CLI + reload shows ✓ Installed badge on that row (not rerun this session — covered by the UI logic path in specs)

Spec & plan

Refs #2271, #2243, #2233

bpamiri added 11 commits April 23, 2026 18:27
Proposes the approach for #2271: wheels.dev/packages listing+detail
pages plus a "Browse registry" section on the in-app /wheels/packages
view. Two separate fetchers (wheels.dev RegistryClient; in-app reuses
the CLI's Registry.cfc directly) against the same GitHub registry, 24h
cache, CLI-only install path.
Revises the Phase 4 spec after discovering wheels.dev is now four Astro
static sites under web/sites/, not a CFML app. The in-app browse-registry
section ships first; the wheels.dev Astro work needs its own brainstorm
against the new architecture (build-time fetch + repository_dispatch).

Adds the implementation plan for the in-app half.
@bpamiri bpamiri merged commit f924f2e into develop Apr 24, 2026
3 checks passed
@bpamiri bpamiri deleted the claude/fervent-brahmagupta-c9a826 branch April 24, 2026 04:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant