geospec 0.5.2-next.375 → 0.5.2-next.391

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/README.md CHANGED
@@ -128,6 +128,15 @@ mesh integrity for a GLB or a valid BRep with closed shells for a STEP file.
128
128
  cannot decide is reported as inconclusive, never as a pass, and the exit code is
129
129
  the verdict.
130
130
 
131
+ `toBeWatertight` judges one part at a time: a glTF node with a mesh is a part,
132
+ and its `TRIANGLES` primitives together are that part's surface, so every
133
+ welded edge must be shared by exactly two of its triangles. Separately named
134
+ nodes are separate parts, and nodes sharing a name are one part; an edge where
135
+ two parts meet is open in both unless each closes it on its own. Connected components, interference and
136
+ relationships treat each primitive as an operand unless the mesh declares
137
+ `EXT_mesh_manifold`, which makes its primitives one body. Winding is not
138
+ checked by `toBeWatertight`.
139
+
131
140
  To embed the pool, use `createGeoSpecNodePoolRunner` from `geospec/runner/node`;
132
141
  each worker owns one engine and its own exporters, and live subjects never
133
142
  cross worker boundaries. To run serially in this process, pass an engine from
@@ -261,9 +270,13 @@ establish a continuous minimum: the general sampled profile refuses a requested
261
270
  general mesh lumen, wall and motion qualification remains incomplete.
262
271
 
263
272
  Likewise, watertight edge incidence does not prove manifold validity, a Boolean
264
- fuse or material connectivity. Bounds and playback cannot establish contact,
265
- clearance, containment or sealing. Preserve intended geometry and tolerances;
266
- report unavailable evidence instead of replacing the requirement with a proxy.
273
+ fuse or material connectivity. When open edges of one part coincide with open
274
+ edges of another, `toBeWatertight` reports their count as
275
+ `openEdgesSharedAcrossLabels` and the parts as `sharedOpenEdgeLabels`, and its
276
+ suggestion names `EXT_mesh_manifold`; the verdict is unchanged. Bounds and
277
+ playback cannot establish contact, clearance, containment or sealing. Preserve
278
+ intended geometry and tolerances; report unavailable evidence instead of
279
+ replacing the requirement with a proxy.
267
280
 
268
281
  The [canonical API index](agent/geospec-authoring/api-index.md) describes
269
282
  ordinary authoring. The separate
package/agent/doctrine.md CHANGED
@@ -68,4 +68,6 @@ Test assemblies and independent units; preserve sibling coverage when adding fil
68
68
 
69
69
  Fix geometry at its root; never weaken tolerances, delete assertions, or reduce detail to pass.
70
70
 
71
+ A verdict that changes after a refactor that leaves volume, bounding box and triangle count unchanged is evidence about the tool chain, not the model: report it as a suspected exporter or GeoSpec defect with both runs' evidence; do not restructure the model until the check passes. A solid split over glTF nodes is several parts with open seams; primitives without `EXT_mesh_manifold` are one `toBeWatertight` surface, not one operand: component and relationship checks refuse, never merge.
72
+
71
73
  `public-api-index.md` covers the host and framework API; authoring needs only the Core API below and `api-*` files.
@@ -75,6 +75,8 @@ Test assemblies and independent units; preserve sibling coverage when adding fil
75
75
 
76
76
  Fix geometry at its root; never weaken tolerances, delete assertions, or reduce detail to pass.
77
77
 
78
+ A verdict that changes after a refactor that leaves volume, bounding box and triangle count unchanged is evidence about the tool chain, not the model: report it as a suspected exporter or GeoSpec defect with both runs' evidence; do not restructure the model until the check passes. A solid split over glTF nodes is several parts with open seams; primitives without `EXT_mesh_manifold` are one `toBeWatertight` surface, not one operand: component and relationship checks refuse, never merge.
79
+
78
80
  `public-api-index.md` covers the host and framework API; authoring needs only the Core API below and `api-*` files.
