2.9 KiB
FAIL
apps/ely-doc/src/output.rs:126 — PDF export writes directly to the selected destination without checking whether it is an open document's source. Reproducer: open a FODT, choose Export as PDF, enter that FODT's filename in the native save panel, and confirm Replace. The real window reports successful export while the source becomes %PDF-1.7; the isolated application probe likewise replaced a 1,243-byte FODT with a 26,002-byte PDF. The tab still identifies the file as its editable source. Fix direction: check destination identity against open source files before exporting, including aliases, and refuse source replacement by a different output format; add a source-preservation regression through the export path.
apps/ely-doc/src/navigate.rs:148 — Navigation history reads the cached cursor before preceding queued jumps have updated it. Reproducer: from page one, jump to page two and then page three before the first cursor callback arrives, wait for page three, and invoke Back. Both history entries contain the original cursor (1418, 1658, 0, 414); Back returns to page one (y=1658) instead of page two (page top=16408). This breaks DOC-16's return-to-previous-position behavior. Fix direction: serialize navigation/history capture with completion of the preceding jump and its cursor update, and cover consecutive jumps without settling between them.
crates/ely-lok/src/events/parse.rs:56 — Treating every semicolon-containing font name as an internal fallback silently removes document-declared missing font lists. Reproducer: open a FODT whose font declaration names Nowhere Sans;Nowhere Serif, with both families absent. The real worker logs that exact list in FONTS_MISSING, but Events.fonts becomes empty and ElyDoc suppresses its missing-font banner. The isolated engine assertion fails with fonts=[]. This hides the font replacement and pagination risk required by §8.3. Fix direction: preserve document-declared missing families/lists and distinguish internal fallback candidates using their provenance; add coverage for an explicit missing multi-family declaration.
crates/ely-lok/src/view/scroll.rs:59 — Explicit navigation uses show, which leaves an already visible target at its existing position, while Navigator computes the current item from the viewport's one-third reading line. Reproducer in the real window: put First part and Second part on the same page, then click First part in the outline. The cursor is at First part, but Second part retains the current-item marker; repeated clicks keep the mismatch. The isolated geometry probe also shows a visible target at y=6000 leaving the reading line at 3000. This contradicts C08.6's verified claim that the current item follows navigation. Fix direction: make explicit navigation and current-item calculation agree for visible targets and scroll-boundary clamping, and add a same-page rendered-current-item regression.