You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Size-only bed-fit statements are not placement-aware #91
Several bed-fit statements are based on the model's overall size only: intelligence.project_info (shown by Design Health), the bed-fit path in service.py, bed_fit.py, and validation_report.py. They compare the x/y/z extents with the printer's bed size.
That answers "is the model small enough for the bed". It does not know where objects sit on the plate:
A small object that has been moved off the plate can still be reported as fitting by these size-only checks (the placement checks report it separately).
When a project has several separated objects or plates, the combined extents can be much larger than any one object, which can produce "scale or split" advice that is not about a single object.
Context
Found while planning the read-only 3D project inspection. The scene contract (scene/1) will provide placement-aware findings per instance. The size-only consumers are unchanged by that work except for a units correction (a 12-inch part must be 304.8 mm, not 12 mm).
Proposed follow-up
Separate "size of an object" (intrinsic, per object, in millimetres) from "placed bounds" (per instance and plate), and make each consumer say which one it is using. Add regression tests for translated, separated and multi-plate projects.
Not part of
The viewer and scene contract pull requests. They state the limitation in their descriptions.
Reopened: #104 (merge 22334b9) closed this issue automatically, but its criteria are only partly met.
Fixed and verified (merged main)
Object size and placed bounds are separate. Each object is sized on its own (untransformed, per object and per part, so two parts with the same object id keep distinct sizes, e.g. 10 mm and 50 mm), and a combined extent across separated objects is never used for 'scale or split' advice.
Placement is judged per instance and per plate, with height and below-plate checks, and says 'By size' or 'By placement' in every statement. A small object moved off the plate is reported by placement, not as 'fits' by size.
Design Health shows 'Not checked' on every path where the size is not established (including no overall dimensions with per-object sizes).
Placement findings carry stable condition ids and their own actions; they never receive keyword-matched community fixes. An unavailable bed fit is listed under 'not verified' in the Intelligence Report.
Evidence: full backend suite 3718 passed, 49 skipped, 0 failed (an earlier run at the pre-merge head had 1 failure, since adapted); desktop tsc clean, vitest 1185 passed; all 8 CI checks green on the merged head; independent Opus and Sol review of the integration and repair deltas, no blocking finding.
Not met / limitations (RC2 geometry guard keeps these 'not checked')
Non-millimetre projects: no size, placement or bed verdict.
Rotated, scaled or sheared items: no placement or bed verdict; a rotated mm part placed off the plate now gets 'not checked' rather than a specific off-plate result.
Structure the guard cannot follow, including build items that name their part (p:path): placement is 'not checked'. Part sizes are still read, but no per-instance verdict. This is reduced placement coverage, not full support.
Known gaps from review, not fixed here: the Intelligence Report verdict and summary lines still read 'found no risks' when only the bed fit was unavailable (the 'Not verified: Bed fit' line is shown); the 'N build items could not be measured' warning has no condition id or action; when several plates are oversized they merge into one risk (all plates stay in its evidence); Design Health still judges against the connected printer's bed_mm axis travel rather than a printable area.
Multi-plate placement was not checked against Orca's own plate layout.
Keeping this open until the not-checked cases have a real, guarded size basis.
Activity
fix(bed-fit): unknown stays unknown, every object checked, measure on…
fix(bed-fit): real printable area, every failing object, fresh cache (#…
fix(bed-fit): identified printer's printable area, locked caches (#91 …
fix(bed-fit): unidentified printer is unknown, placed height checked (#…
fix(bed-fit): size from printing parts only, sunk parts flagged (#91 …
fix(bed-fit): sizes use the shared role rule (#91 repair 6)
fix(bed-fit): role-aware extents and precise-seam roles across all co…
Merge pull request #104 from DVOpenLabs/fix/91-placed-bounds
DVOpenLabs commentedon Oct 22, 2026
Reopened: #104 (merge 22334b9) closed this issue automatically, but its criteria are only partly met.
Fixed and verified (merged main)
Not met / limitations (RC2 geometry guard keeps these 'not checked')
Keeping this open until the not-checked cases have a real, guarded size basis.