本文へ移動
cccskills
無料GitHub で公開

crouton-diagnostics-index

Symptom → root-cause lookup table for nuxt-crouton's recurring failure modes — exact error strings mapped to their known cause, fix, and evidence issue. Use when you hit an error you don't recognize in this repo, before debugging from first principles. Trigger phrases and symptoms: "Cannot resolve entry module .nuxt/hub/db/schema.entry.ts", "Could not load '@fyit/crouton'", "No migrations present", "No schema files found", "$setup.t is not a function", "does not provide an export named 'Map'", "no such table: translations_ui", "collection pages 500 in production", "the build was green but the app is broken", "is this a known issue?".

インストール方法を見る

含まれるファイル(1)

  • SKILL.md16.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

crouton-diagnostics-index

One lookup table: exact symptom → known root cause → fix → evidence. Check here FIRST — most errors in this repo have already been fought once and have a one-line answer. Two kinds of rows: pointer rows (the fix is fully documented in a canonical home — root CLAUDE.md, the db-migrations or e2e-smoke skill — so the row is just verdict + pointer) and full rows (code-derived fixes with no other home — this table IS their canonical home). No row retells an incident's story — "why this rule exists" always lives in sibling crouton-failure-archaeology.

Context for readers new to the repo: crouton is this monorepo's code-generation framework (schema JSON → full CRUD Nuxt layers); apps in apps//pocs/ consume packages/@fyit/crouton-* as Nuxt layers, some of them dist-consumed (must be built before use). Storage is NuxtHub → Cloudflare D1/KV/R2; deploys go to Cloudflare Workers.

When to use / when NOT to use

You wantGo to
"I hit error X — is it known?" — domain interpretation of a symptomthis skill
The PROCESS for a reported bug (first-bad-commit protocol, git log -S/bisect, ruling out non-code causes) — a HARD GATE before any fixbug-archaeology skill
The full narrative behind an incident (what was tried, why the fix is shaped that way, rejected approaches)sibling crouton-failure-archaeology
Install/build/typecheck trap depth (cold-start sequence, pins, toolchain)sibling crouton-build-and-env
Boot/seed/inspect/observe a running appsibling crouton-run-and-operate
Migration mechanics (build-first recipe, package-owned tables)db-migrations skill
Running the fixture smoke + its failure triagee2e-smoke skill

Rule of engagement: a table hit here does NOT waive the bug-archaeology gate for a reported bug — it makes the archaeology fast (you already know the likely first-bad class; confirm and record it on the issue).

The lookup table

Boot / install / typecheck

