validator: detect ambiguous (duplicate) filament subtypes per printer (#14459)
* validator: detect duplicate filament subtype per printer (opt-in) A filament is matched from the AMS by (filament_id + printer compatibility); if two compatible filament presets for one printer share a filament_id, the match is ambiguous and the runtime silently picks whichever loads first. Add PresetBundle::check_duplicate_filament_subtypes(), gated behind a new has_errors(check_duplicate_filament_subtypes) parameter and the validator's -f/--check_filament_subtypes flag (off by default). For each system printer it groups its vendor's compatible filament presets by filament_id and errors on any group of 2+, reporting each preset as a clickable file:// URI with a single "how to fix" hint. CI runs it for BBL only (-v BBL -f) until the other vendors' profiles are cleaned up. * profiles: fix ambiguous BBL filament matches Resolve the duplicate-filament-subtype errors flagged by the validator: - align compatible_printers with Bambu Studio where Orca over-claimed a nozzle that already has a dedicated preset (Bambu PLA Basic/Matte/ABS @BBL H2DP; Bambu ASA/PETG HF @BBL H2DP 0.6 nozzle; Fiberon PETG-ESD @BBL X1) - fix a copy-pasted printer name in Overture Matte PLA @BBL A1M 0.2 nozzle - fix a wrong inherits in Panchroma PLA Silk @BBL X1C 0.2 nozzle (was inheriting Panchroma PLA @base, giving it filament_id GFPM001 instead of GFPM004) Bump BBL profile version. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -95,6 +95,7 @@ int main(int argc, char* argv[])
|
||||
#endif
|
||||
("vendor,v", po::value<std::string>()->default_value(""), "Vendor name. Optional, all profiles present in the folder will be validated if not specified")
|
||||
("generate_presets,g", po::value<bool>()->default_value(false), "Generate user presets for mock test")
|
||||
("check_filament_subtypes,f", po::bool_switch()->default_value(false), "Also flag printers with duplicate (ambiguous) filament subtypes. Off unless this flag is present.")
|
||||
("log_level,l", po::value<int>()->default_value(2), "Log level. Optional, default is 2 (warning). Higher values produce more detailed logs.");
|
||||
// clang-format on
|
||||
|
||||
@@ -118,6 +119,7 @@ int main(int argc, char* argv[])
|
||||
std::string vendor = vm["vendor"].as<std::string>();
|
||||
int log_level = vm["log_level"].as<int>();
|
||||
bool generate_user_preset = vm["generate_presets"].as<bool>();
|
||||
bool check_filament_subtypes = vm["check_filament_subtypes"].as<bool>();
|
||||
|
||||
// check if path is valid, and return error if not
|
||||
if (!fs::exists(path) || !fs::is_directory(path)) {
|
||||
@@ -164,7 +166,7 @@ int main(int argc, char* argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (preset_bundle->has_errors()) {
|
||||
if (preset_bundle->has_errors(check_filament_subtypes)) {
|
||||
std::cout << "Validation failed" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user