From 17746bb98bbd41be61ffb54832baec4b48fc7e7c Mon Sep 17 00:00:00 2001 From: Operator & Codex Date: Mon, 11 May 2026 08:35:35 +0200 Subject: [PATCH] Fix test status stamping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build: pass | Tests: pass — 2380 passed (175 files) --- hooks/prepare-commit-msg | 13 +++++++++++++ scripts/memory/refresh-skills-artifact.mjs | 7 ++++--- scripts/write-test-build-status.sh | 2 +- src/refresh-skills-artifact.test.ts | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/hooks/prepare-commit-msg b/hooks/prepare-commit-msg index f6344ec..ddcef6b 100755 --- a/hooks/prepare-commit-msg +++ b/hooks/prepare-commit-msg @@ -55,6 +55,19 @@ FOOTER=$(node -e ' process.stdout.write(footer); ' "$BUILD_PATH" "$TEST_PATH") +node -e ' + const fs = require("fs"); + const file = process.argv[1]; + let text = fs.readFileSync(file, "utf8"); + const footerRe = /\s*\n---\n(?:\s*\n)*(?:Build:[^\n]*(?:\n(?:\s*\n)*Tests:[^\n]*)?|Tests:[^\n]*)(?:\s*\n)*$/u; + let previous; + do { + previous = text; + text = text.replace(footerRe, ""); + } while (text !== previous); + fs.writeFileSync(file, text.trimEnd() + "\n"); +' "$COMMIT_MSG_FILE" + { printf '\n---\n' printf '%s\n' "$FOOTER" diff --git a/scripts/memory/refresh-skills-artifact.mjs b/scripts/memory/refresh-skills-artifact.mjs index 906d22f..6846946 100755 --- a/scripts/memory/refresh-skills-artifact.mjs +++ b/scripts/memory/refresh-skills-artifact.mjs @@ -119,10 +119,11 @@ export function isKnowledgeSource(file) { export function collectChangedFiles(options) { const files = new Set(); const diffFilter = '--diff-filter=ACMRTUXBD'; + const listGitLines = options.gitLines ?? gitLines; if (options.base) { if (refExists(options.base)) { - for (const file of gitLines(['diff', '--name-only', diffFilter, `${options.base}...HEAD`])) { + for (const file of listGitLines(['diff', '--name-only', diffFilter, `${options.base}...HEAD`])) { files.add(file); } } else { @@ -131,10 +132,10 @@ export function collectChangedFiles(options) { } if (!options.committedOnly) { - for (const file of gitLines(['diff', '--name-only', diffFilter, 'HEAD'])) { + for (const file of listGitLines(['diff', '--name-only', diffFilter, 'HEAD'])) { files.add(file); } - for (const file of gitLines(['ls-files', '--others', '--exclude-standard'])) { + for (const file of listGitLines(['ls-files', '--others', '--exclude-standard'])) { files.add(file); } } diff --git a/scripts/write-test-build-status.sh b/scripts/write-test-build-status.sh index eb8c6a5..482c894 100755 --- a/scripts/write-test-build-status.sh +++ b/scripts/write-test-build-status.sh @@ -98,7 +98,7 @@ run_tests() { let parsed; try { parsed = JSON.parse(raw); } catch { process.stdout.write("{}"); process.exit(0); } const total = parsed.numTotalTests ?? 0; - const totalFiles = parsed.numTotalTestSuites ?? parsed.testResults?.length ?? 0; + const totalFiles = parsed.testResults?.length ?? parsed.numTotalTestSuites ?? 0; const failing = parsed.numFailedTests ?? 0; const skipped = parsed.numPendingTests ?? 0; const failingNames = []; diff --git a/src/refresh-skills-artifact.test.ts b/src/refresh-skills-artifact.test.ts index a6dab5a..f485880 100644 --- a/src/refresh-skills-artifact.test.ts +++ b/src/refresh-skills-artifact.test.ts @@ -29,6 +29,7 @@ describe('isKnowledgeSource', () => { describe('collectChangedFiles', () => { it('includes deleted knowledge-source files from the working tree diff', () => { + const gitCalls: string[][] = []; const changedFiles = collectChangedFiles({ base: undefined, artifactVersion: undefined, @@ -38,8 +39,24 @@ describe('collectChangedFiles', () => { skipBudgetCheck: false, skipOnMissingKey: false, minRemainingUsd: 0.25, + gitLines: (args: string[]) => { + gitCalls.push(args); + if (args[0] === 'diff') { + return [ + '.agent/skills/get-qodo-rules/SKILL.md', + '.agent/skills/qodo-pr-resolver/SKILL.md', + ]; + } + return []; + }, }); + expect(gitCalls).toContainEqual([ + 'diff', + '--name-only', + '--diff-filter=ACMRTUXBD', + 'HEAD', + ]); expect(changedFiles).toContain('.agent/skills/get-qodo-rules/SKILL.md'); expect(changedFiles).toContain('.agent/skills/qodo-pr-resolver/SKILL.md'); });