Closed general

board-glb refused quantized step2glb GLBs (KHR_mesh_quantization); fixed in 0.1.92

John Lauer · ·closed by John Lauer

Bug

board-glb copper and board-glb check (tools/board-glb-copper.py) read GLB accessors as float or unsigned only, ignored the normalized flag, and measured meshes in mesh-local space. step2glb convert writes KHR_mesh_quantization: POSITION and NORMAL as normalized int16, interleaved in one strided buffer view, dequantized by each node's scale and translation. On such a GLB the tool measured raw integers as metres:

board body 43308000.00 x 65534000.00 mm does not match the Edge.Cuts outline 76.00 x 115.00 mm
the GLB pads span [np.float64(2.35), ...]

It refused every step2glb GLB. On a 76 x 115 mm 6-layer board the raw step2glb GLB was then published to get past the refusal, which skipped the gate. The gate would have caught the transparent (BLEND) silkscreen material that made the bottom silk vanish at some viewing angles in the wiki viewer.

Fix (0.1.92, commit 9e35124d)

  • Accessors of every component type (int8, uint8, int16, uint16, uint32, float) are read with byteStride and normalized applied, accessor min/max included.
  • Every mesh is measured through its full world transform (matrix or TRS, parents included) into a board frame: the board body node's world frame with the scale removed, so units are metres whether or not the GLB is quantized.
  • Generated layers (pads, mask, silk clip, solder) are written in that frame under a node whose matrix is exactly that frame. Untouched meshes stay quantized and the extension stays declared; new accessors are float, which the extension allows.
  • Pad-span check: a GLB pad span may fall up to 0.5 mm inside the board file's pads (coarse tessellation cuts round pads with chords; 0.3 mm on a 7 mm pad on the real board) and still may not reach more than 0.15 mm outside them, so a stale board is still refused.
  • Error messages print plain numbers.
  • Skills (aiflow-molecule, adom-aiflow): the published board GLB is always the board-glb copper output, never the raw step2glb GLB.

Validation

  • tools/test-board-glb-copper.py builds a quantized GLB (normalized int16, interleaved, node scale and translation, with and without a rotated parent) and checks the gate, the rebuilt mask openings, solder placement in world space and the stale-board refusal. Run against the 0.1.91 tool, the same test reproduces "board body 65534000.00 x 32768000.00 mm does not match".
  • Real 76 x 115 mm step2glb GLB, adom-aiflow board-glb copper --finish enig: gate passed; 514 exposed pads, 210 bare copper; mask rebuilt from F.Mask/B.Mask; 2 transparent materials (substrate, silkscreen) cloned opaque; silkscreen clipped at the mask openings.
  • Production cargo check --workspace --bins, Cargo workspace tests (170 passed), widget, artifact, continuation and project-page-check integration tests with AIFLOW_DASHBOARD=off.
  • Published 0.1.92 (package and linux x64 release asset); a fresh install reports adom-aiflow 0.1.92, with a binary SHA-256 matching the pushed source (43b699e4...).

1 Reply

John Lauer ·

Released in 0.1.92 (commit 9e35124d); fresh install verified.

John Lauer closed this ·

Log in to reply.