1010- ** Non-goals:** #418 , #417 , #241 , #420 /#430 , #435 /#436 , GUI enhancement, 릴리스와 ` main `
1111 승격은 건드리지 않는다. #433 의 CLI escape hatch와 GUI 가시화도 이번 종료 근거에 포함하지
1212 않는다.
13- - ** Verifier:** ` git merge-tree --write-tree ` , rebase 뒤 focused tests, ` bun run typecheck ` ,
14- ` bun run test ` , ` bun run privacy:scan ` , 원격 ` dev ` SHA 대조, GitHub issue/PR 상태 재조회.
13+ - ** Verifier:** ` git merge-tree --write-tree ` , rebase 뒤 focused tests와 ` bun run prepush ` ,
14+ exact-SHA Cross-platform CI·Service lifecycle , 원격 ` dev ` SHA 대조, GitHub issue/PR 상태 재조회.
1515- ** Stop condition:** local ` dev ` 와 ` origin/dev ` 가 같은 통합 SHA를 가리키고, #433 /#432 /#422 /
1616 #373 /#404 가 근거 코멘트와 함께 closed이며, 대체되는 열린 PR만 닫혀 있다.
1717- ** Memory artifact:** 이 문서 하단의 실행 영수증과 WP6 검증 기록.
2828- fetch 뒤 ` origin/dev ` : ` 9b37ef5a926388e7570bd819512ac3dbc8ae18e5 `
2929- local ` dev ` 는 ` origin/dev ` 보다 1커밋 앞서며, ` dev ` 워크트리에는 사용자 소유
3030 ` devlog/_plan/.DS_Store ` 수정이 있다. 이 파일은 stage, restore, commit하지 않는다.
31- - merge-base 이후 local ` dev ` 의 41개 커밋과 스윕의 14개 커밋은 변경 파일 교집합이 없고,
32- ` git merge-tree --write-tree dev codex/260725-bug-sweep ` 가 tree
33- ` 964c0433f05fee1325cf284639eb9d0547eb0277 ` 를 생성했다 .
31+ - merge-base 이후 local ` dev ` 의 41개 커밋과 계획·감사반영 커밋을 포함한 스윕의 16개 커밋은 변경 파일
32+ 교집합이 없다. ` git merge-tree --write-tree dev codex/260725-bug-sweep ` 결과는 계획 문서를
33+ 고칠 때마다 바뀌므로 rebase 직전에 실행해 영수증에 기록한다 .
3434
3535## 변경 계약
3636
3737### 1. 스윕 브랜치 재배치
3838
3939``` diff
40- - codex/260725-bug-sweep: <옛 merge-base> + 14 commits
41- + codex/260725-bug-sweep: local dev@f0db9188 + 같은 14개 논리 커밋
40+ - codex/260725-bug-sweep: <옛 merge-base> + 16 commits
41+ + codex/260725-bug-sweep: local dev@f0db9188 + 같은 16개 논리 커밋
4242```
4343
4444- 현재 clean 워크트리에서 ` git rebase dev ` 를 실행한다.
4545- 충돌이 생기면 자동 해석하지 않고 파일별로 local ` dev ` 와 스윕 의도를 대조한다.
46- - 재배치 뒤 ` dev..codex/260725-bug-sweep ` 가 정확히 스윕 커밋 14개인지 확인한다.
46+ - 재배치 뒤 ` dev..codex/260725-bug-sweep ` 가 정확히 스윕 커밋 16개인지 확인한다.
4747
4848### 2. 검증
4949
@@ -54,19 +54,21 @@ bun test tests/codex-routing.test.ts tests/service.test.ts \
5454 tests/responses-compaction-routing.test.ts tests/cursor-blob.test.ts \
5555 tests/cursor-live-transport.test.ts tests/cursor-protobuf-events.test.ts \
5656 tests/adapter-resolve.test.ts tests/config.test.ts \
57- tests/management-provider-validation.test.ts
57+ tests/management-provider-validation.test.ts tests/codex-auth-context.test.ts \
58+ tests/chat-completions-endpoint.test.ts
5859```
5960
6061full gates:
6162
6263``` bash
63- bun run typecheck
64- bun run test
65- bun run privacy:scan
64+ bun run prepush
65+ cd gui && bun test tests && bun run build
6666```
6767
68- - full suite의 기존 GUI dependency 실패는 WP6 기준선과 동일한지 다시 확인한다.
69- - 신규 실패가 있으면 push와 GitHub 종료를 중단한다.
68+ - ` prepush ` 가 요구하는 typecheck, GUI lint, isolated root test, privacy scan이 실패하면 push를
69+ 중단한다. conditional React Doctor는 advisory이므로 출력은 기록하되 blocking gate로 과장하지
70+ 않는다. GUI test/build는 위 별도 명령으로 검증한다. WP6 기준선은 진단 자료일 뿐 통과 예외가
71+ 아니다.
7072
7173### 3. local dev fast-forward와 push
7274
@@ -77,14 +79,18 @@ bun run privacy:scan
7779
7880- ` /Users/jun/Developer/new/700_projects/opencodex ` 에서 `git merge --ff-only
7981 codex/260725-bug-sweep`를 실행한다.
80- - ` .DS_Store ` 수정이 그대로 남았는지 확인한다.
82+ - fast-forward 전에 ` .DS_Store ` 의 ` git hash-object ` 값을 기록하고, 작업 뒤 같은 값인지 확인한다.
83+ 수정 상태뿐 아니라 내용 해시가 같아야 한다.
8184- 원격 선행 변경이 없는지 한 번 더 fetch하고 ` origin/dev ` 가 현재 local ` dev ` 의 ancestor인지
8285 확인한 뒤 ` git push origin dev ` 한다. force push는 사용하지 않는다.
83- - push 뒤 ` git ls-remote origin refs/heads/dev ` 와 local SHA가 같아야 한다.
86+ - 첫 push의 SHA를 ` IMPLEMENTATION_SHA ` 로 기록한다. ` git ls-remote origin refs/heads/dev ` 와
87+ local SHA가 같아야 한다.
88+ - ` IMPLEMENTATION_SHA ` 에 대한 ` Cross-platform CI ` 와 ` Service lifecycle ` 이 모두 success가
89+ 될 때까지 기다린다. 이전 SHA의 성공이나 로컬 테스트는 이 hosted gate를 대신하지 않는다.
8490
8591### 4. GitHub 종료 범위
8692
87- dev push가 확인된 뒤 다음 순서로 처리한다.
93+ ` IMPLEMENTATION_SHA ` 의 두 hosted gate가 성공한 뒤 다음 순서로 처리한다.
8894
8995| 항목 | 조치 | 근거 |
9096| ---| ---| ---|
@@ -98,15 +104,26 @@ dev push가 확인된 뒤 다음 순서로 처리한다.
98104- PR #376 외 다른 열린 PR은 이번 다섯 이슈를 직접 대체하지 않는다.
99105- #430 /#436 은 별도 버그를 해결하므로 유지한다. #408 은 Windows elevation 문제라 #432 와
100106 겹치지 않으므로 유지한다.
101- - 코멘트에는 최종 ` dev ` SHA와 해당 구현 커밋 SHA, 검증 결과를 넣는다. issue를 먼저 닫아
102- PR 자동 문구가 문맥을 흐리지 않도록 PR #376 은 별도 설명과 함께 닫는다.
107+ - 코멘트에는 ` IMPLEMENTATION_SHA ` 와 해당 구현 커밋 SHA, 검증 결과를 넣는다. 모든 코멘트를
108+ 먼저 게시하고 URL을 확인한 뒤 PR #376 을 닫고, 마지막으로 이슈 다섯 건을 닫는다.
109+ - #433 에는 핵심 pinning 수정만 완료됐고 CLI clear-cooldown과 GUI 가시화는 이번 변경에 없다고
110+ 명시한다. #404 /#422 는 제보자의 live gateway 재검증이 아니라 회귀 계약으로 닫는다고 밝힌다.
111+ - 상태와 URL을 실행 영수증에 기록해 별도 docs-only receipt commit을 만든다. 이
112+ ` RECEIPT_SHA ` 는 스윕 워크트리에서 만든다. local ` dev ` 를 다시
113+ ` git merge --ff-only codex/260725-bug-sweep ` 한 뒤 ` dev ` 를 push하고 ` .DS_Store ` blob hash가
114+ 여전히 같은지 확인한다.
115+ - receipt는 docs-only라 push path filter가 두 hosted workflow를 자동 실행하지 않는다.
116+ ` gh workflow run ci.yml --ref dev ` 와 ` gh workflow run service-lifecycle.yml --ref dev ` 로 둘을
117+ 수동 dispatch하고, ` RECEIPT_SHA ` 에 매인 두 run이 success인지 확인한다. 이 두 번째 hosted
118+ gate가 끝나야 이 work-phase를 닫는다.
103119
104120## 수용 기준
105121
106122- rebase와 fast-forward가 비강제 방식으로 끝난다.
107- - 사용자 소유 ` .DS_Store ` 수정이 보존된다.
108- - focused tests, typecheck, privacy scan이 0으로 끝나고 full suite가 기준선보다 악화되지 않는다.
109- - ` origin/dev ` 가 최종 local ` dev ` SHA와 일치한다.
123+ - 사용자 소유 ` .DS_Store ` 의 전후 blob hash가 같다.
124+ - focused tests, ` bun run prepush ` , GUI test/build가 0으로 끝난다.
125+ - ` IMPLEMENTATION_SHA ` 와 ` RECEIPT_SHA ` 각각의 Cross-platform CI·Service lifecycle이 성공한다.
126+ - ` origin/dev ` 가 최종 ` RECEIPT_SHA ` 와 일치한다.
110127- #433 /#432 /#422 /#373 /#404 와 PR #376 의 최종 상태·코멘트 URL을 이 문서에 기록한다.
111128
112129## 실행 영수증
0 commit comments