Catch frontend calls your backend does not answer.

The agent edits the client in one prompt and the server in another. The button sends a POST, the route only accepts GET, both files compile, and nothing happens in production.

npx @neuralaxis/vibedoctor scan

What it looks like

It compiles. It ships. It’s wrong.

Type checks and unit tests usually look at one side at a time. A mismatch between the two only shows up when a real user clicks.

It is the most common way an AI-built feature is “done” and still does nothing.

src/client.ts
await fetch("/api/user", { method: "POST" });
src/server.ts
app.get("/api/user", (_req, res) => {

Example: fixtures/flow-mismatch in the VibeDoctor repository.

What VibeDoctor reports

A ranked finding with the exact location.

  • Client calls: fetch and axios in JavaScript and TypeScript, requests and httpx in Python.
  • Express-style routers (app, router, server .get/.post/…), Next.js app/api route.ts and pages/api.
  • FastAPI and Flask 2 decorators (@app.get, @router.post, …) and Flask add_url_rule.
FindingSeverityEvidenceFrom
HTTP call has no matching backend route
“POST /api/user has no matching server route.” The path exists, the method does not.
high verified flow-doctor
Route handler is not defined
A route is wired to a function that is neither defined nor imported.
high verified flow-doctor
Unreachable handler in a route file
A handler sits next to the routes but nothing calls it or routes to it.
medium verified flow-doctor

Evidence grades say how sure the finding is. What verified, observed and heuristic mean →

How to fix it

  1. Decide which side is right, then change the other to match.
  2. Add one test that calls the route the way the UI does.
  3. Re-run the scan to confirm the pair now matches.

What this check can’t see

  • Calls to paths that exist nowhere are not reported by default, because in a monorepo they often belong to another service.
  • Template-string URLs, absolute URLs, and fetch calls with no explicit method are skipped rather than guessed.
  • Flask's @app.route decorator is not matched yet. Parsing is line-based, not a full call graph.

Fixing it, and the limits of this check

Run it

Check your repo now.

npx @neuralaxis/vibedoctor scan

Runs locally on JavaScript, TypeScript and Python repos. Hand the result to Cursor, Claude Code, Codex or Copilot with agent-plan. Agent setup →