forgecad 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +2 -11
  2. package/dist/assets/{AdminPage-CeqCUUgu.js → AdminPage-DAu1C1ST.js} +250 -151
  3. package/dist/assets/{BlogPage-P_AJP0v9.js → BlogPage-CJEXL_zJ.js} +94 -70
  4. package/dist/assets/{DocsPage-CKRV2iq2.js → DocsPage-Gc_BCdqC.js} +269 -143
  5. package/dist/assets/EditorApp-D9bJvtf7.js +11338 -0
  6. package/dist/assets/{EditorApp-CnC2k4cW.css → EditorApp-DG1-oUSV.css} +459 -87
  7. package/dist/assets/{EmbedViewer-DBlzmQ5i.js → EmbedViewer-CEO8XbV8.js} +2 -4
  8. package/dist/assets/LandingPage-CdCuEOdC.js +451 -0
  9. package/dist/assets/PricingPage-BSrxu6d7.js +232 -0
  10. package/dist/assets/{SettingsPage-BqCh9JcC.js → SettingsPage-FUCSIRq6.js} +129 -5
  11. package/dist/assets/{evalWorker-Ql-aKwLA.js → evalWorker-KoR0SNKq.js} +6770 -2914
  12. package/dist/assets/{index-2hfs_ub0.css → index-CyVd1D4D.css} +227 -53
  13. package/dist/assets/{Viewport-CoB46f5R.js → index-wTEK39at.js} +31385 -6439
  14. package/dist/assets/{javascript-DCxGoE5Y.js → javascript-DAl8Gmyo.js} +1 -1
  15. package/dist/assets/{manifold-CqNMHHKO.js → manifold-B1sGWdYk.js} +4 -3
  16. package/dist/assets/{manifold-Cce9wRFz.js → manifold-D7o0N50J.js} +1 -1
  17. package/dist/assets/{manifold-D6BeHIOo.js → manifold-G5sBaXzi.js} +1 -1
  18. package/dist/assets/{reportWorker-sFEFonXf.js → reportWorker-DYcRHhv9.js} +6798 -3341
  19. package/dist/assets/{vendor-react-Dt7-aaJH.js → vendor-react-CG3i_wp0.js} +65 -8
  20. package/dist/docs-raw/generated/assembly.md +691 -112
  21. package/dist/docs-raw/generated/concepts.md +1225 -1400
  22. package/dist/docs-raw/generated/core.md +464 -1412
  23. package/dist/docs-raw/generated/curves.md +593 -117
  24. package/dist/docs-raw/generated/lib.md +38 -748
  25. package/dist/docs-raw/generated/output.md +139 -245
  26. package/dist/docs-raw/generated/sheet-metal.md +473 -21
  27. package/dist/docs-raw/generated/sketch.md +553 -349
  28. package/dist/docs-raw/generated/viewport.md +345 -303
  29. package/dist/docs-raw/generated/wood.md +104 -0
  30. package/dist/index.html +2 -2
  31. package/dist/sitemap.xml +6 -6
  32. package/dist-cli/chunk-PZ5AY32C.js +10 -0
  33. package/dist-cli/chunk-PZ5AY32C.js.map +1 -0
  34. package/dist-cli/forgecad.js +9435 -5407
  35. package/dist-cli/forgecad.js.map +1 -0
  36. package/dist-cli/solver-FV7TJZGI.js +365 -0
  37. package/dist-cli/solver-FV7TJZGI.js.map +1 -0
  38. package/dist-skill/CONTEXT.md +3186 -7145
  39. package/dist-skill/SKILL-dev.md +21 -63
  40. package/dist-skill/SKILL.md +12 -56
  41. package/dist-skill/docs/API/core/concepts.md +16 -98
  42. package/dist-skill/docs/CLI/export.md +91 -0
  43. package/dist-skill/docs/CLI/projects.md +107 -0
  44. package/dist-skill/docs/CLI/studio_publishing.md +52 -0
  45. package/dist-skill/docs/CLI/validation.md +66 -0
  46. package/dist-skill/docs/generated/assembly.md +691 -112
  47. package/dist-skill/docs/generated/core.md +464 -1412
  48. package/dist-skill/docs/generated/curves.md +593 -117
  49. package/dist-skill/docs/generated/lib.md +38 -748
  50. package/dist-skill/docs/generated/output.md +139 -245
  51. package/dist-skill/docs/generated/sheet-metal.md +473 -21
  52. package/dist-skill/docs/generated/sketch.md +553 -349
  53. package/dist-skill/docs/generated/viewport.md +345 -303
  54. package/dist-skill/docs/generated/wood.md +104 -0
  55. package/dist-skill/docs/guides/coordinate-system.md +11 -17
  56. package/dist-skill/docs/guides/geometry-conventions.md +13 -70
  57. package/dist-skill/docs/guides/modeling-recipes.md +22 -195
  58. package/dist-skill/docs/guides/positioning.md +88 -147
  59. package/dist-skill/docs-dev/API/core/concepts.md +51 -0
  60. package/dist-skill/docs-dev/API/core/sdf-advanced.md +92 -0
  61. package/dist-skill/docs-dev/API/core/sdf-primitives.md +58 -0
  62. package/dist-skill/docs-dev/API/core/sdf-workflow.md +42 -0
  63. package/dist-skill/docs-dev/CLI/export.md +91 -0
  64. package/dist-skill/docs-dev/CLI/projects.md +107 -0
  65. package/dist-skill/docs-dev/CLI/studio_publishing.md +52 -0
  66. package/dist-skill/docs-dev/CLI/validation.md +66 -0
  67. package/dist-skill/{docs → docs-dev}/blueprint-first.md +5 -0
  68. package/dist-skill/{docs → docs-dev}/coding-best-practices.md +6 -8
  69. package/dist-skill/{docs → docs-dev}/coding.md +1 -3
  70. package/dist-skill/docs-dev/generated/assembly.md +771 -0
  71. package/dist-skill/docs-dev/generated/core.md +775 -0
  72. package/dist-skill/docs-dev/generated/curves.md +688 -0
  73. package/dist-skill/docs-dev/generated/lib.md +50 -0
  74. package/dist-skill/docs-dev/generated/output.md +234 -0
  75. package/dist-skill/docs-dev/generated/sheet-metal.md +506 -0
  76. package/dist-skill/docs-dev/generated/sketch.md +801 -0
  77. package/dist-skill/docs-dev/generated/viewport.md +486 -0
  78. package/dist-skill/docs-dev/generated/wood.md +104 -0
  79. package/dist-skill/docs-dev/guides/coordinate-system.md +46 -0
  80. package/dist-skill/docs-dev/guides/geometry-conventions.md +52 -0
  81. package/dist-skill/docs-dev/guides/modeling-recipes.md +77 -0
  82. package/dist-skill/docs-dev/guides/positioning.md +151 -0
  83. package/dist-skill/{docs → docs-dev}/guides/skill-maintenance.md +21 -10
  84. package/dist-skill/{docs → docs-dev}/internals/compiler.md +5 -6
  85. package/dist-skill/{docs → docs-dev}/internals/constraint-solver-quality.md +0 -1
  86. package/dist-skill/{docs → docs-dev}/internals/constraint-solver.md +0 -1
  87. package/dist-skill/{docs → docs-dev}/internals/sketch-2d-pipeline.md +2 -3
  88. package/examples/api/attachTo-basics.forge.js +5 -5
  89. package/examples/api/boolean-operations.forge.js +3 -3
  90. package/examples/api/bounding-box-visualizer.forge.js +2 -2
  91. package/examples/api/clone-duplicate.forge.js +1 -1
  92. package/examples/api/colors-union-vs-array.forge.js +6 -6
  93. package/examples/api/connector-assembly.forge.js +4 -4
  94. package/examples/api/connector-basics.forge.js +2 -2
  95. package/examples/api/extrude-options.forge.js +4 -10
  96. package/examples/api/feature-created-faces.forge.js +6 -10
  97. package/examples/api/fillet-showcase.forge.js +1 -1
  98. package/examples/api/folded-service-panel-cover.forge.js +2 -2
  99. package/examples/api/group-test.forge.js +1 -1
  100. package/examples/api/group-vs-union.forge.js +1 -1
  101. package/examples/api/highlight-debug.forge.js +4 -0
  102. package/examples/api/js-module-pillars.js +1 -1
  103. package/examples/api/js-module-scene.js +2 -2
  104. package/examples/api/mesh-import-slats.forge.js +1 -1
  105. package/examples/api/pointAlong-orientation.forge.js +1 -1
  106. package/examples/api/profile-2020-b-slot6.forge.js +0 -1
  107. package/examples/api/route-perimeter-flange.forge.js +1 -1
  108. package/examples/api/sdf-rover-demo.forge.js +10 -10
  109. package/examples/api/sketch-on-face-demo.forge.js +2 -2
  110. package/examples/api/sketch-regions.forge.js +4 -4
  111. package/examples/api/transition-curves.forge.js +1 -1
  112. package/examples/api/variable-sweep-pure-sdf-test.forge.js +162 -0
  113. package/examples/api/variable-sweep-test.forge.js +2 -2
  114. package/examples/api/wood-joinery.forge.js +60 -0
  115. package/examples/compiler-corpus/enclosure-shell-cuts.forge.js +3 -3
  116. package/examples/compiler-corpus/fastener-plate-variants.forge.js +2 -2
  117. package/examples/experiments/drone-arm.forge.js +53 -0
  118. package/examples/furniture/adjustable-table.forge.js +2 -2
  119. package/examples/furniture/bathroom.forge.js +11 -11
  120. package/examples/furniture/chair.forge.js +1 -1
  121. package/examples/generative/crystal-growth.forge.js +2 -2
  122. package/examples/generative/frost-spires.forge.js +3 -3
  123. package/examples/generative/golden-spiral-tower.forge.js +3 -3
  124. package/examples/mechanical/3d-printer.forge.js +28 -28
  125. package/examples/mechanical/5-finger-robot-hand.forge.js +15 -15
  126. package/examples/mechanical/airplane-propeller.forge.js +2 -2
  127. package/examples/mechanical/fillet-enclosure.forge.js +1 -1
  128. package/examples/mechanical/headphone-hanger-v2.forge.js +2 -2
  129. package/examples/mechanical/robot_hand.forge.js +15 -15
  130. package/examples/mechanical/robot_hand_2.forge.js +9 -9
  131. package/examples/products/bottle.forge.js +1 -1
  132. package/examples/products/chess-set.forge.js +19 -19
  133. package/examples/products/classical-piano.forge.js +11 -11
  134. package/examples/products/clock.forge.js +12 -12
  135. package/examples/products/iphone.forge.js +8 -8
  136. package/examples/products/laptop.forge.js +15 -15
  137. package/examples/products/liquid-soap-dispenser.forge.js +18 -18
  138. package/examples/products/origami-fish.forge.js +8 -6
  139. package/examples/products/spiderman-cake.forge.js +4 -4
  140. package/examples/toolbox/bolted-joint.forge.js +2 -2
  141. package/package.json +7 -4
  142. package/dist/assets/EditorApp-B-vQvgam.js +0 -9888
  143. package/dist/assets/LandingPage-C5n9hDXI.js +0 -322
  144. package/dist/assets/PublishedModelPage-Dt7PCVBj.js +0 -146
  145. package/dist/assets/__vite-browser-external-CURh0WXD.js +0 -8
  146. package/dist/assets/deserializeRunResult-BLAFoiE0.js +0 -19365
  147. package/dist/assets/index-1CYp3zUp.js +0 -1455
  148. package/dist/docs-raw/CLI.md +0 -865
  149. package/dist-skill/docs/API/API.md +0 -1666
  150. package/dist-skill/docs/API/README.md +0 -37
  151. package/dist-skill/docs/API/assembly/assembly.md +0 -617
  152. package/dist-skill/docs/API/core/edge-queries.md +0 -130
  153. package/dist-skill/docs/API/core/parameters.md +0 -122
  154. package/dist-skill/docs/API/core/reserved-terms.md +0 -137
  155. package/dist-skill/docs/API/core/sdf.md +0 -326
  156. package/dist-skill/docs/API/core/skill-cli.md +0 -194
  157. package/dist-skill/docs/API/core/skill-guide.md +0 -205
  158. package/dist-skill/docs/API/core/specs.md +0 -186
  159. package/dist-skill/docs/API/core/topology.md +0 -372
  160. package/dist-skill/docs/API/entities.md +0 -268
  161. package/dist-skill/docs/API/output/bom.md +0 -58
  162. package/dist-skill/docs/API/output/brep-export.md +0 -87
  163. package/dist-skill/docs/API/output/dimensions.md +0 -67
  164. package/dist-skill/docs/API/output/export.md +0 -110
  165. package/dist-skill/docs/API/output/gcode.md +0 -195
  166. package/dist-skill/docs/API/runtime/viewport.md +0 -420
  167. package/dist-skill/docs/API/sheet-metal/sheet-metal.md +0 -185
  168. package/dist-skill/docs/API/sketch/anchor.md +0 -37
  169. package/dist-skill/docs/API/sketch/booleans.md +0 -91
  170. package/dist-skill/docs/API/sketch/core.md +0 -73
  171. package/dist-skill/docs/API/sketch/extrude.md +0 -62
  172. package/dist-skill/docs/API/sketch/on-face.md +0 -104
  173. package/dist-skill/docs/API/sketch/operations.md +0 -78
  174. package/dist-skill/docs/API/sketch/path.md +0 -75
  175. package/dist-skill/docs/API/sketch/primitives.md +0 -146
  176. package/dist-skill/docs/API/sketch/regions.md +0 -80
  177. package/dist-skill/docs/API/sketch/text.md +0 -108
  178. package/dist-skill/docs/API/sketch/transforms.md +0 -65
  179. package/dist-skill/docs/API/toolbox/fasteners.md +0 -129
  180. package/dist-skill/docs/CLI.md +0 -865
  181. package/dist-skill/docs/INDEX.md +0 -94
  182. package/dist-skill/docs/RELEASING.md +0 -55
  183. package/dist-skill/docs/cli-monetization.md +0 -111
  184. package/dist-skill/docs/deployment.md +0 -281
  185. package/dist-skill/docs/generated/concepts.md +0 -2112
  186. package/dist-skill/docs/internals/shape-from-slices.md +0 -152
  187. package/dist-skill/docs/platform/admin.md +0 -45
  188. package/dist-skill/docs/platform/architecture.md +0 -79
  189. package/dist-skill/docs/platform/auth.md +0 -110
  190. package/dist-skill/docs/platform/email.md +0 -67
  191. package/dist-skill/docs/platform/projects.md +0 -111
  192. package/dist-skill/docs/platform/sharing.md +0 -90
  193. package/dist-skill/docs/runbook.md +0 -345
