Skip to content

[Test] v1.4 release QA: PDF reader end-to-end + IA smoke in both themes #125

Description

@mrsibe

v1.4 release QA item

This is the release gate for what automated coverage cannot reach. It sits at the intersection of five changes that landed independently: #71 (reader architecture), #72 (citation jump), #73 (excerpt to note), #65 (workspace shell and IA), and the PDF.js major upgrade to 6.3.289 (#124).

What CI already proves — do not re-check these by hand:

What only a human can see: whether the canvas actually renders content, whether the text-layer selection geometry lines up with the visible glyphs, the real keyboard focus order and focus rings, contrast in both themes, and whether the two coordinate paths still agree after a zoom.

Before you start

Run it npm run dev is fastest. npm start (electron-vite preview) runs the production bundle from out/.
Packaged build dist/linux-unpacked/knownote launches directly — but it was built before #65, so rebuild with npm run build:unpack first if you want to check the packaged path.
Switch theme Settings → Theme Mode (light / dark)
Fixtures test/fixtures/multipage.pdf (3 pages — use this one for jump + highlight + zoom), sample.pdf (1 short page), and sample.docx / headings.docx / sample.html for the non-PDF text-fallback path
Prerequisite Importing a source is gated on an embedding model being available. With none configured the + button is disabled and you get "no embedding model configured". Either configure a remote embedding connection or let the built-in local model finish downloading (about 134 MB on first use).

A. PDF chain — #71 / #72 / #73 × the pdf.js 6.x upgrade

Run in order, in one theme to start:

  • A1. Opening a PDF from a Library row renders it in the in-app Reader (no hand-off to the OS application)
  • A2. The page is actually drawn: real text, correct glyphs, no blank page and no garbled characters
  • A3. The text layer is selectable — drag across one line, and drag across several lines
  • A4. Selection → Save excerpt produces the quote plus the source reference in the note
  • A5. Clicking the source reference in the note jumps back to the same page and paragraph
  • A6. Clicking a citation chip in the transcript jumps to the same page and paragraph, and that chip shows its selected / current state
  • A7. The block highlight drawn from bbox lands on the correct paragraph — not offset above or below it, and not the whole page
  • A8. Zoom, then repeat A3, A5, A6 and A7 — the highlight and the jump must still agree with the selection

Why A8 is the one that matters. The normalised bbox → pixel conversion and the text-layer character offsets are two independent coordinate paths. Zoom is the only thing that makes them diverge silently, and it is the step a "does a PDF open" check never reaches. multipage.pdf exists for this: page jump, highlight and scale have to vary together before the mistake shows up.

One concrete thing to watch in A2: the packaged smoke run logs Warning: UnknownErrorException: Ensure that the 'standardFontDataUrl' API parameter is provided. That is a known pdf.js warning about standard font data, and the visible symptom would be substituted or garbled glyphs — so A2 is not a formality, it is the check for it.

B. IA and both themes — #65

The five steps in Light, then the same five in Dark:

  • B1. Light — Library → open a source → the in-app Reader renders it (a PDF and one non-PDF format through the text fallback, so both reader implementations are exercised)
  • B2. Light — a source row is keyboard reachable (Tab + Enter) with a visible focus ring
  • B3. Light — clicking a citation gives its chip the selected / current state (aria-current), and Escape returns focus to that chip
  • B4. Light — a reader opened with no origin (deep link, restored session) returns focus to the chat composer on Escape / Back
  • B5. Light — Cmd/Ctrl+[ moves focus into the Library zone and Cmd/Ctrl+] into the Notes zone, revealing a collapsed zone first
  • B6. Light — pressing the same zone shortcut twice leaves the zone open (it enters the zone; it does not toggle it — collapsing stays on the panel-header button), and Tab from an entered zone moves into that zone's content
  • B7. Dark — repeat B1–B6

B7 is not optional. Both themes share one token ladder, and a missing dark value is exactly the kind of defect lint cannot see. A state that is correct in only one theme fails this item.

Also worth a look while you are in B1: the focus-visible ring should be visible on all four surfaces that accept focus — source rows, citation chips, zone wrappers and drag handles.

This is not a #65 or #124 claim

#65 ships on its own tests and #124 was verified on the packaged app. Neither claims its GUI path has been confirmed by hand until this issue passes. Nothing here is a merge blocker for work already merged — it is a release gate.

Activity

  1. added this to the v1.4 milestone on Sep 25, 2026
  2. added
    testTests and test infrastructure
    on Sep 25, 2026
  3. changed the title [-][Test] v1.4 release QA: PDF reader end-to-end (reader → excerpt → citation round trip)[/-] [+][Test] v1.4 release QA: PDF reader end-to-end + IA smoke in both themes[/+] on Sep 25, 2026
  4. mrsibe commented on Sep 27, 2026

    @mrsibe
    OwnerAuthor

    Manual pass reported clean by the maintainer, all items ticked, and v1.4.0 is tagged and building (npm version minor → chore: bump version to 1.4.0 → tag v1.4.0).

    Two residuals, recorded rather than dropped:

    1. This checklist predates the chat reliability work ([Refactor] Stream protocol: AiService returns a chunk stream, and the hand-made done chunk is deleted #141–feat(chat): continue a stopped answer, and ask a bad one again #153): the four answer-state lines and the Continue / Retry actions are new UI that is not in it, and they have not been looked at in both themes. Cheap to check deterministically: Settings → the chat connection → Max output tokens = Custom 64 → ask anything → the answer stops as truncated with the state line and both actions; Continue must grow the same message, Retry must add a sibling. Where did the eight previously unticked items (A5–A8, B1–B7) get verified? — I read the count change only, so the tester should confirm which build was used.
    2. The homepage empty state keeps its dashed border, which is the primitive's documented default (DESIGN.md) — the same reason fix(ui): remove the dashed border from the knowledge base empty state #58 removed it from the panel and not from the page. It needs a contract change, so it is a 1.4.1/v1.5 candidate rather than a release blocker.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    testTests and test infrastructure

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions