forgecad 0.9.4 → 0.9.6
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.
- package/dist/assets/{AdminPage-jwoEgwE_.js → AdminPage-Da6hhpJx.js} +1 -1
- package/dist/assets/{BlogPage-Ck7g3ue2.js → BlogPage-Bl_sKeWb.js} +1 -1
- package/dist/assets/{DocsPage-9WaRC14b.js → DocsPage-Blz3Tp4j.js} +1 -6
- package/dist/assets/EditorApp-CuiPbtn5.js +12754 -0
- package/dist/assets/{EmbedViewer-37_PfMwv.js → EmbedViewer-BFG6-Ufm.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-CO8WL0CY.js → LandingPageProofDriven-DB9fQd5P.js} +1 -1
- package/dist/assets/{PricingPage-DADKGuOa.js → PricingPage-BMxYT_F0.js} +1 -1
- package/dist/assets/{SettingsPage-DKKI4W49.js → SettingsPage-VVQNrCAg.js} +1 -1
- package/dist/assets/{app-CwI02pTA.js → app-Dl9ymBWC.js} +355 -36
- package/dist/assets/cli/{render-Kw5hLEcL.js → render-CFtwKCCY.js} +203 -862
- package/dist/assets/{sectionPlaneMath-C8N0w8o3.js → distance-BEC2RjJi.js} +4150 -801
- package/dist/assets/{evalWorker-D6ub3kfS.js → evalWorker-CRvbzTXm.js} +2611 -528
- package/dist/assets/{manifold-CwDdMKyc.js → manifold-B9QSr-qP.js} +1 -1
- package/dist/assets/{manifold-DTvmxSDf.js → manifold-DpBXFS2K.js} +1 -1
- package/dist/assets/{manifold-lru0jwVw.js → manifold-DzZ4VRPs.js} +2 -2
- package/dist/assets/{renderSceneState-tvtNKNRi.js → renderSceneState-BuAXF2jh.js} +1 -1
- package/dist/assets/{reportWorker-DeqktDGt.js → reportWorker-BNWEnRg1.js} +2606 -525
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/usage.md +0 -1
- package/dist/docs-raw/API/core/concepts.md +11 -1
- package/dist/docs-raw/CLI.md +64 -13
- package/dist/docs-raw/beta-operations.md +4 -0
- package/dist/docs-raw/deployment.md +38 -23
- package/dist/docs-raw/generated/assembly.md +8 -3
- package/dist/docs-raw/generated/concepts.md +126 -46
- package/dist/docs-raw/generated/core.md +97 -47
- package/dist/docs-raw/generated/curves.md +113 -595
- package/dist/docs-raw/generated/lib.md +40 -3
- package/dist/docs-raw/generated/output.md +6 -1
- package/dist/docs-raw/generated/sdf.md +50 -4
- package/dist/docs-raw/generated/sketch.md +9 -1
- package/dist/docs-raw/generated/viewport.md +1 -9
- package/dist/docs-raw/guides/inspection-bundles.md +40 -9
- package/dist/docs-raw/runbook.md +3 -3
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -0
- package/dist/docs-raw/skills/forgecad-image-replicator.md +3 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +48 -4
- package/dist/docs-raw/skills/forgecad-render-inspect.md +3 -1
- package/dist/docs-raw/skills/forgecad-visual-spec.md +2 -0
- package/dist/docs-raw/skills/forgecad.md +2 -1
- package/dist/docs-raw/skills/index.md +0 -1
- package/dist/index.html +1 -1
- package/dist/sitemap.xml +6 -6
- package/dist-cli/blender/render.py +43 -8
- package/dist-cli/forgecad.js +5729 -2015
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-skill/CONTEXT.md +372 -667
- package/dist-skill/SKILL-dev.md +2 -1
- package/dist-skill/SKILL.md +2 -1
- package/dist-skill/docs/API/core/concepts.md +11 -1
- package/dist-skill/docs/CLI.md +64 -13
- package/dist-skill/docs/generated/assembly.md +8 -3
- package/dist-skill/docs/generated/core.md +97 -47
- package/dist-skill/docs/generated/curves.md +113 -595
- package/dist-skill/docs/generated/lib.md +40 -3
- package/dist-skill/docs/generated/output.md +6 -1
- package/dist-skill/docs/generated/sdf.md +50 -4
- package/dist-skill/docs/generated/sketch.md +9 -1
- package/dist-skill/docs/generated/viewport.md +1 -9
- package/dist-skill/docs/guides/inspection-bundles.md +40 -9
- package/dist-skill/docs-dev/API/core/concepts.md +11 -1
- package/dist-skill/docs-dev/CLI.md +64 -13
- package/dist-skill/docs-dev/generated/assembly.md +8 -3
- package/dist-skill/docs-dev/generated/core.md +97 -47
- package/dist-skill/docs-dev/generated/curves.md +113 -595
- package/dist-skill/docs-dev/generated/lib.md +40 -3
- package/dist-skill/docs-dev/generated/output.md +6 -1
- package/dist-skill/docs-dev/generated/sdf.md +50 -4
- package/dist-skill/docs-dev/generated/sketch.md +9 -1
- package/dist-skill/docs-dev/generated/viewport.md +1 -9
- package/dist-skill/docs-dev/guides/inspection-bundles.md +40 -9
- package/dist-skill/library/README.md +0 -1
- package/dist-skill/library/forgecad-blockout-model/SKILL.md +1 -0
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +3 -1
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +48 -4
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/dist-skill/library/forgecad-visual-spec/SKILL.md +2 -0
- package/examples/api/drive-wheel-regions.forge.js +43 -0
- package/examples/api/guided-loft-olive-oil-bottle.forge.js +135 -0
- package/examples/api/sdf-circular-array-knurling.forge.js +19 -0
- package/examples/api/sdf-pattern2d-ceramic-ripple-set.forge.js +83 -0
- package/examples/api/sdf-pattern2d-grip-tread.forge.js +72 -0
- package/examples/api/sdf-pattern2d-orbital-jewelry.forge.js +62 -0
- package/examples/api/sdf-surface-basket-weave.forge.js +67 -0
- package/examples/api/sector-gear-body.forge.js +34 -0
- package/package.json +20 -2
- package/dist/assets/EditorApp-Dja2jMmW.js +0 -12509
- package/dist/docs-raw/skills/forgecad-api-dogfood.md +0 -130
- package/dist-skill/library/forgecad-api-dogfood/SKILL.md +0 -125
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# forgecad-api-dogfood
|
|
2
|
-
|
|
3
|
-
Build a ForgeCAD model while actively hunting for API friction — missing helpers, awkward patterns, bad defaults, verbose boilerplate. Use when asked to dogfood, stress-test the API, or build a model with the goal of improving ForgeCAD.
|
|
4
|
-
|
|
5
|
-
| Field | Value |
|
|
6
|
-
| --- | --- |
|
|
7
|
-
| Installed by | `forgecad skill install` |
|
|
8
|
-
| Source | `skills/forgecad-api-dogfood/SKILL.md` |
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## API Dogfood: Build to Find Friction
|
|
13
|
-
|
|
14
|
-
Build a real ForgeCAD model **and** systematically surface every point where the API fights the developer. The model is the vehicle; the real output is a prioritized list of API improvements with concrete proposals.
|
|
15
|
-
|
|
16
|
-
### Mindset
|
|
17
|
-
|
|
18
|
-
You are Steve Jobs reviewing a developer API. Every extra line of code is a failure of the framework. Every time you think "I wish I could just..." — that's a finding. The API should make the obvious thing trivial, the common thing easy, and the hard thing possible.
|
|
19
|
-
|
|
20
|
-
### Workflow
|
|
21
|
-
|
|
22
|
-
#### 1. Pick or receive a model to build
|
|
23
|
-
|
|
24
|
-
Choose something that exercises real geometry: curves, patterns, assemblies, boolean operations, fillets, parametric dimensions. Simple boxes won't surface friction. Good candidates:
|
|
25
|
-
- Mechanical parts (gears, hinges, enclosures)
|
|
26
|
-
- Organic shapes (vases, sculptures, ergonomic grips)
|
|
27
|
-
- Multi-part assemblies (furniture, toys, mechanisms)
|
|
28
|
-
- Patterns and repetition (tiles, lattices, arrays)
|
|
29
|
-
|
|
30
|
-
#### 2. Load the ForgeCAD skill
|
|
31
|
-
|
|
32
|
-
Invoke the `forgecad` skill to get the current API docs. Read the Core API reference thoroughly — you need to know what exists before you can identify what's missing.
|
|
33
|
-
|
|
34
|
-
#### 3. Build bottom-up, journal friction as you go
|
|
35
|
-
|
|
36
|
-
Follow the same decomposition strategy as forgecad-make-a-model (smallest piece first, verify, compose upward). But at every step, maintain a **friction journal** — a running list of issues encountered.
|
|
37
|
-
|
|
38
|
-
For each friction point, capture:
|
|
39
|
-
- **What you were trying to do** (intent)
|
|
40
|
-
- **What you had to write** (actual code)
|
|
41
|
-
- **What you wish you could write** (dream API)
|
|
42
|
-
- **Category** (see below)
|
|
43
|
-
|
|
44
|
-
#### 4. Friction categories
|
|
45
|
-
|
|
46
|
-
| Category | Description | Example |
|
|
47
|
-
|----------|-------------|---------|
|
|
48
|
-
| **Missing primitive** | A common shape/op that doesn't exist | No `torus()`, no `wedge()` |
|
|
49
|
-
| **Verbose boilerplate** | Too many lines for a simple intent | 5 lines to create a circular pattern |
|
|
50
|
-
| **Bad defaults** | Default behavior is rarely what you want | `center` defaulting to `false` when `true` is almost always better |
|
|
51
|
-
| **Missing transform** | A transform that should be chainable but isn't | No `.mirrorX()` shorthand |
|
|
52
|
-
| **Naming friction** | Name doesn't match mental model | Function named differently than what you'd search for |
|
|
53
|
-
| **Composition gap** | Hard to combine things that should compose naturally | Can't easily array along a curve |
|
|
54
|
-
| **Error unhelpfulness** | Error message doesn't help you fix the problem | "Invalid geometry" with no indication of where or why |
|
|
55
|
-
| **Discovery gap** | Feature exists but you couldn't find it | Had to read source to discover a useful helper |
|
|
56
|
-
| **Parameter awkwardness** | Argument order or types feel wrong | Height before radius when you think radius-first |
|
|
57
|
-
|
|
58
|
-
#### 5. Validate the model
|
|
59
|
-
|
|
60
|
-
Run `forgecad run <file>` after each piece. Note any errors — confusing error messages are themselves friction findings.
|
|
61
|
-
|
|
62
|
-
#### 6. Write the friction report
|
|
63
|
-
|
|
64
|
-
After the model is complete, produce a structured report. Place it alongside the model file as `<model-name>.friction.md`.
|
|
65
|
-
|
|
66
|
-
```markdown
|
|
67
|
-
# API Friction Report: <Model Name>
|
|
68
|
-
|
|
69
|
-
## Summary
|
|
70
|
-
- Model: <what was built>
|
|
71
|
-
- Lines of code: <count>
|
|
72
|
-
- Friction points found: <count>
|
|
73
|
-
- Estimated lines with dream API: <count>
|
|
74
|
-
|
|
75
|
-
## Critical (API should not ship without fixing)
|
|
76
|
-
### <Title>
|
|
77
|
-
- **Intent**: What I wanted to do
|
|
78
|
-
- **Actual**: ```js\n<what I had to write>\n```
|
|
79
|
-
- **Dream**: ```js\n<what I wish I could write>\n```
|
|
80
|
-
- **Proposed fix**: Concrete API change
|
|
81
|
-
|
|
82
|
-
## High (Common operation, significant friction)
|
|
83
|
-
...
|
|
84
|
-
|
|
85
|
-
## Medium (Nice to have)
|
|
86
|
-
...
|
|
87
|
-
|
|
88
|
-
## Low (Paper cuts)
|
|
89
|
-
...
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
#### 7. Propose API changes
|
|
93
|
-
|
|
94
|
-
For the top 3 friction points, go beyond the report:
|
|
95
|
-
- Draft the actual API signature
|
|
96
|
-
- Show how it would simplify the model code
|
|
97
|
-
- Check if it conflicts with existing API surface
|
|
98
|
-
- Estimate implementation complexity (trivial / moderate / significant)
|
|
99
|
-
|
|
100
|
-
If a fix is trivial (< 20 lines, no breaking changes), offer to implement it right now.
|
|
101
|
-
|
|
102
|
-
### What makes a great friction finding
|
|
103
|
-
|
|
104
|
-
- **Specific**: "I needed 4 lines to round-robin colors on an array" not "coloring is hard"
|
|
105
|
-
- **Comparative**: Show the actual code vs. the dream code side by side
|
|
106
|
-
- **Prioritized**: Based on how often other users would hit this, not just your annoyance
|
|
107
|
-
- **Actionable**: Includes a concrete proposal, not just a complaint
|
|
108
|
-
|
|
109
|
-
### Anti-patterns to avoid
|
|
110
|
-
|
|
111
|
-
- Don't invent API surface nobody would use just because you can imagine it
|
|
112
|
-
- Don't confuse "I didn't know about this feature" with "this feature is missing" — check the docs first
|
|
113
|
-
- Don't propose breaking changes for minor ergonomic gains
|
|
114
|
-
- Don't let the friction hunt derail the model — build the model first, journal as you go
|
|
115
|
-
- Don't propose thin wrappers that add no real value (`.moveRight(x)` vs `.translate([x,0,0])`)
|
|
116
|
-
|
|
117
|
-
### File Placement
|
|
118
|
-
|
|
119
|
-
Place model files in the ForgeCAD project under:
|
|
120
|
-
```
|
|
121
|
-
docs/temporary/dogfood/YYYY-MM-DD/<model-name>.forge.js
|
|
122
|
-
docs/temporary/dogfood/YYYY-MM-DD/<model-name>.friction.md
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Tips
|
|
126
|
-
|
|
127
|
-
- The most valuable friction is the kind you almost didn't notice — the "oh I always have to do this" patterns
|
|
128
|
-
- Compare with other CAD APIs (OpenSCAD, CadQuery, JSCAD) — what do they make easy that we don't?
|
|
129
|
-
- Pay special attention to the first 5 minutes of building — onboarding friction compounds
|
|
130
|
-
- If you find yourself copy-pasting code between parts, that's a composition gap
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: forgecad-api-dogfood
|
|
3
|
-
description: Build a ForgeCAD model while actively hunting for API friction — missing helpers, awkward patterns, bad defaults, verbose boilerplate. Use when asked to dogfood, stress-test the API, or build a model with the goal of improving ForgeCAD.
|
|
4
|
-
forgecad-public: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# API Dogfood: Build to Find Friction
|
|
8
|
-
|
|
9
|
-
Build a real ForgeCAD model **and** systematically surface every point where the API fights the developer. The model is the vehicle; the real output is a prioritized list of API improvements with concrete proposals.
|
|
10
|
-
|
|
11
|
-
## Mindset
|
|
12
|
-
|
|
13
|
-
You are Steve Jobs reviewing a developer API. Every extra line of code is a failure of the framework. Every time you think "I wish I could just..." — that's a finding. The API should make the obvious thing trivial, the common thing easy, and the hard thing possible.
|
|
14
|
-
|
|
15
|
-
## Workflow
|
|
16
|
-
|
|
17
|
-
### 1. Pick or receive a model to build
|
|
18
|
-
|
|
19
|
-
Choose something that exercises real geometry: curves, patterns, assemblies, boolean operations, fillets, parametric dimensions. Simple boxes won't surface friction. Good candidates:
|
|
20
|
-
- Mechanical parts (gears, hinges, enclosures)
|
|
21
|
-
- Organic shapes (vases, sculptures, ergonomic grips)
|
|
22
|
-
- Multi-part assemblies (furniture, toys, mechanisms)
|
|
23
|
-
- Patterns and repetition (tiles, lattices, arrays)
|
|
24
|
-
|
|
25
|
-
### 2. Load the ForgeCAD skill
|
|
26
|
-
|
|
27
|
-
Invoke the `forgecad` skill to get the current API docs. Read the Core API reference thoroughly — you need to know what exists before you can identify what's missing.
|
|
28
|
-
|
|
29
|
-
### 3. Build bottom-up, journal friction as you go
|
|
30
|
-
|
|
31
|
-
Follow the same decomposition strategy as forgecad-make-a-model (smallest piece first, verify, compose upward). But at every step, maintain a **friction journal** — a running list of issues encountered.
|
|
32
|
-
|
|
33
|
-
For each friction point, capture:
|
|
34
|
-
- **What you were trying to do** (intent)
|
|
35
|
-
- **What you had to write** (actual code)
|
|
36
|
-
- **What you wish you could write** (dream API)
|
|
37
|
-
- **Category** (see below)
|
|
38
|
-
|
|
39
|
-
### 4. Friction categories
|
|
40
|
-
|
|
41
|
-
| Category | Description | Example |
|
|
42
|
-
|----------|-------------|---------|
|
|
43
|
-
| **Missing primitive** | A common shape/op that doesn't exist | No `torus()`, no `wedge()` |
|
|
44
|
-
| **Verbose boilerplate** | Too many lines for a simple intent | 5 lines to create a circular pattern |
|
|
45
|
-
| **Bad defaults** | Default behavior is rarely what you want | `center` defaulting to `false` when `true` is almost always better |
|
|
46
|
-
| **Missing transform** | A transform that should be chainable but isn't | No `.mirrorX()` shorthand |
|
|
47
|
-
| **Naming friction** | Name doesn't match mental model | Function named differently than what you'd search for |
|
|
48
|
-
| **Composition gap** | Hard to combine things that should compose naturally | Can't easily array along a curve |
|
|
49
|
-
| **Error unhelpfulness** | Error message doesn't help you fix the problem | "Invalid geometry" with no indication of where or why |
|
|
50
|
-
| **Discovery gap** | Feature exists but you couldn't find it | Had to read source to discover a useful helper |
|
|
51
|
-
| **Parameter awkwardness** | Argument order or types feel wrong | Height before radius when you think radius-first |
|
|
52
|
-
|
|
53
|
-
### 5. Validate the model
|
|
54
|
-
|
|
55
|
-
Run `forgecad run <file>` after each piece. Note any errors — confusing error messages are themselves friction findings.
|
|
56
|
-
|
|
57
|
-
### 6. Write the friction report
|
|
58
|
-
|
|
59
|
-
After the model is complete, produce a structured report. Place it alongside the model file as `<model-name>.friction.md`.
|
|
60
|
-
|
|
61
|
-
```markdown
|
|
62
|
-
# API Friction Report: <Model Name>
|
|
63
|
-
|
|
64
|
-
## Summary
|
|
65
|
-
- Model: <what was built>
|
|
66
|
-
- Lines of code: <count>
|
|
67
|
-
- Friction points found: <count>
|
|
68
|
-
- Estimated lines with dream API: <count>
|
|
69
|
-
|
|
70
|
-
## Critical (API should not ship without fixing)
|
|
71
|
-
### <Title>
|
|
72
|
-
- **Intent**: What I wanted to do
|
|
73
|
-
- **Actual**: ```js\n<what I had to write>\n```
|
|
74
|
-
- **Dream**: ```js\n<what I wish I could write>\n```
|
|
75
|
-
- **Proposed fix**: Concrete API change
|
|
76
|
-
|
|
77
|
-
## High (Common operation, significant friction)
|
|
78
|
-
...
|
|
79
|
-
|
|
80
|
-
## Medium (Nice to have)
|
|
81
|
-
...
|
|
82
|
-
|
|
83
|
-
## Low (Paper cuts)
|
|
84
|
-
...
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 7. Propose API changes
|
|
88
|
-
|
|
89
|
-
For the top 3 friction points, go beyond the report:
|
|
90
|
-
- Draft the actual API signature
|
|
91
|
-
- Show how it would simplify the model code
|
|
92
|
-
- Check if it conflicts with existing API surface
|
|
93
|
-
- Estimate implementation complexity (trivial / moderate / significant)
|
|
94
|
-
|
|
95
|
-
If a fix is trivial (< 20 lines, no breaking changes), offer to implement it right now.
|
|
96
|
-
|
|
97
|
-
## What makes a great friction finding
|
|
98
|
-
|
|
99
|
-
- **Specific**: "I needed 4 lines to round-robin colors on an array" not "coloring is hard"
|
|
100
|
-
- **Comparative**: Show the actual code vs. the dream code side by side
|
|
101
|
-
- **Prioritized**: Based on how often other users would hit this, not just your annoyance
|
|
102
|
-
- **Actionable**: Includes a concrete proposal, not just a complaint
|
|
103
|
-
|
|
104
|
-
## Anti-patterns to avoid
|
|
105
|
-
|
|
106
|
-
- Don't invent API surface nobody would use just because you can imagine it
|
|
107
|
-
- Don't confuse "I didn't know about this feature" with "this feature is missing" — check the docs first
|
|
108
|
-
- Don't propose breaking changes for minor ergonomic gains
|
|
109
|
-
- Don't let the friction hunt derail the model — build the model first, journal as you go
|
|
110
|
-
- Don't propose thin wrappers that add no real value (`.moveRight(x)` vs `.translate([x,0,0])`)
|
|
111
|
-
|
|
112
|
-
## File Placement
|
|
113
|
-
|
|
114
|
-
Place model files in the ForgeCAD project under:
|
|
115
|
-
```
|
|
116
|
-
docs/temporary/dogfood/YYYY-MM-DD/<model-name>.forge.js
|
|
117
|
-
docs/temporary/dogfood/YYYY-MM-DD/<model-name>.friction.md
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Tips
|
|
121
|
-
|
|
122
|
-
- The most valuable friction is the kind you almost didn't notice — the "oh I always have to do this" patterns
|
|
123
|
-
- Compare with other CAD APIs (OpenSCAD, CadQuery, JSCAD) — what do they make easy that we don't?
|
|
124
|
-
- Pay special attention to the first 5 minutes of building — onboarding friction compounds
|
|
125
|
-
- If you find yourself copy-pasting code between parts, that's a composition gap
|