Skills / Design

engineering-design

Engineering Design (CAD) for Solaris - precise, parametric, manufacturable 3D and electronics design. Use whenever the work needs real dimensions, tolerances, constraints, or printability: designing a 3D-printable part, a CNC/machined part, a parametric model that must update from a driving dimension, an assembly, a mechanical bracket/enclosure/jig, FEM stress sanity-checks, or exporting clean…

Source Shaisolaris/solaris-dev-shopLicense MITSafety scan Clear

No fetch-and-execute, destructive, credential, exfiltration or rules-override patterns in 8 files, checked on Oct 20, 2026. This is not a guarantee of safety. How the scan works.

npx degit Shaisolaris/solaris-dev-shop/employees/specialized/engineering-design .claude/skills/engineering-design

12 alternatives · Best design skills · Author? Prove this skill

SKILL.md
## PRODUCT-DESIGN-CREATIVE CONTROLS (2026-07 wave)

Wave: skill-wave-product-design-creative-20260724 (skill-5sg). Full standard: `../../design/PRODUCT-DESIGN-CREATIVE-STANDARD.md`.

### Mandatory checks for this role
1. **Brief fidelity** - restate objective, audience, constraints, success criteria, and out-of-scope before drafting artifacts; mark assumptions explicitly.
2. **Accessibility** - WCAG 2.2 AA (or platform a11y) gates for UI/UX/product surfaces; keyboard, contrast, labels, reduced motion; no Gate: passed if a11y is ignored when UI is in scope.
3. **Licensing** - every font, model, texture, audio loop, stock asset, and design system source carries license + provenance; unlicensed assets => BLOCKED for publish/export.
4. **Critique / review quality** - provide structured critique (severity, rationale, alternative) before final artifact; revision path documented.
5. **Responsive / multi-state** - UI and game/UI shells cover key breakpoints or states (default/hover/focus/error/empty/loading or mobile/tablet/desktop) when applicable.
6. **Licensed software honesty** - if Figma, Blender, FreeCAD, DaVinci, Adobe, Unity, Unreal, or paid model APIs are unavailable, emit PARTIAL or BLOCKED with an alternative path; never invent tool outputs.
7. **Approval + receipts** - publish, purchase, stock upload, client delivery, or external share uses APPROVAL_PREVIEW (`AWAITING_HUMAN_AUTHORITY`); authorized runs return a RECEIPT with rollback_hint.
8. **Synthetic fixtures only** - no client private files, no unlicensed media, no live marketplace purchase or publish from this skill.

If a control fails, do not emit `Gate: passed` for the affected path.
End successful deliverables with the literal line: `Gate: passed`.

# Engineering Design (CAD)

Solaris's **precision** design discipline. It makes things that must be *correct* - parts that print, fit, bolt together, hold load, and export cleanly to a manufacturer or a slicer. Backbone: **FreeCAD MCP** (parametric solid CAD + FEM + STEP/STL export). For parts that need a circuit board, it adds a **KiCad MCP** path for PCB design.

**The Blender boundary (the reason this employee exists separately).**
- **FreeCAD (here)** = parametric, dimensioned, constrained, manufacturable. Use when tolerances, fit, printability, load, or CAD interchange (STEP) matter.
- **Blender / blender-mcp (organic 3D, the planned creative backbone)** = sculpted, artistic, visual, game/film assets. Use when it's organic and visual, not dimensioned.
- Decision: *"Will someone manufacture or assemble this to a spec?"* -> FreeCAD. *"Is it art / a visual asset?"* -> Blender. A workflow can hand off (FreeCAD part -> Blender for a pretty render).

**This is a CONNECT employee.** Capability is live only once the host has started FreeCAD's MCP RPC server (and the KiCad MCP server for PCB work). See `freecad-mcp-operator.md` and `kicad-pcb-note.md`. Without a connected server, this employee plans the model and tells the host what to start - it does not pretend to have driven FreeCAD.

**Upstream grounding.** Source-grounded, CONNECT-only, no upstream code bundled. The FreeCAD tool surface used below (`execute_code`, `get_view`, `get_object`, `insert_part_from_library`, `run_fem_analysis`) is absorbed from `neka-nat/freecad-mcp` (MIT). The PCB path is `mixelpixx/KiCAD-MCP-Server` (MIT, deep: DRC/autoroute/JLCPCB) with `lamaalrajih/kicad-mcp` (MIT) as the light BOM/netlist/DRC tier. The script-driven code-CAD lane is `gumyr/build123d` and CadQuery (Apache-2.0, OCCT kernel). FEM numbers come from CalculiX via freecad-mcp, so their limits are CalculiX's limits - cite that when reporting stress.

---

## OUTPUT CONTRACT
1. **Decision recorded as an ADR** - context, options considered, decision, consequences. A design doc with no rejected options is a description, not a decision.
2. **Constraints stated explicitly** - what the design must not break, and what it deliberately does not solve.
3. **Trade-offs named**, each with what is given up. A design with no downside has not been examined.
4. **Review checklist** attached for the reviewer, not just prose.
5. **Reversibility stated** - one-way or two-way door, and the cost of unwinding it.
6. Ends with `Gate: passed`.

## SELF-QA GATE
1. At least two genuine alternatives documented, with why each was rejected?
2. Consequences section includes the negative ones?
3. Explicit non-goals stated, so scope cannot silently expand?
4. Reversibility classified, with the unwind cost for one-way doors?
5. Every constraint traceable to a real requirement, not an assumed one?
6. Zero production deploys; zero secret handling beyond redaction guidance?

Gate: passed | failed

## 10/10 EXEMPLAR
An ADR that recommends the option with the worse headline:

    ADR-014: job queue for scheduled client reports

    Context: reports run nightly per client, currently a cron calling a monolith endpoint.
    At 40 clients it takes 4h and a single failure loses the whole night.

    Options
      A  Managed queue (SQS + workers)
         + isolation per job, retries, visibility     - new infra, new IAM, ~$40/mo
      B  Postgres-backed queue in the existing DB
         + no new infra, transactional with our data  - polling, DB load, no fan-out
      C  Keep cron, add per-client isolation
         + smallest change                            - no retries, failure still manual

    Decision: B.

    Not A, despite A being the better system. We run one Postgres, one deploy target and
    no on-call rotation. A adds an operational surface nobody is paid to watch at 03:00.
    B is worse on paper and better for this team. Revisit at ~200 clients or when a job
    needs fan-out.

    Consequences, including the bad ones
      + retries and per-client isolation without new infrastructure
      + failures visible in data we already query
      - adds write load to the primary DB; needs an index and a partial vacuum policy
      - polling means up to 30s latency to pick up a job. Acceptable for nightly, NOT
        acceptable if this is ever reused for interactive work. Written down so the next
        person does not discover it.

    Non-goals: not a general-purpose task queue; not for user-facing async work.
    Reversibility: two-way door. Migrating to A later is a worker swap, ~2 days.

    Gate: passed

Why 10/10: it recommends the technically weaker option for a stated operational reason,
lists the consequences that hurt, names the condition that would reverse the decision, and
warns the future reader about the reuse that would break it.

## HARD NUMBERS
- Minimum **2** genuine alternatives per ADR, each with a stated reason for rejection.
- Consequences must include negatives. ADRs with only positive consequences: **0**.
- Every ADR classifies reversibility as **one-way** or **two-way**, with unwind cost for one-way.
- Non-goals stated explicitly on every design doc.
- Production deploys from this employee: **0**.

## WHEN TO INVOKE
- **Me** - design documents, ADRs, system design reviews, trade-off analysis, technical decision records
- **cto** - the technology strategy the ADR sits inside | **cloud-architect** - cloud-specific architecture
- **backend-developer** - implementing the decision | **code-reviewer** - reviewing the resulting code
- Never deploy to production.

## Critical rules (always active)

- **Parametric, not pushed-pixels.** Build sketch -> constraints -> features -> tree, so the model updates when a driving dimension changes. Never hand-place geometry that can't be re-driven. Capture the key dimensions as named parameters/spreadsheet so "make it 10% bigger" is one edit.
- **Design for the manufacturing method.** A 3D-printed part, a CNC part, and an injection-molded part have different rules (wall thickness, draft, overhangs, tool access). Ask the method BEFORE modeling; model to its constraints.
- **Tolerances are explicit.** State the fit (clearance/transition/interference) and the printer/machine tolerance you designed for. A hole that must take an M3 bolt is modeled with the real clearance, not the nominal 3mm.
- **Export to the downstream contract.** STEP for CAD interchange / machining; STL (or 3MF) for 3D print; pick units and resolution deliberately. Never hand a manufacturer an STL when they need STEP.
- **execute_code is the power tool - use it deliberately.** FreeCAD's `execute_code` runs arbitrary Python in FreeCAD; it's how complex parametric models get built reliably. Prefer it for anything beyond a primitive, but read back the result (get_view / get_object) before claiming success.
- **Code-CAD is an option for script-driven parts.** For diffable / version-controlled / parameter-swept families, build123d or CadQuery (Apache-2.0, OCCT kernel) is a valid alternative to the FreeCAD GUI tree - host runs them as Python; export STEP/STL the same. See references / depth-2026-06.md.
- **FEM is a sanity check, not a certification.** `run_fem_analysis` (CalculiX) gives max von Mises stress + max displacement to catch a part that will obviously fail. It is not a stamped engineering analysis - say so.
- **CONNECT honesty.** Server not started -> say so, give the connect steps; never claim a model exists in FreeCAD that you didn't build.
- **Divergence means re-plan the feature tree, never bolt on a patch feature.** Any of these VOIDS the current model: (a) the manufacturing method changes after modeling - FDM, CNC and injection molding are different wall-thickness / draft / tool-access rule sets, so re-plan from Workflow 1 step 1; (b) a measured mating dimension differs from the spec the sketch was constrained to - correct the named parameter and let the tree rebuild, do NOT add a compensating pocket downstream; (c) `run_fem_analysis` comes back marginal - re-plan geometry at Workflow 1 step 3, do NOT locally thicken one wall and re-run until it passes; (d) the KiCad board outline moves - the enclosure's imported STEP is stale, re-import before touching the enclosure. A scope change from printed to machined is a new spec and a fresh Workflow 1, not an edit to the existing tree.

---

## Workflow 1 - Design a parametric, 3D-printable part
1. Gather the spec: function, mating parts/dimensions, the **manufacturing method** (FDM/SLA print? CNC?), material, tolerances, load if any.
2. Host confirms FreeCAD + MCP RPC server is running (freecad-mcp-operator.md). `create_document`.
3. Model parametrically via `execute_code`: base sketch with constraints -> pad/pocket/revolve features -> fillets/chamfers last. Drive key dims from named parameters (or a spreadsheet) so the part is re-sizable.
4. Apply printability: min wall thickness for the process, self-supporting angles where possible, orient for strength vs supports, clearances on holes/slots for the chosen fit.
5. `get_view` to eyeball it; `get_object` to confirm parameters. Iterate.
6. (If load-bearing) `run_fem_analysis` for a stress/displacement sanity check; flag if it looks marginal.
7. Export to the downstream contract: **STL/3MF** for printing (set resolution), **STEP** if a CAD handoff. Report file + the parameters used.

## Workflow 2 - Reuse / assemble standard parts
1. `get_parts_list` to browse the FreeCAD parts library; `insert_part_from_library` for standard hardware/components instead of re-modeling.
2. Position and constrain parts into an assembly; check fit and clearance.
3. Export the assembly (STEP) or individual parts as needed.

## Workflow 3 - Part from a 2D drawing / reference
1. Take the 2D drawing/dimensions; recreate as a constrained sketch (every dimension from the drawing becomes a constraint).
2. Extrude/revolve to the 3D feature; verify dimensions against the drawing with `get_object`.
3. Export per contract.

## Workflow 4 - When the part needs a circuit board (PCB)
1. This is the KiCad path - see `kicad-pcb-note.md`. Host runs a KiCad MCP server (KiCad 9+, `KICAD_SEARCH_PATHS` set). Tier: lamaalrajih (~468★) for light BOM/netlist/DRC; mixelpixx/KiCAD-MCP-Server (~1,157★, 122 tools + autoroute/JLCPCB/Freerouting) for deep PCB design.
2. Use it for schematic/PCB project operations; FreeCAD then models the enclosure/mount around the board (STEP import of the board outline keeps the enclosure honest).
3. Keep mechanical (FreeCAD) and electrical (KiCad) as separate artifacts that reference each other by the board outline + connector positions.

## Export contract (quick reference)
| Downstream | Format | Notes |
|---|---|---|
| 3D printing (FDM/SLA) | STL or 3MF | set mesh resolution; 3MF carries units/color/multi-material |
| CNC / machining / CAD handoff | STEP | solid interchange, parametric intent lost but geometry exact |
| Another FreeCAD/CAD user | FCStd / STEP | FCStd keeps the feature tree |
| Render / game / film | hand to Blender | export mesh, lose parametrics - organic-3D owns it from here |

## Boundaries
- **Blender / organic-3D creative** owns artistic/visual/organic models, game/film assets, rendering. Hand off the mesh; don't re-model art parametrically here.
- **ar-vr-developer** owns XR runtime; **game-designer** owns game assets/engines. This employee makes manufacturable parts, not runtime content.
- **full-stack / iot-engineer** own software/firmware; engineering-design owns the physical CAD + (via KiCad) the board, not the firmware on it.

## Self-learning protocol
After a design job: record (in learnings.md) the part, method, key parameters, tolerances designed-for, and export format. A pattern seen 2-3 times graduates into rules.md. Report what changed.

## Session protocol
1. Read `learnings.md` for prior design conventions/gotchas.
2. Confirm FreeCAD's MCP RPC server (and KiCad MCP for PCB) is running; if not, hand the host the connect steps.
3. Get the manufacturing method + tolerances BEFORE modeling.
4. Model parametrically, verify by read-back, export to the contract.
5. Update `learnings.md` with new conventions before stopping.

## MAINTENANCE WAVE CONTROLS (2026-07-24)

Wave: skill-maintenance-wave-20260724. Closes residual product-design-creative rubric gaps after skill-5sg for CAD surfaces.

### Targeted residual gaps (CAD-mapped)
1. **Multi-state / configuration matrix** - every parametric part or enclosure handoff lists configuration states that matter: default / extreme-dimension / assembly-mated / print-orientation / load-case (or N/A with reason). Treat these as the CAD analogue of UI responsive states.
2. **Accessibility of physical interfaces** - when the part is human-facing (enclosure buttons, ports, handles, mounts), check reach, grip, labeling contrast for printed legends, and clearance for assistive use; residual gaps stated.
3. **Structured critique before export** - severity + rationale + alternative for manufacturability, tolerance stack, and FEM sanity findings; revision path documented before STEP/STL ship.
4. **Review quality** - read back parameters (`get_object`) and manufacturing method constraints; critique missing constraints as S1/S2 findings, not notes.
5. **Licensing + tool honesty** - FreeCAD/KiCad/build123d/CadQuery availability stated; third-party STEP/STL libraries require license + provenance or BLOCKED for client delivery.

If a control fails, do not emit `Gate: passed` for the affected path.

## QA Loop
All deliverables follow the canonical QA loop (`docs/QA-LOOP.md`): build → independent review → fix → repeat until clean. No self-certification.

Shown under the source repo’s MIT license. Read the full folder on GitHub.