Skip to content

feat(playgrounds): add ecosystem dogfooding playground for plan 04#1022

Merged
antfu merged 7 commits into
mainfrom
feat/ecosystem-playgrounds
Jul 15, 2026
Merged

feat(playgrounds): add ecosystem dogfooding playground for plan 04#1022
antfu merged 7 commits into
mainfrom
feat/ecosystem-playgrounds

Conversation

@antfubot

Copy link
Copy Markdown
Collaborator

Implements plans/vite-devtools-integration/04-ecosystem-playgrounds.md.

What's here

  • playgrounds-ecosystem/modules/one combined playground (not one per module) covering nuxt-og-image, @nuxt/scripts, @nuxt/content, @nuxt/fonts, @nuxt/image, wired to the local @nuxt/devtools via the same NUXT_DEVTOOLS_LOCAL convention as playgrounds/*.
  • @nuxthub/core was dropped (out of scope). @nuxtjs/tailwindcss was dropped after a real version conflict surfaced before implementation: it hard-depends on Tailwind v3 while nuxt-og-image lists Tailwind v4 as an optional peer.
  • The playground is sealed off in its own pnpm workspace (playgrounds-ecosystem/modules/pnpm-workspace.yaml + its own committed lockfile) — confirmed by direct testing that without this, a nested pnpm install silently writes into the parent's lockfile. It's excluded from the root pnpm-workspace.yaml packages: globs, eslint.config.mjs ignores, and tsconfig.json excludes, and is not part of postinstall (unlike docs/, which is auto-installed — this is deliberately more opt-in than that).
  • playgrounds-ecosystem/REPORTS.md — a compatibility report from an actual run: installed the workspace, started the dev server against the local devtools, and drove a real Chromium instance through the Vite DevTools authorization flow and into the embedded client. Findings:
    • nuxt-og-image, @nuxt/scripts, @nuxt/fonts all register a working DevTools custom tab — but all three are only reachable via the SideNav's overflow ("⋯") menu, a discoverability gap worth feeding into Plan 03.
    • @nuxt/content 3.15.0 and @nuxt/image 2.0.0 register no DevTools tab at all in the versions tested — this plan's original assumption doesn't hold for those two majors.
  • .github/workflows/ecosystem-playground.yml — an optional workflow_dispatch-only smoke check (pnpm install + nuxt build for the module combo). Not part of the default CI path. Builds against the published @nuxt/devtools deliberately: Nuxt DevTools no-ops entirely outside dev mode, so a build can't exercise the local-devtools path anyway.
  • plans/vite-devtools-integration/04-ecosystem-playgrounds.md and the workstream README.md are updated to reflect what was actually decided/built (this deviated from the plan's original "one playground per each of 7 modules" shape after a grilling session).

Verification

  • pnpm -C playgrounds-ecosystem/modules install then nuxt build (both with and without NUXT_DEVTOOLS_LOCAL=true) succeed.
  • Root pnpm lint, pnpm typecheck, pnpm test:unit all pass unaffected.
  • Manually dogfooded via a real Chromium instance (agent-browser) — see REPORTS.md for the full walkthrough and evidence.

This PR was created with the help of an agent.

Implement plans/vite-devtools-integration/04-ecosystem-playgrounds.md as a
single combined playground (playgrounds-ecosystem/modules/) covering five
popular Nuxt modules — nuxt-og-image, @nuxt/scripts, @nuxt/content,
@nuxt/fonts, @nuxt/image — linked to the local @nuxt/devtools for
verification. @nuxthub/core was dropped as out of scope, and @nuxtjs/tailwindcss
was dropped after a real version conflict with nuxt-og-image's optional
Tailwind peer surfaced during design.

The playground is its own sealed pnpm workspace (own pnpm-workspace.yaml +
lockfile), not part of the root install, main CI, lint, or typecheck surface.
An optional workflow_dispatch-only GitHub Actions workflow gives a manual
"does the module combo still build" smoke check.

playgrounds-ecosystem/REPORTS.md records real findings from actually running
the playground against the local devtools: three of the five modules
(nuxt-og-image, @nuxt/scripts, @nuxt/fonts) register a working DevTools tab
(all three currently only reachable via the SideNav's overflow menu — a
discoverability gap worth feeding into plan 03); @nuxt/content 3.15.0 and
@nuxt/image 2.0.0 ship no DevTools tab at all in the versions tested.

plans/vite-devtools-integration/04-ecosystem-playgrounds.md and the workstream
README are updated to reflect what was actually decided/built, since this
deviated from the plan's original "one playground per of 7 modules" shape.

Co-authored-by: opencode <noreply@opencode.ai>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 14, 2026

Copy link
Copy Markdown

Deploying nuxt-devtools with  Cloudflare Pages  Cloudflare Pages

Latest commit: b72121c
Status:⚡️  Build in progress...

View logs

@socket-security

socket-security Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​nuxt/​scripts@​1.3.1971007696100

View full report

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9e36e49e-683c-48b0-b873-0aea4ea482f6

📥 Commits

Reviewing files that changed from the base of the PR and between be02f54 and b72121c.

⛔ Files ignored due to path filters (1)
  • playgrounds-ecosystem/modules/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • playgrounds-ecosystem/modules/package.json

📝 Walkthrough

Walkthrough

Adds an isolated Nuxt ecosystem playground combining three Nuxt modules with local or published DevTools. It includes a demo page for fonts and script-loaded confetti, dedicated workspace and TypeScript configuration, root tooling exclusions, and a manually triggered GitHub Actions build check. Documentation and reports describe setup, authorization, module tab behavior, compatibility findings, diagnostics, and follow-up items.

Estimated code review effort: 3 (Moderate) | ~25 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adding an ecosystem dogfooding playground for plan 04.
Description check ✅ Passed The description is clearly related to the changeset and summarizes the playground, docs, and workflow updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ecosystem-playgrounds

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

playgrounds-ecosystem/modules/package.json

ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.


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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
.github/workflows/ecosystem-playground.yml (1)

15-15: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Set persist-credentials: false for checkout.

To prevent credential persistence through GitHub Actions artifacts and minimize the risk of token exposure in subsequent steps, it is recommended to disable credential persistence for the checkout action since this workflow does not require pushing commits back to the repository.

🔒️ Proposed fix
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v4
+        with:
+          persist-credentials: false
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ecosystem-playground.yml at line 15, Update the
actions/checkout@v4 step in the workflow to set persist-credentials to false,
preserving the existing checkout behavior while disabling credential persistence
for subsequent steps.

Source: Linters/SAST tools

playgrounds-ecosystem/modules/pages/index.vue (1)

49-82: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove duplicated font-family declaration.

The HTML comment mentions that @nuxt/fonts auto-detects the font usage from assets/main.css. Since .fonts-demo already has the font-family defined globally in assets/main.css, you can safely remove the duplicate font-family declaration in this scoped style block.

♻️ Proposed refactor
 .fonts-demo {
-  font-family: 'Space Grotesk', sans-serif;
   font-size: 1.5rem;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@playgrounds-ecosystem/modules/pages/index.vue` around lines 49 - 82, Remove
the duplicate font-family declaration from the scoped .fonts-demo style rule in
the page component, preserving its font-size and relying on the existing global
declaration in assets/main.css.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/ecosystem-playground.yml:
- Line 15: Update the actions/checkout@v4 step in the workflow to set
persist-credentials to false, preserving the existing checkout behavior while
disabling credential persistence for subsequent steps.

In `@playgrounds-ecosystem/modules/pages/index.vue`:
- Around line 49-82: Remove the duplicate font-family declaration from the
scoped .fonts-demo style rule in the page component, preserving its font-size
and relying on the existing global declaration in assets/main.css.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 94f1b979-19c1-4b88-bbdb-a4a3eb0b270f

📥 Commits

Reviewing files that changed from the base of the PR and between 7293498 and a8100dd.

⛔ Files ignored due to path filters (2)
  • playgrounds-ecosystem/modules/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • playgrounds-ecosystem/modules/public/sample.png is excluded by !**/*.png
