#8364·monkeytype

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:

typescript
// 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):

typescript
// 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:

typescript
// 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:

typescript
if (git === undefined) throw new MonkeyError(500, "Git not available.");

Steps To Reproduce

  1. Deploy the backend where simpleGit(...) init throws (e.g. repo path unavailable).
  2. Approve a quote as a quote moderator.
  3. Endpoint responds with an unhandled TypeError rather than the expected 500 "Git not available." error shape.

Environment

  • Backend, master @ 91bd24bb8

Source: monkeytypegame/monkeytype