From b7481cf346c80fc3b178cb7c60c9459865a52f8c Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Thu, 12 Feb 2026 14:50:54 +0700 Subject: [PATCH] fix(maintainability): require git-tracked scan for gate --- docs/project-roadmap.md | 2 +- scripts/maintainability-baseline.js | 32 ++++------------------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/docs/project-roadmap.md b/docs/project-roadmap.md index 3c3a3d64..2ef95bca 100644 --- a/docs/project-roadmap.md +++ b/docs/project-roadmap.md @@ -201,7 +201,7 @@ All criteria achieved: - `bun run maintainability:check` - `npm run maintainability:check` -The baseline/check scripts enumerate git-tracked files under `src` for deterministic results, with filesystem traversal fallback when git is unavailable. +The baseline/check scripts enumerate git-tracked files under `src` for deterministic results and fail fast if git file listing is unavailable. The check mode supports a maintainability regression gate that blocks increases in: - `process.exit` references diff --git a/scripts/maintainability-baseline.js b/scripts/maintainability-baseline.js index f312a4f3..83c7cf4e 100644 --- a/scripts/maintainability-baseline.js +++ b/scripts/maintainability-baseline.js @@ -118,27 +118,6 @@ function parseArgs(argv) { return options; } -function collectFilesFromFileSystem(dirPath) { - const collected = []; - const entries = fs - .readdirSync(dirPath, { withFileTypes: true }) - .sort((left, right) => left.name.localeCompare(right.name)); - - for (const entry of entries) { - const fullPath = path.join(dirPath, entry.name); - if (entry.isDirectory()) { - collected.push(...collectFilesFromFileSystem(fullPath)); - continue; - } - - if (entry.isFile()) { - collected.push(fullPath); - } - } - - return collected; -} - function collectTrackedFilesFromGit() { try { const output = execFileSync('git', ['ls-files', '-z', '--', 'src'], { @@ -169,17 +148,14 @@ function collectTrackedFilesFromGit() { } }); } catch { - return null; + throw new Error( + 'Unable to enumerate tracked files via git. Run this command from a git checkout with git installed.' + ); } } function collectFilesInSrc() { - const trackedFiles = collectTrackedFilesFromGit(); - if (trackedFiles !== null) { - return trackedFiles; - } - - return collectFilesFromFileSystem(SRC_DIR); + return collectTrackedFilesFromGit(); } function countLines(content) {