From 87c1610816e9fa02206501bd0a396964cecb7910 Mon Sep 17 00:00:00 2001 From: Jayesh Betala Date: Sun, 31 May 2026 12:40:46 +0530 Subject: [PATCH] fix(diff-scope): detect backend code in .mjs/.cjs/.mts/.cts files gstack-diff-scope only matched *.ts/*.js for backend scope, so pure-ESM Node projects (.mjs/.cjs) and explicit-module TypeScript (.mts/.cts) set no scope flag at all. The Review Army then skips the backend/security reviewers for those changes. Add the four extensions to the existing backend case (purely additive) plus a regression test. Fixes #1810 Co-Authored-By: Claude Opus 4.8 (1M context) --- bin/gstack-diff-scope | 2 +- test/diff-scope.test.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bin/gstack-diff-scope b/bin/gstack-diff-scope index 36918381c..7e37d3a21 100755 --- a/bin/gstack-diff-scope +++ b/bin/gstack-diff-scope @@ -75,7 +75,7 @@ while IFS= read -r f; do # Backend: everything else that's code (excluding views/components already matched) *.rb|*.py|*.go|*.rs|*.java|*.php|*.ex|*.exs) BACKEND=true ;; - *.ts|*.js) BACKEND=true ;; # Non-component TS/JS is backend + *.ts|*.mts|*.cts|*.js|*.mjs|*.cjs) BACKEND=true ;; # Non-component TS/JS is backend (incl. ESM .mjs/.mts + CJS .cjs/.cts) esac done <<< "$FILES" diff --git a/test/diff-scope.test.ts b/test/diff-scope.test.ts index 2130a3e57..5cb67c310 100644 --- a/test/diff-scope.test.ts +++ b/test/diff-scope.test.ts @@ -84,6 +84,17 @@ describe('gstack-diff-scope', () => { expect(scope.SCOPE_TESTS).toBe('true'); }); + test('detects backend via ESM/CJS extensions (.mjs/.cjs/.mts/.cts)', () => { + // Pure-ESM Node projects ship backend code as .mjs/.cjs (and explicit-module + // TypeScript as .mts/.cts). These must register as backend so the review + // army's backend/security reviewers fire on such changes. + for (const f of ['server.mjs', 'helper.cjs', 'mod.mts', 'legacy.cts']) { + const dir = createRepo([f]); + const scope = runScope(dir); + expect(scope.SCOPE_BACKEND).toBe('true'); + } + }); + // --- New scope signals (Review Army) --- test('detects migrations via db/migrate/', () => {