← back to pin list

M-code glossary — RECEIVED, and Jordan has ruled on every code

kerfmaster pin list · Waiting on the shop

questionmixedclosed d13Unresolved, waiting on Aristide or Jordan.

Content last changed 2026-08-04 — computed from the item itself, not typed.

Contract — Post stage

This contract is unresolved — the gate below is the thing waiting on an answer.

takes

makes machine-profile

fails if An M-code emitted whose meaning we inferred rather than confirmed.

Contract last changed 2026-08-06 — computed, not typed. Dated separately from the text above, so neither date can speak for the other.

3 open questions block this pin

⚠ Known defects

This item's subject has a known defect in the code. Source: cadmaster/defects.jsoncadmaster/KNOWN_DEFECTS.md, not this page — the text below is generated from the register so the two can never disagree.

Jordan, 2026-07-29: "I will look for an M-code glossary and upload when able. Put a reminder for me in the edit file." This was that reminder. Aristide supplied it on 2026-08-03 — four photographs of the control's own scrolling G-code and M-code list, taken off the machine screen. Transcribed into cadmaster/machine_codes.json; build_codes.py renders cadmaster/MACHINE_CODES.md and re-runs the census each time. The four images stay in incoming/ as the primary evidence, because a hand transcription is a copy and the photograph is not.

ANSWERED — the codes this item was built around

The census — nothing outside the vocabulary

Every G and M word in the master NC, the 07-29 shop program and a fresh post from HEAD, comments stripped, matched against the glossary: all three use only documented codes, and all three use the same nineteen. Counts are identical across the board (90 M87, 1 M121, 91 M98, 91 M101, 91 M199, 182 G40, 1 G41) except the geometry words and the 07-29 file's lone M99 and missing G52. Re-run with python3 build_codes.py <any.nc>.

ANSWERED, AND AGAINST US — the M87/M121 pairing

This item used to ask whether the M87/comp-off and M121/comp-on pairing was causal or coincidence, and recorded that our post already bets on causal. The glossary says neither code has anything to do with cutter compensation. M87 turns the beam off; M121 ends the process. The master's single M121 is at line 1730 of 1734, four lines above M30 — the position of a program-ending code, not of a comp state. The 90-to-1 correlation we read as a comp rule is equally well explained by the outer profile simply being cut last.

Consequence: emit.py:1443 picks the end code on comp state, so any job with two comp-critical boundaries emits "Process end" twice. The default cut_critical="outer" selects every depth-0 profile, so a file holding two separate parts — or any nested sheet — already does this. Nothing shipped so far has hit it because the novi sign has exactly one outer profile and it is cut last. Registered as defect D13, open and deliberately not fixed.

Still worth one line from Jordan to confirm the reading before anyone changes the post: is M121 the end of the program, or the end of a cut?

JORDAN RULED ON ALL OF IT — 2026-08-04, in two rounds

He answered the glossary code by code, then answered the follow-ups. Everything below is settled unless it says otherwise.

O9011 — ANSWERED, and it was the wrong worry

Jordan, 2026-08-04: "O9011, 9008, 9035, and more you'll see are pierce subprograms. Rule of thumb with Mitsubishi is any program starting with a 9 is their proprietary subprogram and they recommend that we only set these with the tables."

So this item spent a fortnight worried that every program we ship depends on a subprogram we have never read. We are not meant to read it. It is vendor firmware, selected from the condition tables, not authored by us. The worry was misplaced.

It leaves a real question in its place, which is a better one: there is more than one pierce subprogram — 9011, 9008, 9035 and others — and our post hardcodes pierce_sub=9011 (emit.py:1112). Which one a job should call for a given material and thickness comes from the tables. Asked 2026-08-04.

And the machine is a Mitsubishi, recorded here for the first time. The 9-series rule is a vendor convention, not a general one, so it travels with the make.

What the census inferred about O9011, and how it held up

Before Jordan answered, the census argued from the ON/OFF asymmetry — beam off 90 times and never on, height control off 91 times and never on — that O9011 must be switching those on. Jordan's answer neither confirms nor denies it: a pierce subprogram turning the beam on is exactly what you would expect, but nobody has read the file and, per the vendor, nobody is going to. The inference stands as an inference and is now unfalsifiable from our side. Recorded so it is never promoted to a fact.

What the glossary tells us that nobody asked

What is still waiting on the shop from this item: the contents of O9011, and the one-line confirmation on M121.

Both changes made — 2026-08-04

Jordan gave the go and issued a corrected program with the changes already in it (incoming/1785874049_2669550_65733.NC). Ours now matches it: M101 count 0, 90 M87 + 1 M121 with the M121 on the last boundary, 91 M199, 91 M98. A third change came with it that nobody asked for: pierce_clear.parse_nc located the pierce by testing for M101, so the moment M101 left the dialect it found zero boundaries and every caller — risk, tipping, the slug report — silently read an empty program. It now finds the first G0 in the block carrying both X and Y, which reads both dialects. Control: risk.analyse on the old master still returns exactly 4 / 2.8 / 0.8 / 300.2 and on the 07-29 file 33 / 955.9 / 228.2 / 1587.5, the recorded values, so the parser change moved nothing.