openscad-iterative-modeling — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited openscad-iterative-modeling (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
render_scad_png (SCAD → PNG preview), export_scad_stl (SCAD → STL mesh)mcp_openscad-mcp-_render_scad_png); match by suffixExtract and confirm only what you must to model correctly:
If key dimensions are missing, ask 1–3 questions. Otherwise proceed with reasonable defaults and state them.
module with named parameters.center=true).$fn explicitly for curved parts (start with $fn=64).difference() extend beyond the body to avoid zero-thickness walls.Render with cameraPreset="isometric" first (width=800, height=600). If features are hard to judge, add orthographic views:
| Feature to verify | Camera preset |
|---|---|
| Plan-view layout, hole positions | top |
| Heights, steps, lips, profiles | front or right |
| Overall shape, proportions | isometric |
| Underside features | bottom |
Run through this checklist (in order of priority):
Write a one-line verdict per issue found, e.g.:
translate X by +5."Apply the smallest SCAD change that addresses the critique, then render again.
Stop when the PNG matches the user's intent and the user approves.
Once approved, export the geometry:
"bracket.stl").If a render returns blank or errors:
difference() ordering, negative dimension, cutter not intersecting body.User request: _"L-bracket, 40x30 mm base, 25 mm tall wall, 4 mm thick, two M4 countersunk mounting holes in the base."_
$fn = 64;
t = 4; base_w = 40; base_d = 30; wall_h = 25;
hole_d = 4.3; csink_d = 8.5; csink_depth = 2.4;
hole_x = [10, 30]; hole_y = 15;
difference() {
union() {
cube([base_w, base_d, t]); // base
translate([0, 0, 0]) cube([t, base_d, wall_h]); // wall
}
for (x = hole_x) {
translate([x, hole_y, -1]) cylinder(h = t + 2, d = hole_d);
translate([x, hole_y, t - csink_depth]) cylinder(h = csink_depth + 1, d1 = hole_d, d2 = csink_d);
}
}isometric -> critique: wall is on the wrong edge; move to x = base_w - t.top -> holes look correctly spaced. Render front -> wall height correct.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.