Files
bambuddy/backend
maziggy f3c6e8ff26 Release the plate-clear gate on a powered-down printer (issue #2864)
POST /printers/{id}/clear-plate answered 400 "Printer not connected" for
    anything without a live MQTT client, and the printer card hid the button
    under the same condition. With Auto Power Off that is the ordinary end of
    every print: the reporter's log has printer 1 marked offline at 12:00:55
    by the plug and the clear-plate POST rejected at 12:03:12, with the plate
    already cleared by hand. Nothing could release the gate short of powering
    each printer back on, clearing, and switching it off again.

    Nothing in the clear path talks to the printer. set_awaiting_plate_clear
    writes an in-memory set and the printers.awaiting_plate_clear column, and
    that column exists precisely so the gate survives an Auto Off cycle
    (#961). The guard came in with the endpoint in aa87e5598, copied from the
    stop/pause/resume handlers beside it, where reaching the printer is the
    whole point. The scheduler already reads the flag off a powered-off
    printer - it refuses to wake one that is still gated - and the wiki
    recommends the MQTT topic for automations because it does not depend on
    the printer being powered on. Only the write path disagreed.

    The card follows: showClearPlateButton drops the connection term, and the
    expanded-view button - which lived inside the block that renders nothing
    without a live status - is shared and given its own slot below it. The
    bulk filter tests clearPlate before the connection filter; every other
    bulk action still needs to reach the machine. The plate pill stays
    connected-only, since its only render site is inside that same block.

    Two things on the same path needed the flag without a client. GET /status
    returned the schema default for a printer with no cached state - manually
    disconnected, or not yet reconnected after a restart - reporting a clean
    plate the database disagreed with, and hiding the control on exactly the
    printers that needed it. And _emit_plate_clear_change bailed when the
    printer info cache was empty, which would have left the retained
    plate_clear topic (#2525) asserting "awaiting" after the gate was
    released; it now falls back to the row.

    This does not dispatch to an unreachable printer: _is_printer_idle still
    requires a connection. Releasing the gate is what lets the queue switch
    the printer on for the next job instead of passing it over.
2026-08-19 09:30:30 +02:00
..