feat: add Cool Steel Plate bed type for Snapmaker U1 with per-plate compatibility gating - #627
Conversation
- Remove has_sliceable_plate_for_slice_all() hijack in Preview tab switch that triggered unintended "slice all" instead of switching to preview - Add m_filament_temp_blocked flag to PartPlate so can_slice() reflects filament temp mixing state, consistent with m_apply_invalid for object-outside errors - Let sync_filament_temp_mixing_notification() manage its own flag, independent of the background validation system - Simplify EVT_GLVIEWTOOLBAR_PREVIEW to use can_slice() as unified gate for both error types Downstream effects: red exclamation icon on plate thumbnails, disabled slice/export buttons, and blocked auto-slice on preview switch now work uniformly for both object-outside and filament-temp-mixing errors.
…xing Replace the per-plate cached m_filament_temp_blocked flag with on-demand is_plate_blocked_by_filament_temp_mixing() checks in the rendering and preview-switch paths. This eliminates staleness risks identified during code review where non-current plates could retain stale blocked state after filament changes, undo/redo, or plate switching during slicing. Changes: - GLCanvas3D: add on-demand check for red exclamation on plate thumbnails - Plater: add on-demand check in EVT_GLVIEWTOOLBAR_PREVIEW alongside can_slice(), keep sync_filament_temp_mixing_notification() for notification freshness - PartPlate: revert cached flag; can_slice() unchanged Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…xing Merge duplicate key lists, rename used_slots for clarity, and group logic into scoped blocks. No semantic change.
…EPT_FILAMENTS_MIXING_TEMP Better reflects that the check is about high/low temperature material mixing, not just "different" temperatures.
Introduce a new bed plate type for the upcoming low-temperature cold-pressed steel plate (SKU 24047). Changes: - Add BedType::btCPSP enum and "Cold Pressed Steel Plate" enum mapping - Add cold_pressed_steel_plate_temp / _initial_layer filament options - Route bed temp keys for the new plate type - Register new options in filament preset whitelist and invalidate_state_by_config_options - Expose the new plate in U1 bed type dropdown (4-plate default, 8-plate extended) and Filament tab temperature grid - Add zh_CN translations Note: default bed temperatures are 0 (unsupported) until the process team provides values per filament.
* [Feat]- Render_Optimize: CPU Frustum culling GLVolume * [Feat]: render optimize, glToolBar refactor * add some Comments in function extract Frustum from vp-matrix * delete unnecessary tex_coord assignment --------- Co-authored-by: xiejiajun <413189257@qq.com>
Introduce a new bed plate type for the upcoming low-temperature cold-pressed steel plate (SKU 24047). Changes: - Add BedType::btCPSP enum and "Cold Pressed Steel Plate" enum mapping - Add cold_pressed_steel_plate_temp / _initial_layer filament options - Route bed temp keys for the new plate type - Register new options in filament preset whitelist and invalidate_state_by_config_options - Expose the new plate in U1 bed type dropdown (4-plate default, 8-plate extended) and Filament tab temperature grid - Add zh_CN translations Note: default bed temperatures are 0 (unsupported) until the process team provides values per filament.
…-plate compatibility checks Rename the bed type from "Cold Pressed Steel Plate" (btCPSP) to "Cool Steel Plate" (btCSP) across config keys, enum values, labels, and translations. Introduce per-plate cold-plate compatibility gating: block slicing when any used filament has zero cold-plate bed temperature, and surface a non-blocking serious warning when TPU is in use. Sync notifications across plate select, file load, slice start, and background-process update paths.
Collapse get_cold_plate_unsupported_filaments / plate_uses_tpu /
get_cold_plate_compat_state into one function returning
ColdPlateCompatResult { state, unsupported, uses_tpu }.
sync_cold_plate_notification now reuses compat.unsupported instead of
re-querying, dropping per-sync slot collection from 3 passes to 1.
is_plate_blocked_by_cold_plate's external signature is unchanged, so
all call sites (MainFrame, find_next_sliceable_plate_for_slice_all,
validate_current_plate) need no changes.
…aSlicer into feature_cold_board # localization/i18n/zh_CN/Snapmaker_Orca_zh_CN.po # src/libslic3r/Preset.cpp # src/libslic3r/Print.cpp # src/libslic3r/PrintConfig.cpp # src/libslic3r/PrintConfig.hpp # src/slic3r/GUI/Plater.cpp # src/slic3r/GUI/Tab.cpp
This reverts commit e60517f.
…cation format
After the revert of the standalone btCSP bed type, Cool Steel Plate now
reuses the existing btSuperTack enumerator and supertack_plate_temp*
fields, surfacing only as a UI label change on Snapmaker U1.
Key changes:
- PrintConfig.cpp: enum_values_u1 / enum_labels_u1 extended from 3 to 4
entries (adds Supertack Plate / Cool Steel Plate); enum_labels and
enum_labels_ex relabeled from "Cool Plate (SuperTack)" to
"Cool Steel Plate".
- Tab.cpp: U1 default (support_multi_bed_types off) now shows the
supertack_plate_temp* rows; Cool Plate (SuperTack) label/tooltip
renamed to Cool Steel Plate.
- Plater.cpp detection chain repaired to match the enum reuse:
* early-exit compares curr_bed == btSuperTack (string-key match
against "Cool Steel Plate" no longer works since the enum key is
"Supertack Plate")
* s_cold_plate_bed_type_key = "Supertack Plate" for combobox lookup
* bed temp reads switch from cool_steel_plate_temp* to
supertack_plate_temp*
* U1 default bed-type allowlist adds btSuperTack so the user's
selection is not silently overwritten
- Notification format unified with fix_top_cover / fix_flow_ratio:
shared filament_display_label() + format_filament_slot_list()
helpers render each filament as "[n] PresetName" using the full
preset name (not the filament_type short string). ColdPlateCompatResult
now carries std::vector<int> unsupported_slots_1based /
tpu_slots_1based, mirroring FlowRatioZeroDetail.
- All 20 .po files + .pot: msgid/msgstr migrated from
"Cool Plate (SuperTack)" to "Cool Steel Plate" (zh_CN: 低温冷打钢板);
zh_CN.po cold-plate error/serious-warning text split into 4 sub-clauses
to match the new helper-driven layout.
- docs/Cool_Steel_Plate_Design.md: full rewrite reflecting the v2 design
(enum reuse, single-pass scan, shared display helpers, migration
pitfalls from v1).
…eature_cold_board
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
…ack) for other models The btSuperTack enumerator was relabeled to "Cool Steel Plate" everywhere, which leaked the U1-specific name into non-U1 printers' bed-type combos and filament temperature rows. Restore the original split: - enum_labels (non-U1 default) shows "Cool Plate (SuperTack)"; _u1 / _ex keep "Cool Steel Plate" for Snapmaker U1. - Filament temperature panel builds with the right label per current printer and re-applies it in toggle_options() on printer switch, so the row tracks the bed-type combo instead of going stale. - Re-add the "Cool Plate (SuperTack)" i18n entries across all languages; for the 9 locales that had translated "Cool Steel Plate" with SuperTack semantics, switch that msgid to a steel-plate translation and move the SuperTack wording into the new entry.
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
The tooltips on supertack_plate_temp / supertack_plate_temp_initial_layer
hard-coded "Cool Plate SuperTack", which doesn't match either of the two
labels that enum uses today ("Cool Steel Plate" on U1, "Cool Plate
(SuperTack)" elsewhere) and never updates when the user switches printers.
Rephrase them to refer to "this plate" — the row label already tells the
user which plate it is — and add the new tooltip msgstr entries for zh_CN
and en.
The previous commit added Cool Plate (SuperTack) entries to 18 non-zh/en .pos and rewrote the Cool Steel Plate msgstr in 9 of them to a steel-plate semantic. Per the product rule that only Simplified Chinese and English translations are guaranteed, roll those 18 files back to their pre-e76eb8c0c6 state. Non-zh/en locales now fall back to English for Cool Plate (SuperTack) on non-U1 printers, while U1 keeps whatever local translation of Cool Steel Plate the upstream translators had.
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Reverts the all-language .po migration introduced in a458eb1 ("feat: rework Cool Steel Plate - reuse Supertack enum and unify notification format") for the 18 non-zh_CN/non-en locales. Per product rule, only zh_CN and en translations are guaranteed for the model-specific Cool Steel Plate / Cool Plate (SuperTack) split. Other locales revert to the upstream "Cool Plate (SuperTack)" msgid and their original msgstr, leaving them in sync with main. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Removes two stale msgids that no longer match any L() call in code: - "Bed temperature for layers except the initial one. ... Cool Steel Plate." - "Bed temperature of the initial layer. ... Cool Steel Plate." These were left behind when supertack_plate_temp[_initial_layer] tooltips in PrintConfig.cpp were rewritten to use the generic "this plate" wording. The .pot and en.po never had these entries; only zh_CN.po carried the orphans. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Drop the "Heatbed %1%:" prefix and merge the two-segment message into
a single line, as requested by product:
Before:
Heatbed N: The following filaments are not compatible with the
Cool Steel Plate: [1] X. Set the corresponding bed temperature to
a non-zero value to enable printing.
After:
Cool Steel Plate is not recommended for printing [1] X filaments.
To continue, set the corresponding bed temperature to a non-zero
value.
Same treatment applied to the TPU serious-warning variant. The
filament placeholder still uses the shared format_filament_slot_list
helper, so multi-slot output stays "[1] X, [2] Y".
Code changes (Plater.cpp):
- cold_plate_error_text / cold_plate_serious_warning_text: drop the
bed_index_1_based parameter; build the message via a single
Slic3r::GUI::format(_u8L(...), slot_list) call.
- sync_cold_plate_notification: remove the now-unused bed_idx locals
in both the SeriousWarning and BlockedError branches.
i18n (zh_CN.po only, per product rule guaranteeing zh/en):
- remove 4 obsolete Heatbed-prefix msgids.
- add 2 new msgids with zh_CN translations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Refine the Cool Steel Plate notification text to match the agreed
product wording:
Before: "Cool Steel Plate is not recommended for printing %1%
filaments. To continue, set the corresponding bed
temperature to a non-zero value."
After: "The Cool Steel Plate is not recommended for %1%. To
continue printing, set the bed temperature above 0°C
for this filament."
Same shape applied to the TPU serious-warning variant. zh_CN
translations follow the new wording.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
The TPU warning most commonly fires for a single filament, where "They may be hard to remove" is grammatically off. Switch to the singular "It" — slightly imprecise when multiple slots trigger at once, but the common single-filament case reads correctly. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
All bed-temperature rows in the filament settings panel used to spell
out the plate name in their tooltip ("Bed temperature when the Cool
Plate is installed...", "...the Engineering Plate is installed...",
etc.), which (a) duplicates the row label right next to it and (b)
forces the supertack row to keep a model-specific tooltip branch.
Replace every per-plate tooltip with a single generic wording:
"Bed temperature when this plate is installed. A value of 0 means
the filament does not support printing on this plate."
Tab.cpp changes:
- TabFilament::build(): all 7 plate rows (supertack / cool / textured
cool / engineering / hot / textured PEI / graphic effect) use the
generic tooltip; the supertack row keeps its model-specific label
but drops the model-specific tooltip.
- TabFilament::toggle_options(): the supertack label_tooltip update
collapses from a U1/non-U1 ternary to the same generic string.
i18n (zh_CN.po only): drop 8 now-orphaned per-plate msgids; add 1
new generic msgid. en.po/.pot unchanged (no entry existed before,
English UI falls back to the msgid).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Follow-up to 93c8e52 (which unified Tab.cpp tooltips). The underlying PrintConfig.cpp options for each bed-temperature slot (cool_plate_temp, textured_cool_plate_temp, eng_plate_temp, hot_plate_temp, textured_plate_temp, graphic_effect_plate_temp, and their _initial_layer counterparts) still named the plate in their tooltip, so the sidebar/advanced view kept showing plate-specific text while the filament panel read "this plate". Replace all 12 per-plate tooltips in PrintConfig.cpp with the same generic wording already used by supertack: "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on this plate." "Bed temperature of the initial layer. A value of 0 means the filament does not support printing on this plate." i18n (zh_CN.po): drop 10 now-orphaned per-plate msgids; the two generic msgids (already present for Other layers / Initial layer) are reused. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Follow-up to 93c8e52 (which unified Tab.cpp tooltips). The underlying PrintConfig.cpp options for each bed-temperature slot (cool_plate_temp, textured_cool_plate_temp, eng_plate_temp, hot_plate_temp, textured_plate_temp, graphic_effect_plate_temp, and their _initial_layer counterparts) still named the plate in their tooltip, so the sidebar/advanced view kept showing plate-specific text while the filament panel read "this plate". Replace all 12 per-plate tooltips in PrintConfig.cpp with the same generic wording already used by supertack: "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on this plate." "Bed temperature of the initial layer. A value of 0 means the filament does not support printing on this plate." i18n (zh_CN.po): drop 10 now-orphaned per-plate msgids; the two generic msgids (already present for Other layers / Initial layer) are reused.
…aSlicer into feature_cold_board
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
The plate-toolbar SLICE_FAILED condition in GLCanvas3D only checked filament_temp_mixing and forgot cold-plate incompatibility, so a cold- plate-blocked plate rendered as UNSLICED instead of SLICE_FAILED. Fix by introducing Plater::is_plate_sliceable(int) that combines PartPlate::can_slice() with both GUI-layer blockers, and delegate both the toolbar rendering and find_next_sliceable_plate_for_slice_all to it so the three call sites cannot drift again. Also addresses harness-review findings on the cold-plate query API: - const-correctness: mark get_cold_plate_compat_state / is_plate_blocked_by_cold_plate as const; add a const get_plate(int) overload to PartPlateList so the const query can resolve plates. - dead code: remove unused s_cold_plate_bed_type_key constant and get_cold_plate_bed_index_1_based helper (no callers).
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Annotate is_plate_sliceable() as the single point where GUI-layer blockers converge, so follow-on PRs (#626 flow_ratio_zero, #589 mixing_cached) know to plug their predicate in here instead of branching again at GLCanvas3D / MainFrame call sites. No behavior change; just a comment/contract update so the three concurrent PRs that all rewrite the same toolbar line can converge without conflict. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Rename *_slots_1based to *_slots_1_based to match snake_case style.
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
Integrates PR #627 (cold-plate gating) with the flow_ratio_zero blocker and the mixing-cached notification work (PR #589 path). All three per-plate blockers now coexist behind the unified `is_plate_sliceable()` gate introduced on main. Conflict resolutions: - PrintBase.hpp: StringExceptionType enum — assign unique ids (COLD_PLATE_INCOMPATIBLE = 6, FLOW_RATIO_ZERO = 7). Enum is in-memory only, not serialized, safe to renumber. - Plater.hpp/.cpp: kept both HEAD's flow_ratio_zero family and main's cold_plate family; merged the update_apply_to_background_process validation chain to OR-in both INVALID bits and AND-in the RESTART bit only when all three blockers are clean. - is_plate_sliceable(): consolidated gate runs all three blockers (mixing / cold-plate / flow_ratio_zero). - GLCanvas3D.cpp: adopted main's unified `is_plate_sliceable(i)` call. - MainFrame.cpp: kept main's cold-plate guard plus HEAD's flow_ratio_zero guard (call-site collapse deferred to a follow-up cleanup PR). - zh_CN.po: merged both message sets. Compile-verified: libslic3r, libslic3r_gui, Snapmaker_Orca.dll all link.
Summary
Introduce a fourth bed type, Cool Steel Plate (CSP), for the Snapmaker U1, with full per-plate compatibility gating (block slicing + notification + greyed-out slice button), aligned with the existing filament-temperature-mixing / flow_ratio_zero systems.
Reuses the existing
btSuperTackenum (whose config-key string is"Supertack Plate"); no newBedTypeenum value is introduced, avoiding wider churn in the type system.Core changes
Bed-type UI / config
PrintConfig.cpp: U1'senum_values_u1gets"Supertack Plate",enum_labels_u1gets"Cool Steel Plate";enum_labels_exand the global labels renameCool Plate (SuperTack)→Cool Steel Plate.Tab.cpp: under!support_multi_bed_types, U1 now shows thesupertack_plate_temp(_initial_layer)rows so users can edit CSP bed temps.Plater.cppSidebar: the legal set forcurr_bed_typeaddsbtSuperTackalongsidebtPTE/btPEI/btGESP(otherwise it would be reset).CSP compatibility core logic (
Plater.cpp/Plater.hpp)ColdPlateCompatState { Compatible, SeriousWarning, BlockedError }andColdPlateCompatResult { state, unsupported_slots_1based, tpu_slots_1based, uses_tpu }.get_cold_plate_compat_state(plate_index): only computed whencurr_bed_type == btSuperTack; single pass over the plate's actually-used filament slots, classifying as unsupported viasupertack_plate_temp/supertack_plate_temp_initial_layer <= 0, and as serious-warning viafilament_type == "TPU";BlockedErrorwins overSeriousWarning.is_plate_blocked_by_cold_plate(): exposed toMainFrame/GLCanvas3Dfor slice-button and plate-toolbar state.sync_cold_plate_notification(): close-then-push pattern; caches the last-pushed text to matchclose_validate_error_notification/close_slicing_serious_warning_notification's exact-text matching.Slice-path integration
sync_filament_temp_mixing_notification()sync site now also callssync_cold_plate_notification()side-by-side (update_background_process(),start_next_slice(),find_next_sliceable_plate_for_slice_all(),guard_before_slice_plate(),validate_current_plate(),select_plate(), etc.).validate_current_plate()adds a gate aroundclose_notification_of_type(ValidateError): skip it when mixing / cold-plate blockers are active, so GUI-layer blocker notifications survive.EVT_FILAMENT_USAGE_CHANGEDnow also syncs CSP.PrintBase.hpp: addedSTRING_EXCEPT_COLD_PLATE_INCOMPATIBLE = 6.Snapmaker_Orca.cppCLI:STRING_EXCEPT_FILAMENTS_DIFFERENT_TEMPrenamed toSTRING_EXCEPT_FILAMENTS_MIXING_TEMP(mirroring the enum).Refactor: shared slot collector
collect_used_filament_slots_on_plate()(covering plate / object / volume / Plater working config / global default extruder resolution); cold-plate and filament_temp_mixing now share a single definition of "actually-used slot", preventing the two from drifting.tr_u8()/filament_display_label()/format_filament_slot_list()unify the[n] PresetNamerendering across all three notification types.Profiles (
resources/profiles/Snapmaker)Snapmaker.json: version02.02.50.02→02.02.55.02; adds0.10 Color Mixing @Snapmaker U1 (0.4 Nozzle)process andSnapmaker Support @basefilament; many U1 filament presets renamed/split by nozzle size (ABS/ASA/PETG-CF/Support For PLA/TPU 95A HF, etc.);filaments_colours.jsonremoved.supertack_plate_tempentries to declare CSP (in)compatibility.Localization
.potand all 21 language.pofiles with CSP error / serious-warning copy.Reviewer Focus
Please prioritize the following (ordered by risk):
1. CSP compatibility-classification semantics (most important)
get_cold_plate_compat_state()requires bothsupertack_plate_tempandsupertack_plate_temp_initial_layerto be> 0to be compatible; either being 0 means unsupported. Please confirm this matches the product's definition of "CSP support" (and matches the actual temperature values shipped in the PR's filament profiles).SeriousWarning(non-blocking); other unsupported filaments go toBlockedError. Confirm this grading — especially whether TPU should really be allowed to slice.BlockedErrorwins overSeriousWarning: when a plate has both unsupported-non-TPU and TPU, only the error is shown and the serious warning is dropped — is that the intended behavior?2. Slot-collection parity with filament_temp_mixing
collect_used_filament_slots_on_plate()was extracted from the inline block insidecheck_filament_temp_mixing(); both call sites now share it. Please confirm the refactoredcheck_filament_temp_mixing()is behaviorally identical tomain— particularly theuses_default_extruderbranch, globalextruderresolution, and the boundaries betweenalways_collectanddefault_keys.check_filament_temp_mixing()also usesbundle->filaments.find_preset(...)(same source as cold plate) — please confirm there's no regression from preset-lookup failures.3. Correctness of close-then-push notifications
sync_cold_plate_notification()relies oncold_plate_last_error_text/cold_plate_last_serious_warning_textfor exact-text close. Please check:curr_plate == nullptr) fails to clear the cache and leaves a stale notification.validate_current_plate()gate aroundclose_notification_of_type(ValidateError)cover every scenario where a GUI blocker should survive — and conversely, does it ever let a stale ValidateError linger that should have been closed?4. Impact surface of renames / enum additions
STRING_EXCEPT_FILAMENTS_DIFFERENT_TEMP→STRING_EXCEPT_FILAMENTS_MIXING_TEMP: search the whole repo to confirm no missed call sites (CLI, 3MF serialization, Sentry reporting, etc.).STRING_EXCEPT_COLD_PLATE_INCOMPATIBLE = 6: does it conflict with any serialization / persistence (3MFStringExceptionTypewrites); is opening an old project file safe?Cool Plate (SuperTack)→Cool Steel Platerename across all labels: does it affect the enum-string mapping ofcurr_bed_typein saved projects? (Critically, thebtSuperTackenum-key string must not have changed.)5. Slice-path coverage
sync_filament_temp_mixing_notification()now also callssync_cold_plate_notification(). Please confirm no slicing entry point was missed (especially reslice, slice_all, send-to-printer, 3MF reload, etc.).MainFrame::get_enable_slice_status()now also checksis_plate_blocked_by_cold_plate;GLCanvas3D::_render_imgui_select_plate_toolbarshows SLICE_FAILED on the plate toolbar — confirm refresh timing is correct across plate-state switches.6. Profile changes
Snapmaker.jsonversion bump02.02.50.02→02.02.55.02consistent with the force_update strategy; will preset migration be smooth for upgrading users (many U1 filament presets were renamed/split)?filaments_colours.jsonwas deleted entirely (−1802 lines): confirm nothing else references it and that the color mapping has been migrated to the right place.7. i18n
.pofiles are synced; runtime.mofiles are generated automatically by CI (run_gettext.{sh,bat}is wired into all three platform build scripts), so no need to review.mo.Test Plan
supertack_plate_temp=0→ expect ValidateError, slice button greyed outfind_next_sliceable_plate_for_slice_all).3mfproject (using the legacyCool Plate (SuperTack)label) does not error; bed type restores correctlyCool Steel Platelabel still shows🤖 Generated with Claude Code