Skip to content

chore(ci): 죽은 stack-refresh 워크플로를 폐기한다 — 네이티브 스택 PR 은 update-branch 403 이라 성공 실적 0 #1458

Closed

Description

@OnlyReadOneBook

작업 유형

maintenance — CI·빌드·의존성·저장소 운영 유지보수

주 담당 모듈

platform — Android 앱·CI·빌드·릴리스·저장소 운영

개요

Refresh PR Stack(stack-refresh.yml)은 도입 이래 한 번도 성공한 적이 없는 죽은 경로다. 워크플로·스크립트·정책 테스트를 함께 지운다.

1. 쓰기 경로가 스택 PR 에 구조적으로 막혀 있다

refresh-pr-stack.mjs:120 이 PUT /pulls/{n}/update-branch 를 호출하는데, gh stack 으로 묶인 PR 은 이 엔드포인트가 거절한다.

403 {"message":"Updating a stacked PR's branch via this endpoint is not supported."}

root #1417 로 dispatch 한 run 33229217723 이 정확히 이 줄에서 죽었다. base 가 develop 인 스택 밑단(#1417·#1410)도 스택 멤버라는 사실만으로 막힌다.

2. 남은 수동 체인에서는 선형 가드가 막는다

현재 열린 PR 35건 중 base 가 트렁크가 아닌 것은 5건이고, 그중 네이티브 스택 미등록(stackEntry == null)은 #1055·#1197·#1316 뿐이다. 그런데 이 체인은 fix/562-weekly-grid-real-data 에서 #1197·#1316 둘로 갈라져, buildLinearStack 이 has multiple open children 으로 거절한다.

root 후보 결과
#1417 · #1410 · #1414 · #1409 · #1372 네이티브 스택 → update-branch 403
#966 · #1055 #1055 아래가 2갈래 → 선형 가드 거절
#1197 · #1316 자식 없음 → 1건짜리 "스택"

즉 이 워크플로의 유일한 존재 이유인 다단 전파는 현 저장소의 어떤 입력으로도 도달하지 못한다. 성공하는 것은 자식 없는 leaf 를 root 로 준 1건짜리 경우뿐인데, 그건 gh api -X PUT repos/.../pulls/<N>/update-branch 한 줄과 같다.

3. 애초에 늦게 태어났다

네이티브 스택 채택은 8/23(#906)인데 이 워크플로는 8/27 eb157e0 에서 처음 들어왔다. 실행 이력은 3건(8/29)이 전부고 failure 1 · cancelled 2 — 성공 0.

4. CI 로 하는 편이 손으로 하는 것보다 나쁘다

GITHUB_TOKEN push 는 pull_request 를 재발행하지 않아 필수 check 를 수동 dispatch 로 붙여야 한다. 그런데 REQUIRED_WORKFLOWS = ["pr-validation.yml", "codeql.yml", "merge-order-guard.yml"] 는 현 required 목록과 이미 어긋나 있다 — required-android-device (develop) 룰셋의 Pixel 2 API 30 androidTest·Pixel 2 API 34 accessibility smoke 와 Base Freshness 가 빠져 있어, 설령 갱신에 성공해도 PR 이 미검증 상태로 남는다. 사람이 자기 토큰으로 갱신하면 이 문제 자체가 없다(8/29 MERGEABLE 21건 실적).

대체 자동화는 만들지 않는다

  • 밑단이 머지되면 GitHub 이 위 칸을 서버에서 자동 rebase·retarget 한다. "체인 전파" 라는 목적 자체가 플랫폼 기능에 흡수됐다.
  • 남는 구멍은 "스택 밑단이 develop 에 뒤처졌을 때" 하나뿐이고(현재 refactor(core): 활동 추적 ping(logActivity) 제거 — 로그인·재발급 서버 집계와 중복 왕복 (#1413) #1417·refactor(core): 수신자 선택 화면을 공용 컴포넌트로 추출 (#791) #1410 이 required 인 Base Freshness red), 여기에 쓸 수단은 gh stack rebase + force-push 가 유일하지 않다. 403 은 엔드포인트 한정이라, base 를 로컬에서 머지하고 평범하게 push 하면 통한다 — #1372(스택 #1411 pos2) head 에 8/29 Merge branch 'refactor/791-receiver-select-common' into fix/540-editor-receiver-select 2건이 그렇게 올라가 있고 Base Freshness 도 success 다. SHA 를 갈아치우지 않으므로 리뷰어 VIEWED 상태와 기존 CI 결과가 살아남는다.
  • 이 병합은 리뷰 diff 를 키우고 CI 를 다시 태운다. 언제 태울지가 곧 판단이라 자동화 대상이 아니다. 대신 이 경로를 README 브랜치 절에 한 줄로 남겨, 지워진 자동화가 같은 형태로 되살아나지 않게 한다.

완료 조건

  • .github/workflows/stack-refresh.yml 삭제
  • .github/scripts/refresh-pr-stack.mjs · refresh-pr-stack.test.mjs 삭제
  • remote-dev-workflows-policy.test.mjs 의 stack refresh only executes trusted default-branch code 블록 삭제
  • README 브랜치 절에 스택 PR base 갱신 경로(로컬 병합 + 일반 push, update-branch 403) 기록
  • 남은 참조 0건 확인

참고

Activity

  1. added
    maintenanceCI·빌드·의존성·저장소 운영 유지보수
    area:platformCI·빌드·릴리스·저장소 운영 영역
    on Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:platformCI·빌드·릴리스·저장소 운영 영역maintenanceCI·빌드·의존성·저장소 운영 유지보수

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions