Manufacturability drawer: rule grouping, part attribution, premium chrome#221
Merged
Conversation
The runDfm WASM binding takes root_node_id as Rust u64, which wasm-bindgen marshals as a JS BigInt. Passing a regular Number threw "Cannot convert 8 to a BigInt" the moment the Manufacturability "Live check" was enabled. Convert at the JS boundary and tighten the local interface to match. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The DFM panel was wedged into the right sidebar where it fought the parts tree for vertical space and got clipped on long part lists. Manufacturability is a diagnostic surface (closer to an IDE "Problems" pane than a property panel), so move it: - Footer chip in the status bar showing severity counts in real time — the heads-up indicator that something needs attention. - Bottom drawer (slide-up) holding the full triage UI: process picker, severity filters, scrollable issue list. Opens / closes via the chip. - Tools → "Manufacturability…" menu item for discoverability. - Live check defaults to enabled now — the chip stays small when there are no issues and surfaces problems automatically. Removes the old DfmPanel.tsx; the new DfmDrawer.tsx is the single home for this UI. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The toggle in the drawer always read as "Live check" because the sidebar version didn't have a visible title bar above it. Now that "Manufacturability" is the panel title, the toggle just needs to say what it does — turn the whole feature on / off. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Iterative cleanup on the manufacturability drawer after moving it to
the bottom dock:
- Group identical rule firings into one collapsible row ("Section 0.01
mm — 90 places") so 160 redundant cards collapse to ~10 triage-able
rows. Sort errors first, then by frequency.
- Resolve `origin_op` → part instance name via a one-pass walk over
each PartDef's tree, so each expanded issue row names *where* it
lives instead of leaving it anonymous.
- Replace `process · rule` jargon in the popover and `casting.foo` rule
codes in the cards with the issue message + measured-vs-limit line.
- Lift the selected annotation's `zIndexRange` so its popover paints
above sibling badges instead of getting obscured.
- Drawer toolbar refresh: sentence-case title, vertical separator,
monochrome severity-dot filter chips, custom On/Off switch in place
of the native checkbox.
- Let wheel/drag pass through the `<Html>` badge cluster to the canvas
so OrbitControls keep working — only the badge button re-enables
pointer events.
- Background click clears the DFM card selection (symmetric with
part-selection clearing on `onPointerMissed`).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Moves the DFM panel from the right sidebar to a bottom drawer (resurrecting an unmerged refactor) and then iterates on it from first principles. The before-screenshot was 160 redundant cards with backend rule codes (
casting.insufficient_draft) and no part attribution; the after is a grouped, triage-able list that names where each issue lives.What changed
Drawer relocation (cherry-picked from the unmerged
refactor-dfm-drawerbranch)DfmPanelremoved; replaced byDfmDrawer+ footerDfmChip+ Tools menu entry.enableddefaults to on; drawer starts closed; chip stays small with severity counts.Information architecture
Draft <3° — 90 places. Sort errors first, then by frequency.origin_op→ part instance name via a one-pass walk over eachPartDef's subtree, so each expanded row reads "FL_thigh_rotor · 0.01 mm measured · 3.00 mm required" instead of an anonymous rule code.process · rulejargon in the in-scene popover with the issue message itself; replacecasting.foosubtitle on rows with the measured-vs-limit comparison.Selection / interaction
onPointerMissed) now also clears the selected DFM issue, symmetric with part selection.zIndexRangefrom[100,0]to[1000,900]so its popover paints above sibling badges.<Html>badge wrapper nowpointer-events: none; only the badge button re-enables it. Wheel/drag falls through to OrbitControls so you can still orbit/zoom while pointing at a cluster.Chrome polish
tracking-tight, vertical separator divider.z-30so it no longer fights the absolute-positioned left sidebar (z-20) — sidebar content was bleeding through the drawer before.Test plan
FL_thigh_rotor, etc.) with measured/limit on the right.🤖 Generated with Claude Code