Repository navigation
[CI] mobile-v19 계약 job 병렬도를 2로 낮추고 메모리 사용을 로그에 관측 - #935
Conversation
- 병렬 4에서 node 합계 RSS가 12~13.5GB까지 올라 16GB 러너가 OOM 종료(exit 143)되던 문제를 줄인다. 로컬 실측: 병렬 2는 최대 합계 RSS 10.6GB, 실행 시간 1.26배. - 같은 step에서 30초마다 free -m 사용량과 최대값을 로그에 남긴다. - timeout을 30분에서 40분으로 늘린다(CI 병렬 4 최대 18m51s 기준 여유). - ownership manifest의 profileInvocations와 workflow 계약 테스트를 함께 갱신하고 문서 파편을 재생성한다. Closes #934
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
AquilaXk
left a comment
There was a problem hiding this comment.
Actionable comments posted: 2
🎯 Linked issue & acceptance criteria audit
- Linked issue: #934 mobile-v19 contract job exits with code 143 near the runner memory limit
- Goal summary: Lower mobile-v19 parallelism to 2, keep the test set, and log memory use.
- Acceptance criteria verified: 5/5
| ID | Acceptance criterion | Status | Evidence |
|---|---|---|---|
| AC-1 | ci.yml command and the manifest profileInvocations both use max-workers 2 | PASS | .github/workflows/ci.yml:104 |
| AC-2 | Job log keeps memory use observation with the peak | PASS | .github/workflows/ci.yml:92 |
| AC-3 | Run time is measured after lowering parallelism and the timeout is adjusted | PASS | .github/workflows/ci.yml:28 |
| AC-4 | Documentation fragment is refreshed and the check passes | PASS | contracts/documentation/documentation-fragment.json |
| AC-5 | The mobile-v19 job is green in PR CI | PASS | tools/ci/mobile-fixture-staging-workflow.test.mjs:205 |
🛡️ Adversarial audit evidence
- Falsifiability verified: Yes (Workers 4 mutants in ci.yml and the manifest and timeout 30 turned the suite red.)
- Hollow assertions detected: 0
- Production backdoors detected: 0
- Ground-truth sources verified:
CI log of run 37190827178 (34 samples, peak 9651MB of 15989MB, 186 of 186 tests)refresh-documentation-fragment --check reported IN SYNC at head 24bf897etools/ci/data-test-discovery.mjs verify of the workflow command against the manifest
🤖 Prompt for all review comments with AI agents
Could we verify each finding against the current code and keep only those that
still apply? Could we make the smallest validated fix and briefly note why any
finding no longer applies?
Inline comments:
- `@.github/workflows/ci.yml:92-103`
Would killing the process group, or using a shorter sleep, make the cleanup and the
peak figure more robust? The log wording could also say sampled peak.
- `@tools/ci/mobile-fixture-staging-workflow.test.mjs:205-207`
Could the test also assert the set -euo pipefail line, the EXIT trap with the kill,
and that the node invocation line ends without a trailing || true or ; so a masking
edit turns the suite red?
---
Outside diff comments:
None.
ℹ️ Review info
⚙️ Run configuration
Configuration used: CLAUDE.md, AGENTS.md and PR template of easysubway-data worktree
Review profile: ASSERTIVE
Plan: Aquila fallback
Run ID: N/A (Aquila fallback)
Review source: Aquila CLI
Repository visibility: public GitHub repository
Trigger:
Discovery review of the mobile-v19 parallelism and memory logging change, PR 935
Base:
main@397d6e74e75685c96e0eb4204346a98498b48eef
Head:
ci/mobile-v19-max-workers-2-934@24bf897eb6aa817f0fffb9194172b381e6835838
Command:
node aquila-review/scripts/post-review.mjs input.json payload-1.json --repo AquilaXk/easysubway-data --pr 935
📥 Commits
Reviewing files changed in this pull request between:
- Base:
397d6e74e75685c96e0eb4204346a98498b48eef - Head:
24bf897eb6aa817f0fffb9194172b381e6835838
📒 Files selected for processing (4)
.github/workflows/ci.ymlcontracts/documentation/documentation-fragment.jsontools/ci/data-test-ownership.jsontools/ci/mobile-fixture-staging-workflow.test.mjs
📜 Review details
리뷰 F1: trap 무력화, trap에서 kill 제거, node 줄에 || true를 붙이는 변형이 계약 테스트를 통과했다. set -euo pipefail 첫 줄, kill을 담은 EXIT trap, 꼬리 없이 끝나는 node 실행 줄을 단언해 다섯 변형을 모두 RED로 만든다. Refs #934
리뷰 F2: EXIT trap이 관측 subshell만 꺼서 대기 중인 sleep 30 자식이 step 뒤에 남을 수 있었다. - 관측 루프는 sleep을 백그라운드로 두고 wait하며, TERM을 받으면 kill $(jobs -p)로 자식을 끈 뒤 끝난다. - 바깥 EXIT trap은 관측 루프를 끈 뒤 wait해서 정리가 끝난 것을 확인한다. - 최대값이 30초 표본의 최대라는 점을 로그(sampled peak)와 주석에 밝힌다. - 계약 테스트가 step 스크립트를 실제 bash로 돌린다. free는 stub, node는 대역 명령이다. node 실패 종료 코드(7)가 유지되는지, 프로세스 그룹에 남은 프로세스가 없는지, 로그 문구를 확인한다. 수정 전에는 남은 'sleep 30'으로 RED였다(macOS bash 3.2, Linux bash 5.2). Refs #934
|
No description provided. |
|
No description provided. |
|



