Bug (backend): dead null check in newQuotes.approve() — git === null never true, git init failure crashes with raw TypeError
Author: priyanshu1976Created Aug 26, 2026Updated Aug 26, 2026
Did you clear cache before opening an issue?
- I have cleared my cache
Is there an existing issue for this?
- I have searched the existing open and closed issues
Does the issue happen when logged in?
N/A
Does the issue happen when logged out?
N/A (backend source bug)
Does the issue happen in incognito mode when logged in?
N/A
Does the issue happen in incognito mode when logged out?
N/A
Issue details
Current Behavior
In backend/src/dal/new-quotes.ts, git is initialized via tryCatchSync at module load:
// new-quotes.ts:33-35
const { data: git, error } = tryCatchSync(() =>
simpleGit(path.join(__dirname, PATH_TO_REPO)),
);On failure this yields data === undefined (which add() checks correctly):
// new-quotes.ts:59
if (git === undefined) throw new MonkeyError(500, "Git not available.");But approve() checks against null instead, making the guard dead code:
// new-quotes.ts:150
if (git === null) throw new MonkeyError(500, "Git not available.");If git initialization failed at import time, the check passes, execution reaches line 181 (await git.pull("upstream", "master")) and crashes with a raw TypeError: Cannot read properties of undefined instead of the intended structured 500 MonkeyError.
Expected Behavior
Line 150 should mirror line 59:
if (git === undefined) throw new MonkeyError(500, "Git not available.");Steps To Reproduce
- Deploy the backend where
simpleGit(...)init throws (e.g. repo path unavailable). - Approve a quote as a quote moderator.
- Endpoint responds with an unhandled TypeError rather than the expected
500 "Git not available."error shape.
Environment
- Backend,
master@ 91bd24bb8
Source: monkeytypegame/monkeytype