Files
bambuddy/backend/app
maziggy 7f74f831c4 Let a filled or foamed filament keep its own name (issue #2902)
The reduction that gave an AMS slot a material type read PLA-AERO,
    PLA-GF, ASA-GF and PPS-GF as their base material, so a slot loaded with
    foaming or glass-filled filament went out saying plain PLA or ASA. That
    is worse than the bug it replaced. "PLA-AERO" matched nothing before,
    which was useless but honest; "PLA" matches every PLA plate in the
    queue, so the dispatcher would have sent one to filament that will not
    print it -- and the contract the first fix claimed, that it could only
    ever repair a slot, no longer held. @doncaruana caught PLA Aero on the
    issue.

    All four are values Bambuddy itself offers: filament_fields.json is the
    material list the Profiles editor puts in a dropdown, and the reduction
    table was assembled from the cloud filament names and the frontend
    preset parser without ever being checked against it. It is checked now,
    so the next type added to one and not the other fails a test rather than
    a print. ASA-AERO joins them from the cloud catalogue (GFB02).

    The table hyphenates because the slicers do, while a spool says "PLA
    Aero" and every Bambu preset name says "Bambu PLA Aero". Adjacent words
    are joined and taken when the join is a type exactly -- exactly, because
    letting the prefix and suffix rules reach across a space would make
    "Support for PLA" a type by its tail.

    Also from @doncaruana, and the better half of his point: a preset is
    chosen from a list the slicer defines, so it already knows its own type
    and nothing has to be read out of a product name. The resolver now hands
    that answer back and both assign routes prefer it. It cannot be the only
    source -- material is required on a spool and slicer_filament is not, and
    the spool this issue was reported for had no preset at all -- so the
    reduction stays as the fallback for spools without one.

    Two things had to move with it. The auto-unlink guard compared the
    slot's reported type against the reduced material, so a spool whose
    preset outranked its material column would have been unlinked from the
    slot it had just been assigned to; it now accepts any type the assign
    path could have written. And two lookups keyed by material took the
    catch-all for a type they had no row for, which sent an ASA-GF spool out
    at 200/240 -- too cold to extrude -- and preheated its chamber to
    nothing. Both fall back to the base material last, so PLA-CF, PETG-CF
    and PA-CF keep the rows they are listed with, and ASA-CF and ABS-GF pick
    up ranges they had been missing all along.

    What counts as a material name is decided by the base for the same
    reason: saying yes throws the value away and rescues the slot from the
    generic-material fallback, so the answer has to be no when that fallback
    has nothing to offer. ABS-GF reduces to a generic ABS the printer can
    resolve; PPS-CF reduces to nothing and is left as it stands. Adding a
    type to the table therefore cannot quietly change that answer, which is
    how these five slipped through in the first place.

    ------

    Hand the bundled chamber-preheat table back the way it is read

    Every lookup of the per-filament chamber map happens after the keys are
    upper-cased, and the parser documents exactly that: keys uppercased,
    DEFAULT always present so the resolution loop can index it
    unconditionally. The three fallback paths returned the bundled constant
    as declared, with the lowercase "default" row the Settings editor writes
    and displays, so an install that had never opened the setting got a dict
    the loop could not read its fallback out of and used a hardcoded 0 for
    any filament without a row of its own.

    It reported the right number only because that bundled default is 0.
    Raising it would have changed nothing for everyone who had not
    customised the map, with the map in Settings still showing the value
    that was not being used.

    The test that should have caught this asserted the fallback under either
    spelling, and its docstring contradicted itself between title and
    comment. It pins the contract now, over all four ways the parser can
    fall back.
2026-08-23 12:46:48 +02:00
..
…
…
2026-08-15 14:40:37 +02:00
…