fix(deploy): 기존 runtime 쌍의 조건부 복구 검증 - #1588
Conversation
Preserve the digest parent stack and existing deployment metadata. Reject ambiguous writes and ownership drift; verify full prior spec and rollout before reporting restoration. Unit-only kubectl evidence does not authorize production deployment. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Seongho Bae <me@seonghobae.me>
Reproduce frontend drift during backend restoration and reject a false rollback_verified result. Document non-atomic observations and preserve the first implementation commit. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Seongho Bae <me@seonghobae.me>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
독립 회귀 검증을 완료했습니다. head edd5e25088d9979d4d815dc0aedfebc2ceaf1057에서 기존 backend 환경을 사용해 uv run --project backend --frozen --offline python -m pytest --noconftest backend/tests/test_runtime_deployment_restore.py -k restored_frontend_drift -q -W error --tb=short 를 실행했습니다. 결과: 1 passed, 12 deselected in 18.49s, 프로세스 terminal exit 0. 실행 전후 head 불변·worktree clean·git diff --check 성공입니다. 회귀는 backend 복구 중 이미 복구한 frontend 상태가 바뀌는 상황에서 rollback_verified 오판을 막습니다. 실제 workflow 실행 블록과 shell helper를 사용하지만 kubectl은 네트워크 없는 test double이므로 실제 Kubernetes 복구·배포 증거는 아닙니다. 앞선 잘못된 central Python 환경의 의존성 누락 두 시도는 검사 수집 실패이며 성공 결과에서 제외했습니다. |
|
Visual Inspection receipt — exact head edd5e25. 실제 Edge의 GitHub Preview에서 AGENTS.md 새 복구 지침을 모바일 390px와 데스크톱 1440×1000으로 확인했습니다. doctoring의 복구 설계·독립 반례·제약은 데스크톱과 모바일에서, 명령 블록·미완료 조건·Kubernetes 문헌은 모바일에서 직접 캡처해 읽었습니다. 검사한 본문은 줄바꿈되며 겹침이 보이지 않았습니다. 모바일 코드 블록은 가로 스크롤이 필요하므로 명령 전체가 한 화면에 보인다고 주장하지 않습니다. 화면 크기 override는 reset했습니다. 문서 이동 click 2건은 CDP 제어 시간 초과로 실패했습니다. 이후 별도 정상 screenshot 호출에서 이동된 현재 화면을 확인했고 마지막 문단 이동은 정상 완료했습니다. 실패한 조작을 성공으로 세지 않았습니다. 캡처 원본은 이 작업의 inline tool output에만 있으며 저장 PNG나 공개 artifact를 만들지 않았습니다. 이는 GitHub 문서 렌더링 검수입니다. 실제 Naruon 정상 인증 화면, 클러스터 readiness, 배포 성공 또는 독립 승인 증거가 아닙니다. 고정 head의 76 passed / 78.98초 및 독립 pair-drift 1 passed / 18.49초 기록은 각각의 실행 범위로만 해석합니다. |
Preserve the historical inventory; add a targeted current protected-SHA observation and remaining migration, serialization, readiness and real-cluster recovery acceptance criteria. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Seongho Bae <me@seonghobae.me>
|
Gap baseline follow-up — current head fc05d34. edd5e25 이후 변경은 docs/product-technical-gap-baseline.md의 45줄뿐입니다. develop API에서 보호 SHA 042b0c70531b229af3acbd0421a2f23098d848b3를 다시 확인하고 그 revision의 deploy workflow와 두 manifest를 읽었습니다. 역사적 전체 PR 목록은 재작성하지 않고 현재 배포 안전성 관측, owner와 PR/구현 SHA, 최초 digest 전환·직렬화·환경 승인·readiness·실제 복구 조건을 연결했습니다. 동일한 네 파일의 고정 SHA 재검증: 76 passed, 24.91초, exit 0 (pytest -W error). 이전 독립 실행은 edd5e250의 구현 근거이며 현재 head의 독립 승인으로 전용하지 않습니다. runtime 소스는 동일합니다. 실제 Edge GitHub Preview에서 새 Gap 행·본문을 390px 모바일과 1440×1000 데스크톱으로, 미완료 조건 1–5를 모바일로 확인했습니다. 본문/번호 목록은 줄바꿈되며 겹침이 보이지 않았습니다. 모바일 비교표는 가로 스크롤이 필요합니다. 조작과 캡처가 정상 완료됐으며 viewport override를 reset했습니다. 원본은 작업 inline output이고 저장 이미지 artifact는 없습니다. 이는 문서 검수이며 제품 UI·클러스터·배포 성공 증거는 아닙니다. |
Cover frontend tag baseline, metadata migration and missing-object rejection before any backend patch. Preserve production guards and record the supported boundary in AGENTS and doctoring. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Seongho Bae <me@seonghobae.me>
Record actual ASGI 200/404 evidence, exclude warning-bearing TestClient run, and preserve the historical release implementation for predecessor tracing rather than duplicating or declaring it deployed. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Seongho Bae <me@seonghobae.me>
|
검증 기록 보충: API 사용량 제한이 해제돼 앞선 실행 결과를 연결합니다. 82d230fa6c7f10b2f311464e59ca9b47823f40f5에서 관련 네 파일 검사 79 passed, 227.84초, exit 0; Ruff exit 0. frontend tag baseline·metadata 변경·객체 누락의 세 사전 거부 사례를 추가했고, 두 객체 모두 변경 없음/no patch/no restore를 검증했습니다. 실제 Edge GitHub Preview에서 해당 AGENTS·doctoring 문단을 확인했습니다. 이전 탭 종료와 새 탭 생성 응답 시간 초과는 실패로 구분했고, 상태 재조회에서 생성된 탭을 확인한 뒤 정상 캡처했습니다. 현재 c943c0277f2a2449e51cca8e0417cdcafaf7122d는 그 이후 AGENTS·doctoring 28줄의 조사 기록만 추가합니다. 런타임과 테스트는 동일하며 79개 실행은 82d230fa의 근거입니다. c943c027의 실제 Preview 두 문단도 데스크톱에서 정상 검수했습니다. 이 캡처는 문서 검수이지 제품·DB·배포 검증은 아닙니다. Readiness 조사에서는 기존 httpx ASGITransport와 python -W error로 실제 앱 root200/healthz404/readyz404를 확인했습니다. lifespan·worker·실제 DB·provider는 실행하지 않았습니다. 선행 PR #126의 readiness delta가 후속 #140과 현행 소스에 없다는 근거로 #126을 기존 head 그대로 Draft 수리 대상으로 재개했습니다: #126 (comment) . #1588이 #126 전체를 승계한다는 뜻은 아닙니다. 누락 기능의 복구와 전체 delta 분류는 계속 필요합니다. |
범위
부모 PR #1586 (a48aa3a) 위의 독립 후속 stack입니다. 관련 이슈는 #1022이며 수용 기준은 여전히 미완료입니다. 기존 PR의 delta를 보존합니다.
실제 Apply to AKS 단계에 기존 Deployment 쌍의 spec 복구를 연결합니다. 같은 실행의 private snapshot, 서버 dry-run, UID/resourceVersion 조건부 patch, 적용 응답/readback 소유권, 역순 복구와 최종 pair readback을 검사합니다. AGENTS.md와 doctoring에 재사용 절차·기각 대안·운영 한계를 기록했습니다.
검증
고정 head edd5e25: 관련 4개 파일 pytest 76 passed, 78.98초, exit 0. Ruff, ShellCheck, actionlint exit 0, worktree clean.
실행 명령: uv run --project backend --frozen --offline python -m pytest --noconftest backend/tests/test_runtime_deployment_restore.py backend/tests/test_release_manifest_digests.py backend/tests/test_runtime_image_targets.py backend/tests/test_release_governance.py -q -W error --tb=short
독립 검토가 지적한 backend 복구 중 frontend 재변경은 기존 코드에서 1 failed, 12 deselected로 재현했습니다. 수정 후 복구 검사 13 passed, 전체 76 passed입니다. 실제 workflow shell 및 kubeconfig cleanup을 실행하지만 kubectl은 unit double입니다. 실제 Kubernetes/admission/제품 인증 흐름의 검증은 아닙니다. 문서 Visual Inspection 결과는 확인 후 별도 기록합니다.
운영 한계와 남은 조건
기존 정상 digest-pinned Deployment 두 개만 지원합니다. 최초 배포·tag baseline·metadata migration은 거부합니다. 응답 유실이나 다른 writer의 변경을 자동으로 덮어쓰거나 재시도하지 않습니다. 복구 성공이어도 배포 job은 실패입니다. 두 객체의 복구는 원자적이지 않습니다. 원시 snapshot과 kubeconfig는 공개 artifact로 올리지 않으며 종료 시 삭제하므로 지속 복구 원장도 아닙니다.
보호 부모 병합, hosted 필수 검사와 독립 승인, 동일 배포 대상 직렬화, stale release 거부, 환경 승인, DB readiness, 실제 artifact 왕복과 imageID, 정상 인증 화면 검증이 남았습니다. tag 발행·실제 배포·PyPI/Cargo 게시·클러스터 변경은 실행하지 않았습니다. Secrets 존재를 배포 적격성으로 간주하지 않습니다.
근거: docs/doctoring/runtime-image-boundary-verification.md의 Kubernetes 공식 API/patch 문헌 및 RED→GREEN 기록.