Repository navigation
[Refactor] 배경 경로가 계획을 싣는 로직을 전경과 공유하게 한다 - #237
Merged
Merged
Conversation
prepareForegroundNow는 여섯 갈래로 끝나는데, 그 enum은 private이라 밖에서 볼 수 없다. 그래서 각 갈래를 만들어내는 입력과 밖으로 드러나는 결과를 짝지어 고정했다. prepareNow와 합치기 전에 이 여섯이 서 있어야 한다. .prepared → 바인딩·응답·캐시가 다 있을 때 .unavailable → 바인딩도 서버로 보낼 의도도 없을 때 (로컬 루틴) .pendingBinding → 그룹 생성이 큐에 올라가 바인딩을 기다릴 때 .pendingGeneration → 서버가 아직 만들고 있을 때 .retryableRemoteRequest → 상태 조회가 실패했을 때 .retryableDownload → 내려받기가 실패했을 때 뒤의 네 갈래는 밖에서 모두 .retryablePending으로 보인다. 그래서 단언만으로는 엉뚱한 갈래로 가도 통과한다. 변이로 확인했다 — 네 갈래를 하나씩 .unavailable로 바꿔 보니 각각 제 테스트가 잡았고, 그룹 바인딩 대기 분기를 지웠을 때도 그렇다. 확인 뒤 제품 코드는 원복했다. 실패를 만들 수단이 없어 스텁 둘을 보강했다. WarmupRemoteStub.failAllResponses와 FailingWarmupDownloader. 이 둘이 없어서 마지막 두 갈래는 여태 한 번도 실행되지 않았다. 스모크 1,067개 통과. Co-Authored-By: Claude <noreply@anthropic.com>
prepareNow의 꼬리 28줄이 publishPreparedPlan을 인라인으로 한 벌 더 갖고 있었다. 둘 다 "시작할 때 잡아 둔 단계와 실을 때의 단계를 견줘서, 내려받는 동안 로컬이 바뀌었으면 싣지 않는다"를 한다. 한쪽만 고치면 배경으로 데운 안내와 재생 직전에 데운 안내가 서로 다른 기준으로 실린다. 그냥 호출로 바꾸면 동작이 달라진다. publishPreparedPlan은 실패를 Bool로만 알려 주는데, 두 실패는 뜻이 다르다. 로컬 단계가 바뀌었거나 사라졌으면 들고 있던 계획은 틀린 것이라 버려야 하고, 저장소 읽기가 잠깐 실패한 것뿐이면 버리면 안 된다 — 버리면 다음 재생에서 안내가 통째로 없어진다. prepareNow는 이 둘을 구분하고 있었고 publishPreparedPlan은 아니었다. 그래서 PlanPublication(published / rejectedStalePlan / unavailable)을 두고 두 호출자가 각자 해석하게 했다. 전경은 어느 실패든 "지금 들려줄 수 없다"로 같으므로 기존 동작 그대로다. 한계를 적어 둔다. rejectedStalePlan이 배경에서 계획을 버리는 동작은 **테스트로 고정하지 못했다.** 이 가드는 다운로드가 진행되는 동안 로컬이 바뀐 경우에만 작동하는데, 그 상황에서 localAudioURLs는 지문 불일치로 어차피 nil을 돌려주므로 버리든 말든 밖에서 구별되지 않는다. 시도한 테스트가 변이를 잡지 못해 지웠다 — 무는 게 없는 테스트는 없느니만 못하다. 이 분기는 이번 변경 전에도 덮여 있지 않았고, 동작은 코드를 읽어 보존했다. Co-Authored-By: Claude <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Comment |
2 tasks done
MinHeokChoi
changed the base branch from
test/foreground-preparation-branches
to
main
September 23, 2026 23:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ PR 유형
어떤 변경 사항이 있나요??
스택 PR 5/5 · base:
test/foreground-preparation-branches🛠️ 작업내용
[Refactor] 배경 경로가 계획을 싣는 로직을 전경과 공유하게 한다
prepareNow의 꼬리 28줄이 publishPreparedPlan을 인라인으로 한 벌 더 갖고
있었다. 둘 다 "시작할 때 잡아 둔 단계와 실을 때의 단계를 견줘서, 내려받는
동안 로컬이 바뀌었으면 싣지 않는다"를 한다. 한쪽만 고치면 배경으로 데운
안내와 재생 직전에 데운 안내가 서로 다른 기준으로 실린다.
그냥 호출로 바꾸면 동작이 달라진다. publishPreparedPlan은 실패를 Bool로만
알려 주는데, 두 실패는 뜻이 다르다. 로컬 단계가 바뀌었거나 사라졌으면 들고
있던 계획은 틀린 것이라 버려야 하고, 저장소 읽기가 잠깐 실패한 것뿐이면
버리면 안 된다 — 버리면 다음 재생에서 안내가 통째로 없어진다. prepareNow는
이 둘을 구분하고 있었고 publishPreparedPlan은 아니었다.
그래서 PlanPublication(published / rejectedStalePlan / unavailable)을 두고
두 호출자가 각자 해석하게 했다. 전경은 어느 실패든 "지금 들려줄 수 없다"로
같으므로 기존 동작 그대로다.
한계를 적어 둔다. rejectedStalePlan이 배경에서 계획을 버리는 동작은 테스트로
고정하지 못했다. 이 가드는 다운로드가 진행되는 동안 로컬이 바뀐 경우에만
작동하는데, 그 상황에서 localAudioURLs는 지문 불일치로 어차피 nil을 돌려주므로
버리든 말든 밖에서 구별되지 않는다. 시도한 테스트가 변이를 잡지 못해 지웠다 —
무는 게 없는 테스트는 없느니만 못하다. 이 분기는 이번 변경 전에도 덮여 있지
않았고, 동작은 코드를 읽어 보존했다.
Co-Authored-By: Claude noreply@anthropic.com
규모 — 1 file changed, 44 insertions(+), 38 deletions(-)
📋 추후 진행 상황
prepareNow와prepareForegroundNow의 앞부분(바인딩 조회·원격 요청)이 아직 갈라져 있습니다. 다만 그쪽은 실패 의미가 정당하게 다르므로(배경은 스텝 단위로 계속, 전경은 첫 문제에서 즉시 반환) 무리해서 합치면 조건부가 늘어납니다. 별도 판단이 필요합니다.📌 리뷰 포인트
동작이 바뀌지 않았는지 확인해 주세요.
publishPreparedPlan이 실패를Bool로만 알려 주던 것을 3-케이스로 바꿨습니다. 두 실패의 뜻이 다르기 때문입니다 — 로컬 단계가 바뀌었으면 들고 있던 계획을 버려야 하고, 저장소 읽기가 잠깐 실패한 것뿐이면 버리면 안 됩니다(버리면 다음 재생에서 안내가 통째로 사라집니다).전경은 어느 실패든 결과가 같아 기존 동작 그대로입니다.
한계를 밝힙니다.
rejectedStalePlan이 배경에서 계획을 버리는 동작은 테스트로 고정하지 못했습니다. 이 가드는 다운로드 중에 로컬이 바뀐 경우에만 작동하는데, 그 상황에서localAudioURLs는 지문 불일치로 어차피nil을 돌려주므로 버리든 말든 밖에서 구별되지 않습니다. 시도한 테스트가 변이를 잡지 못해 지웠습니다 — 무는 게 없는 테스트는 없느니만 못합니다. 이 분기는 변경 전에도 덮여 있지 않았고, 동작은 코드를 읽어 보존했습니다.✅ Checklist
검증: 시뮬레이터 smoke 1,067개 통과(실패 0, 실기기 전용 3건 skip). 정적 게이트 3종 통과.
앞 PR이 머지되면 이 PR의 base는 자동으로
main이 된다. 순서대로 머지한다.🤖 Generated with Claude Code