Skip to content

Label tabs on bins (F34): raised tab on every generated bin STL - #157

Merged
ntindle merged 1 commit into
mainfrom
poteto/label-tabs-20261029-0710
Oct 29, 2026
Merged

ntindle merged 1 commit into
mainfrom
poteto/label-tabs-20261029-0710

Conversation

@ntindle

@ntindle ntindle commented Oct 29, 2026

Copy link
Copy Markdown
Owner

Label tabs on bins (F34): raised tab on every generated bin STL

What this PR does

A new "Label tabs on bins" switch in Bin options. When it is on, every
generated bin STL gains a raised tab on the front edge, rising 12 mm above
the stacking lip, 1.2 mm thick, up to 36 mm wide (14.5 mm on a 1 x 1
half-grid bin), for a stuck-on label. The tab protrudes 1.2 mm past the
bin's front face; between parts the 3 mm plate gap absorbs it, so 3MF
plate layouts are unchanged.

  • Setting persisted as gridfinity_labelTabs, local-only: it is not part
    of share links, the same precedent as gridfinity_testFit and
    gridfinity_estimateSettings.
  • Print estimates include the tab volume (analytic volume, cross-checked
    against the tabbed mesh to 1e-6).
  • The printer-Z limit counts the tab height: a bin that fits without tabs
    but would exceed the printer height with the 12 mm tab is left out and
    counted as skipped, like any other too-tall bin.
  • The Download files README gains a label-tabs note, including the
    stacking caveat: another bin cannot stack on top of a tabbed bin.
  • The tab changes no part identity: file names, part counts, and plate
    counts are identical with the switch on or off. Sizes shown for tabbed
    bins (README size column, copied parts list) include the 12 mm tab
    height, since that is the true printed height.
  • Known limitation: if a plate spans the printer bed almost exactly, the
    1.2 mm tab can overhang the bed edge by up to 1.2 mm (the packing
    footprint does not reserve the tab). Between parts the 3 mm gap
    absorbs it. A tab-aware packing margin is a follow-up.

Feature map

F34 Label tabs on bins: missing -> shipped. Parity 47.0% -> 49.0%
(23 full + 3 partial / 50). 2026-10-29 refresh: andymai 4.524.1
(deploy fix + supporters features), no planner-row impact;
gridfinity-label-generator still 3.1.1; automaat/gridfinity-generator
still v0.6.0; no new Gridfinity planner tool found.

Verification

Local gates: npm test, npm run lint, npx tsc --noEmit,
npm run build (results below). Perf: npm run measure branch vs
trunk, same box (results below).

Live lanes: Lane B on the Netlify deploy preview (core tasks + the
label-tabs switch: toggle, persistence across reload, estimate change
with a placed bin, download still produces the zip); Lane C production
smoke after merge.

Notes for the reviewer

  • The tab mesh is a box fused to the front wall below the lip fillet; it
    touches the wall on the y=0 face only, so the mesh volume is exactly
    the bin volume plus the tab box volume (no overlap double-count).
  • During development the first wiring put the tab constants in
    gridfinityProfiles.ts and imported them from printParts.ts, which
    created a gridfinityProfiles <-> printParts cycle and left
    POCKET_PROFILE's last z undefined in some module orders (all
    baseplate-volume tests failed). The constants now live in bins.ts,
    which all three modules already import; no cycle remains.
  • Not in this slice: dividers (F18), scoops (F19), magnets (F17),
    lids (F16). The tab does not show in the 2D preview; it is an
    export-time bin option, like test-fit pieces.

Verification (gates)

  • Local gates green on the branch: npm test 51 files, 590 passed / 11 skipped; npm run lint clean; npx tsc --noEmit clean; npm run build green (index chunk 235,321 -> 236,207 B, +0.4%; lazy export chunk 21,444 -> 22,147 B, +3.3%).
  • Perf vs trunk, same box, node scripts/measure.mjs --n=15 --lh=3, two pairs (second reversed order): branch Lighthouse 71 / 74 vs trunk 78 / 76; TTI 3766 / 3630 ms vs 3519 / 3612 ms; input-to-preview 40.5 / 43.1 ms vs 45.4 / 42.0 ms; layout 482 / 531 ms vs 492 / 486 ms; share 78 / 89 ms vs 87 / 88 ms. Verdict: no credible regression — the first pair's load gap did not reproduce in the reversed pair, and the diff touches no measured code path.
  • Independent review: SHIP IT on the final code (reviewer agent that did not author the code; verified mesh closedness/volume-exactness, unitMath + @/ + zero comments, persistence, share format untouched, Z-limit exactness, parity recount 49.0%, acyclic import graph). Non-blocking nits recorded in the run log; the bed-edge tab-overhang edge case is a follow-up.
  • Live lanes: Lane B on the Netlify deploy preview and Lane C production smoke after merge (see run log).

Bin options gains a Label tabs switch. When on, every generated bin STL
gains a raised tab on the front edge, 12 mm above the stacking lip,
1.2 mm thick, up to 36 mm wide, for a stuck-on label. The tab protrudes
1.2 mm past the bin front face; the 3 mm plate gap absorbs it between
parts, so 3MF plate layouts are unchanged. Persisted as
gridfinity_labelTabs, local-only, not in share links. Estimates include
the tab volume; the printer-Z limit counts the tab height. The Download
files README notes the tab and the stacking caveat.
@netlify

netlify Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for gridfinity-drawer-planner ready!

Name Link
🔨 Latest commit 80cbacb
🔍 Latest deploy log https://app.netlify.com/projects/gridfinity-drawer-planner/deploys/6ae33f7220d6be29f4818a3f
😎 Deploy Preview https://deploy-preview-157--gridfinity-drawer-planner.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions

Copy link
Copy Markdown

PR Quality Report 📊

Check Status
TypeScript ✅
ESLint ✅
Tests ✅
Build ✅

View detailed results

@codecov

codecov Bot commented Oct 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.00000% with 2 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (main@ffdcb77). Learn more about missing BASE report.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/contexts/SettingsContext.tsx 0.00% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #157   +/-   ##
=======================================
  Coverage        ?   93.96%           
=======================================
  Files           ?       71           
  Lines           ?     3611           
  Branches        ?     1057           
=======================================
  Hits            ?     3393           
  Misses          ?      197           
  Partials        ?       21           
Flag Coverage Δ
unittests 93.96% <96.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ntindle
ntindle merged commit 1b6e799 into main Oct 29, 2026
33 checks passed
@ntindle
ntindle deleted the poteto/label-tabs-20261029-0710 branch October 29, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant