Skip to content

긴급: union 제거 여파로 열린 PR 10건의 CHANGELOG가 비워짐 — 가드 #3941 필요 #3942

Description

@yazzang-homelab

요약 — 내가 유발한 회귀다. 열린 PR 10건의 CHANGELOG가 비어 있다.

#3932(11:25:32Z 머지)가 .gitattributes에서 packages/*/CHANGELOG.md merge=union을 제거했다. 제거 근거는 유효했다 — union은 충돌을 내지 않고 양쪽을 이어붙여 이미 릴리스된 섹션에 항목을 조용히 밀어넣고 있었다(#3929, 실측 35건).

전환 비용을 예상하지 못했다. 이 파일들이 리베이스에서 처음으로 진짜 충돌을 내기 시작했고, 그 해소 과정에서 파일이 통째로 비워졌다.

시각 (UTC) 사건
11:25:32 #3932 머지
11:29:29 ~ 11:35:02 #3920 #3697 #3870 #3908 #3887 #3864 #3729 #3869 #3866 #3873 force-push

작성자 6명, PR 10건, 6분. 전부 head의 CHANGELOG가 1바이트다.

$ git cat-file -s <head>:packages/coding-agent/CHANGELOG.md
1                      # dev: 312259

dev는 무사하다 — 손실은 PR 브랜치에만 있다. 하지만 #3920은 이 사고 직전 head에서 이미 승인된 상태였으므로, 모르고 머지했으면 packages/agent/CHANGELOG.md 726줄이 통째로 날아갔을 것이다.

조치한 것

  1. 10건 전부에 경고 코멘트를 달았다 — 원인, 시간대, 복구 명령(git checkout origin/dev -- packages/<pkg>/CHANGELOG.md).
  2. #3941로 CI 가드를 올렸다. 릴리스 헤딩(## [X.Y.Z])이 base 대비 하나라도 사라지면 실패한다. 실제 망가진 head 3건(fix(session): harden pre-admission artifact spill #3873 fix(agent): name the callable alias when a bridged tool call misses #3920 perf(ai): shard bundled model catalog by provider #3869)에 대해 exit 1, 정상 범위에서 exit 0으로 검증했다. 바이트 임계값이 아니라 헤딩 집합 비교라서 릴리스 커밋(헤딩 추가)은 통과한다.

형 판단이 필요한 것

#3941을 우선 머지해달라. 가드가 들어가기 전까지는 같은 사고가 계속 재생산된다 — 리베이스하는 PR마다 같은 충돌을 만나기 때문이다. 지금 열린 PR 44건 중 상당수가 아직 리베이스를 안 했을 뿐이다.

원래 판단을 되돌릴 생각은 없다. union 복원은 조용한 오염(#3929)으로 되돌아가는 것이고, GitHub은 애초에 그 드라이버를 보지도 않는다. 필요한 건 드라이버가 아니라 손실을 막는 게이트이고, 그게 #3941이다.

내 과실 지점을 명확히 해둔다: #3932를 낼 때 "리베이스에서 CHANGELOG 충돌이 처음 발생한다"는 결과는 PR 본문에 적었지만, 그 충돌을 잘못 해소하면 파일이 통째로 날아갈 수 있다는 실패 모드는 예상하지 못했고 가드도 같이 넣지 않았다. 게이트 없이 병합 동작을 바꾼 게 잘못이다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions