Skip to content

failureModes에 soft-resolve 모드 추가 — reject 아닌 '다른 shape로 resolve' 실패 7건 (프로비저닝 의존) #789

Description

@DaveDev42

문제

failureModes 다이얼(#777)은 현재 reject만 한다 — buildNativeError로 네이티브 오류 envelope을 만들어 throw/onError한다. 그런데 실기기(env3) capture는 다이얼로 재현해야 할 실패의 상당수가 reject가 아니라 다른 shape로 resolve하는 soft-resolve임을 보인다. reject 전용 다이얼로는 이걸 못 만든다.

sdk-example env1↔env3 capture diff(현재 동치 59/70)의 남은 불일치 11건 중 7건이 이 soft-resolve 부류다:

API :: scenario env3 (실기기) 관측 mock 현재 기본값 상태
grantPromotionReward / grantPromotionRewardForGame (3 시나리오) resolved { errorCode, message } { key } shape 확정 — #785가 담당
IAP.getSubscriptionInfo :: happy-varied-orderId resolved {} (valueKeys=[]) { subscription: {...} } shape 확정
checkoutPayment :: I2-result-success-examined resolved ["false","reason"] { success } 키셋 확정(sdk-example task #31), 값 수준 미확정(#303, 폰 필요)
requestTossPayPaysBilling (2 시나리오) resolved ["false","reason"] { success } 위와 같음

전부 프로비저닝·시나리오 의존이다 — 31146에 등록된 promotion이 없고, 조회한 orderId에 활성 구독이 없고, 테스트가 실 결제를 완료할 수 없다. 그래서 실기기는 "성공했지만 내용이 빈/오류 본문" shape로 resolve한다.

설계 규칙 (왜 mock 기본값을 못 바꾸나)

이건 이미 코드 주석과 #785·#786에 명문화된 규칙이다: 프로비저닝·시나리오 의존 관측은 mock의 무조건적 기본값이 되면 안 된다. 기본값을 이 soft-resolve로 굳히면 —

그래서 기본값은 선언 타입대로 성공으로 두고, 재현은 다이얼에 붙인다. 문제는 현 다이얼이 reject만 한다는 것 — 이 부류를 담을 다이얼 모드가 없다.

할 일 (설계 + 구현)

1. failureModes에 soft-resolve 모드를 추가한다. reject(현행)와 별개로, 지정한 API가 다이얼을 켰을 때만 대체 shape로 resolve하게 한다. shape는 API별로 고정(실측값):

  • grantPromotionReward/grantPromotionRewardForGame{ errorCode, message } (#785와 통합 — #785를 이 모드의 첫 소비자로)
  • IAP.getSubscriptionInfo{} (빈 객체)
  • checkoutPayment / requestTossPayPaysBilling → 결제 실패 soft-resolve shape

2. 값 수준 미확정 gate. promotion({errorCode,message})·IAP({})는 키셋·값이 정합해 지금 배선 가능하다. 그러나 결제 2 API의 ["false","reason"] 키셋은 sdk-example#303(폰 필요)에서 값 수준 확증이 안 끝났다 — 키 이름이 특이해(문자열 "false") 하네스 아티팩트가 아님은 확인됐지만(task #31) 실제 값 구조는 미확정이다. 결제 2 API 배선은 #303 확증 후에 착수한다(미확정 shape로 다이얼을 굳히면 계기가 또 거짓말한다). promotion·IAP만 이 이슈에서 배선하고, 결제는 #303-gated로 남긴다.

3. Acceptance

  • 다이얼 미설정 시 각 API가 선언 타입 성공 shape 유지(zero behavior change)
  • 다이얼 설정 시 실측과 동치인 soft-resolve shape로 resolve
  • 두 상태를 각각 단언하는 테스트 (특히 valueKeys = 실측 키셋)
  • sdk-example에서 다이얼 켠 상태로 env1↔env3 capture diff가 해당 키들을 동치로 접는지 확인 (promotion 3 + IAP 1 = 4건 → 동치 59/70에서 63/70 기대; 결제 3건은 feat: unify MCP error messages with 4-state differentiation (#285) #303-gated)

관련

커뮤니티 오픈소스 프로젝트입니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    roadmapharness roadmap 작업 항목 (Project #1)

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Todo

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions