Requirements#

Summary#

Levels follow PCBA to USD Input Contract 1.0.2.

  • The board asset MUST have a single defaultPrim (name free) and a board-root prim discoverable by its pcba:board:* metadata — provenance, packaging manifest, thickness, origin convention. The root may be the default prim, a child of a wrapper, or a panel’s class master; pcba:board:name is board-root only (UO.001).

  • A board_substrate mesh MUST exist. The side-grouped hierarchy the contract illustrates (layers, components, copper, paste, holes, registries) is desirable, not required; discovery is by pcba:mesh:role and pcba:* attributes, never by prim name (UO.003).

  • Stage conventions are MUST: metersPerUnit = 0.001, upAxis = Z, no compensating root scale/rotation, board in the XY plane with Z as the normal (UO.006).

  • A Registries scope SHOULD expose rel pcba:board:members listing every placed component, all mount classes. It is an index, not a source of truth (UO.008).

  • Every Mesh MUST carry an authoritative pcba:mesh:role token from the contract vocabulary; prim names must not replace it; no solder roles (UO.009).

  • All contract attributes MUST live under pcba: in the recognized scopes (component, mesh, pin, board, prov, layer, panel, fixture, variance); unknown scopes are advisory warnings (UO.010).

  • Renderable meshes SHOULD bind a material of the role’s class; pcba:mesh:matClass is explicit on pkg_* / fixture_* and derived on board_* (UO.011).

  • References/payloads MUST be relative and self-contained; the board is one asset placed per panel position; repeated parts reference one prototype with instanceable = true (UO.012).

  • A distributed package MUST author pcba:board:packageManifest inventorying the packaged files, distinct from the CI.007 component manifest (UO.013).

  • The board root MUST declare pcba:board:originConvention; originPointMm MUST accompany datum_explicit (UO.014).

  • The board root MUST carry pcba:board:generatorVersion and pcba:board:contentHash (UO.015).

  • Asset file names SHOULD be clean ASCII with no spaces or parentheses (UO.016).

  • Where a mesh role determines its material class, the bound material MUST agree with it, checked by class (UO.017).

Requirements#

Tags

Summary

Compatibility

Validator

❓

The board asset MUST have a single defaultPrim — its name is free — and MUST contain a board-root prim discoverable by its pcba:board:* attributes, which carry the board-level metadata (provenance, packaging, thickness, origin convention). The board root MAY be the default prim but need not be.This page follows PCBA to USD Input Contract 1.0.2, sections 2, 3 and 11.

BoardRootChecker

❓

The board body MUST be present as a Mesh with pcba:mesh:role = "board_substrate". Beyond that, the contract describes a desirable stage shape — layers grouped by side, components, copper, paste, holes, registries — but does not mandate it: an exporter that satisfies every requirement with a different arrangement is conformant. Discovery is by role and attribute, never by prim name.This page follows PCBA to USD Input Contract 1.0.2, section 3.

StageLayoutChecker

❓

The board stage MUST use metersPerUnit = 0.001 (mm) and upAxis = "Z", with no compensating root scale or rotation on the default prim. The board lies in the XY plane with +Z as the board normal: component height is +Z, pcba:component:heightMm is the Z extent, and pcba:component:nominalRotationDeg is about Z.This page follows PCBA to USD Input Contract 1.0.2, section 2.

StageConventionsChecker

❓

The board SHOULD expose a component registry: a Registries scope carrying rel pcba:board:members that targets every placed component on the board, all mount classes, so a consumer can enumerate parts without a full stage traversal. The registry is an index, not a source of truth.This page follows PCBA to USD Input Contract 1.0.2, section 3.

RegistriesChecker

❓

Every Mesh on the board MUST carry pcba:mesh:role, a token from the contract vocabulary that names what the geometry is. The role is authoritative — a prim name may supplement it but must never replace it.This page follows PCBA to USD Input Contract 1.0.2, section 9.

MeshRoleChecker

❓

Author PCB contract metadata under pcba:, with colon-delimited scopes and lower-camelCase leaf names. Use ordinary custom USD attributes: no custom schema, schema fallback, or plugin is required. Other domains’ properties retain their own namespaces.This page follows PCBA to USD Input Contract 1.0.2, sections 1, 11 and 14.

open-usd

NamespaceChecker

❓

[Renderable meshes SHOULD carry a bound material so the board renders with its nominal appearance. Board copper and mask geometry with production-accurate materials is required by BG.002; the bound material’s class must agree with the mesh role (UO.017).This page follows PCBA to USD Input Contract 1.0.2, sections 3, 5 and 9.](/capabilities/pcb_aoi/usd_organization/requirements/material-binding.md)

MaterialBindingChecker

❓

All references and payloads MUST use relative asset paths and nothing may point outside the package. The board is one asset, placed — never duplicated: a panel references the board once per position, and every repeated component references a shared prototype with instanceable = true.This page follows PCBA to USD Input Contract 1.0.2, section 4.

RelativeReferencesChecker

❓

A distributed board package MUST author pcba:board:packageManifest (an asset) on the board-root prim — an inventory of the packaged files. This is the package-file BOM, distinct from the CI.007 component manifest.

PackageManifestChecker

❓

The board root MUST declare pcba:board:originConvention — how the board’s zero was chosen: cad_bbox_lower_left, fiducial_f1, mounting_hole, datum_explicit, or unspecified. When it is datum_explicit, pcba:board:originPointMm MUST state where the datum is. pcba:board:originLabel SHOULD name the datum feature.This page follows PCBA to USD Input Contract 1.0.2, section 11.

OriginConventionChecker

❓

The board root MUST carry pcba:board:generatorVersion and pcba:board:contentHash, both non-empty strings. Together they record which exporter produced the board and give a content hash of the referenced assets for integrity verification.This page follows PCBA to USD Input Contract 1.0.2, section 11.

ProvenanceChecker

❓

Asset file names SHOULD be clean ASCII with no spaces and no parentheses, so USD asset references and downstream tooling resolve reliably across platforms. (Prim and attribute names must be valid identifiers regardless.)This page follows PCBA to USD Input Contract 1.0.2, section 2.

FileNamingChecker

❓

Where a mesh’s pcba:mesh:role determines its material class, the surface’s material MUST agree with that class. A copper-role surface bound to a solder-mask material (or vice versa) is a defect: the role and the appearance disagree about what the surface physically is.

RoleMaterialConsistencyChecker