# Capability cheat sheet

Every capability on one page, with its kind, admitted subjects, failure code and refusal codes, generated from the registry and the reference.

Canonical page: https://www.geospec.xyz/docs/reference/cheat-sheet

One row per capability in the engine's registry, generated at build time from `registry.rs` and from each capability's reference section, so the sheet and the sections cannot disagree. Each name links to its section and is spelt for the language you are reading: the registry name in TypeScript, the snake\_case method in Python.

| Capability | Kind | Mesh | STEP | glTF | Failed with | Refused with |
| --- | --- | --- | --- | --- | --- | --- |
| [`toHaveBoundingBox`](https://www.geospec.xyz/docs/reference/measurement.mdx#tohaveboundingbox) (`to_have_bounding_box`) | Assertion | Yes | Yes | Yes | `GEOSPEC_BOUNDING_BOX_MISMATCH`, `GEOSPEC_NEGATED_MATCH`, `GEOSPEC_NEGATED_BOUNDING_BOX_MATCH` | common only |
| [`toHaveConnectedComponents`](https://www.geospec.xyz/docs/reference/mesh.mdx#tohaveconnectedcomponents) (`to_have_connected_components`) | Assertion | Yes | Yes | Yes | `GEOSPEC_CONNECTED_COMPONENTS_MISMATCH` | `GEOSPEC_INVALID_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toBeWatertight`](https://www.geospec.xyz/docs/reference/mesh.mdx#tobewatertight) (`to_be_watertight`) | Assertion | Yes | Yes | Yes | `GEOSPEC_WATERTIGHT_MISMATCH` | `GEOSPEC_ANALYSIS_LIMIT` |
| [`toHaveNoComponentInterference`](https://www.geospec.xyz/docs/reference/relationships.mdx#tohavenocomponentinterference) (`to_have_no_component_interference`) | Assertion | No | Yes | Yes | `GEOSPEC_COMPONENT_INTERFERENCE` | `GEOSPEC_COMPONENT_PARTITION_INCONCLUSIVE`, `GEOSPEC_SELECTOR_UNMATCHED`, `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_INVALID_EVIDENCE`, `GEOSPEC_UNSUPPORTED_SELECTOR`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toHaveAssemblyOccurrences`](https://www.geospec.xyz/docs/reference/brep.mdx#tohaveassemblyoccurrences) (`to_have_assembly_occurrences`) | Assertion | No | Yes | Yes | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_RESOURCE_LIMIT` |
| [`toHaveSpatialRelationships`](https://www.geospec.xyz/docs/reference/relationships.mdx#tohavespatialrelationships) (`to_have_spatial_relationships`) | Assertion | No | Yes | Yes | `GEOSPEC_SPATIAL_RELATIONSHIP_MISMATCH` | `GEOSPEC_SELECTOR_UNMATCHED`, `GEOSPEC_SELECTOR_AMBIGUOUS`, `GEOSPEC_SELECTOR_UNSUPPORTED_EVIDENCE`, `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_INVALID_EVIDENCE`, `GEOSPEC_UNSUPPORTED_SELECTOR`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toHaveMeshIntegrity`](https://www.geospec.xyz/docs/reference/mesh.mdx#tohavemeshintegrity) (`to_have_mesh_integrity`) | Assertion | Yes | Yes | Yes | `GEOSPEC_MESH_INTEGRITY_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toHaveNoDiagnostics`](https://www.geospec.xyz/docs/reference/mesh.mdx#tohavenodiagnostics) (`to_have_no_diagnostics`) | Assertion | Yes | Yes | Yes | `GEOSPEC_DIAGNOSTICS_PRESENT` | common only |
| [`toHaveSurfaceArea`](https://www.geospec.xyz/docs/reference/measurement.mdx#tohavesurfacearea) (`to_have_surface_area`) | Assertion | Yes | Yes | Yes | `GEOSPEC_MEASUREMENT_MISMATCH` | common only |
| [`toHaveVolume`](https://www.geospec.xyz/docs/reference/measurement.mdx#tohavevolume) (`to_have_volume`) | Assertion | Yes | Yes | Yes | `GEOSPEC_MEASUREMENT_MISMATCH` | common only |
| [`toHaveMass`](https://www.geospec.xyz/docs/reference/measurement.mdx#tohavemass) (`to_have_mass`) | Assertion | Yes | Yes | Yes | `GEOSPEC_MEASUREMENT_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveCenterOfMass`](https://www.geospec.xyz/docs/reference/measurement.mdx#tohavecenterofmass) (`to_have_center_of_mass`) | Assertion | Yes | Yes | Yes | `GEOSPEC_MEASUREMENT_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toBeValidBrep`](https://www.geospec.xyz/docs/reference/brep.mdx#tobevalidbrep) (`to_be_valid_brep`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveTopologyCounts`](https://www.geospec.xyz/docs/reference/brep.mdx#tohavetopologycounts) (`to_have_topology_counts`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveStepUnits`](https://www.geospec.xyz/docs/reference/brep.mdx#tohavestepunits) (`to_have_step_units`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveProductStructure`](https://www.geospec.xyz/docs/reference/brep.mdx#tohaveproductstructure) (`to_have_product_structure`) | Assertion | No | Yes | Yes | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_RESOURCE_LIMIT` |
| [`toHavePlanarFace`](https://www.geospec.xyz/docs/reference/features.mdx#tohaveplanarface) (`to_have_planar_face`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveCylindricalFace`](https://www.geospec.xyz/docs/reference/features.mdx#tohavecylindricalface) (`to_have_cylindrical_face`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveCircularHole`](https://www.geospec.xyz/docs/reference/features.mdx#tohavecircularhole) (`to_have_circular_hole`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveCircularHolePattern`](https://www.geospec.xyz/docs/reference/features.mdx#tohavecircularholepattern) (`to_have_circular_hole_pattern`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveChamferFeature`](https://www.geospec.xyz/docs/reference/features.mdx#tohavechamferfeature) (`to_have_chamfer_feature`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveFilletFeature`](https://www.geospec.xyz/docs/reference/features.mdx#tohavefilletfeature) (`to_have_fillet_feature`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveMinimumWallThickness`](https://www.geospec.xyz/docs/reference/features.mdx#tohaveminimumwallthickness) (`to_have_minimum_wall_thickness`) | Assertion | No | Yes | No | `GEOSPEC_FEATURE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE` |
| [`toHaveVoidContinuity`](https://www.geospec.xyz/docs/reference/features.mdx#tohavevoidcontinuity) (`to_have_void_continuity`) | Assertion | No | Yes | No | `GEOSPEC_VOID_CONTINUITY_MISMATCH` | `GEOSPEC_VOID_CONTINUITY_UNSUPPORTED`, `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`analyzeBrep`](https://www.geospec.xyz/docs/reference/queries.mdx#analyzebrep) | Query | No | Yes | No | none | `GEOSPEC_BREP_EVIDENCE_UNAVAILABLE` |
| [`analyzeMesh`](https://www.geospec.xyz/docs/reference/queries.mdx#analyzemesh) | Query | Yes | Yes | Yes | none | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`inspectGeometry`](https://www.geospec.xyz/docs/reference/queries.mdx#inspectgeometry) | Query | No | Yes | Yes | none | `GEOSPEC_SELECTOR_UNSUPPORTED_EVIDENCE`, `GEOSPEC_SELECTOR_UNMATCHED`, `GEOSPEC_SELECTOR_AMBIGUOUS` |
| [`analyzeMeshOverlap`](https://www.geospec.xyz/docs/reference/queries.mdx#analyzemeshoverlap) | Query | No | Yes | Yes | none | `GEOSPEC_COMPONENT_PARTITION_INCONCLUSIVE`, `GEOSPEC_EXACT_COMPONENT_INVALID`, `GEOSPEC_MANIFOLD_COMPONENT_INVALID`, `GEOSPEC_SELECTOR_UNMATCHED`, `MATCHER_TIMEOUT`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toSatisfyRationalPlate`](https://www.geospec.xyz/docs/reference/contracts.mdx#tosatisfyrationalplate) (`to_satisfy_rational_plate`) | Contract | No | No | No | `GEOSPEC_RATIONAL_PLATE_MISMATCH` | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`toSatisfyParallelPlaneDistance`](https://www.geospec.xyz/docs/reference/contracts.mdx#tosatisfyparallelplanedistance) (`to_satisfy_parallel_plane_distance`) | Contract | No | Yes | No | `GEOSPEC_PARALLEL_PLANE_DISTANCE_MISMATCH` | `GEOSPEC_CERTIFICATE_UNVERIFIED`, `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`queryPmi`](https://www.geospec.xyz/docs/reference/queries.mdx#querypmi) | Query | No | Yes | No | none | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_ANALYSIS_LIMIT` |
| [`minimumDistance`](https://www.geospec.xyz/docs/reference/queries.mdx#minimumdistance) | Query | No | Yes | No | none | `GEOSPEC_UNSUPPORTED_EVIDENCE`, `GEOSPEC_INVALID_SELECTION` |

**Kind.** An assertion answers passed, failed or refused under either polarity. A query reports what it measured and takes positive polarity only. A contract takes no arguments: its requirement is fixed by name.

**Mesh, STEP, glTF.** Yes when the section's admitted geometry lists that subject class. Mesh is a `mesh-buffer-v1` subject; glTF covers glTF and GLB. `toSatisfyRationalPlate` (Python `to_satisfy_rational_plate`) admits a `rational-plate` subject only.

**Failed with.** The code a failed claim carries; `none` means the section names no failure code.

**Refused with.** The section's own refusal codes. The [common refusals](https://www.geospec.xyz/docs/reference/overview.mdx#common-refusals) apply to every row: `MATCHER_TIMEOUT` when the budget is spent, `GEOSPEC_ANALYSIS_LIMIT` and `GEOSPEC_RESOURCE_LIMIT` when an analysis or admission limit is exceeded, `GEOSPEC_UNSUPPORTED_EVIDENCE` on a face-reading claim over a STEP whose faces carry no surface, `GEOSPEC_UNSUPPORTED_EVIDENCE` on a y-up STEP, and `GEOSPEC_BACKEND_FAILED`. [Read a refusal](https://www.geospec.xyz/docs/guides/read-a-refusal.mdx) says what to change.