Skip to content

fix(preview): 오래된 비동기 렌더 결과와 예약 작업의 경합 방지 - #8

Closed
0disoft wants to merge 2 commits into
mainfrom
review/preview-render-lifecycle
Closed

0disoft wants to merge 2 commits into
mainfrom
review/preview-render-lifecycle

Conversation

@0disoft

@0disoft 0disoft commented Sep 22, 2026

Copy link
Copy Markdown
Owner

문제

기준 2e3cb0c30fe3ab909256efccc755a3aaedbaee42createWorkspacePreviewRenderer는 실제 렌더가 시작될 때만 renderTurn을 증가시킵니다. 따라서 A 렌더 중 B 문서를 예약하면 B의 90ms debounce가 끝나기 전에 A가 완료되어 오래된 HTML을 게시할 수 있습니다. cleanup도 타이머만 지워 이미 실행 중인 A의 결과를 무효화하지 않습니다.

변경

  • 새 예약/정리 시점에 즉시 세대를 변경하여 이전 비동기 결과를 무효화합니다.
  • debounce 대기 구간도 rendering 상태에 포함합니다.
  • 즉시 렌더 요청은 예약된 이전 작업을 취소합니다.
  • 기존 HTML 생성·클립보드 동작과 외부 호출 인터페이스를 유지합니다.
  • tests/unit/workspace-export.test.ts에 6개 회귀 테스트를 추가합니다.

실제 검증

네트워크 접근이 제한된 로컬 컨테이너에서 저장소 원본을 복원하고 Git blob SHA 5e67d44a14401e83500b2ee230a6818875b64631와 일치함을 확인했습니다. 해당 TypeScript 모듈을 변환해 Node에서 mock exporter/가상 타이머와 함께 실행했습니다.

시나리오 원본 수정
새 문서 debounce 도중 이전 결과 완료 실패 통과
cleanup 이후 실행 중 결과 완료 실패 통과
즉시 렌더 시 기존 예약 취소 실패 통과
예약 시 busy 표시 및 연속 입력 병합 실패 통과
이전 결과가 최신 결과보다 늦게 완료 통과 통과
이전 요청 실패가 새 예약 busy를 해제하지 않음 실패 통과

변경 모듈/추가 테스트의 TypeScript transpile 구문 검사도 통과했습니다. 이는 실제 Vitest 전체 실행이나 Svelte 브라우저 통합 검증을 대체하지 않습니다. 재검증 명령: bun run test --run tests/unit/workspace-export.test.ts, bun run check, bun run test:e2e.

범위

PR #3과 독립적으로 main에서 분기했습니다. 병합하지 않았습니다. 비동기 렌더 실패의 사용자 안내/재시도는 별도 개선 대상이며 이 PR에서 오류 정책까지 변경하지 않습니다.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 22, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review Completed 2026-09-22T18:50:47.743759Z 0e98e6e PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

0disoft commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

전체 통합 검증 완료

최신 테스트 수정 커밋 03be3daa272bf6b5d6f327289450a6e576b53e70의 변경을 PR #3/#13과 함께 검증 전용 브랜치에 구성했습니다. 앱 소스·테스트는 해당 PR의 정확한 Git blob을 재사용했습니다.

Review Integration Validation #2 — 커밋 5a39d3726d5774f2b2c1c9b6eb022770e3625400, success.

검사 실제 결과
Bun 1.3.14 frozen install 성공
Svelte check 오류 0, 기존 Toolbar.svelte CSS 경고 6
tsgo 성공
Oxlint 오류 0, 경고 0
Oxfmt 성공
Vitest 27개 파일, 191개 테스트 통과 — 이 PR의 신규 6개 포함
Pages base path 빌드 성공
Chromium E2E 기존 5개 모두 통과

이 검증은 별도 통합 브랜치에서 실행한 결과이며, 이 PR 단독의 PR 체크 실행과 구분합니다. #3을 먼저 병합하면 이후 PR에서 상시 CI를 사용할 수 있습니다. main과 배포는 변경하지 않았습니다.

실제 DCInside 붙여넣기, Safari/Firefox, 네이티브 한국어 IME와 대형 문서 성능 측정까지 검증한 것은 아닙니다.

@0disoft

0disoft commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

PR의 미리보기 경쟁 상태 수정을 7b2cc31·8de7397 커밋으로 main에 반영했습니다. main 30e849a의 CI가 통과했습니다.

@0disoft 0disoft closed this Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant