dropthejase makes louis fail out loud, not in silence

Three commits give every part of the API proper error handling - so when something breaks, you find out why instead of staring at a hang.

infrastructure

Until now, if a request to this fork hit a bad database setting or a missing piece of configuration, it could either freeze with no explanation or spit back a blank server error with nothing in the logs. dropthejase went through the whole back end and wrapped every request in error handling that names the exact operation that failed and writes it to the logs. Same request, same result when things work - but when they don't, you get a clear failure and a trail to follow.

The same pass also fixed a routing mistake that had quietly made one document-upload step unreachable, because the system was matching it to the wrong handler.

So what Anyone self-hosting this fork who's chasing unexplained failures should care - this is the kind of plumbing that turns a mystery outage into a five-minute log check.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

3 commits from dropthejase/louis, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
478ee117 fix(api): correct Express route ordering and add try/catch to all project/chat handlers Jason Lee 2026-05-13 ↗ GitHub
commit body
POST /:projectId/documents/prepare was registered after the /:projectId/documents/:documentId
wildcard route. Express matched the literal string "prepare" as :documentId, ran the copy-doc
handler, and issued WHERE id = :id with value "prepare" against a uuid column, producing
"operator does not exist: uuid = text".

Fix: move prepare route registration before the :documentId wildcard in projects.ts.

Also add try/catch to every async route handler in projects.ts and the GET / handler in
chat.ts. Without these, an unhandled async rejection killed the Lambda process on the next
invocation (Runtime.UnhandledPromiseRejection -> Runtime.ExitError), causing silent failures
with no useful logs and making the route ordering bug very hard to diagnose.
a63cc7e7 fix(api): wrap all uncovered async route handlers in try/catch across tabular.ts and chat.ts Jason Lee 2026-05-13 ↗ GitHub
ec4a252c fix(api): wrap uncovered async route handlers in try/catch (documents, downloads, user, workflows) Jason Lee 2026-05-13 ↗ GitHub

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-353.md from inside the repo you want the changes in.

⬇ Download capture-thread-353.md