fix: resolve 6 production Sentry errors

- Prevent @fastify/static double-registration crash via decorateReply guard
- Fix non-ASCII filename header encoding (X-Output-Filename + RFC 5987 Content-Disposition)
- Add EACCES error handling to all startup mkdir calls with actionable messages
- Add WAL autocheckpoint and journal size limit to prevent unbounded SQLite growth
- Fix Python sidecar EPIPE handling to reject pending requests and trigger restart
- Ensure Docker entrypoint creates all subdirectories before chown
This commit is contained in:
SnapOtter
2026-06-06 16:05:59 +08:00
parent cad6a7618c
commit 66e503730d
12 changed files with 84 additions and 16 deletions
+14 -1
View File
@@ -153,7 +153,20 @@ function startDispatcher(): ChildProcess | null {
env: buildMinimalEnv(),
});
child.stdin?.on("error", () => {});
child.stdin?.on("error", (err: NodeJS.ErrnoException) => {
if (err.code === "EPIPE" || err.code === "ERR_STREAM_DESTROYED") {
console.error(
`[bridge] Dispatcher stdin pipe broken (${err.code}), rejecting pending requests`,
);
for (const [id, req] of pendingRequests.entries()) {
req.reject(new Error("Python dispatcher stdin closed unexpectedly"));
pendingRequests.delete(id);
}
recordCrash();
dispatcher = null;
dispatcherReady = false;
}
});
let stderrBuffer = "";