Skip to content

ci: Bun 1.3.14로 고정한 test-bun13 잡을 더해 $ never-settle 회귀를 잡는다 - #76

Merged
say8425 merged 4 commits into
mainfrom
ci/pin-bun13-regression
Sep 21, 2026
Merged

say8425 merged 4 commits into
mainfrom
ci/pin-bun13-regression

Conversation

@say8425

@say8425 say8425 commented Sep 21, 2026

Copy link
Copy Markdown
Owner

#74는 showBytes$에서 Bun.spawn으로 바꿔 큰 diff의 45초 503을 고쳤다. 그런데 그 회귀망은 CI에서 판별력이 없다: pr-check의 잡들은 oven-sh/setup-bun@v2 기본값(최신 Bun, 지금 1.4.2)으로 도는데, 업스트림이 1.4.0에서 $를 고쳤으므로 거기서는 showBytes$로 되돌려도 diff-large-blob.test.ts가 초록이다(#74 CI 로그에서 bun test v1.4.2 확인).

bunx 사용자는 자기 Bun을 쓴다. 1.3.x는 한 달 전(8/20)까지 안정 라인이었고 이 저장소를 개발하는 맥도 1.3.12다. 그 사용자들에게 되돌림은 곧바로 "큰 diff가 안 뜬다"로 돌아간다.

무엇을

test-bun13 잡 하나를 더한다 — ubuntu-latest, bun-version: '1.3.14'(1.3.x 마지막 판), 설치 없이 diff-large-blob.test.ts만 돈다.

  • 전량이 아니라 그 파일만: 전량은 test 잡이 이미 돈다. 이 잡엔 버전에 따라 판별력이 갈리는 것만 싣는다.
  • bun install을 일부러 뺐다: 이 회귀망은 Bun·Node 내장과 로컬 파일만 쓴다(node_modules 없는 클론에서 1.3.14로 통과·되돌리면 exit 1 — 둘 다 실측). 설치를 두면 최신 Bun이 lockfile 포맷을 바꾸는 날 1.3.14가 못 읽어 회귀와 무관하게 빨개지고, 그때의 쉬운 오답(고정 판 올리기)이 잡의 존재 이유를 지운다.
  • timeout-minutes: 10: 회귀하면 테스트가 스스로 10초 타임아웃으로 끝나지만, Bun 다운로드나 러너가 매달리는 경우까지 GHA 기본 6시간을 태우지 않게.
  • 은퇴 조건: 지원 하한이 1.4 이상이 되면(engines.bun 도입 등) 이 잡은 지운다. 그리고 "기본값 = 최신"은 루트 package.jsonpackageManager·engines.bun이 없어서라는 조건을 CLAUDE.md에 적었다 — engines.bun을 넣는 순간 나머지 다섯 잡의 Bun이 조용히 바뀐다.
  • CLAUDE.md의 잡 개수(5 → 6)·required checks 목록·"Loading…" 항목과 테스트 docblock을 맞춘다.

CI 플랫폼에서도 재현되는가 (실측)

#74의 측정은 전부 macOS였고 CI는 Linux다. 같은 밀폐 픽스처(200KB 파일 12~32개, 8-way)로 Linux 컨테이너에서 쟀다:

플랫폼 Bun $ Bun.spawn
Linux aarch64 1.3.14 HANG@round1 (6/6) clean 30/30 (6/6)
Linux x86_64 (CI 아키텍처) 1.3.14 HANG@round1 (2/2) — (에뮬레이션이 너무 느려 중단)
Linux aarch64 1.4.2 clean 30/30 clean 30/30

→ 고정 잡은 CI 러너에서 실제로 빨개질 수 있다. x86_64의 Bun.spawn 초록은 이 PR의 CI가 확인한다.

테스트 플랜

실제 러너(Linux x86_64)에서 RED → GREEN. 임시 커밋으로 showBytes$로 되돌렸다가 되돌렸다(스쿼시 머지라 남지 않는다).

커밋 test-bun13 (Bun 1.3.14) test (Bun 1.4.2)
fa9d117 잡 추가 ✅ 1 pass (run)
14a7d62 임시: showBytes$ getDiffFiles가 10000ms 안에 settle하지 않았다, exit 1 (run) 788 passdiff-large-blob 포함
b2c9774 복원 + 설치 제거 ✅ 1 pass, 188ms (run)

가운데 행이 이 잡의 존재 이유다: 같은 커밋에서 최신 Bun의 test는 초록이고 고정 잡만 빨갛다. 로컬에서도 설치 없는 클론으로 같은 RED(exit 1)/GREEN을 확인했다.

리뷰: Critical 0 · Important 0 · Minor 4건을 전부 반영했다(설치 제거, 기본값의 조건, 은퇴 조건, bun-version 따옴표). 리뷰어가 제기한 "전체 스위트를 1.3.14로 돌리자"는 계획 수준 질문은 채택하지 않았다 — 전체 스위트는 의존성 설치가 필요해 위 lockfile 문제가 돌아온다.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XAe9zh6siLHSR4nPpqm8QK

say8425 and others added 4 commits September 21, 2026 15:07
pr-check의 잡들은 setup-bun 기본값(최신 Bun)으로 돈다. 그런데 Bun 1.3.x의
`$`는 64KB를 넘는 stdout을 받는 호출에서 영영 settle하지 않을 수 있고
업스트림은 1.4.0에서 고쳤으므로, 최신 Bun에서는 그 회귀가 원리적으로 안
보인다 — #74에서 showBytes를 Bun.spawn으로 바꿨지만 누가 `$`로 되돌려도
`test` 잡은 초록이다. `bunx` 사용자는 자기 Bun을 쓰므로 1.3.x도 여전히 대상이다.

- test-bun13: ubuntu-latest, bun-version 1.3.14(1.3.x 마지막 판), frozen
  lockfile 설치 뒤 diff-large-blob.test.ts 하나만 돈다. 전량은 `test` 잡이
  이미 돈다 — 여기엔 버전에 따라 판별력이 갈리는 것만 싣는다.
- timeout-minutes 10: 회귀하면 테스트가 스스로 10초 타임아웃으로 끝나지만
  설치가 매달리는 경우까지 GHA 기본 6시간을 태우지 않게 한다.
- 재현 확인: 같은 밀폐 픽스처로 Linux aarch64·x86_64의 1.3.14에서 `$`가
  첫 라운드에 걸리고 Bun.spawn은 깨끗하다(macOS만 재던 것을 CI 플랫폼까지 넓힘).
- CLAUDE.md의 잡 개수·required checks 목록·"Loading…" 항목, 테스트 docblock을
  여섯 번째 잡에 맞춘다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAe9zh6siLHSR4nPpqm8QK
직전 커밋은 실제 러너에서 test-bun13이 `$` 회귀를 잡는지 보이려고
showBytes를 `$`로 되돌린 임시 커밋이다. Bun.spawn으로 복원한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAe9zh6siLHSR4nPpqm8QK
- `bun install --frozen-lockfile`을 뺀다. 이 회귀망은 Bun·Node 내장과 로컬
  파일만 쓰므로 의존성이 필요 없다(node_modules 없는 클론에서 1.3.14로 통과,
  showBytes를 `$`로 되돌리면 exit 1 — 둘 다 실측). 설치를 두면 최신 Bun이
  lockfile 포맷을 바꾸는 날 1.3.14가 못 읽어 회귀와 무관하게 빨개지고, 그때의
  쉬운 오답(고정 판 올리기)이 잡의 존재 이유를 지운다.
- "setup-bun 기본값 = 최신"은 조건부다: 루트 package.json의 packageManager·
  engines.bun이 없어서 최신이다. engines.bun을 넣는 순간 다섯 잡의 Bun이
  조용히 바뀐다는 것을 적는다.
- 은퇴 조건: 지원 하한이 1.4 이상이 되면 이 잡을 지운다.
- bun-version을 따옴표로 감싼다(node-version: '24'와 같은 관례 — 두 마디
  버전이 되면 YAML이 float로 읽는다).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAe9zh6siLHSR4nPpqm8QK
@say8425
say8425 merged commit ca86cd6 into main Sep 21, 2026
6 checks passed
@say8425
say8425 deleted the ci/pin-bun13-regression branch September 21, 2026 06:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant