Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

cnc: the accessory modes are M331/M951, and machine.ts models only air (M7/M9)

Closed
#283 2 comments 0 reactions 0 assignees View on GitHub

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

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/M9 air. 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
    M951 for Auto Time-Lapse and bare M331 ("extend out") for Auto 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 M951 answered nothing where every other command answered ok, 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 M49x tool-change family is a related gap and is not this issue: M490.1 was confirmed
    on hardware as the operator wait, but M492.3, M493.2 T0, M494.0, M494.2, M497.2 and
    M497.4 have 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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from SlyWombat/CaseMaker

All issues in SlyWombat/CaseMaker

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.