cnc: the accessory modes are M331/M951, and machine.ts models only air (M7/M9)
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 48/100
- Issue type
- Documentation
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
- Domain
- backend, documentation
Research direction
Start with Z1-Firmware-Dialect.md §11.3 and the open decision recorded in §8 of Z1-Bridge-Protocol.md; the issue also points to src/engine/cnc/machine.ts:158. First settle the switch-to-code mapping from the Studio MDI log, keeping observations distinct from inference; do not inspect firmware source or activate modes remotely. Done means the observed codes and uncertainties are documented, and the inaccurate air-only claim is addressed consistently with the product decision.
Written by the indexing model from the issue text.
Description
What was observed
Found during the 2026-10-07 bench session, from Studio's own MDI log while walking its Machining
Wizard (docs/bench/img/D0-wizard-4-assist-toggled-mdi-log.png). Toggling the wizard's five "assist"
switches sent one command each, with Studio printing its own description of every one:
| Studio's description | Code |
|---|---|
turning auto bed cleaning mode on |
M331.2 |
turning auto blowing mode on |
M331.1 |
turning static electricity removal mode on |
M331.4 |
turning extend out mode on |
M331 |
(no description, and no ok) |
M951 |
M331 is a mode family with a decimal sub-index — a shape nothing else in the dialect has.
The problem
src/engine/cnc/machine.ts:158 models the Z1's only accessory as air:
/**M7/M9air. The internal vacuum (M801/M802) is Carvera-only. */
No M7 or M9 appeared anywhere in the traffic read. Studio's own wording says this machine has
bed cleaning, blowing, static removal and an "extend out" mode as four separable functions, and the
bridge's dialect model knows none of them. Our post is not wrong so much as incomplete, and every
air command we emit may be addressing only one of several things.
Decide first
Which of these the app is responsible for at all. The machine's own client already exposes all
five as switches; reproducing them in the app is a product decision, not a protocol one, and the
bridge's first pass deliberately does none of it (Z1-Bridge-Protocol.md §8). That question is
recorded there as an open row. This issue does not assume an answer — whatever it is, the
machine.ts claim is wrong today and the codes are unwritten outside a screenshot.
Not yet known — and cheap to settle
- Which switch maps to which code. Four of the five variants describe themselves, which leaves
M951forAuto Time-Lapseand bareM331("extend out") forAuto Vacuum— but that is
inference by elimination, not observation. Toggling them one at a time, watching the log,
converts it into a table. Software-only, no motion, no material. - Why
M951answered nothing where every other command answeredok, with a seven-second gap
to the next command. Either it does not acknowledge, or the time-lapse start is slow, or it is not
understood. Unexplained rather than guessed. - Whether these modes persist across a power cycle. All five were off before the session and all
five on after it. A power cycle and a second look answers it. - The
M49xtool-change family is a related gap and is not this issue:M490.1was confirmed
on hardware as the operator wait, butM492.3,M493.2 T0,M494.0,M494.2,M497.2and
M497.4have no written role.
Where it is recorded
/Z1-Firmware-Dialect.md §11.3 — the codes, the descriptions, and what is inferred versus
observed. That document is otherwise entirely a reading of the firmware's source, and §11 is its
only hardware-observed section; this is the first thing to land in it.
Provenance, and its limit
Everything above comes from what Studio's MDI log displayed, not from a capture off the wire. The
command half is certain — the client sent it. The reply half (ok, done) is as the client
renders it, one level removed from the bytes. A capture would make all of it first-hand.
Do not
- Do not read the firmware's source to fill this in. It is GPL-3.0 and nothing from it may be
adapted into this repo. The codes are interoperability facts and are fine; implementations are not. - Do not switch these modes on a machine you are not at. They are machine settings.
- Dominant language
- TypeScript
- Stars
- 2
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from SlyWombat/CaseMaker
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
-
Two refusals Makera Studio would not make: tabs on a circle, and a vise through-cut without a boardOpenquestion
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 43/100
All issues in SlyWombat/CaseMaker
Similar issues
-
[Bug]: Pen taps on sidebar rows start a drag and lose their clickPossibly taken @makhnatkin claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
b310-digital/teammapper#1515 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
puckeditor/puck#1884 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
outline/outline#14378 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
nicobailon/pi-web-access#642 ·
Maintainers usually reply within 1 day