79
81
 
80
82
  ## Core API
@@ -471,17 +473,6 @@ GeoSpecPointExpectation: Vec3 | GeoSpecAxisExpectation
471
473
  GeoSpecVoidWaypoint: Vec3 | {
472
474
  occurrence: string;
473
475
  }
474
-
475
- // Direct geometry-source model load options
476
- LoadModelSourceOptions: {
477
- // Source geometry format
478
- format?: GeoSpecModelFormat
479
- // Explicit parameters recorded in provenance
480
- parameters?: Record<string, unknown>
481
- // Whether STEP loading should also produce mesh evidence
482
- mesh?: boolean
483
- // … 10 more members in the API reference: source, resources, rootDir, path, name, sourceUnit, stepStreaming, meshLinearTolerance, meshAngularToleranceDegrees, workUnitLimit
484
- }
485
476
  ```
486
477
 
487
478
  ## API reference
@@ -92,7 +92,7 @@ GeoSpecConnectedComponentsExpectation (type) [lines 249-260] [3 members] — Con
92
92
  GeoSpecConnectedComponentsExpectation.tolerance (property)
93
93
  GeoSpecConnectedComponentsExpectation.toleranceMm (property)
94
94
  GeoSpecGeometrySelector (type) [lines 262-296] — Geometry selector used by inspection and spatial relationship matchers
95
- GeoSpecMatcher (type) [lines 298-511] [27 members] — Assertion chain returned by `expectGeo(subject)`
95
+ GeoSpecMatcher (type) [lines 298-524] [27 members] — Assertion chain returned by `expectGeo(subject)`
96
96
  GeoSpecMatcher.not (property) — Core-owned negation
97
97
  GeoSpecMatcher.toSatisfyRationalPlate (method) — Assert the fixed rational plate contract
98
98
  GeoSpecMatcher.toSatisfyParallelPlaneDistance (method) — Assert the fixed parallel-plane distance contract
@@ -120,43 +120,43 @@ GeoSpecMatcher (type) [lines 298-511] [27 members] — Assertion chain returned
120
120
  GeoSpecMatcher.toHaveFilletFeature (method) — Assert that BRep evidence contains a fillet feature with the…
121
121
  GeoSpecMatcher.toHaveMinimumWallThickness (method) — Assert that BRep evidence reports a minimum wall thickness satisfying…
122
122
  GeoSpecMatcher.toHaveVoidContinuity (method) — Assert that the declared waypoints share one connected void, stay…
123
- GeoSpecMassExpectation (type) [lines 513-524] [3 members] — Mass expectation accepted by `expectGeo(...).toHaveMass(...)`
123
+ GeoSpecMassExpectation (type) [lines 526-537] [3 members] — Mass expectation accepted by `expectGeo(...).toHaveMass(...)`
124
124
  GeoSpecMassExpectation.value (property)
125
125
  GeoSpecMassExpectation.density (property)
126
126
  GeoSpecMassExpectation.tolerance (property)
127
- GeoSpecMeshIntegrityExpectation (type) [lines 526-557] [5 members] — Mesh integrity expectation accepted by `expectGeo(...).toHaveMeshIntegrity(...)`
127
+ GeoSpecMeshIntegrityExpectation (type) [lines 539-570] [5 members] — Mesh integrity expectation accepted by `expectGeo(...).toHaveMeshIntegrity(...)`
128
128
  GeoSpecMeshIntegrityExpectation.finitePositions (property)
129
129
  GeoSpecMeshIntegrityExpectation.degenerateTriangles (property)
130
130
  GeoSpecMeshIntegrityExpectation.duplicateFaces (property)
131
131
  GeoSpecMeshIntegrityExpectation.watertight (property)
132
132
  GeoSpecMeshIntegrityExpectation.triangleCount (property)
133
- GeoSpecNoDiagnosticsExpectation (type) [lines 559-565] [1 members] — Diagnostic severities rejected by `expectGeo(...).toHaveNoDiagnostics(...)`
133
+ GeoSpecNoDiagnosticsExpectation (type) [lines 572-578] [1 members] — Diagnostic severities rejected by `expectGeo(...).toHaveNoDiagnostics(...)`
134
134
  GeoSpecNoDiagnosticsExpectation.severities (property)
135
- GeoSpecMinimumWallThicknessExpectation (type) [lines 567-575] [2 members] — Minimum-wall-thickness expectation accepted by `expectGeo(...).toHaveMinimumWallThickness(...)`
135
+ GeoSpecMinimumWallThicknessExpectation (type) [lines 580-588] [2 members] — Minimum-wall-thickness expectation accepted by `expectGeo(...).toHaveMinimumWallThickness(...)`
136
136
  GeoSpecMinimumWallThicknessExpectation.value (property)
137
137
  GeoSpecMinimumWallThicknessExpectation.tolerance (property)
138
- GeoSpecCircularHolePatternExpectation (type) [lines 577-597] [6 members] — Circular-hole-pattern expectation accepted by `expectGeo(...).toHaveCircularHolePattern(...)`
138
+ GeoSpecCircularHolePatternExpectation (type) [lines 590-610] [6 members] — Circular-hole-pattern expectation accepted by `expectGeo(...).toHaveCircularHolePattern(...)`
139
139
  GeoSpecCircularHolePatternExpectation.count (property)
140
140
  GeoSpecCircularHolePatternExpectation.holeDiameter (property)
141
141
  GeoSpecCircularHolePatternExpectation.boltCircleDiameter (property)
142
142
  GeoSpecCircularHolePatternExpectation.axis (property)
143
143
  GeoSpecCircularHolePatternExpectation.center (property)
144
144
  GeoSpecCircularHolePatternExpectation.tolerance (property)
145
- GeoSpecFilletFeatureExpectation (type) [lines 599-610] [3 members] — Fillet-feature expectation accepted by `expectGeo(...).toHaveFilletFeature(...)`
145
+ GeoSpecFilletFeatureExpectation (type) [lines 612-623] [3 members] — Fillet-feature expectation accepted by `expectGeo(...).toHaveFilletFeature(...)`
146
146
  GeoSpecFilletFeatureExpectation.radius (property)
147
147
  GeoSpecFilletFeatureExpectation.selection (property)
148
148
  GeoSpecFilletFeatureExpectation.tolerance (property)
149
- GeoSpecNumericExpectation (type) [lines 612-619] — Shared scalar expectation used by geometry measurements
150
- GeoSpecPlanarFaceExpectation (type) [lines 621-635] [4 members] — Planar-face expectation accepted by `expectGeo(...).toHavePlanarFace(...)`
149
+ GeoSpecNumericExpectation (type) [lines 625-632] — Shared scalar expectation used by geometry measurements
150
+ GeoSpecPlanarFaceExpectation (type) [lines 634-648] [4 members] — Planar-face expectation accepted by `expectGeo(...).toHavePlanarFace(...)`
151
151
  GeoSpecPlanarFaceExpectation.normal (property)
152
152
  GeoSpecPlanarFaceExpectation.offset (property)
153
153
  GeoSpecPlanarFaceExpectation.area (property)
154
154
  GeoSpecPlanarFaceExpectation.tolerance (property)
155
- GeoSpecPointExpectation (type) [lines 637-638] — Point expectation accepted by center and feature matchers
156
- GeoSpecProductStructureExpectation (type) [lines 640-648] [2 members] — Product-structure expectation accepted by `expectGeo(...).toHaveProductStructure(...)`
155
+ GeoSpecPointExpectation (type) [lines 650-651] — Point expectation accepted by center and feature matchers
156
+ GeoSpecProductStructureExpectation (type) [lines 653-661] [2 members] — Product-structure expectation accepted by `expectGeo(...).toHaveProductStructure(...)`
157
157
  GeoSpecProductStructureExpectation.names (property)
158
158
  GeoSpecProductStructureExpectation.count (property)
159
- GeoSpecSpatialRelationshipExpectation (type) [lines 650-696] [13 members] — One spatial relationship accepted by `expectGeo(...).toHaveSpatialRelationships(...)`
159
+ GeoSpecSpatialRelationshipExpectation (type) [lines 663-709] [13 members] — One spatial relationship accepted by `expectGeo(...).toHaveSpatialRelationships(...)`
160
160
  GeoSpecSpatialRelationshipExpectation.id (property)
161
161
  GeoSpecSpatialRelationshipExpectation.kind (property)
162
162
  GeoSpecSpatialRelationshipExpectation.subject (property)
@@ -170,14 +170,14 @@ GeoSpecSpatialRelationshipExpectation (type) [lines 650-696] [13 members] — On
170
170
  GeoSpecSpatialRelationshipExpectation.minVolume (property)
171
171
  GeoSpecSpatialRelationshipExpectation.maxVolume (property)
172
172
  GeoSpecSpatialRelationshipExpectation.reason (property)
173
- GeoSpecSpatialRelationshipsExpectation (type) [lines 698-703] [1 members] — Spatial relationship expectation accepted by `expectGeo(...).toHaveSpatialRelationships(...)`
173
+ GeoSpecSpatialRelationshipsExpectation (type) [lines 711-716] [1 members] — Spatial relationship expectation accepted by `expectGeo(...).toHaveSpatialRelationships(...)`
174
174
  GeoSpecSpatialRelationshipsExpectation.relationships (property)
175
- GeoSpecStepUnitsExpectation (type) [lines 705-710] [1 members] — STEP unit expectation accepted by `expectGeo(...).toHaveStepUnits(...)`
175
+ GeoSpecStepUnitsExpectation (type) [lines 718-723] [1 members] — STEP unit expectation accepted by `expectGeo(...).toHaveStepUnits(...)`
176
176
  GeoSpecStepUnitsExpectation.unit (property)
177
- GeoSpecSurfaceAreaExpectation (type) [lines 712-720] [2 members] — Surface-area expectation accepted by `expectGeo(...).toHaveSurfaceArea(...)`
177
+ GeoSpecSurfaceAreaExpectation (type) [lines 725-733] [2 members] — Surface-area expectation accepted by `expectGeo(...).toHaveSurfaceArea(...)`
178
178
  GeoSpecSurfaceAreaExpectation.value (property)
179
179
  GeoSpecSurfaceAreaExpectation.tolerance (property)
180
- GeoSpecTopologyCountsExpectation (type) [lines 722-748] [8 members] — Topology-count expectation accepted by `expectGeo(...).toHaveTopologyCounts(...)`
180
+ GeoSpecTopologyCountsExpectation (type) [lines 735-761] [8 members] — Topology-count expectation accepted by `expectGeo(...).toHaveTopologyCounts(...)`
181
181
  GeoSpecTopologyCountsExpectation.vertices (property)
182
182
  GeoSpecTopologyCountsExpectation.edges (property)
183
183
  GeoSpecTopologyCountsExpectation.wires (property)
@@ -186,33 +186,33 @@ GeoSpecTopologyCountsExpectation (type) [lines 722-748] [8 members] — Topology
186
186
  GeoSpecTopologyCountsExpectation.solids (property)
187
187
  GeoSpecTopologyCountsExpectation.compounds (property)
188
188
  GeoSpecTopologyCountsExpectation.tolerance (property)
189
- GeoSpecValidBrepExpectation (type) [lines 750-774] [6 members] — Exact BRep validity expectation accepted by `expectGeo(...).toBeValidBrep(...)`
189
+ GeoSpecValidBrepExpectation (type) [lines 763-787] [6 members] — Exact BRep validity expectation accepted by `expectGeo(...).toBeValidBrep(...)`
190
190
  GeoSpecValidBrepExpectation.maxTolerance (property)
191
191
  GeoSpecValidBrepExpectation.freeBounds (property)
192
192
  GeoSpecValidBrepExpectation.minEdgeLength (property)
193
193
  GeoSpecValidBrepExpectation.sameParameter (property)
194
194
  GeoSpecValidBrepExpectation.closedShells (property)
195
195
  GeoSpecValidBrepExpectation.closedWires (property)
196
- GeoSpecVoidContinuityExpectation (type) [lines 776-816] [5 members] — Void-continuity expectation accepted by `expectGeo(...).toHaveVoidContinuity(...)`
196
+ GeoSpecVoidContinuityExpectation (type) [lines 789-829] [5 members] — Void-continuity expectation accepted by `expectGeo(...).toHaveVoidContinuity(...)`
197
197
  GeoSpecVoidContinuityExpectation.path (property) — Ordered waypoints (>= 1) known to lie in the void…
198
198
  GeoSpecVoidContinuityExpectation.material (property) — Occurrence names whose solids bound the void
199
199
  GeoSpecVoidContinuityExpectation.minCrossSection (property) — Minimum required bottleneck cross-section (mm²), sampled
200
200
  GeoSpecVoidContinuityExpectation.isolatedFrom (property) — Points that must NOT be reachable from the path void…
201
201
  GeoSpecVoidContinuityExpectation.bounds (property) — Region bounded for the proof (subject frame)
202
- GeoSpecVoidWaypoint (type) [lines 818-821] — One void-continuity waypoint
203
- GeoSpecVolumeExpectation (type) [lines 823-831] [2 members] — Volume expectation accepted by `expectGeo(...).toHaveVolume(...)`
202
+ GeoSpecVoidWaypoint (type) [lines 831-834] — One void-continuity waypoint
203
+ GeoSpecVolumeExpectation (type) [lines 836-844] [2 members] — Volume expectation accepted by `expectGeo(...).toHaveVolume(...)`
204
204
  GeoSpecVolumeExpectation.value (property)
205
205
  GeoSpecVolumeExpectation.tolerance (property)
206
- GeometryDiagnostic (type) [lines 833-861] [6 members] — Diagnostic emitted by GeoSpec loaders, analyzers, and matchers
206
+ GeometryDiagnostic (type) [lines 846-874] [6 members] — Diagnostic emitted by GeoSpec loaders, analyzers, and matchers
207
207
  GeometryDiagnostic.code (property)
208
208
  GeometryDiagnostic.severity (property)
209
209
  GeometryDiagnostic.message (property)
210
210
  GeometryDiagnostic.suggestion (property)
211
211
  GeometryDiagnostic.spatial (property)
212
212
  GeometryDiagnostic.details (property)
213
- Vec3 (type) [lines 863-864] — Numeric 3D vector
214
- GeoSpecVec3 (type) [lines 866-867] — Numeric 3D vector
215
- CreateModelLoaderOptions (type) [lines 869-916] [9 members] — Defaults accepted by {@link import ('./load-model.js').createModelLoader}
213
+ Vec3 (type) [lines 876-877] — Numeric 3D vector
214
+ GeoSpecVec3 (type) [lines 879-880] — Numeric 3D vector
215
+ CreateModelLoaderOptions (type) [lines 882-929] [9 members] — Defaults accepted by {@link import ('./load-model.js').createModelLoader}
216
216
  CreateModelLoaderOptions.engine (property) — Initialized compiled engine supplied by the host, never selected by…
217
217
  CreateModelLoaderOptions.readSource (property) — Rooted host reader for direct filesystem or URL sources
218
218
  CreateModelLoaderOptions.format (property) — Geometry format to export when an individual call does not…
@@ -222,16 +222,16 @@ CreateModelLoaderOptions (type) [lines 869-916] [9 members] — Defaults accepte
222
222
  CreateModelLoaderOptions.mesh (property) — Whether STEP loading should also produce mesh evidence
223
223
  CreateModelLoaderOptions.meshLinearTolerance (property) — Linear tolerance used while meshing exact BRep evidence
224
224
  CreateModelLoaderOptions.meshAngularToleranceDegrees (property) — Angular tolerance in degrees used while meshing exact BRep evidence
225
- GeoSpecExporterCapabilities (type) [lines 918-940] [4 members] — What a {@link GeoSpecModelExporter} declares it can do
225
+ GeoSpecExporterCapabilities (type) [lines 931-953] [4 members] — What a {@link GeoSpecModelExporter} declares it can do
226
226
  GeoSpecExporterCapabilities.formats (property) — The formats `export` produces
227
227
  GeoSpecExporterCapabilities.parameters (property) — Accepts `parameters`
228
228
  GeoSpecExporterCapabilities.region (property) — Crops to `region` (an axis-aligned millimetre box) before export
229
229
  GeoSpecExporterCapabilities.inlineSources (property) — Accepts `inline` sources, which back `loadModel({ code })`
230
- GeoSpecExportFormat (type) [lines 942-943] — Formats a {@link GeoSpecModelExporter} may produce from a source-kind file
231
- GeoSpecLoadRegion (type) [lines 945-953] [2 members] — Axis-aligned crop box in canonical Z-up millimetres
230
+ GeoSpecExportFormat (type) [lines 955-956] — Formats a {@link GeoSpecModelExporter} may produce from a source-kind file
231
+ GeoSpecLoadRegion (type) [lines 958-966] [2 members] — Axis-aligned crop box in canonical Z-up millimetres
232
232
  GeoSpecLoadRegion.min (property)
233
233
  GeoSpecLoadRegion.max (property)
234
- GeoSpecModelArtifact (type) [lines 955-998] [7 members] — The bytes an exporter returns, in the canonical Z-up millimetre…
234
+ GeoSpecModelArtifact (type) [lines 968-1011] [7 members] — The bytes an exporter returns, in the canonical Z-up millimetre…
235
235
  GeoSpecModelArtifact.bytes (property)
236
236
  GeoSpecModelArtifact.format (property)
237
237
  GeoSpecModelArtifact.sourceUnit (property) — Unit of raw GLB coordinates
@@ -239,14 +239,14 @@ GeoSpecModelArtifact (type) [lines 955-998] [7 members] — The bytes an exporte
239
239
  GeoSpecModelArtifact.consumedSources (property) — Every source file the export read, as a path from…
240
240
  GeoSpecModelArtifact.diagnostics (property) — Notices from a successful export, admitted with the subject so…
241
241
  GeoSpecModelArtifact.exportOptions (property) — The export options the exporter applied, recorded in the load…
242
- GeoSpecModelExporter (type) [lines 1000-1034] [6 members] — Turns a source-kind model file into GLB or STEP bytes…
242
+ GeoSpecModelExporter (type) [lines 1013-1047] [6 members] — Turns a source-kind model file into GLB or STEP bytes…
243
243
  GeoSpecModelExporter.id (property)
244
244
  GeoSpecModelExporter.extensions (property)
245
245
  GeoSpecModelExporter.capabilities (property)
246
246
  GeoSpecModelExporter.export (method)
247
247
  GeoSpecModelExporter.revision (method) — The sources an export of `file` would read now, without…
248
248
  GeoSpecModelExporter.close (method) — Releases what the exporter created for one scope
249
- GeoSpecModelExportRequest (type) [lines 1036-1080] [8 members] — One export request
249
+ GeoSpecModelExportRequest (type) [lines 1049-1093] [8 members] — One export request
250
250
  GeoSpecModelExportRequest.file (property) — Entry file, as a path from the project root
251
251
  GeoSpecModelExportRequest.projectPath (property) — Absolute project root the exporter resolves `file` and its imports…
252
252
  GeoSpecModelExportRequest.format (property)
@@ -255,12 +255,12 @@ GeoSpecModelExportRequest (type) [lines 1036-1080] [8 members] — One export re
255
255
  GeoSpecModelExportRequest.region (property) — Millimetre crop box
256
256
  GeoSpecModelExportRequest.inline (property) — Source text keyed by project-relative path
257
257
  GeoSpecModelExportRequest.signal (property)
258
- GeoSpecModelFormat (type) [lines 1082-1083] — Geometry formats accepted by {@link import ('./load-model.js').loadModel}
259
- GeoSpecModelLoader (type) [lines 1085-1086] — Function shape used by GeoSpec runners to provide model loading…
260
- ManagedGeoSpecModelLoader (type) [lines 1088-1094] [1 members] — A configured loader whose admissions can be released with its…
258
+ GeoSpecModelFormat (type) [lines 1095-1096] — Geometry formats accepted by {@link import ('./load-model.js').loadModel}
259
+ GeoSpecModelLoader (type) [lines 1098-1099] — Function shape used by GeoSpec runners to provide model loading…
260
+ ManagedGeoSpecModelLoader (type) [lines 1101-1107] [1 members] — A configured loader whose admissions can be released with its…
261
261
  ManagedGeoSpecModelLoader.dispose (method)
262
- GeoSpecConsumedSources (type) [lines 1096-1100] — The source files one export read, each with its SHA-256…
263
- LoadModelCodeOptions (type) [lines 1102-1174] [12 members] — Inline code-CAD model load options
262
+ GeoSpecConsumedSources (type) [lines 1109-1113] — The source files one export read, each with its SHA-256…
263
+ LoadModelCodeOptions (type) [lines 1115-1187] [12 members] — Inline code-CAD model load options
264
264
  LoadModelCodeOptions.code (property) — Source files keyed by project-relative path
265
265
  LoadModelCodeOptions.file (property) — Entry path to render from {@link code }
266
266
  LoadModelCodeOptions.rootDir (property) — Not accepted
@@ -273,7 +273,7 @@ LoadModelCodeOptions (type) [lines 1102-1174] [12 members] — Inline code-CAD m
273
273
  LoadModelCodeOptions.meshAngularToleranceDegrees (property) — Angular tolerance in degrees used while meshing exact BRep evidence
274
274
  LoadModelCodeOptions.workUnitLimit (property) — Default work-unit budget for every claim on this subject
275
275
  LoadModelCodeOptions.region (property) — Axis-aligned millimetre box the exporter crops the model to before…
276
- LoadModelFileOptions (type) [lines 1176-1250] [11 members] — Filesystem-backed model load options
276
+ LoadModelFileOptions (type) [lines 1189-1263] [11 members] — Filesystem-backed model load options
277
277
  LoadModelFileOptions.file (property) — Model file to render, as a path from the project…
278
278
  LoadModelFileOptions.rootDir (property) — Project-relative folder `file` resolves in, for a suite that loads…
279
279
  LoadModelFileOptions.projectPath (property) — Absolute project root passed to the exporter
@@ -285,7 +285,7 @@ LoadModelFileOptions (type) [lines 1176-1250] [11 members] — Filesystem-backed
285
285
  LoadModelFileOptions.meshAngularToleranceDegrees (property) — Angular tolerance in degrees used while meshing exact BRep evidence
286
286
  LoadModelFileOptions.workUnitLimit (property) — Default work-unit budget for every claim on this subject
287
287
  LoadModelFileOptions.region (property) — Axis-aligned millimetre box the exporter crops the model to before…
288
- LoadModelOptions (type) [lines 1252-1277] [8 members] — Options accepted by {@link import ('./load-model.js').loadModel}
288
+ LoadModelOptions (type) [lines 1265-1290] [8 members] — Options accepted by {@link import ('./load-model.js').loadModel}
289
289
  LoadModelOptions.rootDir (property) — Project-relative folder `file` resolves in, for a suite that loads…
290
290
  LoadModelOptions.format (property) — Geometry format to export
291
291
  LoadModelOptions.parameters (property) — Explicit parameters passed to the exporter
@@ -294,7 +294,7 @@ LoadModelOptions (type) [lines 1252-1277] [8 members] — Options accepted by {@
294
294
  LoadModelOptions.meshLinearTolerance (property) — Linear tolerance used while meshing exact BRep evidence
295
295
  LoadModelOptions.meshAngularToleranceDegrees (property) — Angular tolerance in degrees used while meshing exact BRep evidence
296
296
  LoadModelOptions.workUnitLimit (property) — Default work-unit budget for every claim on this subject
297
- LoadModelSourceOptions (type) [lines 1279-1359] [13 members] — Direct geometry-source model load options
297
+ LoadModelSourceOptions (type) [lines 1292-1372] [13 members] — Direct geometry-source model load options
298
298
  LoadModelSourceOptions.source (property) — Geometry bytes, path, browser file/blob, or in-memory mesh buffer
299
299
  LoadModelSourceOptions.resources (property) — Named external resources consumed alongside the direct geometry bytes
300
300
  LoadModelSourceOptions.rootDir (property) — Project-relative folder a path `source` and each resource path resolve…
@@ -309,11 +309,22 @@ GeoSpecMatcher: {
309
309
  toHaveBoundingBox(first: Vec3 | GeoSpecBoundingBoxExpectation, second?: Vec3): GeoSpecAssertion;
310
310
  /**
311
311
  * Assert how many spatially disjoint chunks the mesh contains.
312
+ *
313
+ * On glTF, each `TRIANGLES` primitive is an operand unless the mesh declares
314
+ * `EXT_mesh_manifold`, which makes its primitives one body; a body spread
315
+ * over undeclared primitives refuses with a typed reason.
312
316
  */
313
317
  toHaveConnectedComponents(expected: GeoSpecConnectedComponentsExpectation): GeoSpecAssertion;
314
318
  /**
315
319
  * Assert closed mesh edge incidence; this does not prove vertex-manifold
316
320
  * validity, embeddedness, a Boolean fuse, or material connectivity.
321
+ *
322
+ * It judges one part at a time: a glTF node with a mesh is a part, and its
323
+ * `TRIANGLES` primitives together are that part's surface, so every welded
324
+ * edge must be shared by exactly two of its triangles. Separately named
325
+ * nodes are separate parts; an edge where two parts meet is open in both
326
+ * unless each closes it on its own, and the evidence reports such edges as
327
+ * `openEdgesSharedAcrossLabels`. Winding is not checked.
317
328
  */
318
329
  toBeWatertight(): GeoSpecAssertion;
319
330
  /**
@@ -419,10 +430,12 @@ GeoSpecMatcher: {
419
430
  toHaveBoundingBox(first: Vec3 | GeoSpecBoundingBoxExpectation, second?: Vec3): GeoSpecAssertion;
420
431
 
421
432
  // Assert how many spatially disjoint chunks the mesh contains
433
+ // Remarks: On glTF, each `TRIANGLES` primitive is an operand unless the mesh declares `EXT_mesh_manifold`, which makes its primitives one body; a body spread over undeclared primitives refuses with a typed reason.
422
434
  // GeoSpecMatcher.toHaveConnectedComponents (method)
423
435
  toHaveConnectedComponents(expected: GeoSpecConnectedComponentsExpectation): GeoSpecAssertion;
424
436
 
425
437
  // Assert closed mesh edge incidence
438
+ // Remarks: It judges one part at a time: a glTF node with a mesh is a part, and its `TRIANGLES` primitives together are that part's surface, so every welded edge must be shared by exactly two of its triangles. Separately named nodes are separate parts; an edge where two parts meet is open in both unless each closes it on its own, and the evidence reports such edges as `openEdgesSharedAcrossLabels`. Winding is not checked.
426
439
  // GeoSpecMatcher.toBeWatertight (method)
427
440
  toBeWatertight(): GeoSpecAssertion;
428
441