diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a7d906..0a08087 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ | Version | Date | Notes | |---|---|---| +| [v1.4.3](docs/releases/v1.4.3.md) | 2026-08-30 | Fixed sending a print failing with "Failed to get AMS mapping table" (07FF-8012) — a re-sliced `.3mf` has no AMS data, so the print now always feeds from the threaded filament; fixed live status stuck on "Not connected" / "No live job data yet" (MQTT packet-size limit was smaller than a P2S status dump, causing a silent connection flap); fixed a DB error during a print killing telemetry and the pause/resume/stop buttons; fixed `stop`/`pause`/`resume` sometimes ignored (non-numeric command id); camera on the printer card is now pop-out only (the always-on feed starved the printer's own camera) | | [v1.4.2](docs/releases/v1.4.2.md) | 2026-08-29 | Fixed the live camera feed failing on every Docker install (`ffmpeg` was missing from the container image); fixed live telemetry showing "No live job data yet" during a print (never requested a full status dump on connect); fixed the "Docs site" CI workflow being invalid since the template sync | | [v1.4.1](docs/releases/v1.4.1.md) | 2026-08-29 | Fixed a printer added or edited through the UI never starting its live-telemetry connection until the next backend restart (Test connection worked, but the card stayed "Not connected" and Print failed) — mostly affected Docker installs | | [v1.4.0](docs/releases/v1.4.0.md) | 2026-08-26 | Export/import to migrate data between spoolbook installs (merges, doesn't replace) from the Settings page; fixed uploaded `.3mf` files being lost on every redeploy (were stored in temp, not the persistent volume) | diff --git a/README.md b/README.md index 0076c62..75c1800 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,19 @@ cd spoolbook-rs && cargo run # backend, port 5070, sqlite at spoolbo cd spoolbook-rs && cargo test ``` +`tests/printer_live.rs` holds hardware-in-the-loop tests (MQTT connect, FTPS upload, send a +print and cancel it in the prep phase, unsliced `.3mf` → slicer-service → print). They're +`#[ignore]`d and need a real printer on the LAN — run them by hand while developing the printer +integration: + +```sh +SPOOLBOOK_TEST_PRINTER_IP=… SPOOLBOOK_TEST_PRINTER_ACCESS_CODE=… SPOOLBOOK_TEST_PRINTER_SERIAL=… \ + cargo test --test printer_live -- --ignored --nocapture +``` + +The print tests also need `SPOOLBOOK_TEST_ALLOW_REAL_PRINT=1` and a `.3mf` path; `examples/stop_print.rs` +is a standalone cancel command if one gets away. + ## Releasing See the "Release checklist" in `CLAUDE.md`. `.github/workflows/docker-images.yml` builds and diff --git a/docs/releases/v1.4.3.md b/docs/releases/v1.4.3.md new file mode 100644 index 0000000..376efdc --- /dev/null +++ b/docs/releases/v1.4.3.md @@ -0,0 +1,47 @@ +# spoolbook v1.4.3 — sending a print works again + +**Released**: 2026-08-30 + +PATCH: bug fixes only, no new capability. + +## Fixed + +- **Sending a print failed with *"Failed to get AMS mapping table" (HMS 07FF-8012)*.** A print + re-sliced by spoolbook's headless slicer carries no per-filament AMS metadata, so telling the + printer to use the AMS could never succeed regardless of the tray picked. The print command + now always feeds from the filament threaded through the printer (the AMS tray's PTFE in + practice) and no longer sends an AMS mapping. Confirmed end-to-end against a real P2S, + including the full unsliced-`.3mf` → re-slice → print path. + +- **Live status stuck on *"Not connected"* / *"No live job data yet"*** even with the printer on + and reachable. The MQTT client's incoming-packet size limit (128 KB) was smaller than a P2S's + full status dump, so the connection dropped the instant that dump arrived and immediately + retried — a silent flap. Raised to 1 MB. The reconnect loop also logs now (it was completely + silent before). + +- **A database hiccup during a print could kill live telemetry and the pause / resume / stop + buttons** for that printer until the backend restarted. The telemetry writer ran on the MQTT + connection's own task and aborted it on any error; it now logs and drops the one reading. + +- **`stop` / `pause` / `resume` from spoolbook were sometimes ignored by the printer.** The + command carried a non-numeric id the P2S doesn't accept. Fixed. + +- **The live camera on the printer card was always streaming.** An always-on `` feed is a + permanent camera client, and Bambu firmware only serves one at a time — so the card holding it + starved the printer's own toolhead-camera init mid-print. The card now shows a static icon; + the live feed is in the camera pop-out only. + +## For developers + +- `spoolbook-rs/tests/printer_live.rs` — hardware-in-the-loop tests (`#[ignore]`d, need a real + printer on the LAN): MQTT connect stays up, FTPS upload, send-a-print-then-cancel, and the + full unsliced-`.3mf` → slicer-service → print flow. See the README "Testing" section. +- `spoolbook-rs/examples/stop_print.rs` — standalone MQTT stop command. + +## Upgrading + +No manual migration step. Pull the new image and restart: + +```sh +docker compose pull && docker compose up -d +``` diff --git a/spoolbook-rs/Cargo.lock b/spoolbook-rs/Cargo.lock index ec7ef08..a11deef 100644 --- a/spoolbook-rs/Cargo.lock +++ b/spoolbook-rs/Cargo.lock @@ -2204,7 +2204,7 @@ dependencies = [ [[package]] name = "spoolbook-rs" -version = "1.4.2" +version = "1.4.3" dependencies = [ "argon2", "axum", diff --git a/spoolbook-rs/Cargo.toml b/spoolbook-rs/Cargo.toml index 0eebee8..0bae515 100644 --- a/spoolbook-rs/Cargo.toml +++ b/spoolbook-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "spoolbook-rs" -version = "1.4.2" +version = "1.4.3" edition = "2024" [dependencies]