Skip to content

[CI] ITX-청춘 원천 승격을 QA 승인 코멘트 없이 자동 이상 판정 게이트로 전환 (#870 3단계) - #978

Merged
AquilaXk merged 17 commits into
mainfrom
ci/itx-auto-promotion-977
Oct 6, 2026
Merged

AquilaXk merged 17 commits into
mainfrom
ci/itx-auto-promotion-977

Conversation

@AquilaXk

@AquilaXk AquilaXk commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Related issue

Closes #977

Refs #870
Refs #969
Refs #636
Refs #979

재결속 자동화(#979)가 병합되기 전에는 DATAPACK_SCHEDULED_ITX_PROMOTION을 켜지 않는다. 승격 PR만으로는 required CI가 green이 되지 않는다(Risk 참고). workflow 머리말과 계약 테스트가 이를 고정한다.

Summary

  • Problem: ITX-청춘 원천 시간표 승격은 이슈 #636에 QA 승인 코멘트(/approve-itx-current artifactId=<id> sha256=<sha> policy=itx-snapshot-anomaly-v1)를 단 뒤에만 --promote-candidate가 쓴다. 승격을 실행하는 workflow는 없고 수집 workflow는 dispatch 전용이다. 현행 정책 itx-snapshot-anomaly-v1은 ZERO_TOLERANCE라 이력 10개 중 4개 구간이 사람 승인을 받았다.
  • Outcome: 수집 뒤 자동 이상 판정 게이트(itx-promotion-gate-v1)가 통과시킨 수집분만 App 토큰 PR로 승격한다. 게이트가 막으면 승격하지 않고 job이 실패해 [Fix] 원천 갱신 workflow 실패를 이슈로 드러내고 광주 보관 시간표 갱신에 수동 실행 경로 추가 #926 경로로 실패 이슈가 열리거나 갱신된다. 수동 승인 경로는 override로 그대로 있다. 정기 실행은 저장소 변수 DATAPACK_SCHEDULED_ITX_PROMOTION이 true일 때만 돌고 기본은 꺼짐이다.

Changes

  • tools/datapack/itx-promotion-gate.mjs, itx-promotion-gate-policy.json: 요일별 지표 게이트(역·OD 커버리지, 편수, 열차 구성, 정차 순서, 시각 tuple 제거·추가, 첫차·막차 이동)와 원천 결속(raw capture sha·후보 sha·직전 snapshot·오프라인 replay 계보)·수집 오류 판정. 순수 함수이고 실행 파일은 PASS 0, BLOCK 3, 오류 1로 끝난다.
  • collect-korail-itx-cheongchun-timetable.mjs: --auto-gate --provider-capture --replay-evidence. 영수증을 믿지 않고 같은 입력으로 게이트를 다시 계산해 PASS일 때만 원천·완전성 증거·게이트 영수증을 쓰고 contract를 갱신한다. 승인 코멘트와 게이트를 함께 받으면 어느 쪽도 쓰지 않는다.
  • lib/itx-promotion-authority.mjs: 승격 모드 CURRENT_CANDIDATE_GATE_PASSED의 구조 검증과, 커밋된 영수증을 두 원천 파일에서 다시 계산해 대조하는 재검증. build-datapack·apply-itx-topology-to-bundled-pack·build-server-timetable-snapshot이 같은 판정 함수를 쓴다(승인 모드와 같은 강도).
  • tools/ci/decide-itx-current-promotion.mjs: 공급자 호출 전에 COLLECT·WAIT·OPEN_PR·BLOCKED_BY_PENDING_PR를 정한다.
  • .github/workflows/itx-current-promotion.yml: 판정 -> 예산 가드 -> 수집 -> 오프라인 replay -> 게이트 -> 승격 -> 허용 경로 네 개만 스테이징 -> push -> App 토큰 Draft PR. force_collect dispatch 입력을 둔다.
  • automation-pr-evidence.mjs: 증거 블록 단계 itx-promotion(원천 행 하나, 허용 경로 네 개)과 itx-promotion-body.
  • current-capital-topology-refresh.yml: 판정 전에 probe를 읽고 --itx-collected-today를 넘기는 두 줄과 대기 notice step만 더했다. 다른 step 조건은 그대로다.
  • 등록부: report-refresh-failure([Fix] 원천 갱신 workflow 실패를 이슈로 드러내고 광주 보관 시간표 갱신에 수동 실행 경로 추가 #926), refresh-open-pr-age(claim 접두어 automation/977-itx-promotion-, 직렬화 그룹), guard-itx-current-collection-budget(KST 하루 한 번 예산 공유), data-test-ownership, 문서 파편.

Scope

Included

  • 게이트·승격 경로·판정·workflow·증거 블록 단계·등록부와 계약 테스트
  • 새 workflow의 정기 트리거(변수 게이트, 꺼짐)

Excluded

Ownership / dependencies

Contract & Compatibility

  • Source / API / schema contract: 새 API 없음. API 카탈로그(node tools/ci/api-catalog.mjs list --query korail)와 source-candidates.json의 기존 id만 쓴다.
  • Artifact / provenance identity: coverage contract의 sourceTimetableArtifact.promotion에 모드 CURRENT_CANDIDATE_GATE_PASSED가 추가된다(키: gate{policyId,receiptPath,receiptSha256}, gatedArtifactSha256, previousArtifactPath, previousArtifactSha256). 영수증은 tools/datapack/sources/<artifactId>-promotion-gate.json. 현재 contract 값은 바뀌지 않는다.
  • Backward compatibility: CURRENT_CANDIDATE_OWNER_APPROVED 경로와 값은 그대로다(기존 테스트 전부 통과).
  • 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: 해당 없음

게이트 한도와 측정 근거

비교 단위는 itx-snapshot-anomaly-v1과 같다(역·OD·열차·정차 순서·시각 tuple, 요일 유형별). 한도는 승인된 이력 snapshot 10개(전환 9회: 안정 5, 변동 4)에서 잰 관측 최대값이고, tools/datapack/itx-promotion-gate.test.mjs가 이력에서 다시 계산해 정책 파일의 measuredBasis와 대조한다. 리뷰 F2·F3에 따라 근거 없는 여유(5%, 300초)를 모두 없앴다.

지표 한도 이력 관측
역 집합·OD 집합 변화 0 전 구간 0
요일별 편수·열차 구성 변화 0 전 구간 0
정차 순서가 바뀐 열차 0 안정 구간 0, 변동 구간의 0이 아닌 값은 44.2% 이상
시각 tuple 제거·추가 0 안정 구간 0, 변동 구간 제거 7.2%·추가 5.7% 이상
첫차 시각 이동 0초 최대 0초
막차 시각 이동 240초 최대 240초(23:45 -> 23:41, 24:04 -> 24:00)
공급자 오류 응답(비 200·전송 실패) 0건 보관된 capture 이력이 없어 엄격 0
  • 이력 재생(테스트로 고정): 안정 5개 구간은 통과하고 시각표가 흔들린 4개 구간(20260812, 20260824, 20260830, 20260930)은 차단된다. 이 한도에서도 그런 구간에는 사람 개입이 남는다.
  • 누적 drift(F2): 직전 승인본 대비만 보면 매번 조금씩 빠지는 변화를 놓친다. 마지막 owner 승인 원천(기준선)을 승격이 baselineArtifactPath/Sha256으로 이어받고, 같은 한도를 기준선 대비로도 적용한 BASELINE_* check를 영수증에 남긴다. 기준선이 직전 원천이면(승인 승격 바로 다음) 추가 check는 없다.
  • 영수증 재검증(F1): CI와 소비자(build-datapack, apply-itx-topology-to-bundled-pack, build-server-timetable-snapshot, activate-current-source-set)가 verifyItxGatePromotion을 부른다. 영수증에 적힌 정책을 쓰지 않고 커밋된 itx-promotion-gate-policy.json과 같은지 강제하며, 지표(직전·기준선 대비)와 커밋된 완전성 증거로 계산하는 결속·수집 오류 check를 원천 파일에서 다시 계산해 대조한다. raw capture·replay에 의존하는 SOURCE_BINDING·FETCH_ERRORS는 raw가 저장소에 없어 영수증의 PASS와 raw sha 형식만 본다. raw sha를 원천 원장과 대조하려면 ITX raw capture가 원장에 등록돼야 하는데 현재 원장에 ITX 원천이 없다. 이는 [CI] ITX 승격 뒤 파생 재결속(literal 테스트·topology 입력 허용 목록·증거와 팩·mobile fixture 재핀)과 raw capture 원장 대조 자동화 (#870 3단계 후속) #979 범위다.

수집 일정

신선도 규칙(첫 평일·토·일 운행일 중 가장 늦은 날의 다음 날 00:00 KST)에서 계산한 수집 요일별 확보 기간: 일·월 7일, 화 6일, 수 5일, 목 4일, 금·토 3일(공휴일은 더 늘릴 뿐이다). 최대 7일이라 주 1회 수집은 매주 몇 시간 끊긴다.

  • 매일 03:00 KST(0 18 * * *)에 실행하고, 공급자 호출 전 판정이 필요한 날에만 수집한다. 이유는 셋이다: EXPIRED(이미 만료), SAFETY_LEAD(만료 2일 이하: 그날 실패해도 하루 재시도 여유가 남는다), BEST_DAY(7일 확보일이고 만료를 3일 이상 늘린다). 사람 dispatch의 force_collect는 FORCED.
  • 시뮬레이션(테스트로 고정, 364일): 수집 155회(금 51·토 52·일 52, 주 3회, 전부 SAFETY_LEAD), 끊긴 날 0일. 어느 한 번의 수집이 실패해도(앞 40회 각각) 다음 날 재시도로 끊기지 않고, 연속 실패가 이어지면 끊긴다.
  • 주 2회(토·일)로 줄이면 재시도 여유가 사라진다. 주 3회가 재시도 여유 하루를 두는 최소다.
  • KST 하루 한 번 공급자 호출 예산은 수동 수집·topology 갱신 workflow와 가드로 공유한다(guard-itx-current-collection-budget에 등록). 같은 날 다른 workflow가 이미 수집했다면(F4) 판정 단계가 --probe로 이를 읽어 승격은 WAIT(ITX_COLLECTED_TODAY), topology 갱신은 WAIT_ITX_COLLECTED_TODAY로 정상 종료한다(가드 실패 이슈를 만들지 않는다). 양방향 겹침을 테스트로 고정했다.

Verification

Check Result / Evidence
Focused RED → GREEN 게이트: RED fcf56eaef(모듈 없음으로 전체 실패) -> GREEN d5f92d4eb(24개 통과). 승격 경로·소비자·판정·증거 단계·workflow 계약은 구현 전 로컬에서 실패(RED)를 확인한 뒤 같은 커밋에 구현했다.
반증 가능성 지표마다 한도 값 통과·한도+1 차단(첫차·막차는 앞·뒤 방향), 정책 한도를 넓히면 같은 입력이 통과, 이력 이상 구간 차단. 구현을 일부러 틀리게 바꾼 변이 30여 개(비교 연산자·내림·절댓값·검사 삭제·모드·경로 allowlist·판정 상수)가 전부 테스트에 걸렸다(생존 1건은 테스트를 보강해 잡았다).
Affected integration node --test tools/ci/*.test.mjs 397 pass / 0 fail. apply-itx-topology-to-bundled-pack 78, build-datapack-current-admission 22, build-server-timetable-snapshot 23, itx-cheongchun-coverage-contract 10, 게이트 24, 승격 권한 10 pass. 공식 Node 24.19.0(SQLite 3.53.3)로 실행.
Required CI head f5bdab846: Data contracts(mobile-v19, shard 1~4 포함)·CodeQL·SonarCloud 모두 SUCCESS. https://github.com/AquilaXk/easysubway-data/actions/runs/37422124765
Live provider / release Not required — reason: 이 PR은 수집·승격·PR 생성을 실행하지 않는다. 병합 뒤 dispatch로 첫 실행을 확인한다.
Security / data integrity App 토큰은 PR 생성 step에만 쓴다(push는 GITHUB_TOKEN). 시크릿은 출력하지 않고 provider capture는 기존 sanitized 기록이다. 승격 정책은 호출자가 고르지 않고 저장소 파일만 쓴다. git add는 경로 네 개를 명시한다.

Not run

Risk

  • Level: High
  • Main risk: 승격 PR 하나만으로는 required CI가 green이 되지 않는다. coverage contract의 현재 원천을 바꾸면 이를 literal로 고정한 테스트와 파생 결속이 어긋난다. 현재 원천을 직전 승인 원천(20260930)으로 바꿔 보는 대용 실험에서 7개 파일 중 4개 파일의 14개 테스트가 실패했다(itx-cheongchun-coverage-contract 2, apply-itx-topology-to-bundled-pack 1, activate-current-source-set 1, verify-production-pack-artifact-identity 10). 실제 승격은 여기에 더해 apply-itx-topology-to-bundled-pack의 ADMITTED_TOPOLOGY_INPUTS(원천 sha 키 허용 목록)와 topology 버전 증거·팩 sha, ci.yml의 mobile fixture 고정값(mobile 레포의 팩 커밋)이 새 원천에 묶여 있다(seq127 PR #940의 후속 커밋들이 이 목록이다). 후보 build spec이 contract sha를 고정하므로 후보 재생성도 필요하다. 이 PR은 승격까지만 자동화하고 파생 재결속은 후속 이슈 #979에서 자동화한다(이 PR 병합 뒤 바로 구현). #979가 병합되기 전에는 DATAPACK_SCHEDULED_ITX_PROMOTION을 켜지 않는다.
  • Failure behavior: 게이트 차단·수집 실패·CI 실패·방치·PR 없는 브랜치는 job을 실패시켜 실패 이슈로 드러난다. 이전·stale 데이터로 대체하지 않는다. 같은 KST 날 재수집은 가드가 막는다.
  • Candidate / admission / publication state on failure: 승격 도구는 게이트 PASS가 아니면 어떤 파일도 쓰지 않는다(테스트로 고정). 쓰기 도중 실패는 immutable 쓰기·contract 임시 파일 교체로 부분 상태를 남기지 않는다(기존 도구 동작).
  • Fallback or degraded-success path introduced: No

Rollout / Recovery

  • Rollout or promotion: 변수 DATAPACK_SCHEDULED_ITX_PROMOTION이 꺼진 채 병합. 켜는 순서는 [CI] ITX 승격 뒤 파생 재결속(literal 테스트·topology 입력 허용 목록·증거와 팩·mobile fixture 재핀)과 raw capture 원장 대조 자동화 (#870 3단계 후속) #979 병합 -> QA 보고 -> 변수 켜기 -> 첫 정기 실행의 PR 작성자·CI·본문 증거 블록 확인.
  • Monitoring / success signal: 정기 run 로그의 ITX promotion notice(WAIT 사유), 승격 PR 본문의 easysubway-automation-pr:v1 블록(단계 itx-promotion), 실패 이슈.
  • Rollback or recovery: 변수를 끈다. 승격 PR은 일반 PR로 닫는다. 수동 승인 경로(--approval-url)로 같은 승격을 직접 할 수 있다.
  • Existing artifact / schema compatibility after rollback: 승인 모드 값은 바뀌지 않아 호환된다. 게이트 모드 승격이 병합된 뒤 되돌리면 소비자 중 이 PR 이전 코드는 새 모드를 거부한다(영수증 파일과 함께 되돌린다).

Review focus

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 상태를 확인했습니다. (배포 영향 없음)

- --auto-gate: 승인 코멘트 없이 게이트를 같은 입력으로 다시 계산해 PASS일 때만 승격하고 영수증을 원천 옆에 남긴다.
- 승인 코멘트와 게이트를 함께 받으면 어느 쪽도 쓰지 않는다.
- build-datapack·apply-itx-topology·build-server-timetable-snapshot이 같은 판정 함수를 쓴다.

Refs #977
- decide-itx-current-promotion: 공급자 호출 전에 EXPIRED·SAFETY_LEAD·BEST_DAY로 수집 여부를 정하고 일정 시뮬레이션으로 끊김 없음을 고정한다.
- automation-pr-evidence: 단계 itx-promotion(원천 행 하나, 허용 경로 네 개)과 본문 생성.
- 등록부: 실패 보고, claim 접두어, 직렬화 그룹, KST 하루 한 번 공급자 호출 예산.

Refs #977
@coderabbitai

coderabbitai Bot commented Oct 6, 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: 2491783b-c626-411a-802c-762e9ab637da
  • 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: 6

🎯 Linked issue & acceptance criteria audit
ID Acceptance criterion Status Evidence
C1 gate judges coverage, trips, first and last times, binding and fetch errors PASS tools/datapack/itx-promotion-gate.mjs
C2 history replay and boundary tests PASS tools/datapack/itx-promotion-gate.test.mjs
C3 promotion recomputes the gate and consumers verify the new mode PASS tools/datapack/lib/itx-promotion-authority.mjs
C4 decision before provider call and schedule simulation PASS tools/ci/decide-itx-current-promotion.mjs
C5 dormant workflow with App token PR and evidence block PASS .github/workflows/itx-current-promotion.yml
C6 required CI green on this pull request PASS tools/ci/itx-current-promotion-workflow.test.mjs
🛡️ Adversarial audit evidence
  • Falsifiability verified: Yes (Probed 7 gate comparisons and 2 authority checks; all mutants turned tests RED)
  • Hollow assertions detected: 0
  • Production backdoors detected: 0
  • Ground-truth sources verified:
    • decide-itx-current-promotion 364-day simulation reproduced locally with 0 gap days and 156 collections
    • tools/datapack/itx-promotion-gate-policy.json measuredBasis versus gate tests
🤖 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/itx-current-promotion.yml:79-95`
  Could a follow-up issue for rebinding be linked in the PR body and the issue
  before merge, with the variable documented as blocked until it closes? Would a
  contract test asserting the variable stays unset help?
- `@.github/workflows/itx-current-promotion.yml:186-187`
  Could the `printf` into `GITHUB_ENV` move above `git push`, given that the
  cleanup step exits cleanly when the remote branch is absent?
- `@tools/ci/guard-itx-current-collection-budget.mjs:21-27`
  Should `decide-itx-current-promotion` report a WAIT state when the topology
  workflow already entered its collector today, or should the guard failure be
  classified as a non-anomaly skip? A test using two workflow contexts on the same
  KST day could pin the chosen behavior.
- `@tools/datapack/itx-promotion-gate-policy.json:14-18`
  Would setting `tripCountDeltaPermille` and `tripMembershipDeltaPermille` to 0 be
  preferable, with the boundary tests following? Should the tuple limits move to 0
  as well, since stable history shows 0?
- `@tools/datapack/itx-promotion-gate-policy.json:19-20`
  Could the limits be set to the measured values (0 and 240) and the boundary
  tests updated accordingly?
- `@tools/datapack/lib/itx-promotion-authority.mjs:80-80`
  Should `verifyItxGatePromotion` read the committed policy file, require byte or
  deep equality with `receipt.policy`, and fail otherwise? Could `build-datapack`
  and the other consumers call it, and a RED test cover a receipt with widened
  limits and a rebound sha?

---

Outside diff comments:
None.

ℹ️ Review info
⚙️ Run configuration

Configuration used: CLAUDE.md, ~/.claude/CLAUDE.md, PR template full.md, linked issue 977 body

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 self-authored PR on its current head.

Base:
main@ea111a98073a784116975d4636bfb23cbf4d158c

Head:
ci/itx-auto-promotion-977@e26d5f98f0eb288db4a8c5e6644b8c7d4e5c9947

Command:
aquila-review discovery PR 978

📥 Commits

Reviewing files changed in this pull request between:

  • Base: ea111a98073a784116975d4636bfb23cbf4d158c
  • Head: e26d5f98f0eb288db4a8c5e6644b8c7d4e5c9947
📒 Files selected for processing (5)
  • .github/workflows/itx-current-promotion.yml
  • tools/ci/guard-itx-current-collection-budget.mjs
  • tools/datapack/itx-promotion-gate-policy.json
  • tools/datapack/itx-promotion-gate.mjs
  • tools/datapack/lib/itx-promotion-authority.mjs
📜 Review details

Comment thread .github/workflows/itx-current-promotion.yml
Comment thread .github/workflows/itx-current-promotion.yml Outdated
Comment thread tools/ci/guard-itx-current-collection-budget.mjs
Comment thread tools/datapack/itx-promotion-gate-policy.json Outdated
Comment thread tools/datapack/itx-promotion-gate-policy.json Outdated
Comment thread tools/datapack/lib/itx-promotion-authority.mjs Outdated
- 한도는 이력 안정 구간의 관측값(0)이다. 직전 승인본 대비만 보면 매번 조금씩 빠지는 drift를 놓친다.
- 기준선 = 마지막 owner 승인 원천. 게이트 승격이 baselineArtifactPath/Sha256으로 이어받고 BASELINE_* check를 영수증에 남긴다.

Refs #977
- verifyItxGatePromotion: 영수증의 policy를 쓰지 않고 커밋된 itx-promotion-gate-policy.json과 같아야 한다. 지표(직전·기준선 대비)와 커밋된 완전성 증거로 계산하는 결속·수집 오류 check(COMMITTED_*)를 원천 파일에서 다시 계산해 대조한다.
- raw capture·replay에 의존하는 SOURCE_BINDING·FETCH_ERRORS는 저장소에 raw가 없어 재계산할 수 없다. 영수증의 PASS와 raw sha 형식만 본다(원장 대조는 ITX 원천이 원장에 없어 후속 이슈).
- build-datapack·apply-itx-topology·build-server-timetable-snapshot·activate-current-source-set이 verifyCurrentItxPromotion을 호출한다.

Refs #977
…료 (F4)

- guard에 probe(--probe)를 더해 공급자 호출 전에 같은 KST 날의 수집 여부를 실패 없이 읽는다.
- 승격 판정: WAIT(ITX_COLLECTED_TODAY). topology 갱신 판정: WAIT_ITX_COLLECTED_TODAY(ITX 수집이 필요한 DUE·EXPIRED·REUSE_CLAIM에서만).
- 두 workflow가 같은 날 겹치는 경우를 양방향으로 테스트한다.

Refs #977
@sonarqubecloud

sonarqubecloud Bot commented Oct 6, 2026

Copy link
Copy Markdown

@AquilaXk
AquilaXk marked this pull request as ready for review October 6, 2026 06:30
@AquilaXk AquilaXk added the automerge FIFO 병합 큐 대상 — 코디네이터가 순서대로 update-branch 후 auto-merge label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

No description provided.

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] ITX-청춘 원천 승격을 QA 승인 코멘트 없이 자동 이상 판정 게이트로 전환 (#870 전체 자동화 3단계)

1 participant