Symptom (exact text where known)Root causeFix / actionEvidence
Cannot resolve entry module .nuxt/hub/db/schema.entry.tsapp config used hub: { database: true }use hub: { db: 'sqlite' } — canonical: root CLAUDE.md §Critical Gotchasroot CLAUDE.md; depth: crouton-build-and-env
Could not load '@fyit/crouton' (or any @fyit/*) during install / nuxt prepare / bootdist-consumed package not built; a bare postinstall: nuxt prepare aborts the whole installpnpm build:packages + guarded postinstall — canonical: root CLAUDE.md §postinstall guardroot CLAUDE.md; depth: crouton-build-and-env §2
Could not load @fyit/crouton-devtools in a DEPLOY workflow onlyshared layer-build cache keyed without build-set identity (fixed)should not recur; if it does, suspect the deploy workflow's cache key#740 → #745; why: crouton-failure-archaeology §B
Thousands of typecheck errors at oncenuxt typecheck run outside an app dirpnpm typecheck from root — canonical: root CLAUDE.md §MANDATORY TypeScript Checkingroot CLAUDE.md
Cannot find module '@vue/compiler-sfc' (or similar phantom type error) after a dep bumpstale/unhoisted node_modules, not coderm -rf node_modules && pnpm install — canonical: dependency-sweep skillthe #424 class
Code "regression" right after pulling / switching worktrees, git log shows nothingstale local install (e.g. missing pnpm symlink) — non-code causerule out non-code causes BEFORE blaming a commit — protocol: bug-archaeology skill#424; story: crouton-failure-archaeology §C
npx playwright install fails → "no browser"download host egress-blocked; chromium IS pre-installed at /opt/pw-browsers/never conclude "no browser" — canonical: root CLAUDE.md §headless browser; crouton-harness-observability §5#629
EMFILE: too many open files, watch crashes pnpm dev — but only in a ~/.supacode worktree**/node_modules/** watch-ignores compile with picomatch dot: false, which never matches across the hidden .supacode path segment → unstorage's fs-driver watcher swallows the whole .pnpm store (184k+ FDs → kern.maxfilesperproc). NOT a ulimit problemfixed by patches/unstorage.patch (dot: true), auto-applied on pnpm install; if it recurs, check the patch survived an unstorage version bump#1273

Database / migrations / seeding

SymptomRoot causeFix / actionEvidence
No schema files found for path config ['.nuxt/hub/db/schema.mjs'] from db:generatethe bundled schema .mjs exists only after nuxt buildRETIRED BY DESIGN on resolver apps (#1445 WS2): a current drizzle.config.ts calls resolveSchemaSourcesSync and never reads .nuxt, so this string cannot occur. All three apps here are on the resolver since #1456, so seeing this means an external/older scaffold → build-first recipe, canonical: db-migrations skill#523/#1445; packages/crouton-cli/lib/utils/schema-sources.ts
No migrations present on the STAGING migrate step, though migrations exist on disk--config .output/server/wrangler.json doubles the relative migrations_dirdrop --config from the staging apply — canonical: root CLAUDE.md §Scripts#138
No migrations present on a FRESH scaffold's first deployold CLI ran db:generate with no build → silently zero migrationsCause changed (#1445 WS2). The CLI no longer builds at all — it resolves the graph directly. On a cold scaffold crouton config soft-defers the migration (↻ Migration deferred … re-run: pnpm db:generate, exit 0, #1457); if that line was missed, no migration exists to deploy. Fix: run pnpm db:generate and commit the result. Legacy .nuxt-bundle apps still need the build-first recipe — canonical: db-migrations skill#523/#457/#1445/#1457; why: crouton-failure-archaeology §B
Fresh app 500s on every admin load; server log shows no such table: translations_uiapp gets crouton-i18n transitively (via crouton-core) but never created the overrides tablealready fixed by graceful degradation — reads try/catch "no such table" → [], useT() falls back to bundled locale JSON (packages/crouton-i18n/server/utils/translationsQueries.ts). Seeing this on current code ⇒ stale package dist — rebuild. Do NOT "fix" by shipping the migration from the package — rejected approach; why: crouton-failure-archaeology §B (#685). Package-owned-table pattern: db-migrations skill#680 → #700 (fix), #685 (rejected)
Ran db:seed but the running dev app shows no dataseeder writes miniflare D1; nuxt dev reads <app>/.data/db/sqlite.db — two different filesowned by sibling crouton-run-and-operate (the miniflare-vs-.data split)code-derived; see that skill

Runtime / SSR / dev server

SymptomRoot causeFix / actionEvidence
SSR error $setup.t is not a function (or other composable suddenly "not a function")duplicate layer loading: the app re-extends @fyit/crouton-auth / -admin / -i18n alongside @fyit/crouton-core, which already bundles all threeremove the explicit extends — core provides thempackages/crouton-cli/lib/utils/framework-packages.ts; packages/crouton-cli/CLAUDE.md
module '.../maplibre-gl.js' does not provide an export named 'Map' — maps forms crash, collection viewer never mounts (dev)maplibre-gl v5 is CJS-only; having it in build.transpile makes Vite resolve named imports against raw CJSit must be in vite.optimizeDeps.include (esbuild synthesizes named exports), NOT in build.transpile — already set in packages/crouton-maps/nuxt.config.ts; the pattern generalizes to any CJS-only dep#624; caught by the with-maps e2e fixture; story: crouton-failure-archaeology §B
Collection pages 500 under production SSR (nuxt preview / prod preset) while nuxt dev worksOPEN — no confirmed root cause. Best current description: "an internal data-fetch loses the auth cookie"no fix yet; tracked #246. Workaround everywhere: the e2e harness deliberately runs against nuxt dev (source of its huge timeouts). Don't burn a session re-deriving this; if you actually root-cause it, record on #246e2e/CLAUDE.md; .claude/skills/e2e-smoke/SKILL.md
pnpm dev hard-fails with ENOENT in a devtools-enabled app that has no events packageserver handlers with literal cross-package import specifiers — nitro eagerly resolves them at build; fixed by registering the events RPC handlers only if (hasEventsPackage)fixed in packages/crouton-devtools/src/module.ts; treat as a footgun CLASS when writing server handlers that import another package's paths#799
node .output/server dies with ERR_MODULE_NOT_FOUND on drizzle-orm paths (node-server preset)Nitro's externalizer mangles drizzle-orm's internal cross-imports in this pnpm monorepo (broken absolute pnpm-store paths)inline it: nitro.externals.inline: ['drizzle-orm'] for the non-Cloudflare target — see apps/kassa/nuxt.config.ts; any second node-server app WILL hit this#798
z.record(valueSchema) mysteriously fails under Vitest + Zod v4Zod v4 bug with the implicit-key formalways z.record(keySchema, valueSchema) — encoded as a do-not-use sanity testpackages/crouton-i18n/app/composables/__tests__/zod-sanity.test.ts

Tests / e2e / evidence

SymptomRoot causeFix / actionEvidence
exports is not defined in e2e config/specsimport.meta.url used — repo root is CommonJS, Playwright transpiles to CJSuse __dirname / join in e2e/** — canonical: e2e/CLAUDE.md §Gotchase2e/CLAUDE.md
A piped command "succeeded" but the run clearly failed (classic: browser launch)… | tail masks the real exit codecheck the tail content, never $? after a pipe — canonical: e2e-smoke skillthat skill
Could not initialize provider bunny/google in dev/test logsfont-provider egress 403 — noise; ignorecanonical: e2e-smoke skillthat skill
e2e auth/setup failure ("Could not authenticate test user")missing BETTER_AUTH_SECRET or stale e2e/.auth/ statetriage owned by the e2e-smoke skill (delete .auth/ + rerun)that skill, Step 4
Green build + clean typecheck + live deploy URL — app 500s on every requestthe "proxies for done lie" class (missing server/db/schema.ts, ported POC code, self-reported success)verify with a REAL probe: node scripts/smoke-deployed.mjs --url <preview> … (login + CRUD round-trip), never a build signal. Case law + why: crouton-failure-archaeology §A; the done-rule: AGENTS.md §"Done is signed off, not asserted"#988, #603, #1019

Silently-OFF features that look like bugs

Things a user may report as broken that are deliberately disabled — don't debug them as regressions:

"Bug" reportRealityEvidence
"Password breach check (haveIBeenPwned) isn't firing"commented out on purpose: better-auth's plugin reads AsyncLocalStorage inside password.hash(), which is lost on CF Workers (confirmed on /reset-password); path-exclusion doesn't helppackages/crouton-auth/server/lib/auth.ts (KNOWN ISSUE + TODO: Re-enable markers)
"Pages API responses aren't ISR-cached"ISR for pages is disabled — see the contradiction belowpackages/crouton-pages/nuxt.config.ts
"Non-admin team members can edit UI translations"known gap, not a regression: the admin check is a TODO (// TODO: Add admin check when isTeamAdmin is available), only membership is enforcedpackages/crouton-i18n/server/api/teams/[id]/translations-ui/index.{post,patch,delete}.ts

⚠️ The ISR routeRules contradiction (the repo contradicts itself)

  • Root CLAUDE.md (§"ISR/SWR Caching") recommends exactly: '/api/teams/*/pages/**': { isr: 3600 }.
  • packages/crouton-pages/nuxt.config.ts has that exact rule commented out and marked BROKEN: conflicts with pages-pages layer routes — "Wildcards like '/api/teams/*/pages/**' break layer route matching in Nitro 2.13.1".
  • apps/velo/nuxt.config.ts independently warns: the wildcard "conflicts with radix3's :id parameter routing and breaks ALL /api/teams/:id/* generated collection routes".

The nominal doc trust order (see crouton-docs-trust-map §1) doesn't settle this — it's a doc-vs-working-code conflict, not doc-vs-doc: two independent code comments record a live runtime failure the doc's example causes. Operational rule: do NOT add wildcard /api/teams/*/... routeRules. Whether a newer Nitro fixes the radix3 conflict is unverified — re-test before re-enabling. Root CLAUDE.md's ISR example was fixed under issue #1095 (it now shows the broken rule only as an explicit ❌).

Discriminating experiments (cheap probes that split hypothesis classes)

Run the ONE probe that halves your hypothesis space before reading any code:

  1. Stale install vs code bug — rm -rf node_modules && pnpm install && pnpm build:packages, retry. Gone ⇒ non-code cause (#424 class); record that per bug-archaeology, don't "fix" code.
  2. Source vs dist skew — fix exists in packages/* source but the app still misbehaves? The package is dist-consumed and stale: pnpm --filter @fyit/<pkg> build (or pnpm build:packages), retry.
  3. Data vs code — wipe the local dev DB (rm -rf <app>/.data) and reboot; NuxtHub re-applies all migrations at dev boot. Gone ⇒ bad data/state, not code.
  4. Local vs deployed — reproduce against a fixture (E2E_FIXTURE=minimal pnpm test:e2e) or local dev. Only-deployed failures point at env/secret/binding: npx wrangler tail <worker> + node scripts/db-counts.mjs --app <app> --env staging (see crouton-run-and-operate).
  5. Dev vs prod preset — works under nuxt dev, fails built? Check preset-conditional code (isCloudflare, NITRO_PRESET) and remember collection pages 500 under production SSR anyway (#246) — don't attribute that known-open failure to your change.

Provenance and maintenance

Every error string was grepped to its source in the working tree; file paths and symbol names above are the durable anchors — line numbers are deliberately kept OUT of the prose (they drift; re-locate with the greps below). Issue numbers (#138 #246 #424 #457 #523 #603 #624 #680 #685 #700 #740 #745 #798 #799 #988 #1019) are cited from the discovery sweep's issue summaries — check the issue before relying on its narrative. The #740–#745 cache-key story and the #988/#603/#1019 false-green class are issue-derived, not reproduced here (their narratives live in crouton-failure-archaeology).

verified: 2026-07-02

grep -n "database: true\|isr: 3600" CLAUDE.md                          # isr: 3600 should appear only inside the commented ❌ example (#1095)
grep -n "isr" packages/crouton-pages/nuxt.config.ts apps/velo/nuxt.config.ts   # contradiction comments still live? (was pages:110-115, velo:75-77)
grep -n "500 under production SSR" e2e/CLAUDE.md                       # #246 still open? (was e2e/CLAUDE.md:307-309)
grep -n "haveIBeenPwned" packages/crouton-auth/server/lib/auth.ts      # breach check still off? (was auth.ts:708-714)
grep -rn "TODO: Add admin check" packages/crouton-i18n/server/api/     # i18n admin-check gap still open? (unfixed as of 2026-07-02)
grep -n "no such table" packages/crouton-i18n/server/utils/translationsQueries.ts   # graceful degradation still in place? (was :124)
grep -n "optimizeDeps" packages/crouton-maps/nuxt.config.ts            # #624 fix still in place? (was :44-63)
grep -n "hasEventsPackage" packages/crouton-devtools/src/module.ts     # #799 guard still in place? (was :157-163)
grep -n "drizzle-orm" apps/kassa/nuxt.config.ts                      # #798 inline still in place? (was :93-101)
grep -n "z.record" packages/crouton-i18n/app/composables/__tests__/zod-sanity.test.ts   # sanity test still present? (was :55-66)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

a11y

無料

Accessibility review for Vue surfaces — the code-cleaning analog of /code-review and /simplify, pointed at WCAG/ARIA. Reviews just your diff (or a package/file), rates findings by severity, and either comments inline on the PR (--comment) or applies the safe fixes for you (--fix). Steers the depth-aware `a11y` subagent. Use when asked to "check accessibility", "a11y this", "audit ARIA/keyboard", or run /a11y.

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

ask-human

無料

Emit a blocking question the owner can read in ~10 seconds and answer in one reply — the scannable, recommendation-first handoff every agent posts when it hits a fork it can't own. Leads with the one decision + a recommendation, carries the 🤖 provenance header, doubles as the

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

audit

無料

Audit packages for documentation completeness, detect drift between code and docs, and maintain documentation quality across the monorepo. Use when checking package docs, running audits, or reviewing documentation health.

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

Author a placeable layout block that looks right at ANY pane size. The one hard rule — size to the PANE with container queries (@container), never the viewport — plus list/form playbooks and the sizing contract (minWidth etc.) the viability metric reads. Use when adding/converting a croutonLayoutBlocks block, or when a block overflows/breaks in a narrow pane.

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

When a bug or regression is reported, the FIRST step — before fixing — is to research how and when it was introduced (git archaeology), then record that finding on the tracking issue/PR. Use the moment a bug, error, broken build, or "this used to work" is reported, before writing a fix. Produces a first-bad-commit (or "not a code regression") note you paste onto the issue.

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

commit

無料

Smart, granular git commits following monorepo conventions. Analyzes changes, filters to session-relevant files, groups by intent, and uses conventional commit format. Use when committing code changes.

日本語の概要は準備中です。原文の説明を表示しています。

FriendlyInternet/nuxt-crouton102026年10月13日 更新

FriendlyInternet のスキルをすべて見る

このスキルの問題を報告する