What
PR #127 skips embossed text labels whose centre lands in a disabled partial-bin cell. _label_layout_cell in backend/app/services/stl_generator_manifold.py indexes rows with int(y_mm // GF_GRID) from the layout top, but shell geometry pitches rows from the bottom, placing the fractional remainder band at the top UI row. For fractional grid_y (e.g. 1.5) labels map to the wrong row: a disabled bottom row keeps a floating label (the #121 defect persists) and a disabled top row silently drops a valid label. Reproduced at STL level. X indexing is correct (fractional column is last in UI order).
Related cleanup: _make_text_labels gained an unused max_depth param, plus a hoist in generate_bin that exists only to pass it, leftover from a reverted clipping implementation.
Acceptance criteria
What
PR #127 skips embossed text labels whose centre lands in a disabled partial-bin cell.
_label_layout_cellinbackend/app/services/stl_generator_manifold.pyindexes rows withint(y_mm // GF_GRID)from the layout top, but shell geometry pitches rows from the bottom, placing the fractional remainder band at the top UI row. For fractionalgrid_y(e.g. 1.5) labels map to the wrong row: a disabled bottom row keeps a floating label (the #121 defect persists) and a disabled top row silently drops a valid label. Reproduced at STL level. X indexing is correct (fractional column is last in UI order).Related cleanup:
_make_text_labelsgained an unusedmax_depthparam, plus a hoist ingenerate_binthat exists only to pass it, leftover from a reverted clipping implementation.Acceptance criteria
_label_layout_cellindexes rows from the bottom (e.g.int((config.grid_y * GF_GRID - y_mm) // GF_GRID), clamped) so labels in fractional-grid bins map to the physically correct cellgrid_y=1.5with top and bottom rows disabled: label kept and skipped correctly in both casesmax_depthparam and itsgenerate_binhoist removed