Skip to content

test(release): hold the seven-day release gap and the no-auto-merge rule - #912

Merged
yeongseon merged 1 commit into
mainfrom
chore/issue-895-release-checks
Oct 11, 2026
Merged

yeongseon merged 1 commit into
mainfrom
chore/issue-895-release-checks

Conversation

@yeongseon

Copy link
Copy Markdown
Collaborator

#895 중 kpubdata 저장소에서 할 수 있는 부분입니다. Builder·Studio 쪽 작업과 토큰 방식 결정은 남아 있어 이슈는 열어 둡니다.

바뀐 것

  • 7일 간격 검사 테스트 (tests/unit/scripts/test_release_window.py): 간격 규칙은 이미 scripts/release_window.py 로 분리돼 있어 새 스크립트는 만들지 않았습니다. 실제 v0.9.0 게시 시각(2026-10-06T02:43:55Z)으로 6일째(10/12)는 거부, 7일째(10/13)는 허용, 그리고 UTC 로는 6일이지만 서울 시간으로 7일째인 순간(10/12 15:00 UTC)은 허용되는지 확인합니다. release.yml 의 prepare 와 release 두 경로가 태그·버전을 쓰기 전에 on-demand 창 검사를 거치는지도 확인합니다.
  • v0.10.0 이 사흘 만에 나간 이유: 검사가 놓친 것이 아닙니다. release-please PR chore: release v0.10.0 #830 본문에 Critical-Patch: #821 줄이 있었고, 릴리스 실행 로그에 release allowed: critical patch for #821, outside the on-demand rule 이 남아 있습니다. 테스트가 release.yml 의 Read a critical-patch declaration 스크립트를 그대로 실행해, 그 줄이 있으면 통과하고 없으면 10/09 에 거부된다는 것을 보입니다.
  • 워크플로가 PR 을 병합하지 않는다는 검사 (tests/unit/test_no_workflow_merges.py): 세 저장소 어디에도 Dependabot 자동 병합 워크플로는 없고 저장소 자동 병합 설정도 꺼져 있습니다. 브랜치 보호는 승인 수를 요구하지 않으므로(무거운 변경 리뷰 라벨이 붙은 PR 만 승인 필요) 자동 병합은 필수 체크는 지켜도 사람을 건너뜁니다. 그래서 .github/ 의 어떤 파일도 PR 을 병합·자동 병합·승인하지 못하게 막고, 그런 워크플로를 실제로 잡아내는 테스트를 함께 둡니다.
  • 문서: POLICY.md 2.1.3 의 "버전은 prepare 의 bump 를 사람이 고른다" 를 release-please 절차로 고쳤습니다. docs/compatibility.md 5.1 에 v0.10.0 경위와 자동 병합 금지를 적었고, RELEASE_POLICY.md 의 절차 1단계를 맞췄습니다.

확인

uv run ruff check .                      -> All checks passed!
uv run ruff format --check .             -> 432 files already formatted
uv run mypy src                          -> Success: no issues found in 70 source files
scripts/check_english_comments.py        -> no Korean comments or docstrings
scripts/check_plain_codes.py             -> no bare review/verification code
uv run pytest                            -> 3366 passed, 2 failed (test_build_dataset_verifier, origin/main 에서도 같은 2건 실패 — 이 변경과 무관)
mkdocs build --strict                    -> built
python -m build                          -> built

릴리스·태그는 하지 않았고 #890 도 병합하지 않았습니다.

Refs #895

🤖 Generated with Claude Code

Prove the on-demand release window refuses a release six days after the last
final release and allows it on the seventh, counted in KST, using the real
v0.9.0 timestamp. Run release.yml's own critical-patch reader to show v0.10.0
passed three days after v0.9.0 because PR #830 declared Critical-Patch: #821.
Add a gate that fails when any workflow merges, auto-merges or approves a pull
request. Update POLICY and compatibility.md for the release-please flow.

Refs #895

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yeongseon yeongseon added the epic:governance Project governance — policy, labels, CI enforcement label Oct 11, 2026
@yeongseon
yeongseon merged commit a953368 into main Oct 11, 2026
22 of 23 checks passed
yeongseon added a commit that referenced this pull request Oct 12, 2026
… picking a bump (#926)

## 무엇

`docs/governance/POLICY.md` 2.1.3 의 릴리스 절차 문단에서 남은 틀린 문장 하나를 고칩니다. 원래
이슈가 가리킨 "263행 부근" 문단(사람이 prepare 의 `bump` 를 고른다)은 #912 에서 이미
release-please 절차로 바뀌었고, 지금은 355–362행에 있습니다. 그 끝 문장이
"kpubdata-builder·kpubdata-studio 는 prepare 의 `bump` 를 사람이 고른다" 고 적고
있었는데, Studio 의 `release.yml` prepare 에는 `bump` 입력이 없고 Builder 의 최신 릴리스
태그를 읽어 같은 버전을 씁니다. 2026-10-12 소유자 결정(같은 버전 정책, ADR 0004)대로 Studio 는
release-please 를 두지 않고 Builder 태그를 따른다고 고쳤습니다. `AGENTS.md`,
`docs/compatibility.md` 5.1 과 같은 내용입니다.

## 확인한 것 (코드 변경 없음)

- **7일 간격**: `tests/unit/scripts/test_release_window.py` 가 6일째 거부·7일째
허용, 서울 시간 자정 경계, `release.yml` 의 두 경로가 태그 전에 창 검사를 거치는지, 그리고
`Critical-Patch:` 줄이 없는 release PR 이 간격 안에서 거부되는지를 확인합니다(#912). 막는 것은
병합이 아니라 태그입니다.
- **v0.10.0**: v0.9.0 게시 2026-10-06T02:43:55Z, v0.10.0 게시
2026-10-09T01:44:46Z. PR #830 본문에 `Critical-Patch: #821`, 릴리스 run
37871181656 의 "Gate, tag and release" 잡 로그에 `##[notice]release allowed:
critical patch for #821, outside the on-demand rule`. 검사가 뚫린 것이 아니라
critical patch 로 선언된 것입니다.
- **Dependabot 자동 병합**: `git ls-files .github`(31개 파일)에 자동 병합·병합·승인을 하는
워크플로가 없고, `allow_auto_merge=false`, 저장소 ruleset 0개. 브랜치 보호의 필수 체크는 `CI
gate`, `R3 review`, `PR title`, 승인 수 0, 관리자에게도 적용.
`tests/unit/test_no_workflow_merges.py` 가 `.github/` 의 어떤 파일도 PR 을 병합·자동
병합·승인하지 못하게 막고, 그 검사가 실패하는 경우도 테스트합니다. 우회 경로가 없어서 고칠 것이 없습니다.

## 검증

- ruff check: All checks passed / ruff format --check: 435 files already
formatted / mypy src: no issues in 70 source files
- check_english_comments: no Korean comments / check_plain_codes: 108
files, no bare code / mkdocs build --strict: built
- pytest: 3406 passed, 2 failed —
`tests/unit/scripts/test_build_dataset_verifier.py` 의 두 테스트는 변경 전
`main`(212b707)에서도 로컬에서 똑같이 실패하고, `main` CI 에서는 통과합니다. 이 PR 과 무관한 로컬 환경
문제입니다.

이 문서를 바꾸는 변경은 원래 작성자가 아닌 사람의 승인이 필요한 변경(R3)으로 취급되지만, 소유자가 2026-10-11 에
일반 PR 의 리뷰 수준을 R2 로 낮추도록 승인했습니다.

Scope exception: NO
Existing flow or risk: the release procedure text in POLICY 2.1.3
contradicted Studio's actual release.yml (no bump input).

Refs #895

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

epic:governance Project governance — policy, labels, CI enforcement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant