# Critique 1: geometry stage (2026-10-16) Critique (Opus). Checked only against the user's requirements in `BRIEF.md` (R1, R2, R4, R5) and the seven pictures in `reference/`. Read: `STATUS.md`, `DESIGN.md`, `build/geo_report.json`, `build/geo_sweep.json`, every picture in `previews/geo/`. My extra views and side-by-side crops are in `previews/critique1/` (Workbench, rendered headless from `DoorRobotArm.blend`, the file was not saved). The scripts are there too (`crit1_*.py`, results in `crit1_*.json`). Units: metres, arm frame A at rest (the ref1 pose): X forward to the tool, Y the arm's left, Z up. ref1 pixels convert at the design's scale: X = (1000 - x_img) * 0.0022, Z = (1550 - y_img) * 0.0022. ## Verdict The mechanism is sound: every link is its own object with its origin on its joint, rotation 0, scale 1; the joints sit where ref1 puts them; no booleans; two UV maps on every mesh; no crossings at rest or in the per-joint sweeps. But the arm does not yet look like the references. The big shells are boxes and straight-edged plates where every picture shows sculpted, layered housings; the perforated shoulder drum is hidden; and version B's neck is a 0.43 m pipe where the red sketch shows a short cone. The user has sent back flat, boxy work before ("too flat, too basic"). Items 1-5 would come back. After fixing them, rerun the sweeps (the turret, shoulder and wrist change shape near moving parts). Count: 5 must, 6 should, 1 nice. ## Must ### 1. Version B: the neck is three to four times too long (R4, ref6) - Now: `tool B` neck B01 is a 0.434 m pipe (dia 0.154, flaring to 0.292 only near its end, X 1.089..1.523), so the plate stands 0.61 m from the wrist centre (`crit1_sideB.png`, `previews/geo/geo_ref6B.png`). - ref6's red sketch: two straight lines spread from the wrist cap to the plate. On the page the neck is about 150 px long, the wrist cap about 275 px across, the plate's near edge about 585 px (x 675-695, y 1355-1940). So the neck is about half a wrist cap long and widens from about 0.65 to 1.05 of the cap: about 0.10-0.15 m long. - DESIGN section 3 keeps the long neck because "ref6 looks almost along the tool axis". The photo above the sketch says otherwise: the hub's front face is a narrow ellipse (about 0.42 wide to high, ref6 x 505-640, y 840-1160), so the tool axis is only about 25 degrees out of the picture and the sketch shows the neck near its true length. With a camera set like ref6's photo, the model shows a pipe about 1.5 wrist caps long and the plate almost edge-on: `c_cmpB_sketch_vs_model.png`, `crit1_r6m2_B.png`. - Fix: neck 0.10-0.15 m, one plain cone from about 0.15 m at the flange to 0.23-0.29 m at the plate; the plate stays 0.45-0.55 m square and flat on the door. B's wrist centre then sits about 0.30-0.33 m off the door instead of 0.63: give B its own offset along the door normal in the IK1 target (a `version` term, still a simple expression) and rerun `design_ik_check.py` for B (joint ranges, wrist lobes and forearm against the door). Do not keep the long neck only so that both versions share one pose. ### 2. Turret: a tall box and two pill-shaped pods instead of ref1's long side housings (R1; ref1, ref2, ref3, ref4, ref7) - Now: front housing T03 is a box X -0.08..0.55, Z 0.24..0.77, |Y| <= 0.30, with a plain "+" seam. Each J2 cap sits on its own rounded pod T04 (X -0.51..-0.17, Z 0.26..0.72). The lower block T02 is one slab, Z 0.06..0.24, 0.726 m wide. The cap faces stand at |Y| 0.543 (`c_cmp1_base.png`, `c_cmp4.png`, `crit1_j2.png`, `crit1_turret34.png`). - ref1 (x_img 767-1227, y_img 1207-1393): on each side one long, low housing runs from X +0.51 back round the J2 axis to X -0.50, Z 0.345..0.755, with the chamfered front top, a raised lid, a stepped top line and a long diagonal seam. The J2 cap is set into its rounded rear end. ref2, ref3 and ref4 show the same housing from both sides; no picture has a pod. Below it, the lower block is three stacked rounded slabs (Z about 0.02..0.33) with a protruding lower lip, a recessed slot and screws (ref1, ref4, ref7). - ref7 (same carriage face as ref1, 0.858 m = about 930 px): the J2 cap faces lie inside the carriage's width (x 545-1390, so |Y| about 0.39) and the lower block is about 0.58 m wide. The model's shoulder is about 40 % wider than that. - Fix: rebuild T02/T03/T04 to these outlines. The side housings carry the ears and end round the caps; the caps are cylinder stacks standing 0.08-0.11 m proud (ref7). Keep the middle clear for the drum and the lower-arm root as now. Cap faces at |Y| about 0.40, lower block about 0.60 m wide. Rerun the J1 and J2 sweeps. ### 3. Shoulder: the perforated drum and its ribbed centre strip do not show (R1 names both; ref3, ref7, ref1, ref2) - Now: from the right three-quarter view the drum is a dark sliver behind the pod (`crit1_ref3m.png`). From behind, only 5 cm dark strips with a few holes show between pods and root shells; the ribs exist only deep in the channel behind the J3 rod (`c_back.png`, `c_cmp7_sh.png`). The drum is also longer than in ref7 (0.51 m against about 0.42 m). - ref3 (x 820-900, y 1150-1380), ref1 and ref2: the drum's perforated side face is a big dark disc, open behind the J2 cap and hugged by the lower arm's white root band with its rungs (`c_ref3_drum.png`, `c_ref2_drum.png`). ref7: a bulging barrel with two vertical rows of round holes on each side, narrow root straps, and the ribbed strip running down the middle over the drum to the turret. - Fix: most of it follows from item 2 (the side housing covers only the front part of the drum's side face). Drum about 0.42 m long with a slight barrel bulge and its hole rows in view; add the ribbed strip over the barrel between the root straps. The white ring round the drum is the lower arm's root band in ref1 and ref3 (it carries the rung strip); STATUS made it a fixed turret collar (T04c). Put it on the lower arm: a ring centred on J2 sweeps no new space. ### 4. Forearm and wrist block: boxes where ref1 and ref6 show a rounded housing and one sloped wedge (R1; ref1, ref6) - Now: forearm housing F02 is a box. The dark side plate F03 is a rounded rectangle X -0.04..0.46 with the dial F04 (front edge X 0.32) in its middle. The wrist body F09 is a box X 0.50..0.76, top Z 2.32, with a vertical front face at X about 0.73; the fin and the J5 lobe sit in front of it, lower (`c_cmp1_upper.png`, `c_cmp1_j5.png`, `c_cmp6_wrist.png`). - ref1 (x_img 575-1035, y_img 490-720) and ref6 (x 850-1800): the dark plate ends at the front in a half circle round the dial (front edge X about 0.33); in front of it the white housing wraps the dial with a large radius; the '7' groove and the white-ringed bolt sit at the plate's rear top; the belly is a stepped part of the housing with a long flat bar. The wrist block is one wedge: its top rises in one slope of about 20 degrees from the J5 lobe (X 0.88, Z 2.20) back to the motor cylinder (X 0.53, Z 2.33), with the fin bar on the slope and two white domes on the lobe. No vertical step. The J5 cap is also too big: 0.22 m against about 0.19 m in ref1. - Fix: rebuild F02/F03/F05/F09 and F14 to these outlines. Keep the top finger motor's clearance (STATUS: q5 -62..-80 degrees) by lowering the middle of the slope or moving the motor line, not with a step. Rerun the J4 and J5 sweeps. ### 5. Upper arm and lower arm: straight-edged plates with groove lines where the pictures show curved, layered shells (R1 "dont miss details"; ref1, ref2, ref3, ref5) - Now: upper arm U02 is an extruded eight-point polygon (flat top at Z 2.41, then a straight chamfer down to the elbow); its side is one plane with groove lines. Lower arm L03/L12 are straight-edged plates with grooves and thin panels; the dark core on its front is a narrow strip (`c_cmp1_upper.png`, `c_cmp1_lower.png`, `c_cmp5.png`). - ref1 (x_img 1100-1550, y_img 470-670) and ref3: the upper arm's top is one convex curve from the front block over the hump into the elbow, 0.03-0.06 m lower than the model's; a raised side panel carries the big cap and the vents; a dark recessed strip runs along the lower edge. ref5 (whole picture), ref1 and ref2: the lower arm's side shells have raised rims and recessed faces, the stepped block at the knee top (ref5 x 790-1000, y 760-830), an S-curved front edge, and a wide dark core of stacked black plates with two round bosses on the front (ref1 x_img 1270-1450, y_img 770-1100; ref2 x 1100-1300, y 760-1060). - Fix: curved outlines (enough points that no corner shows in a side view); panel steps as real offsets of 10-25 mm with bevelled edges; widen the dark core and give it its stacked plates and bosses. ## Should ### 6. Knee cap a third too big; its slots read as fan blades (R1; ref1, ref5, ref3) - Now: ring L06 0.55 m, dark cap L07 0.42 m, ten long radial slots from the hub ring to the rim, plain inner ring (`c_cmp1_knee.png`, `crit1_knee.png`). - ref1 (x_img 1295-1485, y_img 1075-1260): white ring about 0.41 m, dark disc about 0.30 m; ten short round-ended notches at the rim only (about 0.045 m); a toothed (castellated) inner ring about 0.165 m round the hub, deep in ref5; a small orange ring. The white boss has a square shoulder where the shell's step meets it. - Fix: scale to those sizes and use that pattern. ### 7. Truss, rod and knob (R1; ref1, ref3, ref5) - Truss: ref1 (x_img 1600-1795, y_img 720-890) and ref5 show a lever about 0.15 m wide with a raised rim; the 'ANN' is five recessed pockets (a slot and four triangles in a zigzag) with white floors. The model shows three dark through-holes over a dark web (`c_cmp1_truss.png`). - Rod: ref1, ref3 and ref5 show a dark tube about 0.06 m thick with two stepped collars along it. The model's visible part is a 0.05 m bright rod (`c_cmp1_rod.png`). - Knob: ref1 and ref5 show a fine knurl round a domed boss; the model has 18 big gear teeth (`crit1_knob.png`). ### 8. Belt drive and cable bundle (R1; ref1, ref2, ref4) - Their positions match ref1; their look does not. ref1 (x_img 600-850, y_img 1180-1520) and ref4: the white ringed pulley face with a dark lens stands clear in front; a wide black belt with big lugs runs back to the lower block in two visible runs; the bundle is a flat band of about seven cables with white clips. Model: the belt wraps the pulley like a toothed tyre, only a thin lower run shows, and the bundle is a round pack of thin cables (`c_cmp1_front.png`, `c_cmp4.png`). ### 9. Cables over the elbow (R1; ref1, ref3) - Now: the two cables run 40 mm apart on one path, so in side view they read as one loop (`c_cmp1_cables.png`). - ref3 (x 250-560, y 460-710) and ref1: two separate loops of different size that cross once. Also a short, thick looped hose stands on the gland on the upper arm's top (ref1 x_img 1377-1463, y_img 480-560; ref3 x 630-730, y 450-530). - Fix: two different Bezier paths; add the short hose. ### 10. Carriage buckle (R1; ref1, ref4, ref7) - Model: five oval pills in a row (`c_cmp1_carr.png`). ref4 (x 730-1340, y 1480-1560), ref7 and ref1: flat rectangular plates with pin bosses, the outer pairs angled down, the middle one lowest (as DESIGN part C03c says). ### 11. Topology and status (R5) - The forearm mesh has 14 non-manifold edges (4 faces on one edge), all in F09 where the middle slice meets the cheeks: forearm-local (0.58-0.84, +-0.046, -0.09..-0.10) and (0.58, +-0.046, 0.24) (`crit1_inspect.json`). `geo_report.json` counts them, but its summary has no non-manifold line, so STATUS says 0. Fix the joins; add the count to the summary. - STATUS says ref1 lies on the model "pixel for pixel". The joints do; the turret, the upper arm's top, the wrist block, the knee cap and the cables do not (items 2-6, 9). - `previews/geo/geo_gripA_closed_on_knob.png` shows a faceted knob. That is the sweep's flat-shaded copy; the real fixture is smooth (`crit1_fixture_A.png`). Render that picture from the real mesh. ## Nice ### 12. Finger tips (R4 version A; ref1, ref6) - ref6 (x 30-460, y 560-1400) and ref1: the distal links are tapered, slightly curved beaks with an oval slot and a small hooked tip. The model's are straight square bars with a right-angled hook (`crit1_hub.png`). ## Checked and fine - Both showroom arms: every link is its own object, origin on its joint (0.000 mm from `joint_A`), rotation 0, scale 1. No modifiers on any asset object. `UVMap` and `UV_Tile` on every mesh. - Joints: J2, J3 and J5 lie within 0.02-0.04 m of their caps in ref1; J1 on the turntable centre. - The 'parallel link' is not a parallelogram: in ref1 the rod is about 22 degrees off parallel to the lower arm. The design's cylinder (rod eye on the knob pin) is the right reading of R2. - Round parts: 32-48 sides on caps and rings over 0.2 m (drum 144); smooth shading, sharp edges only above 32 degrees; no faceting on the real meshes. - The cable and hose curves touch the arm only within 13 mm of their ends (in their glands and ports). - Door fixtures: origin on the attach point. Both versions stand side by side in the showroom.