noboil

Troubleshooting

Common issues and solutions when working with noboil.

Setup & Installation

SymptomCauseFix
bun install fails with workspace resolution errorsPackage references use incorrect protocolVerify package.json uses workspace:* not relative paths
noboil init hangsNetwork timeout cloning from GitHubPass --skip-install, then run bun install separately from the project root
Docker Compose fails to startPort conflicts on 4200 (SpacetimeDB)Run docker compose ps to identify conflicts, then stop the conflicting service
Missing environment variables.env incomplete or not generatedRun noboil doctor to check project health and see which vars are missing

TypeScript & Type Errors

SymptomCauseFix
name prop not autocompleting in Form fieldsSchema not passed to useForm or useFormMutationPass your Zod schema as the schema option. Check the import path resolves correctly
api.tableName accepts wrong casing at runtimeConvex's anyApi Proxy accepts any property name without a type errorMatch the EXACT filename casing in convex/. Rely on E2E tests to catch casing drift
Type errors after schema changeGenerated bindings are staleRegenerate: bunx convex dev --once (Convex) or spacetime generate (SpacetimeDB)
workspace:* resolution failsbun install run from app directory instead of rootAlways run bun install from the monorepo root

Build & Lint

SymptomCauseFix
bun fix fails on next-env.d.tsNext.js generates this file with double quotes; biome enforces single quotesAdd web/**/next-env.d.ts to biome ignore. This is already handled in the repo config
oxlint and eslint sort-keys conflictoxlint uses ASCII sort order; eslint perfectionist uses natural sortDisable eslint/sort-keys in the oxlint config
readonly/ui lint errorsManual edits to readonly/ui break the generated outputNever edit readonly/ui directly. It is synced from cnsync by pm4ai
Turbo env var not passed to tasksNew env var not declared in Turbo configAdd the var to globalPassThroughEnv in turbo.json

Convex-Specific

SymptomCauseFix
Mutation fails silentlyAuth check failing before the mutation body runsEvery factory enforces authentication by default. Confirm the user is signed in before calling
RATE_LIMITED errorDefault rate limiting is active on the mutationSee the Security docs to customize or disable rate limits for your use case
File upload failsFileApiProvider not in the component treeWrap your app with FileApiProvider. Verify storage configuration in your Convex dashboard
Schema deployment failsField type conflict or stale deploymentRun bunx convex dev --once to redeploy. Check the Convex dashboard for field type conflicts

SpacetimeDB-Specific

SymptomCauseFix
Module publish failsDocker not running or SpacetimeDB container unhealthyRun docker compose ps to verify the SpacetimeDB container is up and healthy
WebSocket connection refusedNEXT_PUBLIC_SPACETIMEDB_URI missing or wrongCheck .env for the correct URI. Run noboil stdb use local to reset to local defaults
Generated bindings outdatedSchema changed without regeneratingRe-run spacetime generate after any schema change
Column name mismatch at runtimeSpacetimeDB columns are snake_case in Rust, camelCase in generated TypeScriptUse the camelCase names from the generated bindings, not the Rust column names

Testing

SymptomCauseFix
E2E test hangs on startupDev server still running from a previous sessionKill it first: pkill -9 -f "next". Clean stale results: rm -rf test-results
waitForLoadState('networkidle') hangsConvex subscriptions keep the WebSocket connection activeUse waitForSelector() to wait for a specific element instead
Flaky test countsTests interfering with each other when run in parallelRun with --workers=1 to serialize execution
Backend tests failConvex functions not deployed to test environmentDeploy first: CONVEX_TEST_MODE=true bun with-env convex dev --once
SymptomCauseFix
E2E test hangs on startupDev server still running from a previous sessionKill it first: pkill -9 -f "next". Clean stale results: rm -rf test-results
waitForLoadState('networkidle') hangsSpacetimeDB WebSocket subscriptions keep the connection activeUse waitForSelector() to wait for a specific element instead
Flaky test countsTests interfering with each other when run in parallelRun with --workers=1 to serialize execution
Backend tests failModule not published to test environmentPublish first: SPACETIMEDB_TEST_MODE=true bun spacetime:publish

DevTools

SymptomCauseFix
DevTools panel not showingApp running in production modeDevTools only render when NODE_ENV=development. Confirm you're running the dev server
Subscription monitor emptyComponent not wrapped in the correct providerCheck that the component using subscriptions is inside the appropriate database provider

On this page