@@ -0,0 +1,107 @@
1
+ ---
2
+ skill-group: cli
3
+ skill-order: 1
4
+ ---
5
+
6
+ # ForgeCAD CLI: Projects & Setup
7
+
8
+ ## Install
9
+
10
+ ```bash
11
+ npm install -g forgecad
12
+ # Developers working on ForgeCAD itself:
13
+ npm install && npm link
14
+ ```
15
+
16
+ ## When to use what
17
+
18
+ | Context | Use |
19
+ |---------|-----|
20
+ | Using ForgeCAD as a tool | `forgecad *` commands |
21
+ | Developing ForgeCAD itself | `npm run dev` / `npm run build` |
22
+ | CI / publishing | `npm run build && npm run test:full` |
23
+
24
+ ## Dev vs production server
25
+
26
+ ```bash
27
+ forgecad dev [path] # Vite dev server, live reload
28
+ forgecad studio [path] # Static server for production build (requires dist/)
29
+ ```
30
+
31
+ Both accept `--blank`, `--port <n>`, `--host`, `--open`, `--strict-port`.
32
+
33
+ ## Licensing
34
+
35
+ ```bash
36
+ forgecad license # Show license status
37
+ forgecad license activate <key> # Activate a Pro license key
38
+ forgecad license deactivate # Remove license
39
+ ```
40
+
41
+ | Tier | Included |
42
+ |------|----------|
43
+ | Free | dev, studio, run, render, export stl/3mf/svg, all checks, debug |
44
+ | Pro | export step/brep, render-hq, capture gif/mp4, gcode, report, cutting-layout, sdf, urdf, sketch-pdf |
45
+
46
+ ## Authentication
47
+
48
+ ```bash
49
+ forgecad login # Interactive login
50
+ forgecad login --server http://localhost:5174
51
+ forgecad logout
52
+ forgecad whoami # Show user, server, and license status
53
+ ```
54
+
55
+ Credentials stored in `~/.forgecad/auth.json`.
56
+
57
+ ## Project Management
58
+
59
+ ```bash
60
+ forgecad project init "My Project" # Create on server + link current directory
61
+ forgecad project clone my-project # Download into ./my-project/
62
+ forgecad project push [--force] # Upload local changes
63
+ forgecad project pull [--force] # Download remote changes
64
+ forgecad project status # Show local vs remote diff
65
+ forgecad project list
66
+ forgecad project info
67
+ forgecad project rename "New Name"
68
+ forgecad project set-visibility public # private|shared|public
69
+ forgecad project delete [--force]
70
+ forgecad project open
71
+ ```
72
+
73
+ Projects are linked to remote via `forgecad.json`.
74
+
75
+ ## File Management (Remote)
76
+
77
+ ```bash
78
+ forgecad file list [path]
79
+ forgecad file read <path>
80
+ forgecad file save <path> # Upload local file
81
+ forgecad file save <path> --content "code here"
82
+ cat model.forge.js | forgecad file save model.forge.js --stdin
83
+ forgecad file delete <path> [--force]
84
+ forgecad file rename <old> <new>
85
+ forgecad file mkdir <path>
86
+ forgecad file copy <source-slug> <path> [--dest <dest-path>]
87
+ ```
88
+
89
+ Requires the current directory to have `forgecad.json`.
90
+
91
+ ## Member Management
92
+
93
+ ```bash
94
+ forgecad project members
95
+ forgecad project add-member alice@example.com # editor by default
96
+ forgecad project add-member bob@example.com --role viewer
97
+ forgecad project remove-member alice@example.com
98
+ forgecad project set-role bob@example.com editor
99
+ ```
100
+
101
+ Roles: **owner** (full control), **editor** (read/write), **viewer** (read-only).
102
+
103
+ ## Shell Autocomplete
104
+
105
+ ```bash
106
+ forgecad completion bash # or zsh / fish
107
+ ```
@@ -0,0 +1,52 @@
1
+ ---
2
+ skill-group: cli
3
+ skill-order: 4
4
+ ---
5
+
6
+ # ForgeCAD CLI: Studio & Publishing
7
+
8
+ ## Studio & Dev Server
9
+
10
+ ```bash
11
+ forgecad dev [path] [--blank] [--port n] [--host] [--open] # Vite dev server
12
+ forgecad studio [path] [--blank] [--port n] # Production static server
13
+ forgecad web [--open] # Web/embeddable mode
14
+ ```
15
+
16
+ `forgecad open` is an alias for `forgecad studio`.
17
+
18
+ ## New File from Template
19
+
20
+ ```bash
21
+ forgecad new mypart # Part template (default)
22
+ forgecad new bracket --template sketch # Constrained sketch template
23
+ forgecad new robot --template assembly # Multi-part assembly template
24
+ ```
25
+
26
+ ## Publishing & Sharing
27
+
28
+ ```bash
29
+ forgecad publish model.forge.js --title "My Model" # Publish; get shareable URL
30
+ forgecad publish model.forge.js --no-sync # Publish without auto-pushing
31
+ forgecad shares list # List all published models
32
+ forgecad shares delete <share-id> [--force]
33
+ forgecad link <gist-url-or-id> # Share link from GitHub Gist
34
+ ```
35
+
36
+ Published at `forgecad.io/m/<shareId>`. Shares are live references — always reflect current version, not a snapshot. Requires a project directory (`forgecad.json`).
37
+
38
+ ## Adding New CLI Commands
39
+
40
+ 1. Create/extend a module under `cli/`
41
+ 2. Import from `../src/forge/headless`; call `await init()` then `runScript(code, fileName, allFiles)`
42
+ 3. Register in `cli/forgecad.ts`
43
+
44
+ Pass all project files (keyed by project-relative path) to `runScript` when using `require()` / `importSvgSketch()`. Use `require("./file.forge.js", { Param: value })` for model files; `importSvgSketch()` for SVG assets.
45
+
46
+ ## Local Branch Cleanup
47
+
48
+ ```bash
49
+ uv run cli/forge-prune-local-branches.py [--dry-run] [--base mainline]
50
+ ```
51
+
52
+ Finds merged local branches with no matching remote, prompts before deleting. Removes linked worktrees first when a branch is checked out there.
@@ -0,0 +1,66 @@
1
+ ---
2
+ skill-group: cli
3
+ skill-order: 2
4
+ ---
5
+
6
+ # ForgeCAD CLI: Validation & Debugging
7
+
8
+ ## Script Validation
9
+
10
+ ```bash
11
+ forgecad run examples/cup.forge.js
12
+ forgecad run examples/cup.forge.js --debug-imports
13
+ forgecad run examples/cup.forge.js --param "Wall Thickness=3"
14
+ forgecad run examples/cup.forge.js --param "Show Lid=0"
15
+ forgecad run examples/cup.forge.js --param "Pan Style=wok"
16
+ forgecad run examples/constraints/06-complex-spectrogram.forge.js --solver-debug-out tmp/spectrogram-debug
17
+ ```
18
+
19
+ `--param "Key=Value"` overrides: numeric, boolean (`1`/`0`), or string (displayed label) params.
20
+
21
+ `--debug-imports` prints source file, target file, overrides, return type, and success/error phase.
22
+
23
+ `--solver-debug-out <dir>` writes a per-sketch constructive transcript + SVG snapshots bundle.
24
+
25
+ ## Parameter Validation
26
+
27
+ ```bash
28
+ forgecad check params examples/shoe-rack-doors.forge.js [--samples 10]
29
+ ```
30
+
31
+ Samples each parameter across its range; checks runtime errors, degenerate geometry (volume~0), and new collisions. `--samples N` (default 8).
32
+
33
+ ## Check Commands
34
+
35
+ ```bash
36
+ forgecad check transforms # Math-level transform/frame composition invariants
37
+ forgecad check compiler [--case <name>] [--update] # Compiler regression snapshots
38
+ forgecad check query-propagation [--update] # Topology-rewrite propagation snapshots
39
+ forgecad check examples [--family <f>] [--example <path>] # Checked example manifest
40
+ forgecad check suite # Full invariant suite (CI / release gate)
41
+ forgecad check suite --profile local # Faster local invariant suite
42
+ forgecad check dimensions # Shape dimension propagation invariants
43
+ ```
44
+
45
+ ## Invariant Test Suite
46
+
47
+ ```bash
48
+ npm test # Faster local invariant suite
49
+ npm run test:full # Full invariant suite
50
+ npm run test:examples # Example architecture gate
51
+ npm run test:compiler # Compiler snapshot suite
52
+ npm run test:compiler:update # Refresh compiler snapshots after intentional change
53
+ npm run test:query-propagation
54
+ npm run test:query-propagation:update
55
+ ```
56
+
57
+ ## Debug Commands
58
+
59
+ ```bash
60
+ forgecad debug dimensions /path/to/file.forge.js [--all] [--dim-angle-tol 12]
61
+ forgecad debug compiler /path/to/file.forge.js [--compact]
62
+ ```
63
+
64
+ `debug dimensions` prints total/per-view dimension counts, ownership routing, and coordinate list.
65
+
66
+ `debug compiler` prints JSON with compile plans, CadQuery/OCCT lowering diagnostics, faceted fallback eligibility, and runtime/compiler Manifold summaries.
@@ -1,3 +1,8 @@
1
+ ---
2
+ skill-group: dev-conventions
3
+ skill-order: 3
4
+ ---
5
+
1
6
  # Blueprint-First Philosophy
