forgecad 0.9.14 → 0.9.15
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/LICENSE +6 -4
- package/README.md +8 -4
- package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CDyGUinA.js} +2 -2
- package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-DfPMY_-d.js} +4 -15
- package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-kF0fkdJT.js} +2 -2
- package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-B954L3YN.js} +9 -3
- package/dist/assets/EditorApp-Beb-IZ0y.js +14014 -0
- package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-CuDLxKqL.css} +698 -0
- package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-C77B-TrF.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-Cr6fXMDj.js} +35 -37
- package/dist/assets/LegalPage-BRlScr9A.css +91 -0
- package/dist/assets/LegalPage-Dzklqmmg.js +39 -0
- package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
- package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-zWXkvlwl.js} +19 -19
- package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-Bz0of4KQ.js} +2 -2
- package/dist/assets/app-CE3sYcV7.css +3890 -0
- package/dist/assets/{app-bEww1ic4.js → app-D3kDkggg.js} +2293 -946
- package/dist/assets/cli/{render-Cho2uKG_.js → render-DSY3mMQa.js} +337 -7
- package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-gpDo-uH2.js} +927 -243
- package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-CU0Ke6DP.js} +7800 -4164
- package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
- package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
- package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-COyp8XXA.js} +927 -243
- package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
- package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
- package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
- package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
- package/dist/assets/{manifold-CG9Fokx-.js → manifold-BRI5prcH.js} +1 -1
- package/dist/assets/{manifold-uRzgk5O8.js → manifold-C-3h2M7p.js} +2 -2
- package/dist/assets/{manifold-rmfAcdwF.js → manifold-DNkrUWpA.js} +1 -1
- package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-CdBz5bNg.js} +7538 -10857
- package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-wJF98aY9.js} +6935 -4331
- package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-B-9VbLIs.js} +32 -1
- package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
- package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
- package/dist/assets/{targets-D6PWsv6X.js → targets-B9sGB5nB.js} +1 -1
- package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/ai-native-cad.md +50 -0
- package/dist/docs-raw/AI/usage.md +3 -12
- package/dist/docs-raw/CLI.md +30 -10
- package/dist/docs-raw/component-model.md +27 -11
- package/dist/docs-raw/generated/assembly.md +301 -212
- package/dist/docs-raw/generated/concepts.md +235 -237
- package/dist/docs-raw/generated/core.md +283 -6
- package/dist/docs-raw/generated/curves.md +274 -361
- package/dist/docs-raw/generated/lib.md +7 -1
- package/dist/docs-raw/generated/output.md +19 -4
- package/dist/docs-raw/generated/runtime-names.md +41 -0
- package/dist/docs-raw/generated/sdf.md +31 -0
- package/dist/docs-raw/generated/sheet-metal.md +9 -0
- package/dist/docs-raw/generated/sketch.md +44 -1
- package/dist/docs-raw/generated/viewport.md +11 -3
- package/dist/docs-raw/guides/coordinate-system.md +20 -16
- package/dist/docs-raw/guides/geometry-conventions.md +2 -2
- package/dist/docs-raw/guides/inspection-bundles.md +2 -1
- package/dist/docs-raw/guides/joint-design.md +24 -0
- package/dist/docs-raw/guides/positioning.md +13 -3
- package/dist/docs-raw/legal/privacy.md +63 -0
- package/dist/docs-raw/legal/software-license.md +55 -0
- package/dist/docs-raw/legal/terms.md +87 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
- package/dist/docs-raw/skills/forgecad-lld.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
- package/dist/docs-raw/skills/forgecad-project.md +1 -1
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
- package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +4 -3
- package/dist/index.html +40 -12
- package/dist/llms.txt +8 -0
- package/dist/site.webmanifest +1 -1
- package/dist/sitemap.xml +49 -13
- package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SDX5QIXI.js} +1 -2
- package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-EAYEFT77.js} +1 -2
- package/dist-cli/{chunk-EXWGNL6K.js → chunk-N4O47JLF.js} +12540 -9046
- package/dist-cli/forgecad.js +1786 -679
- package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
- package/dist-cli/solver_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +1117 -721
- package/dist-skill/SKILL.md +3 -2
- package/dist-skill/docs/API/core/concepts.md +64 -1
- package/dist-skill/docs/CLI.md +30 -10
- package/dist-skill/docs/generated/assembly.md +277 -229
- package/dist-skill/docs/generated/core.md +283 -6
- package/dist-skill/docs/generated/curves.md +272 -362
- package/dist-skill/docs/generated/lib.md +7 -1
- package/dist-skill/docs/generated/output.md +19 -4
- package/dist-skill/docs/generated/runtime-names.md +41 -0
- package/dist-skill/docs/generated/sdf.md +31 -0
- package/dist-skill/docs/generated/sheet-metal.md +9 -0
- package/dist-skill/docs/generated/sketch.md +44 -2
- package/dist-skill/docs/generated/viewport.md +2 -87
- package/dist-skill/docs/guides/coordinate-system.md +20 -16
- package/dist-skill/docs/guides/geometry-conventions.md +2 -2
- package/dist-skill/docs/guides/inspection-bundles.md +2 -1
- package/dist-skill/docs/guides/joint-design.md +24 -0
- package/dist-skill/docs/guides/positioning.md +13 -3
- package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
- package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
- package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
- package/examples/api/assembly-kinematics-limb.forge.js +116 -0
- package/examples/api/connector-frame-rig-chain.forge.js +102 -0
- package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
- package/examples/api/exact-surface-studio.forge.js +6 -8
- package/examples/api/helix-basics.forge.js +6 -6
- package/examples/api/lean-foundations/README.md +12 -0
- package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
- package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
- package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
- package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
- package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
- package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
- package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
- package/examples/api/route3d-elbow.forge.js +68 -0
- package/examples/api/transition-curves.forge.js +44 -15
- package/examples/api/y-blend-corner-showcase.forge.js +0 -2
- package/examples/generative/coral-vase.forge.js +1 -1
- package/examples/nurbs-tube.forge.js +1 -1
- package/package.json +14 -13
- package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
- package/dist/assets/app-CsHnaBWt.css +0 -1789
- package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
- package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
- package/dist/docs-raw/API/README.md +0 -16
- package/dist/docs-raw/API/core/concepts.md +0 -118
- package/dist/docs-raw/INDEX.md +0 -138
- package/dist/docs-raw/RELEASING.md +0 -87
- package/dist/docs-raw/agent-native-api.md +0 -27
- package/dist/docs-raw/beta-deployment.md +0 -304
- package/dist/docs-raw/beta-operations.md +0 -325
- package/dist/docs-raw/blueprint-first.md +0 -145
- package/dist/docs-raw/cli-monetization.md +0 -112
- package/dist/docs-raw/coding-best-practices.md +0 -120
- package/dist/docs-raw/coding.md +0 -340
- package/dist/docs-raw/deployment.md +0 -374
- package/dist/docs-raw/guides/skill-maintenance.md +0 -161
- package/dist/docs-raw/guides/surface-members.md +0 -82
- package/dist/docs-raw/harbor-cli.md +0 -854
- package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
- package/dist/docs-raw/internals/compiler.md +0 -307
- package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
- package/dist/docs-raw/internals/constraint-solver.md +0 -176
- package/dist/docs-raw/internals/shape-from-slices.md +0 -152
- package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
- package/dist/docs-raw/platform/admin.md +0 -45
- package/dist/docs-raw/platform/architecture.md +0 -82
- package/dist/docs-raw/platform/auth.md +0 -139
- package/dist/docs-raw/platform/email.md +0 -67
- package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
- package/dist/docs-raw/platform/observability.md +0 -197
- package/dist/docs-raw/platform/projects.md +0 -111
- package/dist/docs-raw/platform/sharing.md +0 -90
- package/dist/docs-raw/product/README.md +0 -39
- package/dist/docs-raw/product/api-as-product-language.md +0 -13
- package/dist/docs-raw/product/business-model.md +0 -15
- package/dist/docs-raw/product/competitive-positioning.md +0 -17
- package/dist/docs-raw/product/creative-manufacturing.md +0 -15
- package/dist/docs-raw/product/founder-story.md +0 -11
- package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
- package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
- package/dist/docs-raw/product/product-loop.md +0 -17
- package/dist/docs-raw/product/strategic-decisions.md +0 -22
- package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
- package/dist/docs-raw/product/user-segments.md +0 -15
- package/dist/docs-raw/product/vision.md +0 -26
- package/dist/docs-raw/rl-environments.md +0 -350
- package/dist/docs-raw/runbook.md +0 -611
- package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
- package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
- package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
- package/dist-cli/forgecad.js.map +0 -1
- package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
- package/dist-cli/solver-46FFSK2U.js.map +0 -1
- package/dist-skill/SKILL-dev.md +0 -145
- package/dist-skill/docs-dev/API/core/concepts.md +0 -118
- package/dist-skill/docs-dev/CLI.md +0 -677
- package/dist-skill/docs-dev/agent-native-api.md +0 -27
- package/dist-skill/docs-dev/blueprint-first.md +0 -145
- package/dist-skill/docs-dev/coding-best-practices.md +0 -120
- package/dist-skill/docs-dev/coding.md +0 -340
- package/dist-skill/docs-dev/component-model.md +0 -164
- package/dist-skill/docs-dev/generated/assembly.md +0 -794
- package/dist-skill/docs-dev/generated/core.md +0 -2117
- package/dist-skill/docs-dev/generated/curves.md +0 -2583
- package/dist-skill/docs-dev/generated/lib.md +0 -169
- package/dist-skill/docs-dev/generated/output.md +0 -247
- package/dist-skill/docs-dev/generated/sdf.md +0 -446
- package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
- package/dist-skill/docs-dev/generated/sketch.md +0 -1811
- package/dist-skill/docs-dev/generated/viewport.md +0 -585
- package/dist-skill/docs-dev/generated/wood.md +0 -108
- package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
- package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
- package/dist-skill/docs-dev/guides/joint-design.md +0 -78
- package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs-dev/guides/positioning.md +0 -161
- package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
- package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
- package/dist-skill/docs-dev/internals/compiler.md +0 -307
- package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
- package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
- package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
|
@@ -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.
|