From 63a438ad398e51e9f6b795cffd082ac78b452ba8 Mon Sep 17 00:00:00 2001 From: "Chuvald (CC) Evans" Date: Mon, 17 Aug 2026 19:34:20 -0400 Subject: [PATCH 1/2] fix(ci): configure a git identity so the suite passes on a bare runner CI has been red on main since a3fe211. Three createProject tests in test/lib/project.test.js assert the initial commit lands, and a GitHub runner has no global git identity. The GIT_AUTHOR_*/GIT_COMMITTER_* vars the tests set never reach the git child process, because a Jest ESM test module mutates a copy of process.env (noted in the file's own comment at line ~150). Locally the commit falls back to the developer's global config, so the suite passes everywhere except CI. Configuring an identity in the workflow fixes it: 3 failed / 10 passed becomes 13 passed. --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e23990f..54e56af 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,5 +27,10 @@ jobs: - name: Lint run: npm run lint + - name: Configure git identity + run: | + git config --global user.name "Bobby CI" + git config --global user.email "ci@bobby.dev" + - name: Test run: npm test From 890fd097fb7ab5339e8d4c50bffe0424f3b5f83c Mon Sep 17 00:00:00 2001 From: "Chuvald (CC) Evans" Date: Mon, 17 Aug 2026 20:27:27 -0400 Subject: [PATCH 2/2] test(dashboard): give the max_concurrent 400 case an explicit timeout This case runs ~5.05s against Jest's 5000ms default on every Node version tested (measured on both 18 and 22 locally), so it sits right on the line and which CI leg fails is effectively a coin flip. Node 18 lost it on PR #13. The assertion is instant; the time goes on the HTTP round trip and server teardown. An explicit 20s budget makes the outcome deterministic rather than marginal. --- test/lib/dashboard/orchestrator-fsm.test.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/lib/dashboard/orchestrator-fsm.test.js b/test/lib/dashboard/orchestrator-fsm.test.js index 76fce18..176969d 100644 --- a/test/lib/dashboard/orchestrator-fsm.test.js +++ b/test/lib/dashboard/orchestrator-fsm.test.js @@ -551,5 +551,10 @@ describe('dashboard.max_concurrent caps agents in flight (TKT-015)', () => { } finally { await new Promise(r => server.close(r)); } - }); + // This case lands within a few milliseconds of Jest's 5s default on every + // Node version we test (~5.05s locally on both 18 and 22), so which CI leg + // fails is a coin flip rather than a real difference. The assertion itself is + // instant; the time goes on the HTTP round trip and teardown. Give it an + // explicit budget so the result is deterministic instead of marginal. + }, 20000); });