forgecad 0.9.14 → 0.9.16

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 (239) hide show
  1. package/LICENSE +6 -4
  2. package/README.md +8 -4
  3. package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CXvls4-J.js} +2 -2
  4. package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-B27zk8xL.js} +4 -15
  5. package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-CMAVvgQL.js} +2 -2
  6. package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-knf4I4h7.js} +9 -3
  7. package/dist/assets/EditorApp-BHMQlJ-D.js +14686 -0
  8. package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-BpjZgzk0.css} +846 -0
  9. package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-D7ZGlFjx.js} +3 -3
  10. package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-CnevhTE8.js} +36 -38
  11. package/dist/assets/LegalPage-BPTUmqeg.js +39 -0
  12. package/dist/assets/LegalPage-BRlScr9A.css +91 -0
  13. package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-B0D4goG_.js} +19 -19
  14. package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
  15. package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-CFF-UgjI.js} +2 -2
  16. package/dist/assets/app-CE3sYcV7.css +3890 -0
  17. package/dist/assets/{app-bEww1ic4.js → app-T0pDcSX4.js} +3382 -1069
  18. package/dist/assets/cli/{render-Cho2uKG_.js → render-C5pcIISc.js} +477 -29
  19. package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-Ba2Hm58b.js} +928 -243
  20. package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-vkx310U2.js} +8883 -6040
  21. package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
  22. package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
  23. package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-BuTJDVX6.js} +1179 -273
  24. package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
  25. package/dist/assets/{targets-D6PWsv6X.js → jointPose-B_Cgedn9.js} +71 -3
  26. package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
  27. package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
  28. package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
  29. package/dist/assets/{manifold-rmfAcdwF.js → manifold-BWgsjmAM.js} +1 -1
  30. package/dist/assets/{manifold-uRzgk5O8.js → manifold-D6IFSkhH.js} +2 -2
  31. package/dist/assets/{manifold-CG9Fokx-.js → manifold-rZexZI0G.js} +1 -1
  32. package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-0AGij1Ru.js} +8659 -12771
  33. package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-J5cuzxT1.js} +8050 -6203
  34. package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-Vl4Wxa1y.js} +50 -6
  35. package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
  36. package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
  37. package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
  38. package/dist/cli/render.html +1 -1
  39. package/dist/docs/index.html +2 -2
  40. package/dist/docs-raw/AI/ai-native-cad.md +50 -0
  41. package/dist/docs-raw/AI/usage.md +5 -12
  42. package/dist/docs-raw/CLI.md +34 -10
  43. package/dist/docs-raw/component-model.md +27 -11
  44. package/dist/docs-raw/generated/assembly.md +374 -187
  45. package/dist/docs-raw/generated/concepts.md +245 -237
  46. package/dist/docs-raw/generated/core.md +283 -6
  47. package/dist/docs-raw/generated/curves.md +274 -361
  48. package/dist/docs-raw/generated/lib.md +9 -19
  49. package/dist/docs-raw/generated/output.md +29 -4
  50. package/dist/docs-raw/generated/runtime-names.md +49 -0
  51. package/dist/docs-raw/generated/sdf.md +31 -0
  52. package/dist/docs-raw/generated/sheet-metal.md +9 -0
  53. package/dist/docs-raw/generated/sketch.md +44 -1
  54. package/dist/docs-raw/generated/viewport.md +11 -3
  55. package/dist/docs-raw/guides/coordinate-system.md +20 -16
  56. package/dist/docs-raw/guides/geometry-conventions.md +2 -2
  57. package/dist/docs-raw/guides/inspection-bundles.md +2 -1
  58. package/dist/docs-raw/guides/joint-design.md +24 -0
  59. package/dist/docs-raw/guides/positioning.md +13 -3
  60. package/dist/docs-raw/legal/privacy.md +63 -0
  61. package/dist/docs-raw/legal/software-license.md +55 -0
  62. package/dist/docs-raw/legal/terms.md +87 -0
  63. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
  64. package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
  65. package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
  66. package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
  67. package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
  68. package/dist/docs-raw/skills/forgecad-lld.md +1 -1
  69. package/dist/docs-raw/skills/forgecad-make-a-model.md +40 -39
  70. package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
  71. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
  72. package/dist/docs-raw/skills/forgecad-project.md +3 -1
  73. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
  74. package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
  75. package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
  76. package/dist/docs-raw/skills/forgecad.md +4 -3
  77. package/dist/docs-raw/welcome.md +2 -0
  78. package/dist/index.html +40 -12
  79. package/dist/llms.txt +8 -0
  80. package/dist/site.webmanifest +1 -1
  81. package/dist/sitemap.xml +49 -13
  82. package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SYQ2PWOB.js} +1 -2
  83. package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-HIAGV62W.js} +1 -2
  84. package/dist-cli/{chunk-EXWGNL6K.js → chunk-SPZE3DUY.js} +20659 -17930
  85. package/dist-cli/forgecad.js +3568 -1250
  86. package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
  87. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  88. package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
  89. package/dist-cli/solver_bg.wasm +0 -0
  90. package/dist-skill/CONTEXT.md +1192 -725
  91. package/dist-skill/SKILL.md +3 -2
  92. package/dist-skill/docs/API/core/concepts.md +64 -1
  93. package/dist-skill/docs/CLI.md +34 -10
  94. package/dist-skill/docs/generated/assembly.md +339 -213
  95. package/dist-skill/docs/generated/core.md +283 -6
  96. package/dist-skill/docs/generated/curves.md +272 -362
  97. package/dist-skill/docs/generated/lib.md +9 -19
  98. package/dist-skill/docs/generated/output.md +29 -4
  99. package/dist-skill/docs/generated/runtime-names.md +40 -0
  100. package/dist-skill/docs/generated/sdf.md +31 -0
  101. package/dist-skill/docs/generated/sheet-metal.md +9 -0
  102. package/dist-skill/docs/generated/sketch.md +44 -2
  103. package/dist-skill/docs/generated/viewport.md +2 -87
  104. package/dist-skill/docs/guides/coordinate-system.md +20 -16
  105. package/dist-skill/docs/guides/geometry-conventions.md +2 -2
  106. package/dist-skill/docs/guides/inspection-bundles.md +2 -1
  107. package/dist-skill/docs/guides/joint-design.md +24 -0
  108. package/dist-skill/docs/guides/positioning.md +13 -3
  109. package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
  110. package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
  111. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
  112. package/dist-skill/library/forgecad-make-a-model/SKILL.md +39 -38
  113. package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
  114. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  115. package/dist-skill/library/forgecad-project/SKILL.md +2 -0
  116. package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
  117. package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
  118. package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
  119. package/examples/api/assembly-kinematics-limb.forge.js +116 -0
  120. package/examples/api/connector-frame-rig-chain.forge.js +102 -0
  121. package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
  122. package/examples/api/exact-surface-studio.forge.js +6 -8
  123. package/examples/api/helix-basics.forge.js +8 -8
  124. package/examples/api/lean-foundations/README.md +12 -0
  125. package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
  126. package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
  127. package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
  128. package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
  129. package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
  130. package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
  131. package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
  132. package/examples/api/route3d-elbow.forge.js +71 -0
  133. package/examples/api/transition-curves.forge.js +44 -15
  134. package/examples/api/variable-sweep-test.forge.js +3 -1
  135. package/examples/api/y-blend-corner-showcase.forge.js +0 -2
  136. package/examples/generative/coral-vase.forge.js +1 -1
  137. package/examples/nurbs-tube.forge.js +1 -1
  138. package/package.json +17 -13
  139. package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
  140. package/dist/assets/app-CsHnaBWt.css +0 -1789
  141. package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
  142. package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
  143. package/dist/docs-raw/API/README.md +0 -16
  144. package/dist/docs-raw/API/core/concepts.md +0 -118
  145. package/dist/docs-raw/INDEX.md +0 -138
  146. package/dist/docs-raw/RELEASING.md +0 -87
  147. package/dist/docs-raw/agent-native-api.md +0 -27
  148. package/dist/docs-raw/beta-deployment.md +0 -304
  149. package/dist/docs-raw/beta-operations.md +0 -325
  150. package/dist/docs-raw/blueprint-first.md +0 -145
  151. package/dist/docs-raw/cli-monetization.md +0 -112
  152. package/dist/docs-raw/coding-best-practices.md +0 -120
  153. package/dist/docs-raw/coding.md +0 -340
  154. package/dist/docs-raw/deployment.md +0 -374
  155. package/dist/docs-raw/guides/skill-maintenance.md +0 -161
  156. package/dist/docs-raw/guides/surface-members.md +0 -82
  157. package/dist/docs-raw/harbor-cli.md +0 -854
  158. package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
  159. package/dist/docs-raw/internals/compiler.md +0 -307
  160. package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
  161. package/dist/docs-raw/internals/constraint-solver.md +0 -176
  162. package/dist/docs-raw/internals/shape-from-slices.md +0 -152
  163. package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
  164. package/dist/docs-raw/platform/admin.md +0 -45
  165. package/dist/docs-raw/platform/architecture.md +0 -82
  166. package/dist/docs-raw/platform/auth.md +0 -139
  167. package/dist/docs-raw/platform/email.md +0 -67
  168. package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
  169. package/dist/docs-raw/platform/observability.md +0 -197
  170. package/dist/docs-raw/platform/projects.md +0 -111
  171. package/dist/docs-raw/platform/sharing.md +0 -90
  172. package/dist/docs-raw/product/README.md +0 -39
  173. package/dist/docs-raw/product/api-as-product-language.md +0 -13
  174. package/dist/docs-raw/product/business-model.md +0 -15
  175. package/dist/docs-raw/product/competitive-positioning.md +0 -17
  176. package/dist/docs-raw/product/creative-manufacturing.md +0 -15
  177. package/dist/docs-raw/product/founder-story.md +0 -11
  178. package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
  179. package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
  180. package/dist/docs-raw/product/product-loop.md +0 -17
  181. package/dist/docs-raw/product/strategic-decisions.md +0 -22
  182. package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
  183. package/dist/docs-raw/product/user-segments.md +0 -15
  184. package/dist/docs-raw/product/vision.md +0 -26
  185. package/dist/docs-raw/rl-environments.md +0 -350
  186. package/dist/docs-raw/runbook.md +0 -611
  187. package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
  188. package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
  189. package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
  190. package/dist-cli/forgecad.js.map +0 -1
  191. package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
  192. package/dist-cli/solver-46FFSK2U.js.map +0 -1
  193. package/dist-skill/SKILL-dev.md +0 -145
  194. package/dist-skill/docs-dev/API/core/concepts.md +0 -118
  195. package/dist-skill/docs-dev/CLI.md +0 -677
  196. package/dist-skill/docs-dev/agent-native-api.md +0 -27
  197. package/dist-skill/docs-dev/blueprint-first.md +0 -145
  198. package/dist-skill/docs-dev/coding-best-practices.md +0 -120
  199. package/dist-skill/docs-dev/coding.md +0 -340
  200. package/dist-skill/docs-dev/component-model.md +0 -164
  201. package/dist-skill/docs-dev/generated/assembly.md +0 -794
  202. package/dist-skill/docs-dev/generated/core.md +0 -2117
  203. package/dist-skill/docs-dev/generated/curves.md +0 -2583
  204. package/dist-skill/docs-dev/generated/lib.md +0 -169
  205. package/dist-skill/docs-dev/generated/output.md +0 -247
  206. package/dist-skill/docs-dev/generated/sdf.md +0 -446
  207. package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
  208. package/dist-skill/docs-dev/generated/sketch.md +0 -1811
  209. package/dist-skill/docs-dev/generated/viewport.md +0 -585
  210. package/dist-skill/docs-dev/generated/wood.md +0 -108
  211. package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
  212. package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
  213. package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
  214. package/dist-skill/docs-dev/guides/joint-design.md +0 -78
  215. package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
  216. package/dist-skill/docs-dev/guides/positioning.md +0 -161
  217. package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
  218. package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
  219. package/dist-skill/docs-dev/internals/compiler.md +0 -307
  220. package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
  221. package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
  222. package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
  223. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
  224. package/examples/api/bolted-service-cover.forge.js +0 -17
  225. package/examples/api/cable-gland-anchor.forge.js +0 -14
  226. package/examples/api/captured-cartridge-guide.forge.js +0 -14
  227. package/examples/api/captured-linear-slide.forge.js +0 -13
  228. package/examples/api/clevis-pin-joint.forge.js +0 -13
  229. package/examples/api/datum-enclosure.forge.js +0 -16
  230. package/examples/api/hose-barb-port.forge.js +0 -14
  231. package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
  232. package/examples/api/living-hinge-cover.forge.js +0 -14
  233. package/examples/api/pcb-terminal-block.forge.js +0 -22
  234. package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
  235. package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
  236. package/examples/api/routed-tube-clip.forge.js +0 -15
  237. package/examples/api/seated-bearing-stack.forge.js +0 -30
  238. package/examples/api/snap-latch-cover.forge.js +0 -14
  239. package/examples/api/thumb-screw-clamp.forge.js +0 -15