📒 Files selected for processing (16)
  • .github/workflows/ecosystem-playground.yml
  • eslint.config.mjs
  • plans/vite-devtools-integration/04-ecosystem-playgrounds.md
  • plans/vite-devtools-integration/README.md
  • playgrounds-ecosystem/README.md
  • playgrounds-ecosystem/REPORTS.md
  • playgrounds-ecosystem/modules/app.vue
  • playgrounds-ecosystem/modules/assets/main.css
  • playgrounds-ecosystem/modules/content.config.ts
  • playgrounds-ecosystem/modules/content/index.md
  • playgrounds-ecosystem/modules/nuxt.config.ts
  • playgrounds-ecosystem/modules/package.json
  • playgrounds-ecosystem/modules/pages/index.vue
  • playgrounds-ecosystem/modules/pnpm-workspace.yaml
  • playgrounds-ecosystem/modules/tsconfig.json
  • tsconfig.json

…layground

Both were built into the playground and dogfooded first, but neither
registers a Nuxt DevTools tab in the versions tested (3.15.0 / 2.0.0) — there
was nothing to dogfood against, so remove them rather than keep them as dead
weight. The finding stays in REPORTS.md as the evidence for dropping them and
as raw material for an upstream question to each module.

The playground now covers three modules — nuxt-og-image, @nuxt/scripts,
@nuxt/fonts — all three of which do have a working DevTools tab. Docs (plan
04, the workstream README, and the playground's own README/REPORTS) are
updated to match.

Co-authored-by: opencode <noreply@opencode.ai>
antfubot and others added 2 commits July 15, 2026 01:33
…pm registry

modules/package.json now depends on @nuxt/devtools via
link:../../packages/devtools (a plain symlink, workspace-membership-
independent) instead of a plain npm version range. Both NUXT_DEVTOOLS_LOCAL
branches in nuxt.config.ts now always test this repo's own code:
'../../local' spawns a live nuxi dev subprocess for the devtools client
(HMR); the plain '@nuxt/devtools' import resolves through the link to
whatever's currently in packages/devtools/dist — a stub (pnpm run prepare)
or a full static build (pnpm run build).

Verified both: `nuxt build` succeeds against the stub, and `nuxt dev`
(without NUXT_DEVTOOLS_LOCAL) against a full build renders the real DevTools
UI with no console errors.

The workflow_dispatch smoke workflow now installs and stubs the root
workspace before installing/building the ecosystem one, since that link
target needs to exist. Docs (plan 04, playground README/REPORTS) updated to
match — this repo's own build is the only thing ever under test here now.

Co-authored-by: opencode <noreply@opencode.ai>
…n 00

Rebased feat/ecosystem-playgrounds onto main after #1021
(devframe-native hosts + nostics deprecation foundation) and
#1023 (client RPC registration fix) merged, and re-ran the full
dogfooding pass. No git conflicts during the rebase.

Findings added to REPORTS.md:
- The earlier DF0022 "RPC function not registered" console errors
  (refresh/callHook/onTerminalData/onTerminalExit/navigateTo) no longer
  reproduce — fixed by #1023.
- Plan 00's deprecation diagnostics are live and already flagging real
  ecosystem usage: NDT_DEP_0003 (extendServerRpc deprecated) fires from both
  @nuxt/fonts and nuxt-og-image's nuxtseo-shared dependency. NDT_DEP_0004
  (startSubprocess deprecated) fires from this repo's own local.ts dev
  helper, not from any ecosystem module.
- @nuxt/scripts's legacy addCustomTab still works but didn't trigger a
  matching deprecation diagnostic — flagged as a follow-up.

Everything else held: all three modules still load, all three tabs are
still reachable (still only via the SideNav overflow menu), builds still
succeed against both the stubbed and fully-built local @nuxt/devtools.

Co-authored-by: opencode <noreply@opencode.ai>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
plans/vite-devtools-integration/04-ecosystem-playgrounds.md (1)

213-215: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Do not describe caret ranges as pinned versions.

^ ranges constrain compatible updates but do not pin exact versions. Reword this to distinguish declared dependency ranges from the exact versions recorded in REPORTS.md.

Proposed wording
-- **Version drift.** Each module is pinned via a direct caret range in
+- **Version drift.** Each module uses a direct caret range in
   `playgrounds-ecosystem/modules/package.json`; exact resolved versions are
   recorded at the top of `REPORTS.md`.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plans/vite-devtools-integration/04-ecosystem-playgrounds.md` around lines 213
- 215, Reword the “Version drift” statement in the ecosystem playground
documentation to describe package.json entries as direct caret dependency
ranges, not pinned versions, and explicitly distinguish them from the exact
resolved versions recorded in REPORTS.md.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@plans/vite-devtools-integration/04-ecosystem-playgrounds.md`:
- Around line 213-215: Reword the “Version drift” statement in the ecosystem
playground documentation to describe package.json entries as direct caret
dependency ranges, not pinned versions, and explicitly distinguish them from the
exact resolved versions recorded in REPORTS.md.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1393e685-f85e-41e7-a9d5-37b8f7dd5d1d

📥 Commits

Reviewing files that changed from the base of the PR and between 9226f88 and c381dc3.

⛔ Files ignored due to path filters (1)
  • playgrounds-ecosystem/modules/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • .github/workflows/ecosystem-playground.yml
  • plans/vite-devtools-integration/04-ecosystem-playgrounds.md
  • playgrounds-ecosystem/README.md
  • playgrounds-ecosystem/REPORTS.md
  • playgrounds-ecosystem/modules/nuxt.config.ts
  • playgrounds-ecosystem/modules/package.json
🚧 Files skipped from review as they are similar to previous changes (4)
  • playgrounds-ecosystem/modules/package.json
  • .github/workflows/ecosystem-playground.yml
  • playgrounds-ecosystem/modules/nuxt.config.ts
  • playgrounds-ecosystem/README.md

…ounds

# Conflicts:
#	plans/vite-devtools-integration/04-ecosystem-playgrounds.md
#	plans/vite-devtools-integration/README.md
@antfu antfu merged commit 6079f1b into main Jul 15, 2026
5 of 8 checks passed
@antfu antfu deleted the feat/ecosystem-playgrounds branch July 15, 2026 05:02
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