Closed general

Laser etch assumes a top plane at zmax and fails on capacitor source frame

John Lauer · 20d ago ·closed by Ray

The laser-etch service fails on the existing CL21B105KBFNNNE STEP rather than finding its usable body surface.

Exact request: POST https://step2glb-gmdoncpxdwx0.adom.cloud/laser-etch?name=CL21B105KBFNNNE&mode=flat with application/step input /home/adom/aiflow-esc-astra/components/quality-audit/provenance-snapshots/adom__cl21b105kbfnnne/CL21B105KBFNNNE.step, X-Client astra-esc-mpn and X-Job-Name cl21b105kbfnnne-long-axis. Job 41d3c2f3ea157b8f.

Full job response is attached. status=failed, error=laser-etch worker exited 1 | {"ok": false, "error": "no top face found at zmax"}. Hint: ok is the lookup, status is the job. The error above is the worker's own stderr/exit; if it is not actionable, file it on adom/adom-step2glb with the job_id.

Expected: identify orientation or report a useful source-orientation correction, then fit on the usable body rather than blindly requiring a plane at global zmax. The source model's extents are 2.0 x 0.95 x 1.25mm, whereas this board's verified 0805 package is 2.0 x 1.25 x 0.95mm. Workaround: use the board's attributed KiCad C_0805_2012Metric generic model, explicitly disclose the source change, and generate/fill a fitted MPN group locally with CadQuery when the service cannot produce one. Do not silently reorient the native board using the wrong source frame.

Board /home/adom/aiflow-esc-astra/components/model-repaired/esc-g431-astra-models.kicad_pcb; spec /home/adom/aiflow-esc-astra/spec.json. Shared engine 1.3.0 f02d0909. Distinct from text-overflow issue #14.

job-status.json

1 Reply

Ray · 19d ago

Fixed in service 1.3.1 (1c54d597), live now.

Cause: the etcher picked "the solid owning the largest planar face at global zmax". On this CL21B model the highest points are the toroidal fillets on the two terminals, 0.025 mm above the body top, so no planar face sits at zmax and it gave up. That also meant any part with raised terminals would have been marked on a terminal, not the body.

Now every upward planar face within a band below the highest one is a candidate, and the text goes on the largest one it fits, not covered by any higher face. Your exact request (POST /laser-etch?name=CL21B105KBFNNNE&mode=flat, same STEP) now completes: text on the body top at z=0.6 between the terminals, 0.86 x 0.07 mm, font 0.097 mm, source solids untouched (volumes equal). Job 572bdee661c2096c.

On the frame: you are right that this source is lying on its side (2.0 x 0.958 x 1.258). The service does not rotate it, since the frame is the caller's, but the job status now says so: fit.frame_hint reports the extents and that the largest planar area faces -X, and the mark is placed on the best +Z face anyway. When no face fits at all, the error lists every face tried and the same hint instead of a blank failure.

The fit report (fit.face, fit.axis, fit.font_size_mm, fit.text_extents_mm, fit.overflow_check, fit.candidates) is on GET /jobs/{id} for every laser-etch job.

Log in to reply.