diff --git a/.changeset/env3-foreground-guidance-766.md b/.changeset/env3-foreground-guidance-766.md deleted file mode 100644 index df985415..00000000 --- a/.changeset/env3-foreground-guidance-766.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@ait-co/devtools': patch ---- - -env3 러너/대시보드에 "테스트 완료까지 앱 전면 유지" 안내 추가 — 2026-07-08 실기기 관측(46/8/6 부분 run vs 78/0/13 클린 완주)으로 원인이 확정된 백그라운드 suspend 연쇄 실패(iOS WebView JS suspend → evaluate 60s 타임아웃 → relay WS 사망 → 잔여 파일 전연쇄 실패)에 대한 사전 안내. 원인이 사용자 행동이라 suspend 감지/재개 로직 대신 안내 한 줄로 대응(Page visibility 신호가 relay 죽음과 동시에 끊기므로 사전 안내가 실효적 해법). - -- QR 대시보드(attach 페이지) 스캔 절차에 마지막 단계로 추가 — sandbox(env 2, `attach.sandbox.step4`)·intoss(env 3, `attach.intoss.step5`) 양쪽 family, ko/en 모두. -- `devtools-test` CLI의 러너 터미널 출력(scan-wait 배너) — `attach-orchestrator.ts`의 공유 `header`에 한 줄 추가, `start_attach` MCP 도구 결과와 CLI 표준출력 양쪽에 동일하게 실림. -- (선택) evaluate 타임아웃이 재시도까지 실패했을 때의 최종 에러 메시지에 진단 힌트 추가(`relay-worker.ts`) — "기기 앱이 백그라운드로 갔을 수 있음"을 덧붙여 사후 진단을 빠르게. - -Closes #766. diff --git a/.changeset/in-app-graceful-detach-748.md b/.changeset/in-app-graceful-detach-748.md deleted file mode 100644 index d35eec50..00000000 --- a/.changeset/in-app-graceful-detach-748.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@ait-co/devtools': patch ---- - -in-app 디버그 표면에 graceful detach 추가 — run 종료 시 우리가 주입한 오버레이·상태를 정리해 미니앱을 조작 가능 상태로 되돌린다 (#748). - -run7 실기기 관측(디버그 세션 종료 후 "Debugger Disconnected" 잔존)의 (b)-가설 코드 원인은 우리 표면 3건이었다: ① CDP로 주입된 `#__ait_debug_indicator` 배지가 종료 후 영구 잔존(`attach-orchestrator.ts` `buildIndicatorExpression`가 렌더, `relay-factory.ts` `close()`가 disconnected로만 바꾸고 제거는 안 함), ② eruda 인-페이지 콘솔이 unmount 없이 잔존, ③ keepAwake가 `beforeunload`에서만 복구돼 세션 종료(비-unload) 시 화면이 계속 awake. - -- **배지**(`buildIndicatorExpression`): disconnected 상태를 non-blocking(`pointer-events:none` 즉시)·self-dismissing(창 이후 fade→DOM 제거)으로 변경. 재연결(`ait:relay-ws-state` open) 시 self-dismiss 취소·재마운트(transient 터널 blip은 배지를 날리지 않음), 컨트롤러는 유지돼 재주입 시 `window.WebSocket` 이중 래핑 없음. 기본 disconnected 라벨을 ko-primary `디버거 연결 끊김`으로. -- **in-app**(`attach.ts` `detachDebugSurface()`): 단일 idempotent·비-throw 정리 함수. 배지 제거 + eruda unmount(`unmountEruda()`) + keepAwake 복구. relay WS 종료의 모든 경로에 배선 — 비-4401 종료는 grace window 후(재연결 시 취소), 4401(TOTP 만료=종결)은 즉시, `error`는 방어적 스케줄, `pagehide`는 즉시(beforeunload-safe). `#478` fail-fast 보존을 위해 WS observer proxy는 의도적으로 유지. - -경계(가설 a): 스피너 + 전체 터치 무반응은 우리 레이어 밖 — 우리 표면은 full-viewport 요소·body 스크롤/pointer 잠금·capture-phase 리스너가 없어 구조적으로 모든 입력을 흡수할 수 없다. 네이티브 토스 앱 오버레이는 JS로 해제 불가라 시도하지 않고 코드 주석으로 명시. 실기기 run7 재현 확인은 폰-게이트라 다음 env3 세션에서 검증 예정. diff --git a/.changeset/mock-getConsentedUserData-798.md b/.changeset/mock-getConsentedUserData-798.md deleted file mode 100644 index c012fdc9..00000000 --- a/.changeset/mock-getConsentedUserData-798.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@ait-co/devtools': patch ---- - -`getConsentedUserData` mock 추가 — `@apps-in-toss/web-framework` 2.x stable 라인에만 존재하는 export(3.0-beta 표면엔 부재, `PermissionError`의 역비대칭)를 mock 표면에 반영. `appLogin`/`getAnonymousKey` async-bridge 패턴을 미러해 `aitState.state.auth.consentedUserData`(기본 `{ USER_NAME: 'mock-user-name' }`, `aitState.patch('auth', …)`로 dial)를 resolve. 타입 asymmetry는 기존 `AssertIfPresent`로 처리(3.0-beta는 skip, 2.x는 strict `AssertCompat` 게이트) — `as unknown as` 캐스트 불필요(선언 shape를 로컬 재선언, 반환값이 선언 타입 내부라 구조적 호환). 다운스트림 sdk-example 배선은 sdk-example#331. Closes #798. diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d78e99c..23648731 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## 0.1.142 + +### Patch Changes + +- c2d9764: env3 러너/대시보드에 "테스트 완료까지 앱 전면 유지" 안내 추가 — 2026-07-08 실기기 관측(46/8/6 부분 run vs 78/0/13 클린 완주)으로 원인이 확정된 백그라운드 suspend 연쇄 실패(iOS WebView JS suspend → evaluate 60s 타임아웃 → relay WS 사망 → 잔여 파일 전연쇄 실패)에 대한 사전 안내. 원인이 사용자 행동이라 suspend 감지/재개 로직 대신 안내 한 줄로 대응(Page visibility 신호가 relay 죽음과 동시에 끊기므로 사전 안내가 실효적 해법). + + - QR 대시보드(attach 페이지) 스캔 절차에 마지막 단계로 추가 — sandbox(env 2, `attach.sandbox.step4`)·intoss(env 3, `attach.intoss.step5`) 양쪽 family, ko/en 모두. + - `devtools-test` CLI의 러너 터미널 출력(scan-wait 배너) — `attach-orchestrator.ts`의 공유 `header`에 한 줄 추가, `start_attach` MCP 도구 결과와 CLI 표준출력 양쪽에 동일하게 실림. + - (선택) evaluate 타임아웃이 재시도까지 실패했을 때의 최종 에러 메시지에 진단 힌트 추가(`relay-worker.ts`) — "기기 앱이 백그라운드로 갔을 수 있음"을 덧붙여 사후 진단을 빠르게. + + Closes #766. + +- 22653eb: in-app 디버그 표면에 graceful detach 추가 — run 종료 시 우리가 주입한 오버레이·상태를 정리해 미니앱을 조작 가능 상태로 되돌린다 (#748). + + run7 실기기 관측(디버그 세션 종료 후 "Debugger Disconnected" 잔존)의 (b)-가설 코드 원인은 우리 표면 3건이었다: ① CDP로 주입된 `#__ait_debug_indicator` 배지가 종료 후 영구 잔존(`attach-orchestrator.ts` `buildIndicatorExpression`가 렌더, `relay-factory.ts` `close()`가 disconnected로만 바꾸고 제거는 안 함), ② eruda 인-페이지 콘솔이 unmount 없이 잔존, ③ keepAwake가 `beforeunload`에서만 복구돼 세션 종료(비-unload) 시 화면이 계속 awake. + + - **배지**(`buildIndicatorExpression`): disconnected 상태를 non-blocking(`pointer-events:none` 즉시)·self-dismissing(창 이후 fade→DOM 제거)으로 변경. 재연결(`ait:relay-ws-state` open) 시 self-dismiss 취소·재마운트(transient 터널 blip은 배지를 날리지 않음), 컨트롤러는 유지돼 재주입 시 `window.WebSocket` 이중 래핑 없음. 기본 disconnected 라벨을 ko-primary `디버거 연결 끊김`으로. + - **in-app**(`attach.ts` `detachDebugSurface()`): 단일 idempotent·비-throw 정리 함수. 배지 제거 + eruda unmount(`unmountEruda()`) + keepAwake 복구. relay WS 종료의 모든 경로에 배선 — 비-4401 종료는 grace window 후(재연결 시 취소), 4401(TOTP 만료=종결)은 즉시, `error`는 방어적 스케줄, `pagehide`는 즉시(beforeunload-safe). `#478` fail-fast 보존을 위해 WS observer proxy는 의도적으로 유지. + + 경계(가설 a): 스피너 + 전체 터치 무반응은 우리 레이어 밖 — 우리 표면은 full-viewport 요소·body 스크롤/pointer 잠금·capture-phase 리스너가 없어 구조적으로 모든 입력을 흡수할 수 없다. 네이티브 토스 앱 오버레이는 JS로 해제 불가라 시도하지 않고 코드 주석으로 명시. 실기기 run7 재현 확인은 폰-게이트라 다음 env3 세션에서 검증 예정. + +- adab590: `getConsentedUserData` mock 추가 — `@apps-in-toss/web-framework` 2.x stable 라인에만 존재하는 export(3.0-beta 표면엔 부재, `PermissionError`의 역비대칭)를 mock 표면에 반영. `appLogin`/`getAnonymousKey` async-bridge 패턴을 미러해 `aitState.state.auth.consentedUserData`(기본 `{ USER_NAME: 'mock-user-name' }`, `aitState.patch('auth', …)`로 dial)를 resolve. 타입 asymmetry는 기존 `AssertIfPresent`로 처리(3.0-beta는 skip, 2.x는 strict `AssertCompat` 게이트) — `as unknown as` 캐스트 불필요(선언 shape를 로컬 재선언, 반환값이 선언 타입 내부라 구조적 호환). 다운스트림 sdk-example 배선은 sdk-example#331. Closes #798. + ## 0.1.141 ### Patch Changes diff --git a/package.json b/package.json index ace44e26..52c90793 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ait-co/devtools", - "version": "0.1.141", + "version": "0.1.142", "description": "Development tools for Apps in Toss mini-apps — mock SDK, floating devtools panel, and universal bundler plugin", "type": "module", "engines": {