Files
Oleksandr ShyshatskyiandClaude Opus 5 fda2d8791c ASSIGN_TOOL: point a file's number at a tool
klipper-toolchanger's ASSIGN_TOOL TOOL=T<n> N=<number>, so a file sliced for
T0/T1 prints when those filaments sit in other heads, without re-slicing.
Flat rather than upstream's mux command: the `tool T<n>` objects here are
read-only status views with no command surface, and on the wire the two
spellings are the same, so a UI sending upstream's reaches this.

Assigning displaces, as upstream does -- the tool that held the number is
left unnumbered rather than handed the assigner's old one, because moving a
second tool is not what was typed. The response says who was displaced and
that TOOL=T<n> still reaches them, since that is the surprising half.
RESET=1 has no upstream equivalent and is needed here: the map is runtime
only, so a restart is otherwise the only way back.

Two guards, neither upstream's: mid-toolchange, and mid-print unpaused --
there the next T<n> would go to a different nozzle, with different offsets,
in the middle of an object. Paused is allowed, being exactly when somebody
swaps a spool. RESET is allowed either way, or the way out of a bad map
would be gated behind the state that makes one dangerous.

TOOLCHANGE_STATUS prints the map directly under the mounted tool, identity
or not, because everything below it is printed in heads and a reader who
does not know the map is misreading all of it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HNAW5eNbQm4uqGgE6qf9yj
2026-09-07 20:25:05 +03:00
..