forgecad 0.9.7 → 0.9.8

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 (47) hide show
  1. package/README.md +1 -0
  2. package/dist/assets/{AdminPage-DX0mpSZT.js → AdminPage-CXaVLMiV.js} +1 -1
  3. package/dist/assets/{BlogPage-CI_P0_Pf.js → BlogPage-Crpr3JjH.js} +1 -1
  4. package/dist/assets/{DocsPage-DLhIIZyJ.js → DocsPage-CNBKuitP.js} +2 -2
  5. package/dist/assets/{EditorApp-DfFT2Dn8.css → EditorApp-D11wL4Qn.css} +51 -0
  6. package/dist/assets/{EditorApp-BujZvuwX.js → EditorApp-DVMnXOmO.js} +151 -9
  7. package/dist/assets/{EmbedViewer-0S0qXKog.js → EmbedViewer-KXFLSnpo.js} +2 -2
  8. package/dist/assets/{LandingPageProofDriven-O_yMtAri.js → LandingPageProofDriven-2q2sn7aW.js} +1 -1
  9. package/dist/assets/{PricingPage-DGkX3Ahr.js → PricingPage-CVvgdv0i.js} +1 -1
  10. package/dist/assets/{SettingsPage-DBsqTB_y.js → SettingsPage-BVj1FtEv.js} +1 -1
  11. package/dist/assets/__vite-browser-external-Dhvy_jtL.js +4 -0
  12. package/dist/assets/{app-BE2nD6Yz.js → app-Dn4EwHhN.js} +707 -458
  13. package/dist/assets/cli/{render-iP9qh475.js → render-BI3gLMXz.js} +1011 -145
  14. package/dist/assets/constructionHistoryWorker-z9_LGiRd.js +42984 -0
  15. package/dist/assets/{evalWorker-Ds5U4xtN.js → evalWorker-CtO7GsJR.js} +42 -9
  16. package/dist/assets/{inspectWorker-Dll4eVyD.js → inspectWorker-BZ2CkQZr.js} +785 -111
  17. package/dist/assets/{manifold-sJ-axdXM.js → manifold-BVi4_OeB.js} +1 -1
  18. package/dist/assets/{manifold-DjYsd7A_.js → manifold-C6-sZYQN.js} +2 -2
  19. package/dist/assets/manifold-Cp_dCC7i.js +3018 -0
  20. package/dist/assets/{manifold-Bk26ViCr.js → manifold-DAzn2Fsa.js} +1 -1
  21. package/dist/assets/{renderSceneState-Bngp5MrQ.js → renderSceneState-BIvOkPK3.js} +1 -1
  22. package/dist/assets/{reportWorker-CU8RZ4O0.js → reportWorker-Bz9tGiHb.js} +42 -9
  23. package/dist/assets/{sectionPlaneMath-BdTjyVfs.js → scalar-sampling-budget-iBAeF8RM.js} +483 -71
  24. package/dist/cli/render.html +1 -1
  25. package/dist/docs/index.html +1 -1
  26. package/dist/docs-raw/CLI.md +10 -10
  27. package/dist/docs-raw/coding-best-practices.md +1 -1
  28. package/dist/docs-raw/guides/inspection-bundles.md +77 -19
  29. package/dist/docs-raw/guides/skill-maintenance.md +1 -1
  30. package/dist/docs-raw/runbook.md +2 -2
  31. package/dist/docs-raw/skills/forgecad-make-a-model.md +11 -0
  32. package/dist/docs-raw/skills/forgecad-render-inspect.md +12 -6
  33. package/dist/docs-raw/skills/index.md +1 -1
  34. package/dist/index.html +1 -1
  35. package/dist/sitemap.xml +6 -6
  36. package/dist-cli/forgecad.js +596 -354
  37. package/dist-cli/forgecad.js.map +1 -1
  38. package/dist-skill/CONTEXT.md +77 -19
  39. package/dist-skill/docs/CLI.md +10 -10
  40. package/dist-skill/docs/guides/inspection-bundles.md +77 -19
  41. package/dist-skill/docs-dev/CLI.md +10 -10
  42. package/dist-skill/docs-dev/coding-best-practices.md +1 -1
  43. package/dist-skill/docs-dev/guides/inspection-bundles.md +77 -19
  44. package/dist-skill/docs-dev/guides/skill-maintenance.md +1 -1
  45. package/dist-skill/library/forgecad-make-a-model/SKILL.md +11 -0
  46. package/dist-skill/library/forgecad-render-inspect/SKILL.md +12 -6
  47. package/package.json +6 -3
