diff --git a/devlog/_plan/260904_priority65_closeout/080_outcome.md b/devlog/_plan/260904_priority65_closeout/080_outcome.md new file mode 100644 index 0000000000..96558d9d87 --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/080_outcome.md @@ -0,0 +1,26 @@ +# 080 — 결과 기록 + +base `2421e44ce` → 최종 `origin/dev` `413227888`. + +## 랜딩 + +| PR | squash | 내용 | 트레일러 | +|----|--------|------|----------| +| #3471 | `4968d0f26` | wp2 responses 경계 + wp4 combo context cap | RHODIZ IT | +| #3474 | `00834d710` | wp3 combo metadata + wp5 reset-credit + wp6 게이트 해제 | full999, olddonkey, Abhishek Sharma | +| #3477 | `413227888` | wp7 롤백 저널 삭제 CRUD | — (자체 작성) | + +세 SHA 모두 `git merge-base --is-ancestor origin/dev`로 조상 확인. + +## wp3 — #3332 carry + +커밋 `c691c2565`. PR 원안이 `metadata.maxTokens`(OUTPUT 상한)를 `maxInputTokens`에 +매핑해 combo 입력창을 1M → 128k로, `autoCompactTokenLimit`을 900k → 128k로 무너뜨리는 +것을 실측으로 확인한 뒤 `maxOutputTokens`로 교정했다. + +검증이 3단계였던 것이 이 phase의 값이다. 무수정 코드에서 2 fail을 본 뒤, +**PR의 결함 매핑을 적용한 중간 상태**에서 저격 단언이 여전히 red로 남는 것을 확인하고, +그 다음에야 고쳤다. 초록으로만 끝나는 테스트는 무엇을 겨냥하는지 증명하지 못한다. + +원 PR 테스트가 이 결함을 못 잡은 이유도 기록해 둔다. `toMatchObject`는 열거한 키만 보고 +`contextWindow`는 1M으로 살아남는다. 붕괴는 한 필드 옆에서 일어난다. diff --git a/devlog/_plan/260904_priority65_closeout/081_outcome_wp4.md b/devlog/_plan/260904_priority65_closeout/081_outcome_wp4.md new file mode 100644 index 0000000000..ef16437e1e --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/081_outcome_wp4.md @@ -0,0 +1,13 @@ +# 081 — wp4 — #3461 carry + +커밋 `c880017e7`. 계획은 `gh pr merge 3461 --squash --admin`을 예정했는데, 실행 직전 +확인에서 전제가 무너졌다. #3461은 fork PR이고 head `4e16f889b`에는 게이트 4개만 돌았다. +`gh run list --commit 4e16f889b`가 빈 출력이었다 — Cross-platform CI가 한 번도 실행되지 +않았고, fork 워크플로는 승인 대기로 걸린다. + +게이트 4개만 초록인 것을 "CI green"이라 부르고 머지했다면 이 유닛 자신의 criterion c-2를 +위반한다. 그래서 계획을 carry로 개정(`d9a29db10`)하고 메인테이너 브랜치에서 전체 매트릭스를 +돌렸다. 23/23 통과. + +코드는 한 줄도 바꾸지 않았다. 매처가 좁아 기존 stop 단정 3건을 전부 보존하는 것이 +이 PR을 그대로 받을 수 있는 이유다. diff --git a/devlog/_plan/260904_priority65_closeout/082_outcome_wp5.md b/devlog/_plan/260904_priority65_closeout/082_outcome_wp5.md new file mode 100644 index 0000000000..9678419473 --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/082_outcome_wp5.md @@ -0,0 +1,12 @@ +# 082 — wp5 — #3375 축 D + +커밋 `94e970c04`. 원장 3함수가 완성돼 있는데 프로덕션 호출자가 0개였고, +`auth-api.ts:2177`이 매 호출 새 UUID를 만들어 재시도가 같은 논리적 작업으로 인식되지 +않았다. + +방향에 따라 실패 모드를 다르게 잡은 것이 핵심이다. **열기는 fail-closed** — capacity와 +unavailable은 랜덤 UUID로 폴백하지 않고 503을 낸다. 그 폴백이 정확히 이 identity가 +막으려는 이중소비다. **닫기는 fail-open** — 그 시점엔 크레딧이 이미 나갔고, 원장 실패를 +사용자에게 알리면 수동 재시도를 유발해 반대 방향에서 같은 이중소비가 된다. + +`operationId`를 생략하면 오늘 동작이 바이트 단위로 그대로다. docs-site 8개 로케일도 갱신했다. diff --git a/devlog/_plan/260904_priority65_closeout/083_outcome_wp6.md b/devlog/_plan/260904_priority65_closeout/083_outcome_wp6.md new file mode 100644 index 0000000000..995fae8784 --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/083_outcome_wp6.md @@ -0,0 +1,15 @@ +# 083 — wp6 — #3327 / #3251 게이트 해제 + +커밋 `370ea4ae3`(#3327 carry)와 `081570785`(#3251 carry, 두 커밋 순서대로). + +두 PR 모두 코드는 정확했고 `enforce-target`의 GUI 스크린샷 게이트 하나만 빨간색이었다. +#3327은 테스트만 바꿨는데 `gui/tests/`를 건드려 걸린 오탐이다. + +#3327에서 한 군데를 좁혔다. `not.toContain("tier")`를 봉투 전체에 걸면 `serviceTier`나 +`tierOutcome` 같은 무관한 필드 이름에도 걸려, plan 누출과 상관없는 변경에서 터진다. +report rows와 따옴표 키로 한정했다. + +#3251은 백엔드가 `tierOutcome`을 이미 보내는데 GUI 소비가 0건이던 진짜 공백이다. +스크린샷은 실제 `gpt-5.6-luna` priority 요청을 프록시로 보내 렌더링을 확인한 뒤 찍었다: +`response tier=default (assumed)`. `assumed`를 `confirmed`로 올리지 않은 저자 판단이 +옳다 — 그렇게 하면 #2558을 재도입한다. diff --git a/devlog/_plan/260904_priority65_closeout/084_outcome_wp7.md b/devlog/_plan/260904_priority65_closeout/084_outcome_wp7.md new file mode 100644 index 0000000000..c824eae4f7 --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/084_outcome_wp7.md @@ -0,0 +1,21 @@ +# 084 — wp7 — 롤백 저널 삭제 CRUD + +커밋 `e3f01df6f`, 22파일 +944/-9. PR #3477 → squash `413227888`. + +툼스톤 append로 구현했다. `journal.jsonl` 재작성은 파일 헤더가 약속한 세 가지를 동시에 +깨고, 툼스톤은 `appendFileSync` 한 번이라 불변식이 유지된다. + +클라이언트별 최신 행은 서버가 409로 거절한다. UI가 `deletable`로 버튼을 감추지만 규칙의 +원천은 라우트다 — admin-token 호출자에게는 GUI가 없다. + +GUI 테스트가 컴포넌트보다 나중에 작성됐으므로 `RollbackHistory.tsx`를 HEAD로 되돌려 +4 fail을 확인하고 복원해 15/15를 받았다. 비공허성을 사후에라도 증명하지 않으면 그 초록은 +아무것도 말하지 않는다. + +기존 테스트 하나가 의도대로 빨개졌다. `management-integration-routes.test.ts`가 저널 행의 +키 집합을 정확히 고정하고 있어 `deletable`을 잡았다. 단언을 느슨하게 하지 않고 키 목록을 +확장했다. + +라이브 확인은 격리 홈(`CODEX_HOME`/`OPENCODEX_HOME` 분리)에서 했다. 처음에 홈을 완전히 +격리하지 않아 사용자 `~/.codex`와 `~/.grok` 설정이 죽은 포트를 가리키게 됐고, 즉시 +되돌렸다. 로컬 프록시를 띄우는 실험은 두 환경변수를 모두 격리해야 한다. diff --git a/devlog/_plan/260904_priority65_closeout/085_outcome_wp8.md b/devlog/_plan/260904_priority65_closeout/085_outcome_wp8.md new file mode 100644 index 0000000000..c88fbd3d76 --- /dev/null +++ b/devlog/_plan/260904_priority65_closeout/085_outcome_wp8.md @@ -0,0 +1,37 @@ +# 085 — wp8 — 처분과 최종 회귀 증명 + +## 처분 + +| 대상 | 처분 | +|------|------| +| #3061 | close — `78c630a93`이 상위 구현을 이미 랜딩, 90초 예산으로도 실패해 전제 반증 | +| #3461 #3332 #3327 #3251 | close + `landed-via-maintainer`, 각각 랜딩 SHA와 변경 사유 코멘트 | +| #3348 | 근거 코멘트 — head `928841669` `failover.ts:627`에 410/413 hop 잔존, 체리픽 가능 조각 3개 명시 | +| #3389 | 근거 코멘트 — Bun 1.4.0에서 2청크 방출 후 리셋 시 리더가 0바이트를 관측하는 것 4/4 재현, 전제 반증 | +| #3329 | 근거 코멘트 — `coolComboTarget` 쿨다운 우선순위 무단 역전, 3조각 분할 제안 | +| #3425 | 근거 코멘트 — `liveHealthAccountIds`가 config 전체를 담아 가드 미발화, 질문을 삭제/재등록과 fixedAccount로 교체 | +| #3245 | 근거 코멘트 — 실패가 첫 POST 이전 지점이라 코드로 갈 곳 없음 | + +## 최종 회귀 증명 + +| | SHA | Cross-platform CI | +|---|-----|-------------------| +| 세션 시작 | `2421e44ce` | **FAILURE** — macos `tests/codex-auth-context.test.ts:1461` | +| 최종 | `413227888` | **SUCCESS** | + +회귀가 없을 뿐 아니라, 시작 시점이 이미 빨간색이었고 최종은 초록이다. 시작 상태를 먼저 +확정하지 않았다면 "내가 깼는지"를 판정할 수 없었을 것이다. + +랜딩 3건 모두 최종 `origin/dev`의 조상임을 `git merge-base --is-ancestor`로 확인했다. + +## macOS flake 관찰 + +이번 유닛에서 macOS 잡이 두 번 실패했고 두 번 다 재실행으로 통과했다. 실패한 테스트는 +`tests/codex-shim.test.ts`의 detached redispatch 하나와 `tests/lab-fabric-task.test.ts`의 +CL-07 inactivity timeout 하나로, 둘 다 이 브랜치의 diff에 없는 파일이고 로컬에서는 +각각 77/77, 49/49로 통과한다. 타이밍에 민감한 두 테스트가 macOS 러너에서 간헐적으로 +무너진다는 뜻이고, 별도 조사 대상이다. + +## 로컬 스위트 + +`bun run test`와 인자 없는 `bun test`는 이 유닛에서 **0회** 실행했다.