chore: bump fig-extract to v2.19.4 - #39
Conversation
엔진 PDFViewer-Figure-Extract v2.19.4를 벤더링한다 (엔진 SHA af44f5a49c6dec19344e9893dee4963b60de76ab, 벤더링 시점 HEAD). 직전 벤더링본은 v2.14.0이었다. ## 소비자에게 영향 있는 계약 변화 **cross-page figure (v2.19.0)** — 캡션이 다음 장 상단에 있는 그림을 이제 실제 그림 페이지에 방출한다. `figure.page`는 그림 페이지이고, 캡션이 다른 페이지면 `figure.captionPage`(optional)가 실린다. same-page figure에는 필드 자체가 없다. `captionBoxPt`는 **캡션 페이지 좌표계**다 — 그림 페이지 높이로 변환하면 조용히 틀린다. `FigureSeed.captionPage`를 필수로 두고 `toFigureEntries`가 `?? page`로 정규화하며, 새 경계 함수 `toFigureEntry()`가 필드를 명시 나열해 seed 전용 필드가 `FigureEntry`(→ chrome.storage)로 새지 않게 한다. 스프레드는 TS strict에서도 초과 속성 검사를 받지 않아 타입이 막아주지 못한다. **FigRenderError (v2.19.1)** — Chrome이 메모리 압력에서 캔버스 백킹 스토어를 회수하면 엔진이 즉시 실패시킨다. 이전에는 백지 크롭이 조용히 저장됐다. `tab-figures.ts`가 이 오류를 이름으로 판별해(엔진과 동일한 duck-typing — realm을 넘으면 instanceof만 깨진다) 메모리 안내 문구를 띄운다. **부분 결과는 없다**: 앞 20페이지를 다 잡았어도 21페이지에서 죽으면 목록이 0건이다. 실패 모드가 "일부 백지"에서 "전부 없음"으로 옮겨간다. **크롭 접근자 (v2.19.1)** — `cropCanvas`가 export에서 사라졌고 `cropDataURL`· `cropBlob`은 내부 `cropPng_`를 읽는 접근자다. "엔진 figure 객체를 그대로 넘겨라 / structuredClone·JSON 왕복 금지"는 필드 이름만 바뀐 채 그대로 유효하다. **ExtractOptions** — `cropImages`(v2.19.1)·`onDiagnostic`(v2.15.0) 추가. onDiagnostic record에는 캡션 줄 원문이 앵커당 최대 180자 실리므로 로컬 디버깅 외에는 쓰지 않는다. v2.13.1~v2.19.4의 나머지 변경(감지 품질·관측 계층)은 출력 스키마에 영향이 없다. ## 검증 typecheck 통과 · 48 tests 통과(직전 41 → +7) · build 통과. 실 PDF 스모크 3편에서 cross-page 방출과 크롭 생성을 확인했다 — PLOS pbio 7@p15 (captionPage 16), Sanesi 10@p12(13), Barak 1@p2(3). 세 편 모두 captionPage를 가진 행은 그 1건뿐이고 나머지 same-page 행에는 필드가 없다. 새 테스트가 죽이는 회귀: ① 좌표 변환에 캡션 페이지 높이를 쓰는 것(페이지별로 다른 높이를 주는 mock + 호출 인자 단언) ② 카드가 캡션 페이지를 가리키는 것 ③ FigRenderError 판별을 instanceof로 좁히는 것 ④ toFigureEntry가 seed를 스프레드해 captionPage를 흘리는 것. ## 문서 §벤더링 상태를 v2.19.4 완료로 갱신하고, 버전 핀이 지키는 범위가 "상수 ↔ 엔진 파일" 한 쌍뿐이며 선언 타입이 어느 버전 기준인지는 기계가 검사할 수 없다는 점을 명시했다. 갱신 절차에 엔진 repo clean 확인과 SHA 기재를 추가했다. figure-ux.md·implementation-plan.md의 캡션 검색 페이지 기준, pdf-host.ts의 낡은 크롭 주석, v2.16.0에서 해소된 v2.11.0 캐비앳도 함께 정정했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughfig-extract 엔진을 v2.19.4로 갱신하고, 캡션 페이지 정규화·구조화 진단·렌더 오류·PNG 크롭 처리를 추가했다. FigureEntry 변환, figures UI, 테스트와 관련 문서도 새 계약에 맞춰 수정했다. Changesfig-extract 엔진 통합
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related issues
Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks 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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/fig-extract-integration.md`:
- Around line 41-44: 정본 예시의 반복 처리에서 정의되지 않은 seed 참조를 수정하세요. seeds 배열의 각 항목을
순회하도록 예시 코드를 변경하고, 각 항목을 toFigureEntry()에 전달해 기존 captionPage 제거 및
anchorFoundIn() 동작을 유지하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 46219e06-566d-4151-97de-d6329ce13c9c
📒 Files selected for processing (9)
docs/fig-extract-integration.mddocs/figure-ux.mddocs/implementation-plan.mdsrc/core/fig-engine.tssrc/core/fig-extract.jssrc/viewer/panel/tab-figures.tssrc/viewer/pdf-host.tstest/fig-engine.test.tstest/tab-figures.test.ts
Summary
엔진 PDFViewer-Figure-Extract v2.19.4를 벤더링한다 (엔진 SHA
af44f5a49c6dec19344e9893dee4963b60de76ab). 직전 벤더링본은 v2.14.0이었고, 그 사이 소비자 계약이 두 가지 바뀌었다 — cross-page figure의captionPage방출과FigRenderError.Changes
cross-page figure (엔진 v2.19.0) — 캡션이 다음 장 상단에 있는 그림을 이제 실제 그림 페이지에 방출한다.
figure.page는 그림 페이지이고, 캡션이 다른 페이지일 때만figure.captionPage(optional)가 실린다. same-page figure에는 필드 자체가 없다.captionBoxPt는 캡션 페이지 좌표계다 — 그림 페이지 높이로toPdfRect하면 조용히 틀린다. 타입·문서에 명시했다.FigureSeed.captionPage를 필수로 두고toFigureEntries가?? page로 정규화한다.FigureEntry는 넓히지 않았다 (captionAnchor.page가 목적지 필드).toFigureEntry()가 필드를 명시 나열해 seed 전용 필드가FigureEntry(→chrome.storage)로 새지 않게 한다. 스프레드는 TS strict에서도 초과 속성 검사를 받지 않아 타입이 막아주지 못한다.FigRenderError (엔진 v2.19.1) — Chrome이 메모리 압력에서 캔버스 백킹 스토어를 회수하면 엔진이 즉시 실패시킨다(이전에는 백지 크롭이 조용히 저장됐다).
tab-figures.ts가 엔진과 동일한 duck-typing(error.name)으로 판별해 메모리 안내 문구를 띄운다 — realm을 넘으면instanceof만 깨지고 이름은 남는다.크롭 접근자 —
cropCanvas가 export에서 사라졌고cropDataURL·cropBlob은 내부cropPng_를 읽는 접근자다. "엔진 figure 객체를 그대로 넘겨라 /structuredClone·JSON 왕복 금지"는 필드 이름만 바뀐 채 그대로 유효하다.ExtractOptions—cropImages·onDiagnostic추가.onDiagnosticrecord에는 캡션 줄 원문이 앵커당 최대 180자 실리므로 로컬 디버깅 외 사용 금지를 주석에 명시했다.문서 — 버전 핀이 지키는 범위가 "상수 ↔ 엔진 파일" 한 쌍뿐이고 선언 타입이 어느 버전 기준인지는 기계가 검사할 수 없다는 점을 명시. 갱신 절차에 엔진 repo clean 확인 + SHA 기재 추가.
figure-ux.md·implementation-plan.md의 캡션 검색 페이지 기준,pdf-host.ts의 낡은 크롭 주석, 엔진 v2.16.0에서 해소된 v2.11.0 캐비앳도 정정.Test plan
npm run typecheck통과npm test48 passed (직전 41 → +7)npm run build통과실 PDF 스모크 3편 — 벤더링본을 헤드리스로 로드해 확인
7@p15, captionPage 1610@p12, captionPage 131@p2, captionPage 3세 편 모두 크롭(
cropDataURL)이 PNG data URL로 생성되는 것까지 확인했다.새 테스트가 죽이는 회귀 (뮤테이션으로 검증):
dataset.page·aria-label·p.N칩 세 곳FigRenderError판별을instanceof로 좁히는 것toFigureEntry가 seed를 스프레드해captionPage를 흘리는 것Checklist
npm run typecheck·npm test통과Summary by CodeRabbit