@@ -132,7 +132,7 @@ Use a `skill-group` with a `dev-` prefix (e.g. `dev-compiler`, `dev-solver`, `de
132
132
  | Does a model author need this to build `.forge.js` files? | Standard |
133
133
  | Does it describe internal architecture (compiler, solver, pipeline)? | Dev only |
134
134
  | Does it cover team process (coding standards, releases, CI)? | Dev only |
135
- | Is it a CLI command only developers run (`check suite`, `sdf`, debug flags)? | Dev only |
135
+ | Is it repo-only developer tooling (`npm run check:suite`, `sdf`, debug flags)? | Dev only |
136
136
 
137
137
  ## Orphan files
138
138
 
@@ -261,6 +261,17 @@ After the normal PNG render, run `forgecad render inspect` and read both the cha
261
261
  forgecad render inspect model.forge.js /tmp/model-inspect --channels rgb,mask,collisions --force --size 700
262
262
  ```
263
263
 
264
+ ### Keep CLI inspection scenes small
265
+
266
+ When using CLI inspection commands, make the scene as few returned/named objects as the requirement allows. The goal is not to hide required geometry; it is to keep the evidence small enough that the agent can reason about it properly.
267
+
268
+ - Return one selected configuration, not every variant, option bundle, or debug lineup.
269
+ - Include only the parts, ghosts, and fixtures needed to prove the current risk. If a collision, clearance, thickness, or section check concerns three objects, inspect those three objects instead of the whole shop floor.
270
+ - Prefer `--focus` / `--hide` and parameter-selected diagnostic modes over adding permanent extra objects to the default scene.
271
+ - Collapse decorative or already-proven subassemblies into fewer named objects when their internal boundaries are irrelevant to the inspection. Keep separate names only where object identity matters for collisions, masks, clearances, BOM roles, or mechanical contracts.
272
+
273
+ Small inspection scenes make `manifest.json`, mask colors, collision pairs, component counts, and section images cognitively tractable. If the agent cannot hold the scene in its head, it cannot debug the model honestly.
274
+
264
275
  For faster iteration, request the channels that match the current risk:
265
276
 
266
277
  - `collisions` — final multi-part assemblies, fixtures, enclosures, ghost fit checks, moving clearances, and any parts intended to touch without overlapping. Visually inspect this channel; do not rely only on the count.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: forgecad-render-inspect
3
- description: Run and interpret ForgeCAD `render inspect` bundles for model verification. Use when asked to inspect a ForgeCAD model, analyze an inspection bundle, validate collisions, wall thickness, connectivity, sections, masks, depth, normals, or choose inspection channels.
3
+ description: Run and interpret ForgeCAD `render inspect` bundles for model verification. Use when asked to inspect a ForgeCAD model, analyze an inspection bundle, validate collisions, wall thickness, connectivity, floating bodies, sections, masks, depth, normals, Zebra stripes, or choose inspection channels.
4
4
  forgecad-public: true
5
5
  ---
6
6
 
@@ -18,7 +18,7 @@ Use this skill for:
18
18
 
19
19
  - inspecting an existing `.forge.js` model
20
20
  - analyzing a previously generated inspection bundle
21
- - validating collisions, wall thickness, section cuts, connectivity, distance, object masks, depth, or normals
21
+ - validating collisions, wall thickness, section cuts, connectivity, floating bodies, distance, object masks, depth, normals, or Zebra stripes
22
22
  - deciding which `render inspect` channels to run
23
23
  - producing evidence before calling a model complete
24
24
 
@@ -70,6 +70,7 @@ Routing:
70
70
  jq '.channels.collisions | {collisionCount, collisions, warnings}' /tmp/model-inspect/manifest.json
71
71
  jq '.channels.thickness.objects[] | {name, minThickness, p05Thickness, criticalAreaPercent, warningAreaPercent, unresolvedAreaPercent}' /tmp/model-inspect/manifest.json
72
72
  jq '.channels.connectivity | {componentCount, edges, warnings}' /tmp/model-inspect/manifest.json
73
+ jq '.channels.floating | {floatingBodyCount, floatingObjectCount, warnings}' /tmp/model-inspect/manifest.json
73
74
  ```
74
75
 
75
76
  6. Inspect the PNGs, not only the JSON.
@@ -90,9 +91,11 @@ Routing:
90
91
  | Multi-part interference, fit checks, ghost parts, moving clearances | `rgb,mask,collisions` |
91
92
  | Final multi-part mechanical or manufactured model | `rgb,mask,collisions` plus `section`, `thickness`, `connectivity`, or `distance` only when those risks apply |
92
93
  | Printability, shell walls, ribs, bosses, snaps, slots | `rgb,section,thickness` |
93
- | Floating parts, accidental fusion, connected solids | `rgb,mask,connectivity` |
94
+ | Parts without a mesh-contact path to the ground | `rgb,mask,floating` |
95
+ | Accidental fusion, connected solids | `rgb,mask,connectivity` |
94
96
  | Air gaps between physical components | `rgb,mask,distance` |
95
97
  | Surface orientation, occlusion, faceting, strange protrusions | `rgb,depth,normals` |
98
+ | Loft, fillet, skin, and sweep surface continuity | `rgb,zebra,normals` |
96
99
 
97
100
  ## Command Patterns
98
101
 
@@ -144,6 +147,7 @@ Manifest fields to check first:
144
147
  - `channels.collisions.collisionCount`: investigate every unexpected positive-volume overlap.
145
148
  - `channels.thickness.objects`: inspect `minThickness`, `p05Thickness`, critical/warning percentages, and unresolved area.
146
149
  - `channels.connectivity.componentCount`: compare to the expected number of physical components.
150
+ - `channels.floating.floatingBodyCount`: investigate every body without a mesh-contact path to the ground plane, especially body entries from one unioned object.
147
151
  - `channels.distance.maxRootDistance` and per-object `nearestGap`: check suspicious isolation or spacing.
148
152
  - `channels.section.planes`: look for missing slices, wrong path counts, or empty internal cuts. These are inspection views, not instructions to section the returned production geometry.
149
153
 
@@ -158,11 +162,13 @@ PNG review order:
158
162
  ## Interpretation Rules
159
163
 
160
164
  - Collision findings are positive-volume boolean overlaps. Face-touching is not a collision.
161
- - Connectivity uses bbox as a broadphase, then exact overlap evidence for component grouping. Bbox-only contact does not merge separate scene objects by default; use the collisions channel for positive-volume overlap evidence.
165
+ - Connectivity uses bbox as a broadphase, then shared physical-contact detection for component grouping: mesh surfaces within contact tolerance count as connected, exact positive-volume overlap is used when needed, and bbox-only contact does not merge separate scene objects by default. Use the collisions channel for positive-volume overlap evidence.
166
+ - Floating uses the same shared physical-contact detection plus scene-ground reachability. Mesh gaps within contact tolerance count as connected, bbox overlap or bbox face contact alone does not, and every component without a contact path to ground is reported. Disconnected mesh islands inside one object are inspected separately.
162
167
  - Distance is a bbox-gap metric between physical components, not exact closest surface distance.
163
- - Thickness is a mesh/raycast approximation. Gray or high unresolved area means the visual heatmap is incomplete, not that the model is safe.
168
+ - Thickness is a contact-aware mesh/raycast approximation. It uses the same physical-contact edges as connectivity/floating, so rays jump over direct-neighbor contact seams within contact tolerance before measuring the next surface. Gray or high unresolved area means the visual heatmap is incomplete, not that the model is safe.
164
169
  - Depth is a visual heatmap, not raw floating-point depth data.
165
170
  - Normals are camera-view normals, not world-space normals.
171
+ - Zebra is a reflective stripe shader for visual continuity inspection, not an exact curvature-continuity proof.
166
172
  - Mask colors are stable within a bundle and resolved through the manifest.
167
173
 
168
174
  ## Source Map
@@ -177,4 +183,4 @@ Read these only when needed:
177
183
  | Browser-side channel rendering | `cli/render.ts` |
178
184
  | Collision semantics | `cli/collision-inspection.ts` |
179
185
  | Thickness semantics | `cli/thickness-inspection.ts` |
180
- | Connectivity and distance semantics | `cli/physical-connectivity.ts` and `cli/distance-inspection.ts` |
186
+ | Connectivity, floating, and distance semantics | `cli/physical-connectivity.ts`, `cli/floating-inspection.ts`, and `cli/distance-inspection.ts` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgecad",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Code-first parametric CAD for JavaScript/TypeScript, in the browser and CLI.",
5
5
  "license": "BUSL-1.1",
6
6
  "type": "module",
@@ -56,9 +56,10 @@
56
56
  "lint:fix": "npx biome check . --write",
57
57
  "format": "npx biome format . --write",
58
58
  "test:llms": "vitest run test/llmsTxt.test.ts",
59
+ "check:suite": "npm run test:prepare && tsx cli/check-suite.ts",
59
60
  "test": "npm run test:smoke",
60
- "test:smoke": "npm run test:prepare && node dist-cli/forgecad.js check suite --profile smoke",
61
- "test:full": "npm run test:prepare && node dist-cli/forgecad.js check suite",
61
+ "test:smoke": "npm run check:suite -- --profile smoke",
62
+ "test:full": "npm run check:suite",
62
63
  "test:unit": "vitest run",
63
64
  "test:prepare": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsc --noEmit && npm run build:cli",
64
65
  "test:compiler": "npm run test:prepare && node dist-cli/forgecad.js check compiler",
@@ -120,6 +121,7 @@
120
121
  "prod:errors": "bash scripts/prod/errors.sh",
121
122
  "prod:promote-beta": "fish scripts/promote-beta-to-prod.fish",
122
123
  "prod:help": "bash scripts/prod.sh help",
124
+ "paid-user-note": "node scripts/create-paid-user-note.mjs",
123
125
  "gen:types": "node scripts/gen-forge-types.mjs",
124
126
  "gen:docs": "node scripts/gen-api-docs.mjs",
125
127
  "gen:cli-docs": "node scripts/gen-cli-docs.mjs",
@@ -183,6 +185,7 @@
183
185
  "react-dom": "^19.1.0",
184
186
  "three": "^0.175.0",
185
187
  "tsup": "^8.5.0",
188
+ "tsx": "^4.21.0",
186
189
  "vite": "^6.3.5",
187
190
  "vitest": "^4.1.2",
188
191
  "zustand": "^5.0.5"