@@ -1,161 +0,0 @@
1
- # User Outreach Email Templates
2
-
3
- This is a tactical product doc. For the product-first theme map, start with [Product Docs](README.md).
4
-
5
- Use these templates for personal outreach to ForgeCAD users. They are intentionally written in a founder/operator voice: warm, specific, curious, and useful. The goal is to learn from real projects, make users feel supported, and open the door to deeper onboarding when it makes sense.
6
-
7
- ## Shared Guidance
8
-
9
- - Personalize the first sentence with one real signal when possible: plan tier, recent activity, project name, export type, team domain, or signup source.
10
- - Keep the ask small. A 20-minute chat is easier to accept than a vague "feedback call."
11
- - Do not make the user prove they are important. The default posture is: if they are using ForgeCAD, their workflow matters.
12
- - For Pro users, make support and team onboarding explicit. They already crossed the trust line.
13
- - For active free users, lead with curiosity. Mention Pro only as a practical fit for commercial work, not as the reason for the email.
14
-
15
- ## Pro User Templates
16
-
17
- ### 1. Welcome And Use Case Discovery
18
-
19
- **Subject:** Welcome to ForgeCAD Pro
20
-
21
- Hi {{first_name}},
22
-
23
- I saw that you upgraded to ForgeCAD Pro. Thank you for trusting us with your work.
24
-
25
- I wanted to reach out personally because we are still early enough that real professional use cases can directly shape the product. If you are using ForgeCAD for client work, a product, internal tooling, robotics, 3D printing, fixtures, or anything else serious, I would love to understand what you are building and where the tool should become sharper for you.
26
-
27
- Would you be open to a 20-minute call this week or next? I can help with onboarding, answer workflow questions, and learn what would make ForgeCAD more useful for your day-to-day work.
28
-
29
- Best,
30
-
31
- {{sender_name}}
32
-
33
- ### 2. Team Onboarding Exploration
34
-
35
- **Subject:** Helping your team get further with ForgeCAD
36
-
37
- Hi {{first_name}},
38
-
39
- Thanks again for using ForgeCAD Pro. I wanted to check whether you are using it mostly on your own, or whether there are other people on your team who might need to work with the same models, project files, exports, or review flow.
40
-
41
- If there is a team workflow behind your ForgeCAD use, I would be happy to help you think through the setup: local project structure, CLI usage, shared browser projects, AI-assisted modeling, exports, and any support expectations around commercial work.
42
-
43
- Would it be useful to set up a short onboarding call? Even if you are not ready to add more people yet, it would help us understand what serious team adoption should feel like.
44
-
45
- Best,
46
-
47
- {{sender_name}}
48
-
49
- ### 3. Pro Check-In After Usage
50
-
51
- **Subject:** How is ForgeCAD Pro fitting into your work?
52
-
53
- Hi {{first_name}},
54
-
55
- I wanted to check in now that you have had some time with ForgeCAD Pro.
56
-
57
- The main thing I would love to understand is: what job are you trying to get done with ForgeCAD, and where does the product currently help the most or slow you down?
58
-
59
- If you have a real project in progress, I am happy to look at the workflow with you. A short call would help us support you better, and it would also help us decide which Pro and team features should come next.
60
-
61
- Best,
62
-
63
- {{sender_name}}
64
-
65
- ## Active User Templates
66
-
67
- ### 1. Curious Product Discovery
68
-
69
- **Subject:** Curious what you are building with ForgeCAD
70
-
71
- Hi {{first_name}},
72
-
73
- I noticed you have been active in ForgeCAD recently, and I wanted to reach out personally.
74
-
75
- We are trying to understand what people are actually building: quick 3D-printable parts, mechanical assemblies, robotics ideas, fixtures, generated geometry, design automation, or something completely different. The product gets much better when we can see the real use cases behind the activity.
76
-
77
- Would you be open to a 20-minute chat? I would mostly like to learn what you are working on, what feels promising, and what currently gets in your way.
78
-
79
- Best,
80
-
81
- {{sender_name}}
82
-
83
- ### 2. Active User With Commercial Hint
84
-
85
- **Subject:** Learning from your ForgeCAD workflow
86
-
87
- Hi {{first_name}},
88
-
89
- I saw you have been using ForgeCAD and wanted to ask what kind of work you are exploring with it.
90
-
91
- If this is personal, learning, open-source, or experimental work, I would simply love to understand the project and what would make ForgeCAD more enjoyable or capable for you. If you are using it commercially, ForgeCAD Pro may be the right fit, and I am happy to explain that too, but that is not the main reason I am writing.
92
-
93
- The main reason is that active users teach us where the product is strong, where it is confusing, and what workflows deserve more attention.
94
-
95
- Would you be open to a quick call?
96
-
97
- Best,
98
-
99
- {{sender_name}}
100
-
101
- ### 3. High-Activity User Check-In
102
-
103
- **Subject:** Quick ForgeCAD question
104
-
105
- Hi {{first_name}},
106
-
107
- I noticed you have spent real time with ForgeCAD, so I wanted to ask one direct question:
108
-
109
- What are you trying to make with it?
110
-
111
- We are early, and this is the stage where understanding real projects matters more than polished surveys. If ForgeCAD is helping, I would like to know why. If something is awkward, missing, or confusing, I would like to know that even more.
112
-
113
- Would you be open to a short chat this week or next?
114
-
115
- Best,
116
-
117
- {{sender_name}}
118
-
119
- ## Follow-Up Templates
120
-
121
- ### 1. Gentle Follow-Up
122
-
123
- **Subject:** Re: {{previous_subject}}
124
-
125
- Hi {{first_name}},
126
-
127
- Just wanted to follow up once in case this got buried.
128
-
129
- I would still be very interested to hear what you are using ForgeCAD for. Even a two-sentence reply would be useful if a call is too much right now.
130
-
131
- Best,
132
-
133
- {{sender_name}}
134
-
135
- ### 2. Concrete Reply Prompt
136
-
137
- **Subject:** Re: {{previous_subject}}
138
-
139
- Hi {{first_name}},
140
-
141
- One quick follow-up. If a call is not convenient, could you reply with whichever of these is closest?
142
-
143
- 1. I am using ForgeCAD for personal projects or learning.
144
- 2. I am evaluating it for commercial work.
145
- 3. I am trying to use it with a team.
146
- 4. I am stuck or missing something important.
147
-
148
- That alone would help us understand how to support you better.
149
-
150
- Best,
151
-
152
- {{sender_name}}
153
-
154
- ## Placeholder Checklist
155
-
156
- | Placeholder | Meaning |
157
- |---|---|
158
- | `{{first_name}}` | User first name when known, otherwise use `there` |
159
- | `{{sender_name}}` | Founder/operator name |
160
- | `{{previous_subject}}` | Subject line from the first outreach email |
161
- | `{{project_signal}}` | Optional project, command, export, or activity signal for manual personalization |
@@ -1,15 +0,0 @@
1
- # User Segments
2
-
3
- ForgeCAD has several possible audiences. They should not be mixed too early.
4
-
5
- The first wedge is the AI-first maker. This user owns or can access a 3D printer, laser cutter, CNC service, or online manufacturing service. They may know a little JavaScript, but they do not want to become a professional CAD operator. They want an agent to help make useful objects and they want enough control to trust the result.
6
-
7
- The adjacent daily user is the creative manufacturing user. They may not care about code at all. They want a custom adapter, shelf part, enclosure, stand, organizer, jig, toy, lamp, or furniture fitting. For this person, ForgeCAD should feel like a practical object generator with editable parameters, not a programming environment.
8
-
9
- The technical evaluator is a software engineer, automation engineer, robotics builder, or mechanical designer exploring whether code-first CAD fits a workflow. This user cares about repeatability, versioning, export quality, CLI checks, and whether the product can fit into a larger system.
10
-
11
- The partner user is a company that wants physical customization inside an existing product surface. A 3D printer app, furniture site, marketplace, education product, robotics workflow, or custom-product storefront does not necessarily want a whole CAD system. It wants a safe parametric generator that can be embedded, constrained, validated, and exported.
12
-
13
- The enterprise AI-CAD user is later and more specialized. They may want benchmarks, data, evaluation loops, backend routing, training workflows, or integrations with existing CAD systems. This segment can produce revenue and strategic pull, but it should not dilute the first product message.
14
-
15
- The product should be honest about which segment each feature serves. A feature can serve multiple segments, but the first reason to build it should be clear.
@@ -1,26 +0,0 @@
1
- # Vision
2
-
3
- ForgeCAD is not mainly a CAD library. It is an AI-native interface layer for physical design.
4
-
5
- Traditional CAD assumes the human directly manipulates a complex model through a GUI. Classic CAD-as-code assumes the human writes the model. ForgeCAD assumes the human expresses a goal, the AI authors editable semantic code, and the system validates whether the result is real enough to manufacture.
6
-
7
- That distinction matters because AI needs a surface it can understand, edit, test, and repair. Binary model state is hard for an agent to reason about. A purely visual prompt-to-mesh result can look impressive but fail when the user needs a parameter changed, a hole moved, or a manufacturing export produced. ForgeCAD's product bet is that the best AI CAD interface is a readable representation of design intent, plus a validation loop.
8
-
9
- The backend should be chosen after the intent is clear. Fast browser preview, exact STEP export, STL/3MF printing, sheet output, robot packages, furniture cut lists, and future CNC routes are different output needs. The product should own the semantic intent layer and the workflow that turns intent into evidence.
10
-
11
- The long-term product is therefore not "another geometry kernel." Geometry kernels are suppliers. ForgeCAD's durable product position is the language, workflow, validation evidence, project system, and partner surface through which AI creates editable physical objects.
12
-
13
- The simple framing is:
14
-
15
- ```text
16
- traditional CAD:
17
- human intent -> GUI operations -> proprietary model state -> export
18
-
19
- classic CAD-as-code:
20
- human intent -> code -> geometry kernel -> export
21
-
22
- ForgeCAD:
23
- human goal + feedback -> AI-authored semantic code -> validation loop -> chosen backend/export
24
- ```
25
-
26
- The product should be judged by how well it makes that third loop reliable for real users.
@@ -1,350 +0,0 @@
1
- # ForgeCAD RL Environments
2
-
3
- This is the permanent operating guide for ForgeCAD reinforcement-learning and
4
- AI-lab reconstruction environments.
5
-
6
- ## Product Goal
7
-
8
- ForgeCAD RL environments should let an external lab train or evaluate an agent
9
- that turns reference physical geometry into readable ForgeCAD source code.
10
-
11
- Harbor is the executable contract. ForgeCAD keeps the product code, verifier
12
- integration, benchmark import tools, and public leaderboard page. The Harbor
13
- task corpus lives outside this repository.
14
-
15
- ## Repository Split
16
-
17
- Use two neighboring checkouts:
18
-
19
- ```text
20
- ~/Projects/CAD/
21
- ForgeCAD/
22
- ai-labs/reconstruction-benchmark/
23
- src/pages/generatedBenchmarkData.ts
24
- ForgeCAD-Harbor-Datasets/
25
- reconstruction/
26
- dataset.toml
27
- agents/
28
- tasks/
29
- ```
30
-
31
- The ForgeCAD repo discovers the external dataset from:
32
-
33
- ```bash
34
- FORGECAD_RECONSTRUCTION_DATASET_ROOT="$HOME/Projects/CAD/ForgeCAD-Harbor-Datasets/reconstruction"
35
- ```
36
-
37
- If the variable is not set, the local tools default to:
38
-
39
- ```text
40
- ../ForgeCAD-Harbor-Datasets/reconstruction
41
- ```
42
-
43
- The external collaboration repository for SpaceXAI-facing handoff material is:
44
-
45
- ```text
46
- https://github.com/KoStard/SpaceXAI_ForgeCAD
47
- ```
48
-
49
- Treat that repository as coordination and distribution context. The executable
50
- task contract is the Harbor dataset.
51
-
52
- ## Harbor Task Contract
53
-
54
- Each external task folder includes:
55
-
56
- ```text
57
- README.md
58
- instruction.md
59
- task.toml
60
- environment/
61
- Dockerfile
62
- forgecad-wrapper.sh
63
- reference/<task-reference>.3mf
64
- starter/main.forge.js
65
- tests/
66
- test.sh
67
- checks.py
68
- enrich-reward.mjs
69
- forgecad-reconstruction-check.mjs
70
- score-calibration.mjs
71
- task.json
72
- ```
73
-
74
- The agent sees the reference asset, starter source, instructions, and the
75
- workspace-local `forgecad` wrapper. The verifier files under `tests/` are hidden
76
- until the agent exits.
77
-
78
- The final answer is always:
79
-
80
- ```text
81
- /app/submission/main.forge.js
82
- ```
83
-
84
- The answer must be editable parametric ForgeCAD source. It must not import,
85
- read, embed, copy, or encode the reference asset.
86
-
87
- The `forgecad` wrapper exposes run/render/inspect/export checks but blocks
88
- direct `score` and `compare` use during the episode. The hidden verifier uses
89
- the internal comparison path after the agent exits.
90
-
91
- Verifier execution goes through RewardKit:
92
-
93
- ```bash
94
- uvx --from 'harbor-rewardkit==0.1.*' rewardkit /tests
95
- ```
96
-
97
- `checks.py` exposes one programmatic criterion,
98
- `forgecad_reconstruction_score`, backed by the ForgeCAD guard/render/compare
99
- script. RewardKit writes `/logs/verifier/reward.json` and
100
- `/logs/verifier/reward-details.json`; `enrich-reward.mjs` preserves the
101
- RewardKit output while ensuring `reward.json` has numeric Harbor fields:
102
- `reward`, `score`, `rawCompareScore`, `guard`, and `valid`.
103
-
104
- ## Command Surface
105
-
106
- Run agents through Harbor directly:
107
-
108
- ```bash
109
- uvx --from harbor harbor run \
110
- -p "$FORGECAD_RECONSTRUCTION_DATASET_ROOT/tasks" \
111
- --include-task-name ball-bearing \
112
- --agent codex \
113
- --model gpt-5.5 \
114
- --artifact /app/submission/main.forge.js \
115
- --jobs-dir "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/codex" \
116
- --n-concurrent 1
117
- ```
118
-
119
- Use the ForgeCAD repo only for reporting:
120
-
121
- ```bash
122
- npm run benchmark:reconstruction:list
123
- npm run benchmark:reconstruction:import-harbor -- <job-or-trial-dir> --budget standard
124
- npm run benchmark:reconstruction:leaderboard
125
- npm run benchmark:reconstruction:report
126
- npm run build:benchmark-data
127
- ```
128
-
129
- There is no ForgeCAD-owned task sync command. If Harbor can run the external
130
- dataset path, the benchmark layer can import the resulting jobs.
131
-
132
- ## Direct Harbor Runs
133
-
134
- ### One Task, One Agent
135
-
136
- Use `--include-task-name` to select one Harbor task. Use `--agent` for a
137
- built-in Harbor agent:
138
-
139
- ```bash
140
- CODEX_AUTH_JSON_PATH="$HOME/.codex/auth.json" \
141
- uvx --from harbor harbor run \
142
- -p "$FORGECAD_RECONSTRUCTION_DATASET_ROOT/tasks" \
143
- --include-task-name ball-bearing \
144
- --agent codex \
145
- --model gpt-5.5 \
146
- --artifact /app/submission/main.forge.js \
147
- --jobs-dir "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/codex" \
148
- --n-concurrent 1
149
- ```
150
-
151
- Use `--agent-import-path` for a custom adapter such as the bundled Grok adapter:
152
-
153
- ```bash
154
- PYTHONPATH="$FORGECAD_RECONSTRUCTION_DATASET_ROOT/agents" \
155
- GROK_AUTH_JSON="$HOME/.grok/auth.json" \
156
- GROK_CONFIG_TOML="$HOME/.grok/config.toml" \
157
- uvx --from harbor harbor run \
158
- -p "$FORGECAD_RECONSTRUCTION_DATASET_ROOT/tasks" \
159
- --include-task-name ball-bearing \
160
- --agent-import-path grok_harbor_agent:GrokCliAgent \
161
- --model grok-build \
162
- --artifact /app/submission/main.forge.js \
163
- --jobs-dir "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/grok" \
164
- --n-concurrent 1
165
- ```
166
-
167
- ### Full Suite
168
-
169
- Codex:
170
-
171
- ```bash
172
- CODEX_AUTH_JSON_PATH="$HOME/.codex/auth.json" \
173
- uvx --from harbor harbor run \
174
- -p "$FORGECAD_RECONSTRUCTION_DATASET_ROOT/tasks" \
175
- --agent codex \
176
- --model gpt-5.5 \
177
- --jobs-dir "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/codex" \
178
- --artifact /app/submission/main.forge.js \
179
- --n-concurrent 3
180
- ```
181
-
182
- Grok:
183
-
184
- ```bash
185
- PYTHONPATH="$FORGECAD_RECONSTRUCTION_DATASET_ROOT/agents" \
186
- GROK_AUTH_JSON="$HOME/.grok/auth.json" \
187
- GROK_CONFIG_TOML="$HOME/.grok/config.toml" \
188
- uvx --from harbor harbor run \
189
- -p "$FORGECAD_RECONSTRUCTION_DATASET_ROOT/tasks" \
190
- --agent-import-path grok_harbor_agent:GrokCliAgent \
191
- --model grok-build \
192
- --jobs-dir "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/grok" \
193
- --artifact /app/submission/main.forge.js \
194
- --n-concurrent 3
195
- ```
196
-
197
- Direct Harbor CLI-agent runs need outbound internet from the task container for
198
- agent install/auth/model calls, so the task definitions set
199
- `allow_internet = true`. The verifier remains hidden until the agent exits.
200
-
201
- ## Run Data And Leaderboard
202
-
203
- Keep run outputs outside the source checkout:
204
-
205
- ```text
206
- ~/Projects/CAD/ForgeCAD-RL-Agent-Runs/
207
- harbor/
208
- <agent>/<job>/
209
- benchmark/main/
210
- submissions.jsonl
211
- submissions/
212
- leaderboard.json
213
- leaderboard.md
214
- report/
215
- ```
216
-
217
- Raw Harbor jobs are evidence. Keep them somewhere durable, but do not commit
218
- them to ForgeCAD. They contain logs, generated code, renders, verifier payloads,
219
- local paths, and provider-specific artifacts.
220
-
221
- Important Harbor files:
222
-
223
- ```text
224
- <jobs-dir>/<timestamp>/<task-trial>/
225
- result.json
226
- trial.log
227
- artifacts/main.forge.js
228
- verifier/reward.json
229
- verifier/reward-details.json
230
- verifier/report.json
231
- verifier/score.json
232
- verifier/submission.png
233
- verifier/reference.png
234
- ```
235
-
236
- The public leaderboard is updated by importing selected Harbor jobs into the
237
- local benchmark ledger, regenerating reports, then regenerating the repo-safe
238
- snapshot:
239
-
240
- ```bash
241
- npm run benchmark:reconstruction:import-harbor -- \
242
- "$HOME/Projects/CAD/ForgeCAD-RL-Agent-Runs/harbor/codex/<job>" \
243
- --budget standard
244
- npm run benchmark:reconstruction:report
245
- npm run build:benchmark-data
246
- ```
247
-
248
- Commit `src/pages/generatedBenchmarkData.ts` to publish the website update.
249
- The committed snapshot contains only sanitized task, model, score, reward,
250
- metric, and timing fields. It does not contain raw logs or private paths.
251
-
252
- ## Result Payload Contract
253
-
254
- The Harbor verifier writes numeric reward files:
255
-
256
- | Field | Purpose |
257
- |---|---|
258
- | `reward` | Scalar in `[0, 1]` for RL. |
259
- | `score` | Human scale score in `[0, 100]`, normally `reward * 100`. |
260
- | `rawCompareScore` | Raw ForgeCAD geometry comparison score before calibration. |
261
- | `guard` | Numeric guardrail pass marker. |
262
- | `valid` | Numeric validity marker. |
263
-
264
- Harbor reward values must stay numeric because Harbor validates reward payloads
265
- as scalar metrics. Detailed status, aggregation, guard issues, score vectors,
266
- renders, and command logs live in `/logs/verifier/report.json`,
267
- `/logs/verifier/score.json`, `/logs/verifier/reward-details.json`, and the
268
- copied Harbor trial artifacts.
269
-
270
- ## Scoring Principles
271
-
272
- The scalar reward is a projection, not the whole truth. Keep the score vector
273
- first-class.
274
-
275
- For reconstruction tasks, the geometry component should include:
276
-
277
- - Bidirectional surface coverage over multiple thresholds.
278
- - Tail-distance penalties such as p95/p99.
279
- - Feature-edge matching for sharp and boundary structure.
280
- - Dimension agreement.
281
- - Volume or occupancy overlap where reliable.
282
- - Hard caps for obvious shortcut failures.
283
-
284
- Avoid solving score problems by only changing a curve shape. If a two-ring
285
- bearing approximation scores too high, the missing signal is structural:
286
- rolling elements, feature edges, component count, section occupancy, or
287
- topology. Add the missing measurement and then calibrate the scalar projection.
288
-
289
- ## Maintaining Tasks
290
-
291
- When adding or changing a task, edit the external Harbor dataset. Keep task IDs
292
- user-facing, include the full Harbor layout, record reference SHA-256 in
293
- `tests/task.json`, and keep `/app/submission/main.forge.js` as the stable
294
- deliverable.
295
-
296
- Run enough Harbor jobs to prove the task behaves correctly: reference identity
297
- scoring, starter scoring, at least one weak shortcut candidate, and one stronger
298
- candidate. The stronger candidate should rank higher for the right reasons.
299
-
300
- ## Maintaining Agent Adapters
301
-
302
- Agent adapters belong with the external Harbor dataset. For each supported
303
- Harbor agent CLI, keep a short note answering:
304
-
305
- 1. How to run headlessly.
306
- 2. How to set cwd.
307
- 3. How to set task-local home/config.
308
- 4. How skills are discovered.
309
- 5. How to disable global/user config.
310
- 6. How to disable web search, subagents, plugins, MCP, and memory.
311
- 7. What filesystem sandbox exists.
312
- 8. How auth is supplied.
313
- 9. How stdin is made non-interactive.
314
- 10. How logs are captured.
315
- 11. How the wall-clock timeout is enforced.
316
-
317
- Promote stable CLI adapter facts here when they become part of the supported
318
- contract.
319
-
320
- ## Versioning Policy
321
-
322
- Version every surface that labs depend on:
323
-
324
- - Harbor dataset digest.
325
- - Task IDs.
326
- - `tests/task.json` schema fields.
327
- - Verifier payload shape.
328
- - Score aggregation profile.
329
- - Geometry comparison algorithm version.
330
-
331
- Changing the scalar reward is a benchmark change. Keep the score vector and raw
332
- compare metrics in the payload so old and new rewards can be compared across
333
- saved runs.
334
-
335
- ## Merge Readiness Checklist
336
-
337
- Before merging reconstruction environment changes:
338
-
339
- 1. `npm test` passes, or a narrower check is justified in the PR.
340
- 2. `npm run benchmark:reconstruction:list` passes against the external dataset.
341
- 3. Harbor can run the changed task directly from the external dataset.
342
- 4. Verifier reward output contains numeric `reward`, `score`,
343
- `rawCompareScore`, `guard`, and `valid`.
344
- 5. Verifier report output contains the detailed status, score vector,
345
- aggregation, guard data, and artifacts.
346
- 6. RewardKit writes `reward-details.json`.
347
- 7. Agent logs are captured in the Harbor trial folder.
348
- 8. Timeouts are enforced by Harbor and inside the verifier.
349
- 9. No global skills or parent repo instructions are required.
350
- 10. The docs index and this guide are updated when the contract changes.