From the round-2 review of PR #2522 (#1898 port-release deadline), MEDIUM, non-blocking, confined to the netstat fallback path (taken only when ss / Get-NetTCPConnection are unavailable). scripts/dev-up.sh ~411 and scripts/dev-up.ps1 ~410-424 match the LISTEN/LISTENING state by English token; a localized Windows netstat (e.g. German ABHÖREN) filters every row out, the inventory reports free while Determined is true, and a held port is treated as released (PID file removed, exit 0). Fix: match the state token positionally (column index) or accept any non-empty state on a matching local-port row for existence, keeping the port-token anchoring. LOWs from the same review: now_ms in dev-up.sh should sanity-check the digit count of date +%s%3N output (a bare-seconds return would stretch a 30 s budget to hours); the two launchers' timeout-parse edge cases (whitespace, -0) differ slightly and the comment overstates parity. Refs #1898, #2378.
From the round-2 review of PR #2522 (#1898 port-release deadline), MEDIUM, non-blocking, confined to the netstat fallback path (taken only when ss / Get-NetTCPConnection are unavailable). scripts/dev-up.sh ~411 and scripts/dev-up.ps1 ~410-424 match the LISTEN/LISTENING state by English token; a localized Windows netstat (e.g. German ABHÖREN) filters every row out, the inventory reports free while Determined is true, and a held port is treated as released (PID file removed, exit 0). Fix: match the state token positionally (column index) or accept any non-empty state on a matching local-port row for existence, keeping the port-token anchoring. LOWs from the same review: now_ms in dev-up.sh should sanity-check the digit count of date +%s%3N output (a bare-seconds return would stretch a 30 s budget to hours); the two launchers' timeout-parse edge cases (whitespace, -0) differ slightly and the comment overstates parity. Refs #1898, #2378.