Skip to content

[CI] mobile-v19 계약 job 병렬도를 2로 낮추고 메모리 사용을 로그에 관측 - #935

Merged
AquilaXk merged 4 commits into
mainfrom
ci/mobile-v19-max-workers-934
Oct 4, 2026
Merged

AquilaXk merged 4 commits into
mainfrom
ci/mobile-v19-max-workers-934

Conversation

@AquilaXk

@AquilaXk AquilaXk commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

Related issue

Closes #934

Summary

Changes

  • .github/workflows/ci.yml
    • contracts_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.mjs
    • 병렬 2와 manifest 일치를 고정한다.
    • 메모리 관측(free -m, mobile-v19 memory)이 있는지, continue-on-error·if:가 없는지 확인한다.
    • mobile job timeout 40을 고정한다.
  • contracts/documentation/documentation-fragment.json: ci.yml blob을 갱신했다.

Scope

Included

  • mobile-v19 job의 병렬도, 메모리 관측, timeout

Excluded

  • 테스트 제외·축소, warning-only 전환(게이트 약화 없음)
  • 기본 프로파일 shard 4개(병렬 4 유지)

Ownership / dependencies

Contract & Compatibility

  • Source / API / schema contract: 변경 없음
  • Artifact / provenance identity: 변경 없음
  • Backward compatibility: 실행 테스트 집합은 같다. discovery verify가 workflow 명령과 manifest의 일치를 검사한다.
  • Migration or cutover: 없음

Version impact

  • no version change
  • datapack release only
  • route-map artifact change
  • data contract change
  • product gate JSON change
  • CI workflow·계약 테스트 change

Product gate impact

  • release/product-gates/** 영향 없음
  • 변경한 gate의 근거를 갱신했습니다.
  • 검증되지 않은 지원 범위 claim을 추가하거나 확대하지 않습니다.

Provenance impact

  • source inventory·geometry provenance manifest 영향 없음
  • 제공처·라이선스·갱신 시점·적용 범위를 갱신했습니다.
  • 공식 source로 확인되지 않은 값을 배포 artifact에 추가하지 않습니다.

Version decision

  • datapack version: 변경 없음
  • data contract: 변경 없음
  • route-map artifact / product gate: 변경 없음
  • promotion request id: 해당 없음

Verification

Check Result / Evidence
Focused RED → GREEN 계약 테스트를 먼저 바꿨다(병렬 2, manifest 일치, 메모리 관측, timeout 40). 수정 전 RED, 수정 후 node --test tools/ci/mobile-fixture-staging-workflow.test.mjs tools/ci/data-test-discovery.test.mjs tools/ci/automerge-queue.test.mjs 70/70 통과
discovery verify node tools/ci/data-test-discovery.mjs verify: 통과
workflow lint actionlint .github/workflows/ci.yml: 통과. run 블록 들여쓰기와 bash -n은 automerge-queue 테스트가 검사한다.
문서 파편 refresh-documentation-fragment --worktree --check: IN SYNC
로컬 실측(PR #922 head, mobile-v19 프로파일) 병렬 4: 377~405초, 합계 최대 RSS 13.5GB. 병렬 2: 479초(1.26배), 합계 최대 RSS 10.6GB, 테스트 전부 통과
timeout 근거 CI 병렬 4 성공 실행 최대 18m51s × 1.26 ≈ 24분. 여유를 두어 40분으로 했다.
Required CI run 37190827178: mobile-v19 job pass 17m53s. 테스트 186/186 통과(duration 987초). 관측 34회, 러너 총 메모리 15989MB에서 사용량 최대 9651MB. 나머지 shard 4개·집계·SonarCloud pass
Live provider / release Not required — reason: 원천 호출 없음
Security / data integrity Not applicable — reason: 권한·시크릿 변경 없음(contents: read 유지)

Not run

  • Check: None
  • Reason: 해당 없음
  • Rerun owner / condition: 해당 없음

Risk

  • Level: Medium
  • Main risk: 병렬도를 낮춰도 메모리 사용이 한도에 가까우면 종료가 계속될 수 있다.
  • Failure behavior
    • 테스트 실패와 러너 종료는 그대로 red로 남는다.
    • 메모리 관측 로그로 원인을 추적하는 후속 이슈로 넘긴다.
  • Candidate / admission / publication state on failure: 해당 없음
  • Fallback or degraded-success path introduced: No

Rollout / Recovery

  • Rollout or promotion: 병합 즉시 적용
  • Monitoring / success signal: mobile-v19 job이 exit 143 없이 끝나고, 로그의 mobile-v19 memory peak가 16GB보다 충분히 낮다.
  • Rollback or recovery: 이 PR revert
  • Existing artifact / schema compatibility after rollback: 해당 없음

Review focus

  • 메모리 관측 루프가 실행 step의 성공·실패 판정에 영향을 주지 않는지. 백그라운드 subshell이고 EXIT trap에서 종료한다.

Checklist

  • 이슈 범위와 실제 diff가 일치합니다.
  • 관련 없는 변경이나 다른 owner의 surface를 포함하지 않았습니다.
  • 위험에 필요한 검증과 미실행 사유를 기록했습니다.
  • 실패·호환성·promotion·recovery 동작이 명확합니다.
  • current failure를 이전·stale·alternate 결과의 성공으로 바꾸지 않습니다.
  • GitHub PR Review 객체가 있는지 확인했습니다. CodeRabbit status check만으로는 리뷰 완료로 보지 않습니다.
  • CodeRabbit Review 객체가 없으면 지원되는 Codex CLI 폴백 Review를 단일 GitHub PR Review로 게시했습니다.
  • datapack 배포 영향이 있는 경우 release workflow 상태를 확인했습니다.

- 병렬 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
@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 18186f67-85a5-4aad-bc9c-cfe5a0cdda10
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AquilaXk AquilaXk left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🎯 Linked issue & acceptance criteria audit
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 24bf897e
    • tools/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.yml
  • contracts/documentation/documentation-fragment.json
  • tools/ci/data-test-ownership.json
  • tools/ci/mobile-fixture-staging-workflow.test.mjs
📜 Review details

Comment thread .github/workflows/ci.yml Outdated
Comment thread tools/ci/mobile-fixture-staging-workflow.test.mjs
@AquilaXk
AquilaXk marked this pull request as ready for review October 4, 2026 09:31
리뷰 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
@AquilaXk AquilaXk added the automerge FIFO 병합 큐 대상 — 코디네이터가 순서대로 update-branch 후 auto-merge label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

No description provided.

@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@sonarqubecloud

sonarqubecloud Bot commented Oct 4, 2026

Copy link
Copy Markdown

@AquilaXk
AquilaXk merged commit ff4db5e into main Oct 4, 2026
12 checks passed
@AquilaXk
AquilaXk deleted the ci/mobile-v19-max-workers-934 branch October 4, 2026 10:09
AquilaXk added a commit that referenced this pull request Oct 4, 2026
#922·#935 병합으로 documentation-fragment.json이 충돌했다. main 기준으로 다시 생성했다(datapack-release.yml blob 갱신).
rebase로 이력을 다시 쓰지 않아 기존 리뷰·closure 대상 커밋이 그대로 남는다.

Refs #929
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge FIFO 병합 큐 대상 — 코디네이터가 순서대로 update-branch 후 auto-merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[CI] mobile-v19 계약 job이 러너 메모리 한도 근처에서 종료(exit 143)되어 PR·main CI가 반복 실패하는 문제

1 participant