Weekly upstream watch. Check items off as they are triaged; record port verdicts in the
porting PRs via Upstream-commit: <sha> ported|skipped — reason trailers.
(Upstream refs are backticked on purpose — listings must not cross-link upstream.)
New upstream commits (200)
c82e3911e WIP: add v2 client (Svelte) with spool grouping backend (.gitignore, client_v2, spoolman, tests_integration) — port / skip?
46b69808a WIP: add label designer and misc v2 client improvements (.gitignore, client_v2, spoolman) — port / skip?
99928b546 Fix QR logo backing corners and preserve tab state in label designer (client_v2) — port / skip?
0f7cdc6fa Add location rename and richer spool info on Locations page (client_v2) — port / skip?
cf82d5b68 Add camera QR scanner to v2 client (client_v2) — port / skip?
4bdebbdde Add localization to v2 client (svelte-i18n) (client_v2) — port / skip?
7ea89dc34 Add cross-entity search to v2 client (client_v2, spoolman, tests_integration) — port / skip?
9dcd6d56d Add rich text support for svelte i18n, parsing <p> tags etc. Also fixed some tags. (client_v2) — port / skip?
d65b50d5a Use paraglide for i18n in client_v2. Update base path handling (client_v2, pyproject.toml, spoolman) — port / skip?
30e2daf78 i18n wip updates (client_v2) — port / skip?
bcdcf6f47 i18n updates (client_v2) — port / skip?
48650cff9 i18n updates (client_v2) — port / skip?
d9c0a2a04 Empty box for no location in library (client_v2) — port / skip?
d2435871d Improved layout of extra fields in inspector (client_v2) — port / skip?
532ffc8cc Added some measurement validation to new spool form (client_v2) — port / skip?
c9cf7a6a1 Fixed some typescript errors (client_v2) — port / skip?
cae436ee8 make label templates match old client better (client_v2) — port / skip?
7642eaae2 Fixed inspector not updating when adding new spools (client_v2) — port / skip?
35f35b8bd Align COMMON_MATERIALS densities with SpoolmanDB (client_v2) — port / skip?
63c2ad5d7 Use custom DateTimeField in add spool form (client_v2) — port / skip?
a9d93520e Add custom Combobox for location/vendor/material inputs (client_v2) — port / skip?
ebadc045a client_v2: add archived-spool visibility to the library (client_v2) — port / skip?
c30bbfea9 client_v2: render unused-spool summary as a sub-section divider under filament group (client_v2) — port / skip?
bb2a21cb9 client_v2: store print layout per-design so margin edits are saveable (client_v2) — port / skip?
a1685f742 client_v2: render color swatches as glossy chips (flat on labels) (client_v2) — port / skip?
287d3010a client_v2: add light theme with system/light/dark preference (client_v2) — port / skip?
ab38eb73a client_v2: add unit-box numeric input and apply it across forms & inspectors (client_v2) — port / skip?
871fbdb44 Move locales out of static dir (client_v2) — port / skip?
351a09ca6 client_v2: replace deprecated $app/paths base with resolve()/asset() (client_v2) — port / skip?
8ab2060b9 client_v2: rework sheet print layout, import v1 presets, widen label field coverage (client_v2) — port / skip?
2b592abd5 client_v2: make DateTimeField week-start and clock locale-aware (client_v2) — port / skip?
c0142c9bc client_v2: fix Print N Labels count to include copies (client_v2) — port / skip?
f23f5611b client_v2: replace emoji/glyph icons with @lucide/svelte (client_v2) — port / skip?
7c188c113 client_v2: quick-select recently added spools when printing labels (client_v2) — port / skip?
9f893fb28 client_v2: auto-focus search box when Add Spools modal opens (client_v2) — port / skip?
d7486d5d5 Improved filtering/sorting. Allows filtering/sorting by extra fields. (client_v2, spoolman, tests_integration) — port / skip?
9b16121ed Minor search backend issue fix (spoolman, tests_integration) — port / skip?
28d840fc8 client_v2: move mobile Add Spools button into header (client_v2) — port / skip?
18b0a818b client_v2: keep Library group control visible on mobile (client_v2) — port / skip?
8ae45c03c client_v2: make label designer and print panels mobile responsive (client_v2) — port / skip?
0c673f040 client_v2: allow reordering location containers via drag-drop (client_v2) — port / skip?
f7103ec9e client_v2: live drag-drop for location cards and spools (client_v2) — port / skip?
ed758a117 client_v2: search external filament catalog server-side (client_v2, spoolman) — port / skip?
581135367 client_v2: reuse cross-entity /search for the add-spool filament picker (client_v2) — port / skip?
6d2ba2002 search: match filaments by their vendor's name (client_v2, spoolman) — port / skip?
913e9116f Make external filament library display name configurable (.env.example, client_v2, spoolman) — port / skip?
638466bc7 Bake client_v2 into the image and serve it by default (.dockerignore, .github, Dockerfile, spoolman, tests_frontend) — port / skip?
29f0f362d client_v2: add multi-color filament support (client_v2, spoolman) — port / skip?
57869fab8 Fix 500 on /info from unresolved get_external_db_name (spoolman) — port / skip?
d194cf348 Reused some old strings (client_v2) — port / skip?
0e5573bc1 Added save/error toasts (client_v2) — port / skip?
3f3f87231 client_v2: make the mobile inspector drawer draggable (client_v2) — port / skip?
593b65384 Match every whitespace-separated term in search (spoolman, tests_integration) — port / skip?
c72036f65 client_v2: save labels as images, with a configurable DPI (client_v2) — port / skip?
5bfaf9c5b client_v2: reuse v1 QR link strings in the label inspector (client_v2) — port / skip?
43034dce5 client_v2: show help text on an empty locations page (client_v2) — port / skip?
06eff55cc client_v2: finish spool archiving in the library (client_v2) — port / skip?
5bd4fa594 client_v2: don't link a missing manufacturer in the breadcrumbs (client_v2) — port / skip?
c90cf9eb4 client_v2: fix crash inspecting a spool of a colorless filament (client_v2) — port / skip?
4e4313204 client_v2: add weight and spool weight to the filament inspector (client_v2) — port / skip?
d580924d1 client_v2: add field help toggles to the inspector details (client_v2) — port / skip?
e2a08c0cf client_v2: load the locations page lazily instead of all at once (client_v2) — port / skip?
505faf3b3 Load entity extra-fields with selectin instead of joined (spoolman) — port / skip?
a733366be client_v2: abort in-flight list queries on navigation (client_v2) — port / skip?
2f25e76f5 client_v2: lighten print tab spool load, keep Recent complete (client_v2) — port / skip?
4118ca5f2 client_v2: stop locations grid flickering as cards load (client_v2) — port / skip?
128a0a4a3 client_v2: localize datetime formatting for extra fields and labels (client_v2) — port / skip?
38397424e client_v2: page grouped "show more" incrementally (client_v2) — port / skip?
5b5e07e2c client_v2: flatten color swatch and vary multi-color gradient (client_v2) — port / skip?
a34d52a59 client_v2: fall back empty locale values to base language (client_v2) — port / skip?
9582962e3 client_v2: keep grouped-view sorting coherent (client_v2) — port / skip?
990f16a8e client_v2: fetch deep-linked entities missing from the cache (client_v2) — port / skip?
6ade40517 backend: notify spools when their filament changes (spoolman, tests_integration) — port / skip?
64d5f84bc Fixed swatch being messed up in addspoolmodal (client_v2) — port / skip?
ecd43bd51 backend: make color similarity search scale with matches, not catalog size (spoolman) — port / skip?
9b79135c1 client_v2: show an add-spools CTA when the library is empty (client_v2) — port / skip?
acb367262 client_v2: don't collapse a lone unused spool under a header (client_v2) — port / skip?
3a2fc68e1 client_v2: configurable custom QR URL target with {id} template (client_v2) — port / skip?
ca8dba9e5 client_v2: redirect legacy /spool/show/<id> QR URLs to the library (client_v2) — port / skip?
3d6888ec2 Added filament labels (client_v2) — port / skip?
df2cd09bc client_v2: use real <a href> links for navigation (client_v2) — port / skip?
f69d09847 client_v2: approve esbuild install script for npm 11 allowScripts (client_v2) — port / skip?
01be7b757 minor package lock json update (client_v2) — port / skip?
52b0580df removed unused locales (client_v2) — port / skip?
5eb660f42 client_v2: add ESLint + wire lint/format/typecheck into lefthook (client_v2, lefthook.yml) — port / skip?
5222df98a client_v2: hide color swatch on non-filament group headers (client_v2) — port / skip?
054c59948 client_v2: portal inspector popovers to fix mobile misplacement (client_v2) — port / skip?
7e309e36b client_v2: add material suggestions to filament inspector (client_v2) — port / skip?
e6e3be277 client_v2: add filament total-remaining summary; show large weights in kg (client_v2) — port / skip?
2f9259227 client_v2: drop "g each" from unused summary when spool weights differ (client_v2) — port / skip?
b7772ca74 client_v2: fix base path for direct loads of non-prerendered routes (spoolman) — port / skip?
8a5cf7ec7 client_v2: add mobile accessibility audit (Playwright + axe-core) (client_v2) — port / skip?
386ec36d1 client_v2: set <html lang>/<dir> to the resolved locale at runtime (client_v2) — port / skip?
18214ee0f client_v2: fix low-contrast text/accent tokens for WCAG AA (client_v2) — port / skip?
f6827c0a6 client_v2: improve mobile tap targets and inspector actions (client_v2) — port / skip?
cd5ef6f8d client_v2: close Combobox dropdown on blur (tab-away) (client_v2) — port / skip?
1d5164b62 client_v2: label form controls for a11y (select-name/label) (client_v2) — port / skip?
bf3896b1f client_v2: fix nested-interactive a11y on add-spool modal (client_v2) — port / skip?
06ae67858 client_v2: stop idle-tab data/CPU drain (WS backoff + coalesced refetch) (client_v2) — port / skip?
7d4728ae9 security: add shared origin-trust helper (lefthook.yml, pyproject.toml, spoolman, tests) — port / skip?
c33f65243 security: refuse cross-origin writes and websockets, and non-JSON setting bodies (spoolman, tests, tests_integration) — port / skip?
404b03173 security: stop backup rotation from churning away the restore history (spoolman, tests, tests_integration) — port / skip?
1b1dbbb78 security: drop CORS credentials under a wildcard origin, document the model (README.md, spoolman, tests) — port / skip?
7d683eb24 security: escape CSV formulas and bound extra-field sizes (spoolman, tests) — port / skip?
5d812e269 fix: return 400 instead of 500 for malformed sort parameters (spoolman, tests) — port / skip?
a2e9e6615 client_v2: fix WS reconnect race clobbering the live socket (client_v2) — port / skip?
d1ab338b9 client_v2: stop dropdown Escape from closing the add-spool modal (client_v2) — port / skip?
b369cf049 Clamp grouped remaining weight at 0 for over-used spools (spoolman, tests_integration) — port / skip?
292485031 Drop the filament->spool websocket fan-out (client_v2, spoolman, tests_integration) — port / skip?
9a93892a9 Add allow_archived to /search and stop the candidate cap hiding new rows (spoolman, tests_integration) — port / skip?
1262eb664 Document SPOOLMAN_LEGACY_CLIENT in .env.example (.env.example) — port / skip?
733dcf920 client_v2: add vitest and cover migrateV1 and format (client_v2) — port / skip?
f08e27c6f Record why remaining_length does not need the dropped fan-out (client_v2, spoolman) — port / skip?
2e396d6cd Fail loudly when the SPA fallback base-path rewrite matches nothing (spoolman) — port / skip?
89ffd3e4b Key the external filament catalog cache on size as well as mtime (spoolman) — port / skip?
64e94bd97 client_v2: re-enable no-navigation-without-resolve, scoped per file (client_v2) — port / skip?
e8b363c10 client_v2: restore the muted/dim/faint contrast ramp (client_v2) — port / skip?
7ab45ca1a client_v2: don't quote "0 g each" for unused spools of unknown weight (client_v2) — port / skip?
8f7794e48 client_v2: make the FilamentList live refetch leading-edge (client_v2) — port / skip?
2befcfc38 client_v2: give inspector form controls accessible names (client_v2) — port / skip?
6af053b68 client_v2: split the accent fill from --accent so white text clears AA (client_v2) — port / skip?
17f8b9fee client_v2: add Playwright frontend integration tests (.github, pyproject.toml, tests_frontend, tests_frontend_v2) — port / skip?
4219230aa Translations update (#977) (client) — port / skip?
39f6ededf client_v2: show spool weight in the add-spool search results (client_v2) — port / skip?
bf3480cfb client_v2: let you duplicate a filament into another color (client_v2) — port / skip?
21651216a Turn the locations page into a group-by-anything dashboard (client_v2, spoolman, tests_integration) — port / skip?
aa447dd05 Let any spool field value be renamed everywhere at once (client_v2, spoolman, tests_integration) — port / skip?
c4be425dc client_v2: give a new label design something worth printing (client_v2) — port / skip?
372554adb client_v2: stop the add-spool form assuming you know what it means (client_v2) — port / skip?
aa47cd015 client_v2: fold a group's spools away behind its header (client_v2) — port / skip?
814ddfcd9 client_v2: point people at extra fields instead of hiding them (client_v2) — port / skip?
bf15e64fe client_v2: scale the label preview down to the screen it's on (client_v2) — port / skip?
680f2a063 client_v2: let the dashboard header wrap instead of squeezing (client_v2) — port / skip?
04d6ee72b client_v2: make the group-by hint go where it points (client_v2) — port / skip?
ae3208a9c Let an extra field's value be cleared again (client, client_v2, spoolman, tests_integration) — port / skip?
87a07a556 tests_frontend_v2: follow the locations page to the dashboard (tests_frontend_v2) — port / skip?
d2cabd5d2 client_v2: unregister the legacy client's service worker on upgrade (client_v2, tests_frontend_v2) — port / skip?
b38468ffe client_v2: ship a web app manifest and PWA icons (client_v2, spoolman) — port / skip?
c9ae367dc Say what to do when the client bundle is missing (spoolman) — port / skip?
6ca753bca Move the stress-seed script into scripts/ (pyproject.toml, scripts) — port / skip?
7e353595c bump.py: keep client_v2's version in sync with the release (client_v2, spoolman) — port / skip?
a76c8ed3d tests_frontend_v2: cover labels, settings, search and installability (tests_frontend_v2) — port / skip?
c781869d0 Refresh the README screenshot and note the legacy-client rollback (.github, README.md) — port / skip?
59672ecb3 Merge master into feature/v2-client (.github, Dockerfile, pyproject.toml, spoolman) — port / skip?
f4eba480d Catch client_v2 up to 0.25.0 (client_v2) — port / skip?
24e6f7fd3 Escape backslashes in the a11y report's table escaper (client_v2) — port / skip?
9bdf4d1a5 Install client_v2 deps in the style job (.github, client_v2) — port / skip?
aad337234 Compile paraglide before type-checking client_v2 (client_v2, lefthook.yml) — port / skip?
c1d5c6b46 Merge pull request #978 from Donkie/feature/v2-client (.) — port / skip?
4ab99768a Abort last workflow run for PRs when new push (.github) — port / skip?
67022e7c6 Regenerate the README screenshot from catalog-imported filaments (.github, pyproject.toml, scripts) — port / skip?
0c03f8b40 Stop promoting a spool's comment to its library row title (.github, client_v2, scripts) — port / skip?
b00c1b875 Add dashboard and label-designer screenshots to the README (.github, README.md, client_v2, scripts) — port / skip?
3c414503d Move client_v2 to Vite 8 and refresh the rest of its dependencies (client_v2) — port / skip?
ff7170f0f Build on Node 24, which is not end-of-life (.github, client) — port / skip?
388e87ec9 Merge branch 'master' into security/backend-audit-todo (README.md, lefthook.yml, pyproject.toml, spoolman) — port / skip?
e3dbd3e60 Move the security notes out of the README and into the Wiki's remit (README.md) — port / skip?
97524b110 security: refuse requests addressed to a host we do not answer to (spoolman, tests, tests_integration) — port / skip?
7e9533965 security: make the host guard opt-in (spoolman, tests) — port / skip?
72daa29cd security: finish the audit's low-severity items (spoolman, tests) — port / skip?
a8b3641a9 Document the two origin/host settings in .env.example (.env.example) — port / skip?
dd6b334a7 Test config.js rendering without importing main (spoolman, tests) — port / skip?
f369253c6 Bump version to 0.26.0 (client, client_v2, pyproject.toml, uv.lock) — port / skip?
4e1e3c50c Point the translation workflows at client_v2, close the legacy client (.github, README.md) — port / skip?
673ca1d2f Drop the README wording change (README.md) — port / skip?
7405ce77f Merge pull request #983 from Donkie/worktree-weblate-client-v2 (.) — port / skip?
57f2b30a4 fix(api): strip leading # from filament color codes (spoolman, tests) — port / skip?
c8be881e0 fix(sort): keep never-used spools and filaments at the bottom (spoolman, tests_integration) — port / skip?
a8da5e312 fix(library): stop unopened spools reporting themselves as "in use" (client_v2) — port / skip?
09c29703f Merge pull request #990 from Donkie/fix/last-used-null-sort (.) — port / skip?
c9c59b3d9 fix(add): let filament extra fields be filled in while creating a filament (client_v2, tests_frontend_v2) — port / skip?
c7b59fe32 Merge pull request #997 from Donkie/fix/988-filament-extra-fields (.) — port / skip?
8318a5f97 fix(library): make the group header's two destinations findable (client_v2) — port / skip?
e08c930ef client_v2: add delete for filaments and manufacturers (client_v2, tests_integration) — port / skip?
35cc1c7d4 Show all filament and manufacturer fields in the detail views (client_v2) — port / skip?
dadc2ba76 Fold mirrored extra fields into the grid above them (client_v2) — port / skip?
b34b87214 client_v2: make duplicate and delete quiet icon actions (client_v2) — port / skip?
6663a42ab client_v2: add delete for spools (client_v2, tests_integration) — port / skip?
7c29d5f54 Merge pull request #998 from Donkie/worktree-client-v2-delete-991 (.) — port / skip?
13b7a9b62 Merge pull request #999 from Donkie/worktree-issue-992-detail-fields (client_v2) — port / skip?
cbc6458c5 Translated using Weblate (Swedish) (#1000) (client_v2) — port / skip?
a5e4bc0bf fix(library): drop the group header arrow (client_v2) — port / skip?
e175708b3 fix(ci): diff PRs from the merge base in guard-translations (.github) — port / skip?
2cdfcc1ba Translations update from Hosted Weblate (#1002) (client_v2) — port / skip?
95230eaa7 fix(security): unsafe json parsing of application settings (client) — port / skip?
f8db2a0f0 Merge pull request #1001 from Donkie/fix/library-header-affordances (client_v2) — port / skip?
a2cfe33cd Merge pull request #1003 from tomaioo/fix/security/unsafe-json-parsing-of-application-setti (.) — port / skip?
20462e86e Translations update from Hosted Weblate (#1004) (client_v2) — port / skip?
3c1d8bfa6 client_v2: separate the search result's material tag from the match tag (client_v2) — port / skip?
18f114419 Let extra field choices be reordered by dragging (client, client_v2) — port / skip?
46beda226 Offer a filament's spools in the search results (client_v2, spoolman, tests_frontend_v2, tests_integration) — port / skip?
7e4d2ee41 fix(api): repair filament rows already stored with a leading # (migrations, spoolman, tests) — port / skip?
ac3ec7d1a Merge pull request #1005 from Donkie/search-material-tag (.) — port / skip?
0c3ce54da Merge pull request #1007 from Donkie/worktree-issue-994-reorder-choices (.) — port / skip?
3beb2b448 Merge pull request #1006 from Donkie/worktree-search-spool-pills (client_v2) — port / skip?
cefd2caa4 Merge pull request #987 from Sanjays2402/fix/color-hex-strip-hash (spoolman) — port / skip?
2a03f9f64 client_v2: reload on 401 so a forward-auth session can recover (client_v2) — port / skip?
ae12072cd Merge remote-tracking branch 'origin/master' into worktree-client-v2-401-reload (client_v2) — port / skip?
708af05ab ci: run the client_v2 unit tests (lefthook.yml) — port / skip?
9d53a3f29 Merge pull request #1008 from Donkie/worktree-client-v2-401-reload (.) — port / skip?
New upstream issues (14)
Weekly upstream watch. Check items off as they are triaged; record port verdicts in the
porting PRs via
Upstream-commit: <sha> ported|skipped — reasontrailers.(Upstream refs are backticked on purpose — listings must not cross-link upstream.)
New upstream commits (200)
c82e3911eWIP: add v2 client (Svelte) with spool grouping backend(.gitignore,client_v2,spoolman,tests_integration) — port / skip?46b69808aWIP: add label designer and misc v2 client improvements(.gitignore,client_v2,spoolman) — port / skip?99928b546Fix QR logo backing corners and preserve tab state in label designer(client_v2) — port / skip?0f7cdc6faAdd location rename and richer spool info on Locations page(client_v2) — port / skip?cf82d5b68Add camera QR scanner to v2 client(client_v2) — port / skip?4bdebbddeAdd localization to v2 client (svelte-i18n)(client_v2) — port / skip?7ea89dc34Add cross-entity search to v2 client(client_v2,spoolman,tests_integration) — port / skip?9dcd6d56dAdd rich text support for svelte i18n, parsing <p> tags etc. Also fixed some tags.(client_v2) — port / skip?d65b50d5aUse paraglide for i18n in client_v2. Update base path handling(client_v2,pyproject.toml,spoolman) — port / skip?30e2daf78i18n wip updates(client_v2) — port / skip?bcdcf6f47i18n updates(client_v2) — port / skip?48650cff9i18n updates(client_v2) — port / skip?d9c0a2a04Empty box for no location in library(client_v2) — port / skip?d2435871dImproved layout of extra fields in inspector(client_v2) — port / skip?532ffc8ccAdded some measurement validation to new spool form(client_v2) — port / skip?c9cf7a6a1Fixed some typescript errors(client_v2) — port / skip?cae436ee8make label templates match old client better(client_v2) — port / skip?7642eaae2Fixed inspector not updating when adding new spools(client_v2) — port / skip?35f35b8bdAlign COMMON_MATERIALS densities with SpoolmanDB(client_v2) — port / skip?63c2ad5d7Use custom DateTimeField in add spool form(client_v2) — port / skip?a9d93520eAdd custom Combobox for location/vendor/material inputs(client_v2) — port / skip?ebadc045aclient_v2: add archived-spool visibility to the library(client_v2) — port / skip?c30bbfea9client_v2: render unused-spool summary as a sub-section divider under filament group(client_v2) — port / skip?bb2a21cb9client_v2: store print layout per-design so margin edits are saveable(client_v2) — port / skip?a1685f742client_v2: render color swatches as glossy chips (flat on labels)(client_v2) — port / skip?287d3010aclient_v2: add light theme with system/light/dark preference(client_v2) — port / skip?ab38eb73aclient_v2: add unit-box numeric input and apply it across forms & inspectors(client_v2) — port / skip?871fbdb44Move locales out of static dir(client_v2) — port / skip?351a09ca6client_v2: replace deprecated $app/paths base with resolve()/asset()(client_v2) — port / skip?8ab2060b9client_v2: rework sheet print layout, import v1 presets, widen label field coverage(client_v2) — port / skip?2b592abd5client_v2: make DateTimeField week-start and clock locale-aware(client_v2) — port / skip?c0142c9bcclient_v2: fix Print N Labels count to include copies(client_v2) — port / skip?f23f5611bclient_v2: replace emoji/glyph icons with @lucide/svelte(client_v2) — port / skip?7c188c113client_v2: quick-select recently added spools when printing labels(client_v2) — port / skip?9f893fb28client_v2: auto-focus search box when Add Spools modal opens(client_v2) — port / skip?d7486d5d5Improved filtering/sorting. Allows filtering/sorting by extra fields.(client_v2,spoolman,tests_integration) — port / skip?9b16121edMinor search backend issue fix(spoolman,tests_integration) — port / skip?28d840fc8client_v2: move mobile Add Spools button into header(client_v2) — port / skip?18b0a818bclient_v2: keep Library group control visible on mobile(client_v2) — port / skip?8ae45c03cclient_v2: make label designer and print panels mobile responsive(client_v2) — port / skip?0c673f040client_v2: allow reordering location containers via drag-drop(client_v2) — port / skip?f7103ec9eclient_v2: live drag-drop for location cards and spools(client_v2) — port / skip?ed758a117client_v2: search external filament catalog server-side(client_v2,spoolman) — port / skip?581135367client_v2: reuse cross-entity /search for the add-spool filament picker(client_v2) — port / skip?6d2ba2002search: match filaments by their vendor's name(client_v2,spoolman) — port / skip?913e9116fMake external filament library display name configurable(.env.example,client_v2,spoolman) — port / skip?638466bc7Bake client_v2 into the image and serve it by default(.dockerignore,.github,Dockerfile,spoolman,tests_frontend) — port / skip?29f0f362dclient_v2: add multi-color filament support(client_v2,spoolman) — port / skip?57869fab8Fix 500 on /info from unresolved get_external_db_name(spoolman) — port / skip?d194cf348Reused some old strings(client_v2) — port / skip?0e5573bc1Added save/error toasts(client_v2) — port / skip?3f3f87231client_v2: make the mobile inspector drawer draggable(client_v2) — port / skip?593b65384Match every whitespace-separated term in search(spoolman,tests_integration) — port / skip?c72036f65client_v2: save labels as images, with a configurable DPI(client_v2) — port / skip?5bfaf9c5bclient_v2: reuse v1 QR link strings in the label inspector(client_v2) — port / skip?43034dce5client_v2: show help text on an empty locations page(client_v2) — port / skip?06eff55ccclient_v2: finish spool archiving in the library(client_v2) — port / skip?5bd4fa594client_v2: don't link a missing manufacturer in the breadcrumbs(client_v2) — port / skip?c90cf9eb4client_v2: fix crash inspecting a spool of a colorless filament(client_v2) — port / skip?4e4313204client_v2: add weight and spool weight to the filament inspector(client_v2) — port / skip?d580924d1client_v2: add field help toggles to the inspector details(client_v2) — port / skip?e2a08c0cfclient_v2: load the locations page lazily instead of all at once(client_v2) — port / skip?505faf3b3Load entity extra-fields with selectin instead of joined(spoolman) — port / skip?a733366beclient_v2: abort in-flight list queries on navigation(client_v2) — port / skip?2f25e76f5client_v2: lighten print tab spool load, keep Recent complete(client_v2) — port / skip?4118ca5f2client_v2: stop locations grid flickering as cards load(client_v2) — port / skip?128a0a4a3client_v2: localize datetime formatting for extra fields and labels(client_v2) — port / skip?38397424eclient_v2: page grouped "show more" incrementally(client_v2) — port / skip?5b5e07e2cclient_v2: flatten color swatch and vary multi-color gradient(client_v2) — port / skip?a34d52a59client_v2: fall back empty locale values to base language(client_v2) — port / skip?9582962e3client_v2: keep grouped-view sorting coherent(client_v2) — port / skip?990f16a8eclient_v2: fetch deep-linked entities missing from the cache(client_v2) — port / skip?6ade40517backend: notify spools when their filament changes(spoolman,tests_integration) — port / skip?64d5f84bcFixed swatch being messed up in addspoolmodal(client_v2) — port / skip?ecd43bd51backend: make color similarity search scale with matches, not catalog size(spoolman) — port / skip?9b79135c1client_v2: show an add-spools CTA when the library is empty(client_v2) — port / skip?acb367262client_v2: don't collapse a lone unused spool under a header(client_v2) — port / skip?3a2fc68e1client_v2: configurable custom QR URL target with {id} template(client_v2) — port / skip?ca8dba9e5client_v2: redirect legacy /spool/show/<id> QR URLs to the library(client_v2) — port / skip?3d6888ec2Added filament labels(client_v2) — port / skip?df2cd09bcclient_v2: use real <a href> links for navigation(client_v2) — port / skip?f69d09847client_v2: approve esbuild install script for npm 11 allowScripts(client_v2) — port / skip?01be7b757minor package lock json update(client_v2) — port / skip?52b0580dfremoved unused locales(client_v2) — port / skip?5eb660f42client_v2: add ESLint + wire lint/format/typecheck into lefthook(client_v2,lefthook.yml) — port / skip?5222df98aclient_v2: hide color swatch on non-filament group headers(client_v2) — port / skip?054c59948client_v2: portal inspector popovers to fix mobile misplacement(client_v2) — port / skip?7e309e36bclient_v2: add material suggestions to filament inspector(client_v2) — port / skip?e6e3be277client_v2: add filament total-remaining summary; show large weights in kg(client_v2) — port / skip?2f9259227client_v2: drop "g each" from unused summary when spool weights differ(client_v2) — port / skip?b7772ca74client_v2: fix base path for direct loads of non-prerendered routes(spoolman) — port / skip?8a5cf7ec7client_v2: add mobile accessibility audit (Playwright + axe-core)(client_v2) — port / skip?386ec36d1client_v2: set <html lang>/<dir> to the resolved locale at runtime(client_v2) — port / skip?18214ee0fclient_v2: fix low-contrast text/accent tokens for WCAG AA(client_v2) — port / skip?f6827c0a6client_v2: improve mobile tap targets and inspector actions(client_v2) — port / skip?cd5ef6f8dclient_v2: close Combobox dropdown on blur (tab-away)(client_v2) — port / skip?1d5164b62client_v2: label form controls for a11y (select-name/label)(client_v2) — port / skip?bf3896b1fclient_v2: fix nested-interactive a11y on add-spool modal(client_v2) — port / skip?06ae67858client_v2: stop idle-tab data/CPU drain (WS backoff + coalesced refetch)(client_v2) — port / skip?7d4728ae9security: add shared origin-trust helper(lefthook.yml,pyproject.toml,spoolman,tests) — port / skip?c33f65243security: refuse cross-origin writes and websockets, and non-JSON setting bodies(spoolman,tests,tests_integration) — port / skip?404b03173security: stop backup rotation from churning away the restore history(spoolman,tests,tests_integration) — port / skip?1b1dbbb78security: drop CORS credentials under a wildcard origin, document the model(README.md,spoolman,tests) — port / skip?7d683eb24security: escape CSV formulas and bound extra-field sizes(spoolman,tests) — port / skip?5d812e269fix: return 400 instead of 500 for malformed sort parameters(spoolman,tests) — port / skip?a2e9e6615client_v2: fix WS reconnect race clobbering the live socket(client_v2) — port / skip?d1ab338b9client_v2: stop dropdown Escape from closing the add-spool modal(client_v2) — port / skip?b369cf049Clamp grouped remaining weight at 0 for over-used spools(spoolman,tests_integration) — port / skip?292485031Drop the filament->spool websocket fan-out(client_v2,spoolman,tests_integration) — port / skip?9a93892a9Add allow_archived to /search and stop the candidate cap hiding new rows(spoolman,tests_integration) — port / skip?1262eb664Document SPOOLMAN_LEGACY_CLIENT in .env.example(.env.example) — port / skip?733dcf920client_v2: add vitest and cover migrateV1 and format(client_v2) — port / skip?f08e27c6fRecord why remaining_length does not need the dropped fan-out(client_v2,spoolman) — port / skip?2e396d6cdFail loudly when the SPA fallback base-path rewrite matches nothing(spoolman) — port / skip?89ffd3e4bKey the external filament catalog cache on size as well as mtime(spoolman) — port / skip?64e94bd97client_v2: re-enable no-navigation-without-resolve, scoped per file(client_v2) — port / skip?e8b363c10client_v2: restore the muted/dim/faint contrast ramp(client_v2) — port / skip?7ab45ca1aclient_v2: don't quote "0 g each" for unused spools of unknown weight(client_v2) — port / skip?8f7794e48client_v2: make the FilamentList live refetch leading-edge(client_v2) — port / skip?2befcfc38client_v2: give inspector form controls accessible names(client_v2) — port / skip?6af053b68client_v2: split the accent fill from --accent so white text clears AA(client_v2) — port / skip?17f8b9feeclient_v2: add Playwright frontend integration tests(.github,pyproject.toml,tests_frontend,tests_frontend_v2) — port / skip?4219230aaTranslations update (#977)(client) — port / skip?39f6ededfclient_v2: show spool weight in the add-spool search results(client_v2) — port / skip?bf3480cfbclient_v2: let you duplicate a filament into another color(client_v2) — port / skip?21651216aTurn the locations page into a group-by-anything dashboard(client_v2,spoolman,tests_integration) — port / skip?aa447dd05Let any spool field value be renamed everywhere at once(client_v2,spoolman,tests_integration) — port / skip?c4be425dcclient_v2: give a new label design something worth printing(client_v2) — port / skip?372554adbclient_v2: stop the add-spool form assuming you know what it means(client_v2) — port / skip?aa47cd015client_v2: fold a group's spools away behind its header(client_v2) — port / skip?814ddfcd9client_v2: point people at extra fields instead of hiding them(client_v2) — port / skip?bf15e64feclient_v2: scale the label preview down to the screen it's on(client_v2) — port / skip?680f2a063client_v2: let the dashboard header wrap instead of squeezing(client_v2) — port / skip?04d6ee72bclient_v2: make the group-by hint go where it points(client_v2) — port / skip?ae3208a9cLet an extra field's value be cleared again(client,client_v2,spoolman,tests_integration) — port / skip?87a07a556tests_frontend_v2: follow the locations page to the dashboard(tests_frontend_v2) — port / skip?d2cabd5d2client_v2: unregister the legacy client's service worker on upgrade(client_v2,tests_frontend_v2) — port / skip?b38468ffeclient_v2: ship a web app manifest and PWA icons(client_v2,spoolman) — port / skip?c9ae367dcSay what to do when the client bundle is missing(spoolman) — port / skip?6ca753bcaMove the stress-seed script into scripts/(pyproject.toml,scripts) — port / skip?7e353595cbump.py: keep client_v2's version in sync with the release(client_v2,spoolman) — port / skip?a76c8ed3dtests_frontend_v2: cover labels, settings, search and installability(tests_frontend_v2) — port / skip?c781869d0Refresh the README screenshot and note the legacy-client rollback(.github,README.md) — port / skip?59672ecb3Merge master into feature/v2-client(.github,Dockerfile,pyproject.toml,spoolman) — port / skip?f4eba480dCatch client_v2 up to 0.25.0(client_v2) — port / skip?24e6f7fd3Escape backslashes in the a11y report's table escaper(client_v2) — port / skip?9bdf4d1a5Install client_v2 deps in the style job(.github,client_v2) — port / skip?aad337234Compile paraglide before type-checking client_v2(client_v2,lefthook.yml) — port / skip?c1d5c6b46Merge pull request #978 from Donkie/feature/v2-client(.) — port / skip?4ab99768aAbort last workflow run for PRs when new push(.github) — port / skip?67022e7c6Regenerate the README screenshot from catalog-imported filaments(.github,pyproject.toml,scripts) — port / skip?0c03f8b40Stop promoting a spool's comment to its library row title(.github,client_v2,scripts) — port / skip?b00c1b875Add dashboard and label-designer screenshots to the README(.github,README.md,client_v2,scripts) — port / skip?3c414503dMove client_v2 to Vite 8 and refresh the rest of its dependencies(client_v2) — port / skip?ff7170f0fBuild on Node 24, which is not end-of-life(.github,client) — port / skip?388e87ec9Merge branch 'master' into security/backend-audit-todo(README.md,lefthook.yml,pyproject.toml,spoolman) — port / skip?e3dbd3e60Move the security notes out of the README and into the Wiki's remit(README.md) — port / skip?97524b110security: refuse requests addressed to a host we do not answer to(spoolman,tests,tests_integration) — port / skip?7e9533965security: make the host guard opt-in(spoolman,tests) — port / skip?72daa29cdsecurity: finish the audit's low-severity items(spoolman,tests) — port / skip?a8b3641a9Document the two origin/host settings in .env.example(.env.example) — port / skip?dd6b334a7Test config.js rendering without importing main(spoolman,tests) — port / skip?f369253c6Bump version to 0.26.0(client,client_v2,pyproject.toml,uv.lock) — port / skip?4e1e3c50cPoint the translation workflows at client_v2, close the legacy client(.github,README.md) — port / skip?673ca1d2fDrop the README wording change(README.md) — port / skip?7405ce77fMerge pull request #983 from Donkie/worktree-weblate-client-v2(.) — port / skip?57f2b30a4fix(api): strip leading # from filament color codes(spoolman,tests) — port / skip?c8be881e0fix(sort): keep never-used spools and filaments at the bottom(spoolman,tests_integration) — port / skip?a8da5e312fix(library): stop unopened spools reporting themselves as "in use"(client_v2) — port / skip?09c29703fMerge pull request #990 from Donkie/fix/last-used-null-sort(.) — port / skip?c9c59b3d9fix(add): let filament extra fields be filled in while creating a filament(client_v2,tests_frontend_v2) — port / skip?c7b59fe32Merge pull request #997 from Donkie/fix/988-filament-extra-fields(.) — port / skip?8318a5f97fix(library): make the group header's two destinations findable(client_v2) — port / skip?e08c930efclient_v2: add delete for filaments and manufacturers(client_v2,tests_integration) — port / skip?35cc1c7d4Show all filament and manufacturer fields in the detail views(client_v2) — port / skip?dadc2ba76Fold mirrored extra fields into the grid above them(client_v2) — port / skip?b34b87214client_v2: make duplicate and delete quiet icon actions(client_v2) — port / skip?6663a42abclient_v2: add delete for spools(client_v2,tests_integration) — port / skip?7c29d5f54Merge pull request #998 from Donkie/worktree-client-v2-delete-991(.) — port / skip?13b7a9b62Merge pull request #999 from Donkie/worktree-issue-992-detail-fields(client_v2) — port / skip?cbc6458c5Translated using Weblate (Swedish) (#1000)(client_v2) — port / skip?a5e4bc0bffix(library): drop the group header arrow(client_v2) — port / skip?e175708b3fix(ci): diff PRs from the merge base in guard-translations(.github) — port / skip?2cdfcc1baTranslations update from Hosted Weblate (#1002)(client_v2) — port / skip?95230eaa7fix(security): unsafe json parsing of application settings(client) — port / skip?f8db2a0f0Merge pull request #1001 from Donkie/fix/library-header-affordances(client_v2) — port / skip?a2cfe33cdMerge pull request #1003 from tomaioo/fix/security/unsafe-json-parsing-of-application-setti(.) — port / skip?20462e86eTranslations update from Hosted Weblate (#1004)(client_v2) — port / skip?3c1d8bfa6client_v2: separate the search result's material tag from the match tag(client_v2) — port / skip?18f114419Let extra field choices be reordered by dragging(client,client_v2) — port / skip?46beda226Offer a filament's spools in the search results(client_v2,spoolman,tests_frontend_v2,tests_integration) — port / skip?7e4d2ee41fix(api): repair filament rows already stored with a leading #(migrations,spoolman,tests) — port / skip?ac3ec7d1aMerge pull request #1005 from Donkie/search-material-tag(.) — port / skip?0c3ce54daMerge pull request #1007 from Donkie/worktree-issue-994-reorder-choices(.) — port / skip?3beb2b448Merge pull request #1006 from Donkie/worktree-search-spool-pills(client_v2) — port / skip?cefd2caa4Merge pull request #987 from Sanjays2402/fix/color-hex-strip-hash(spoolman) — port / skip?2a03f9f64client_v2: reload on 401 so a forward-auth session can recover(client_v2) — port / skip?ae12072cdMerge remote-tracking branch 'origin/master' into worktree-client-v2-401-reload(client_v2) — port / skip?708af05abci: run the client_v2 unit tests(lefthook.yml) — port / skip?9d53a3f29Merge pull request #1008 from Donkie/worktree-client-v2-401-reload(.) — port / skip?New upstream issues (14)
Donkie/Spoolman#1013Add/allow override of Weight and Spool Weight on a per spool basis (0.26.0)— fix / implement / skip?Donkie/Spoolman#1012Color Grouping issue when using Group:Manufacturer— fix / implement / skip?Donkie/Spoolman#1011Notification system— fix / implement / skip?Donkie/Spoolman#1010v0.26.0 - Reassigning filament of a given spool number?— fix / implement / skip?Donkie/Spoolman#996Other UX changes/improvements— fix / implement / skip?Donkie/Spoolman#994Allow reordering of choices in extra fields— fix / implement / skip?Donkie/Spoolman#993Search only matches filaments, not spools, in the new UI— fix / implement / skip?Donkie/Spoolman#992Show more filament and manufacturer fields in the library detail views— fix / implement / skip?Donkie/Spoolman#991Add delete for filaments and manufacturers in the new UI— fix / implement / skip?Donkie/Spoolman#989Impossible to list, edit, or delete filaments or manufacturers in the new UI— fix / implement / skip?Donkie/Spoolman#988Filament adding screen on the new UI lacks extra fields— fix / implement / skip?Donkie/Spoolman#986Erroneous "in use" status for spools in new web UI— fix / implement / skip?Donkie/Spoolman#985Sorting by last used is broken in the new UI— fix / implement / skip?Donkie/Spoolman#984new web ui: last used sort incorrectly raises unused spools— fix / implement / skip?