test(#4525): migrate statusline/teams batch to named timeout constants (#4677)

Batch 14 of the ad hoc timeout literal migration (epic #4445). Replaces
every bare numeric timeout/timeoutMs object-literal property in
tests/gsd-statusline.test.cjs and tests/teams-status.test.cjs with a named
constant, per eslint-rules/no-adhoc-timeout-literal.cjs. Removes these 2
files from the rule's allowlist.

Issue #4525 cautions against forcing either file onto PROBE_TIMEOUT_MS
without checking, since both invoke a "long-lived status renderer."
Checking each file's actual production handler separately found the
caution applies to one file and not the other: gsd-statusline.test.cjs's 7
sites all spawn hooks/gsd-statusline.js, which does real rendering work
(context-window, git, teams state) -- two new file-local constants
(STATUSLINE_HOOK_TIMEOUT_MS=4000, 6 sites; STATUSLINE_HOOK_GIT_SHIM_TIMEOUT_MS
=5000, 1 site for a heavier git-shim test). teams-status.test.cjs's 5 sites
spawn `gsd-tools.cjs query teams-status`, whose handler
(gsd-core/bin/lib/teams-status.cjs's cmdTeamsStatus) is a lightweight
env-truthiness check with no rendering or fan-out -- genuinely matching
PROBE_TIMEOUT_MS's class, confirmed by reading the handler directly rather
than assumed from the matching value. No new shared-helper constant is
needed this batch. No src/bin file touched, no numeric value changed
anywhere.

Co-authored-by: sim <sim@local>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-09-13 00:23:50 -04:00
committed by GitHub
parent 56b706a07a
commit 0cee0eee47
3 changed files with 47 additions and 15 deletions

View File

@@ -15,6 +15,20 @@ const path = require('node:path');
const { spawnSync } = require('node:child_process');
const { resolveTeamsStatus } = require('../gsd-core/bin/lib/teams-status.cjs');
/**
* Reuses the existing PROBE_TIMEOUT_MS constant rather than declaring a
* new one, despite this batch's own issue (#4525, epic #4445) cautioning
* against forcing a "long-lived status renderer" onto PROBE_TIMEOUT_MS
* without checking. Checked directly: gsd-core/bin/lib/teams-status.cjs's
* cmdTeamsStatus (what these 5 sites spawn via `gsd-tools.cjs query
* teams-status`) is a lightweight env-truthiness check plus one fast
* synchronous runtime resolution -- no rendering, no subprocess fan-out --
* genuinely matching PROBE_TIMEOUT_MS's class, not the heavier
* "long-lived renderer" class the issue's caution targets (that class is
* hooks/gsd-statusline.js, correctly kept off PROBE_TIMEOUT_MS in this
* same batch's sibling file, tests/gsd-statusline.test.cjs).
*/
const { PROBE_TIMEOUT_MS } = require('./helpers/timeouts.cjs');
const gsdToolsPath = path.resolve(__dirname, '..', 'gsd-core', 'bin', 'gsd-tools.cjs');
@@ -120,7 +134,7 @@ describe('gsd-tools query teams-status — CLI subprocess tests', () => {
[gsdToolsPath, 'query', 'teams-status'],
{
encoding: 'utf8',
timeout: 15000,
timeout: PROBE_TIMEOUT_MS,
env: makeEnv({ runtime: 'claude', teamsFlag: '1' }),
},
);
@@ -142,7 +156,7 @@ describe('gsd-tools query teams-status — CLI subprocess tests', () => {
[gsdToolsPath, 'query', 'teams-status'],
{
encoding: 'utf8',
timeout: 15000,
timeout: PROBE_TIMEOUT_MS,
env: makeEnv({ runtime: 'claude' }),
},
);
@@ -158,7 +172,7 @@ describe('gsd-tools query teams-status — CLI subprocess tests', () => {
[gsdToolsPath, 'query', 'teams-status', '--active'],
{
encoding: 'utf8',
timeout: 15000,
timeout: PROBE_TIMEOUT_MS,
env: makeEnv({ runtime: 'claude', teamsFlag: '1' }),
},
);
@@ -173,7 +187,7 @@ describe('gsd-tools query teams-status — CLI subprocess tests', () => {
[gsdToolsPath, 'query', 'teams-status', '--active'],
{
encoding: 'utf8',
timeout: 15000,
timeout: PROBE_TIMEOUT_MS,
env: makeEnv({ runtime: 'claude' }),
},
);
@@ -186,7 +200,7 @@ describe('gsd-tools query teams-status — CLI subprocess tests', () => {
[gsdToolsPath, 'query', 'teams-status', '--active'],
{
encoding: 'utf8',
timeout: 15000,
timeout: PROBE_TIMEOUT_MS,
env: makeEnv({ runtime: 'codex', teamsFlag: '1' }),
},
);