Files
bambuddy/backend
maziggy 30fcfe117b fix(kprofiles): read the nozzle diameter the printer actually sent (issue #1748)
Every K-profile came back as 0.4mm on printers running any other
    nozzle (#1748, reporters @Liquidmasl and @jmoore-skild). The printer
    puts nozzle_diameter on the extrusion_cali_get envelope only; the
    per-filament entries carry setting_id, filament_id, name, k_value,
    n_coef and cali_idx, and nothing else. The parser read the field per
    entry with a hardcoded "0.4" fallback, so the fallback fired on every
    profile of every response. The envelope value was already in scope,
    read into response_nozzle and used only to match the request.

    This never reproduced on H2D because that firmware does include the
    field per entry. Both construction sites are in the same handler, so
    the code path is shared; what differs is the payload, and every
    single-nozzle model omits it.

    The display was the least of it. Editing is delete-and-re-add on
    single-nozzle printers, and the dialog rebuilt nozzle_id and
    nozzle_diameter from its own greyed-out selects, so saving an
    untouched 0.6mm profile rewrote it on the printer as HH00-0.4.
    Deleting aimed extrusion_cali_del at the wrong nozzle the same way.
    Both now pass through what the printer reported. The cali_idx cascade
    in inventory.py, spoolman_inventory.py and spoolman.py matches on
    nozzle_diameter, so on a 0.6 or 0.8 nozzle it never found the
    printer-side entry and the assignment silently failed to stick --
    that is the "cannot auto-map a K-profile" half of the report, fixed
    at the source without touching those three call sites.

    nozzle_id has no source in the payload at all, and state.nozzles
    carries material (hardened_steel), not flow, so it cannot honestly
    produce HH/HS. Rather than keep inventing one, the UI now says the
    printer did not report it: the card shows the diameter alone, the
    dialog shows "Not reported by printer", and the High Flow / Standard
    filter is hidden instead of being offered as a control that can only
    ever empty the list. Import stops stamping HH00 on profiles whose
    source reported none.

    Also correlates K-profile requests by sequence_id. Responses were
    matched by nozzle diameter through a single shared expectation slot,
    so a second request overwrote the first's and the first's valid
    answer was discarded as a mismatch -- the "Failed to get K-profiles
    after 3 attempts" in the same logs, with the printer having answered
    correctly both times. Pending state is now one entry per request,
    keyed by the id we already send, with the nozzle match kept as a
    fallback for firmware that does not echo it back.

    Fixes the flow-type select naming a new profile with the opposite
    label, which contradicted the identical expression 44 lines above it.
2026-08-02 09:52:52 +02:00
..