PrintStash v0.6.3: safer imports and reliable print history
PrintStash v0.6.3 fixed Bambu job states, repeated-print history, pagination, Postgres search, G-code parsing, archive paths, and cloud backup listing.
PrintStash v0.6.3 was a maintenance release for edge cases found in imports, printer history, library browsing, and backups. Backend coverage grew from 351 to 547 tests, with frontend coverage moving from 85 to 93.
Printer and history fixes
Bambu state values such as RUNNING, PAUSE, and FINISH were translated into the common provider states. Paused and completed jobs no longer appeared as unknown or remained stuck in progress.
Starting the same G-code file a second time now creates a new job record. Previously, the second run could revive the completed row from the first run and erase its result.
Moonraker file timestamps were normalized to UTC rather than interpreted in the server’s local timezone. Printer-side filenames that happened to resemble a PrintStash revision marker also stopped taking precedence over a valid trailing marker.
Library and metadata fixes
Library and trash pagination gained a stable tie-breaker. This prevents repeated or skipped rows when many models have the same timestamp after a bulk import.
Model-name search became case-insensitive on Postgres, matching the existing SQLite behavior.
G-code parsing corrected several small but visible errors:
- fractional time estimates such as
1.5hno longer become five hours; - Cura filament lengths convert from metres despite spacing variations;
- real zero values, including 0 percent infill and a 0 C bed, remain visible and export correctly.
Import hardening
Marketplace page detection moved to exact domain checks, so a look-alike hostname could not trigger a MakerWorld-specific import path. Downloaded filenames retained semicolons, and ZIP entries using Windows-style parent traversal were rejected.
An unterminated embedded-thumbnail block in malformed G-code no longer caused the parser to buffer the rest of the file into memory.
Faster cloud backup lists
The backup manifest moved to the first archive entry. Listing S3 or R2 backups could then read a small header instead of streaming each full archive just to identify it.
New tests covered G-code parsing, marketplace resolvers, SSRF and archive guards, filament math, collection permissions, full backup round trips, shared-volume scanning, printer-file matching, 3MF thumbnails, and frontend formatters.