Skip to content

v1.7.0 — Zoom that tells the truth, and the guards that keep it

Choose a tag to compare

@github-actions github-actions released this 07 Sep 06:47
· 153 commits to main since this release

Round 33 of the full-codebase QA closed 35 findings. The theme this time: the features and the CI gates were correct — what was missing was the thing that keeps them correct. Both v1.5.0 and v1.6.0 shipped with well-tested pure functions but unprotected wiring, and several CI gates worked fine while the switch that turns them on was pinned by nothing.

What you will notice

  • The menu bar is gone on Windows. The app never defined a menu, so Electron's default one was still attached — and its View → Zoom In/Out/Actual Size own Ctrl + +/-/0, the same keys v1.6.0 gave to the document viewer. With focus in a text field the app-wide zoom fired instead. Menu accelerators are handled before the page, so the only way to remove the clash is to remove the menu.
  • Zoom now stops where it actually stops. On large pages (drawings, A0) the number kept climbing while the canvas did not — and the same page could produce a ~100MB canvas, which Chromium silently renders as blank past its limit. The limit is now computed from the page size, and the percentage never claims more than what was rendered.
  • Zooming keeps your place. Scroll restoration mixed two coordinate systems and drifted by a constant ≈114px on every change, accumulating as you clicked. Horizontal position is preserved too, and holding Ctrl while scrolling no longer collapses the document while pages re-render.
  • Dragging the summary/chat divider follows the cursor. It used to move about 13% less than your pointer, because the ratio was measured against the whole panel including the toolbar.
  • Long summaries no longer die at two minutes. A watchdog that was supposed to back up the main process was firing before it.

Under the hood

  • The Ollama context ladder was documented as "the default workflow lands on 8192". Measured against the real prompt builder and chunker, a 40-page Korean document needed 9,450 tokens and jumped straight to the maximum window — every default run paid the maximum memory (+2.00GB on llama3.2) and the widest timeout. A 12288 step was added, and a test now measures the real pipeline instead of synthetic strings.
  • When input exceeds the context window, llama.cpp drops the front of the prompt — which is the citation-rules block. The main process had been reporting this since v1.4.0, but nothing in the renderer could receive it (the bridge type did not even have the field). Affected summaries are now marked.
  • electron 44.1.1 → 44.2.0, which fixes an application crash after a large number of IPC messages from renderers — exactly the shape of token streaming.

Safety nets added

Mutation testing found 17 of 89 injected defects surviving. Among them: the entire vertical-split feature (restore, clamp, persistence and layout wiring could all be replaced with constants and the suite stayed green), the accessibility banner rule that only ever looked at one file — and had a real violation hiding in its blind spot — and, in CI, a one-character change to a job condition that would silently skip every push/PR gate while leaving the commands in place for the guards to find.

Installer: unsigned. Windows SmartScreen will warn on first run — choose "More info" → "Run anyway". Verify the download against SHA256SUMS-windows.txt.

🇰🇷 한국어

33차 전수 QA 에서 35건을 수정했습니다. 이번 라운드의 주제는 기능과 CI 게이트는 맞는데, 그것이 계속 맞도록 지켜주는 쪽이 비어 있었다는 것입니다. v1.5.0 과 v1.6.0 은 순수 함수는 촘촘히 테스트돼 있었지만 배선이 무보호였고, CI 는 게이트가 잘 도는데 그 게이트를 켜는 스위치가 아무것에도 고정돼 있지 않았습니다.

눈에 보이는 변화

  • Windows 에서 메뉴 바가 사라집니다. 이 앱은 메뉴를 정의한 적이 없어 Electron 기본 메뉴가 그대로 붙어 있었고, 거기 View → Zoom In/Out/Actual Size 가 Ctrl + +/-/0 을 차지하고 있었습니다 — v1.6.0 이 원문 뷰어 배율에 배정한 바로 그 조합입니다. 입력창에 포커스가 있으면 앱 전체 줌만 발동했습니다. 메뉴 액셀러레이터는 페이지보다 먼저 처리되므로 겹침을 없애려면 메뉴를 내리는 수밖에 없습니다.
  • 배율이 실제로 멈추는 지점에서 멈춥니다. 큰 페이지(도면·A0)에서는 숫자만 계속 올라가고 캔버스는 그대로였고, 같은 페이지가 100MB 짜리 캔버스를 만들면 Chromium 한도를 넘어 빈 화면으로 조용히 그려졌습니다. 이제 상한을 페이지 크기에서 계산하고, 표시되는 퍼센트는 실제로 그려진 것 이상을 주장하지 않습니다.
  • 배율을 바꿔도 보던 자리를 지킵니다. 스크롤 복원이 두 좌표계를 섞어 변경할 때마다 ≈114px 씩 어긋났고 연타하면 누적됐습니다. 가로 위치도 함께 보존되며, Ctrl+휠을 굴리는 동안 페이지가 무너지지 않습니다.
  • 요약↔채팅 경계 드래그가 커서를 그대로 따라옵니다. 종전에는 툴바까지 포함한 패널 전체를 기준으로 비율을 재서 포인터보다 약 13% 덜 움직였습니다.
  • 긴 요약이 2분에 죽지 않습니다. 메인 프로세스를 보조해야 할 감시견이 오히려 먼저 발화하고 있었습니다.

내부 변경

  • Ollama 컨텍스트 사다리는 "기본 워크플로는 8192 에 모인다"고 문서화돼 있었습니다. 실제 프롬프트 생성기와 청커로 재보니 한국어 40쪽 문서는 9,450토큰이 필요해 곧장 최대 창으로 올라갔습니다 — 기본 실행이 매번 최대 메모리(llama3.2 기준 +2.00GB)와 가장 넓은 타임아웃을 지불하고 있었습니다. 12288 단계를 추가했고, 이제 합성 문자열이 아니라 실제 파이프라인을 재는 테스트가 이 관계를 지킵니다.
  • 입력이 컨텍스트 창을 넘으면 llama.cpp 는 프롬프트의 앞부분을 버리는데, 그 자리가 인용 규칙 블록입니다. 메인 프로세스는 v1.4.0 부터 이 사실을 보고하고 있었지만 렌더러에는 받을 경로가 없었습니다(브리지 타입에 필드조차 없었습니다). 해당 요약에는 이제 표식이 붙습니다.
  • electron 44.1.1 → 44.2.0 — 렌더러가 IPC 메시지를 다량 전송한 뒤 발생하는 앱 크래시가 수정됐습니다. 토큰 스트리밍이 정확히 그 형태입니다.

새로 추가된 안전망

뮤테이션 테스트로 주입한 결함 89종 중 17종이 살아남는 것을 확인했습니다. 그중에는 세로 분할 기능 전체(복원·clamp·영속화·레이아웃 배선을 전부 상수로 바꿔도 스위트가 초록이었습니다), 한 파일만 들여다보던 접근성 배너 규칙(그 사각지대에 실제 위반이 숨어 있었습니다), 그리고 CI 에서 잡 조건 한 글자만 바꾸면 명령은 파일에 그대로 남겨둔 채 push/PR 게이트 전부를 조용히 건너뛰게 만들 수 있었던 자리가 있습니다.

인스톨러: 코드 서명이 없습니다. 첫 실행 시 Windows SmartScreen 경고가 뜨면 "추가 정보" → "실행"으로 진행하세요. 내려받은 파일은 SHA256SUMS-windows.txt 로 검증할 수 있습니다.


Windows installer SHA-256

7cb1ba5bc5dd6852da36901f2848620057dce9ea4d6164aa680bad0d75d7a1c6  Local-PDF-Analyzer-Setup-1.7.0.exe