2
7
 
3
8
  ## Code Should Read Like a Mechanical Blueprint
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  skill-group: dev-conventions
3
3
  skill-order: 1
4
- skill-tiers: [dev]
5
4
  ---
6
5
 
7
6
  # Coding Best Practices
@@ -88,18 +87,17 @@ Biome runs as part of `forgecad check suite`. Configuration lives in `biome.json
88
87
  Public API method names must read like natural English. Prefer verbose, intuitive names over short, ambiguous ones. The method name alone should tell you exactly what it does — no options objects or magic strings needed to disambiguate.
89
88
 
90
89
  ```ts
91
- // BAD — ambiguous: rotates around what?
90
+ // BAD — ambiguous: which axis? what angle?
92
91
  shape.rotate(45, 0, 0)
93
92
  // BAD — technical jargon, not a sentence
94
93
  shape.rotateAxisAngle([0,1,0], 45)
95
- // BAD — options bag to disambiguate
96
- shape.rotate(45, 0, 0, { around: 'center' })
97
94
 
98
95
  // GOOD — reads like a sentence
99
- shape.rotate(45, 0, 0) // "rotate 45 degrees" (center is default)
100
- shape.rotateAround(pivot, 45, 0, 0) // "rotate around pivot"
101
- shape.rotateAroundAxis([0,1,0], 45) // "rotate around axis"
102
- shape.rotateAroundAxisAt([0,1,0], 45, pivot) // "rotate around axis at pivot"
96
+ shape.rotateX(45) // "rotate X 45 degrees"
97
+ shape.rotateY(45) // "rotate Y 45 degrees"
98
+ shape.rotateZ(45) // "rotate Z 45 degrees"
99
+ shape.rotate([0, 1, 0], 45) // "rotate around axis"
100
+ shape.rotateZ(45, { pivot: [10, 0, 0] }) // "rotate Z at pivot"
103
101
 
104
102
  shape.scale(2) // "scale by 2" (from center)
105
103
  shape.scaleAround(pivot, 2) // "scale around pivot"
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  skill-group: dev-conventions
3
3
  skill-order: 2
4
- skill-tiers: [dev]
5
4
  ---
6
5
 
7
6
  # ForgeCAD Coding Guidelines
@@ -308,8 +307,7 @@ Before committing UI changes:
308
307
  2. Export from `headless.ts`
309
308
  3. Add to runner sandbox in `src/forge/runner.ts`
310
309
  4. Add TypeScript hints in `src/components/CodeEditor.tsx`
311
- 5. Update `docs/permanent/API/API.md`
312
- 6. Commit: "Add [primitive] 3D primitive"
310
+ 5. Commit: "Add [primitive] 3D primitive"
313
311
 
314
312
  ### Adding a New CLI Command
315
313
  1. Create `cli/your-command.ts`