DOCS · FOR TEAMS

Troubleshooting

Symptom, cause, fix — for the failures that actually happen.

On this page

Start with specd doctor. It reports config, server, database, embeddings, credential, identity and default project in dependency order, and skips what an earlier failure makes unknowable — so one broken thing reads as one broken thing.

Getting it running

SymptomCauseFix
DATABASE_URL is required — copy .env.example to .envNo .env at the repo root yetcp .env.example .env, then retry.
Same error, .env existsNot at the repo root, or the value is emptygrep DATABASE_URL .env from the repo root should print a real value — the loader looks there, not at the shell's cwd.
API cannot reach Postgrespnpm infra:up never ran, or Docker is downdocker ps should list specd-postgres as healthy.
EADDRINUSE on :3000 / :4000A previous pnpm dev is still runninglsof -nP -iTCP:3000 -sTCP:LISTEN, stop it, retry.
Schema-shaped error right after pullingNew migrations landedpnpm db:migrate — idempotent.
Web app renders but has no data in itThe API died at startup, and node --watch keeps a crashed process alive — so pnpm dev still looks healthycurl localhost:4000/api/health; nothing answering confirms it. The reason is in the API's own output, scrolled past by the web server's. The next row is the usual cause.
@specd/db does not provide an export named …packages/*/dist is missing or older than its srcpnpm --filter "./packages/*" build. dist is gitignored and no install hook builds it, so this is also needed after any pull that touched a package.
Web dev server 500s after pnpm buildnext build and next dev share apps/web/.next in incompatible shapesStop the dev server, rm -rf apps/web/.next, start it again.

Tests and CI

SymptomCauseFix
A whole test file reports skippedNo database reachable — or the suite's own beforeAll threwBring Postgres up. If it persists, suspect the suite's setup rather than the database.
CI fails complaining that tests skippedThe Postgres-dependent suites self-skipped in CIThat is the point — a broken CI database would otherwise look identical to a pass. Fix the service, not the check.
pnpm typecheck fails on a clean checkoutThe workspace packages have not been builtpnpm --filter "./packages/*" build first; pnpm typecheck does this itself.

Agents and integrations

SymptomCauseFix
Spec generation fails with an error about credentialsNo model credential for this projectSet ANTHROPIC_API_KEY, or SPECD_AI_MODE=subscription_runner with Claude Code signed in. See Bring your own model.
Merges are not detectedNo webhook reaching the APILocally, forward deliveries (gh webhook forward or a tunnel) — or use the "I merged it" button. See GitHub.
Every webhook delivery fails the signature checkGITHUB_WEBHOOK_SECRET does not match the sendergh webhook forward re-signs with its own secret and prints it — use that value while forwarding.
The API refuses to start, naming an embedding dimensionThe configured embedding model does not produce 1024-dimension vectorsUse one that does (mxbai-embed-large fits; nomic-embed-text is 768).
A dispatched job never startsNo paired runner, or the daemon is not runningCheck Settings → runners for last-heard-from. specd runner pair reports connectivity at pairing time for exactly this reason.
A job keeps being reclaimed and finally failsThe runner dies mid-jobAfter three reclaims specd fails it as repeatedly abandoned rather than bouncing forever. Look at the runner, not the queue.
A build reports could not run rather than failedThe toolchain is missing on the machine that built itNothing was proved either way. Fix the environment and re-run — this is deliberately not reported as a test failure.

Resetting

pnpm infra:down is a plain docker compose down — the data volume survives. For a true reset:

terminal
docker compose down -v
pnpm infra:up && pnpm db:migrate && pnpm db:seed