Updated 2026-08-02 · 10 open rulings · pin list · comparison board
Ten things are waiting on you. They are all here so you can do them in one sitting instead of me interrupting you one at a time. Six of them have been pending for days; four are contradictions the audit of 2026-08-02 turned up between documents that are both live.
How to answer: pick an option on each, then press Copy my answers at the bottom and paste the text into the chat. Your picks are saved in this browser as you go, so you can leave and come back. If none of the options is right, use the notes box — a sentence in your own words beats a forced choice.
Every one has my recommendation marked my pick with the reason. Overrule freely; the point of the sheet is that the ruling is yours and written down once.
Two live documents tell customers opposite things.
What the evidence says: the reader already accepts fills and auto-closes them. Our control file MVT-ICONtest.ai is 5 filled / 0 stroked and reads correctly. EAGLES.ai is the opposite — 5 stroke ops, zero fills, no thickness set — and also reads correctly. So both work today; what does not work is telling customers both things.
The technical argument for fills: a fill is guaranteed closed (a fill region cannot be open), and it declares which side is material, which hands us inside/outside for free. The argument against: a fill in a program that has never seen a laser can carry a stroke as well, and then there genuinely are two candidate paths.
vec_io raises on anything that does not begin %PDF. A modern .ai is a PDF, so .ai and PDF really are the same front-end — that half of the sentence is true. SVG is a completely different format (XML, its own path grammar) and nothing in the code touches it.
So the sentence, as printed, invites a customer to send the one vector format we cannot open, and they find out after they have sent it.
The reader itself is not large — an SVG path d string carries the same cubic Béziers we already fit, so it is a parser, not new maths. It is a queued item, not a research problem.
Pin item 8 says: “engrave runs G40, cut runs G41/G42”. Measured against your own master NC, that rule misclassifies almost the whole program: G40 appears on 90 of 91 CUT boundaries. A test keyed on comp state would call ~99% of a real cut file “engrave”. Comp state is a per-feature declaration in this shop, not a mode signal — so it can never be the marker.
The item's premise is stale as well. It says “open contour = FAIL” cannot go global until cut/engrave is known. That gate is already global and unconditional on both boards — so an engrave stroke reaching a board today produces a false FAIL, right now.
Two candidate markers, and they are not exclusive:
Pin item 2b judges the 23-thou web between the U and the T against 0.060″ stainless. Pin item 3b says the same file was cut on 0.125″ mild steel — and 0.125 steel is what reproduces the cut we measured against, exactly.
It matters because the web is the worked example the bridge-width rule is calibrated on: at 0.060 a 23-thou web is a marginal-but-plausible feature, at 0.125 it is under a fifth of the material thickness and a different conversation.
EAGLES.ai carries a 612×792 pt artboard — that is US Letter, the Illustrator default, and it says nothing about how big the part is. The vector board for it was built at a stated width so the pipeline could be measured end to end, but every dimension on that board is therefore provisional.
With the real width the board's fidelity numbers become real numbers, and the bed-envelope and minimum-feature checks start to mean something for that file.
This is the hardest blocker on vector input and it is deliberate: vec_pipeline.read() raises ScaleUnknown rather than guess. A part at 92% is not a slightly worse part, it is scrap.
The question is only what we ask customers to do:
Note the tell that makes option 1 alone unsafe: an artboard of exactly 612×792 (Letter), 595×842 (A4) or 792×1224 (Tabloid) is near-proof nobody set the document size deliberately — a number exists but it means nothing.
The estimator is arithmetic on numbers we already compute, multiplied by rates only the shop has. Until they land, anything built is a demo.
Rates: cut feed by material × thickness · pierce time by material × thickness (and whether thick stock ramps or pulses) · rapid rate · machine hourly rate (one all-in figure, or its components — say which, so gas and consumables are not counted twice).
Material: sheet cost by material × thickness with current sheet sizes · drop/remnant policy.
Labour: setup/load/unload per sheet and per job · secondary ops (tab breaking, deburr, deslag, packing) and how they are charged.
Commercial: minimum charge, rush multiplier, quantity policy · how you price today — by the hour, the inch, the part.
The one worth more than all of it: a handful of jobs already quoted and already cut, with what was charged and what it actually took. Ideal spread: one hole-heavy/lettering job, one long-cut simple job, one thick-plate job, one small-quantity job.
It currently reads:
“Current focus (before anything below): INPUT vs OUTPUT = 100%. Heal fidelity — true source vs healed, measured honestly to the thou. Finish this first.”
That was true in July and it is done: all four control files pass, the healed geometry matches your programs to within half a thou on 91 of 91 boundaries. The live work is the cut path (36 crossings against your master's 4) and the preflight gates. The banner is the first thing anyone opening the list reads, so it is telling every reader the wrong thing about where we are.
Every program we post calls M98 P9011 once per boundary — 91 times on the novi sign — and we have never seen what is inside 9011. We copy the call because your master NC makes it. That is faithful, and it is also the one part of our output nobody here can check: if 9011 is the pierce routine, its dwell and its ramp are the difference between a clean pierce and a blown hole, and we are sizing lead-ins around a crater whose behaviour we are taking on trust.
Also wanted, in one place: what M87 and M121 mean (they end 90 and 1 of the 91 boundaries respectively), and what M100[MSO7,0.125] is declaring — we emit all three because the master does.
Since build numbering came in (chunk 2), every board lives in viewer/builds/NNN-label/ with its own copies of everything. The files sitting loose at the top of viewer/ are from before that: ex2/ex3/ex5/ex6/ex7/ex9/ex11 healed DXFs and NCs from 22–24 July, a duplicate set of novi-sign_* from 31 July that build 005 already holds, and two 1.3 MB tab SVGs. Roughly 3.5 MB, nothing links to any of it, and the ex-files are outputs that any of the controls regenerates in seconds.
I do not delete things in your project without asking, even recoverable ones.
viewer/ should be what the site serves — and nothing is destroyed if one of them turns out to matter.Generated by build_decisions.py from decisions.json — do not hand-edit index.html. Your picks are stored only in this browser.