open
https://gitlab.synchro.net/main/sbbs/-/work_items/1261
When a QWK packet download fails (transfer error, aborted transfer, quit at the protocol prompt, not enough time left), the message scan pointers (`subscan[].ptr`) are restored to their pre-packing values, but the last-read pointers (`subscan[].last`) are not.
`pack_qwk()` advances both for every packed message (`pack_qwk.cpp`, the `/* set ptr */` and `/* set last read */` lines), and only `.ptr` is snapshotted and restored by `sbbs_t::qwk_download()` (and previously by the C++ QWK menu, so this predates the move of the QWK menu to `qwk_sec.js` in 47daa03e11 (voice-3-plus, 2026-09-28)).
**Effect:** after a failed QWK download, `subscan[].last` is left at the last *packed* message of each sub-board. `.last` is what on-line message reading uses as the user's last-read position (e.g. `readmsgs.cpp`), so the next time the user reads that sub-board on-line, messages they never received are treated as already read. The advanced value is also saved at logoff with the other pointers.
**Fix:** snapshot and restore `.last` alongside `.ptr` in `qwk_download()`.
-- *Authored by Claude (Claude Code), on behalf of @rswindell*
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)