Related issue
Closes #934
Summary
Data contracts (mobile-v19)job이 테스트 실패 없이exit code 143으로 끝나는 일이 반복된다. 일부 실행에는 "runner has received a shutdown signal"이 남는다.--max-workers 4): node 프로세스 합계 최대 RSS가 main 12.1GB, [Fix] 부산·대구·대전 시간표 달력에 KASI 공휴일 예외를 싣고 공휴일 달력 불변식 추가 #922 13.5GB다. GitHub 호스티드 러너 메모리는 16GB다.free -m사용량과 최대값을 로그에 남긴다. 러너가 종료돼도 직전 관측이 로그에 남는다.Changes
.github/workflows/ci.ymlcontracts_mobile_v19실행 명령을--max-workers 2로 바꿨다.free -m도 출력한다.timeout-minutes: 40으로 늘렸고, 머리 주석을 갱신했다.tools/ci/data-test-ownership.json:workflows.required-pr.profileInvocations명령 문자열을 같은 값으로 바꿨다.tools/ci/mobile-fixture-staging-workflow.test.mjsfree -m,mobile-v19 memory)이 있는지,continue-on-error·if:가 없는지 확인한다.contracts/documentation/documentation-fragment.json: ci.yml blob을 갱신했다.Scope
Included
Excluded
Ownership / dependencies
data-test-ownership.json을 바꾼다. 이 PR은workflows절의 한 줄만 바꿔 줄이 겹치지 않는다.Contract & Compatibility
Version impact
Product gate impact
Provenance impact
Version decision
Verification
node --test tools/ci/mobile-fixture-staging-workflow.test.mjs tools/ci/data-test-discovery.test.mjs tools/ci/automerge-queue.test.mjs70/70 통과node tools/ci/data-test-discovery.mjs verify: 통과actionlint .github/workflows/ci.yml: 통과. run 블록 들여쓰기와bash -n은 automerge-queue 테스트가 검사한다.refresh-documentation-fragment --worktree --check: IN SYNCcontents: read유지)Not run
Risk
Rollout / Recovery
mobile-v19 memory peak가 16GB보다 충분히 낮다.Review focus
Checklist