Reference
The model schema
An MBE3Dstudio project is one plain JSON object. Everything downstream (the geometry, the analyses, the report, the bill of materials) reads this and nothing else. Units are SI and are named in every field; a field without a unit suffix is dimensionless.
Conventions
Coordinates are right-handed and Z-up, in metres. Rotations are intrinsic XYZ Euler
angles in degrees. A part's placement is expressed in its parent's frame and
composes down the assembly tree, so world position is the chain of placements from the
root.
Model
The root object. Six collections and the list of operating modes the power budget rolls up over.
| Field | Type | Notes |
|---|---|---|
| schemaVersion | number | Currently 1. Older files are migrated on open, with a note. |
| meta | object | Name, programme, revision, description, last-modified timestamp. |
| modes | string[] | Named operating modes, e.g. standby, nominal, autonomy. |
| components | Component[] | The assembly tree. |
| connections | Connection[] | Routed harness runs between ports. |
| functions | Fn[] | What the system does, allocated onto components. |
| requirements | Requirement[] | Tagged, typed, with a verification method. |
| verifications | Verification[] | Activities that verify requirements, with status and evidence. |
| constraints | Constraint[] | Executable limits. See below. |
Component
A part. parentId is null for a root; placement composes down that tree.
Category is one of structure, sensor, compute, power, actuator, harness, payload, thermal
or other. It drives colour in the viewport and grouping in the bill of materials.
| Field | Type | Notes |
|---|---|---|
| mass_kg | number | Rolled up through the tree. Density is derived from this over the envelope volume. |
| cog | Vec3? | Centre of mass in the local frame. Defaults to the envelope centroid. |
| power | PowerProfile? | default_W plus an optional per-mode map. A mode absent from the map draws the default. |
| thermal | ThermalProfile? | Fraction of drawn power dissipated as heat, and an optional maximum case temperature in °C. |
| sensor | SensorSpec? | Modality, horizontal and vertical field of view in degrees, useful range in metres, and boresight. |
| phantom | boolean? | Excluded from clearance, for datums and keep-out volumes. |
| partNumber, supplier, unitCost_usd, quantity | varies | Procurement fields. These are what the BOM export rolls up. |
Geometry
Three envelope primitives. Every one is centred on the component origin.
{ "type": "box", "size": [1.2, 0.9, 0.3] }
{ "type": "cylinder", "radius_m": 0.055, "height_m": 0.09, "axis": "z" }
{ "type": "sphere", "radius_m": 0.12 }Ports
An attachment point in the owning component's local frame. Kind is one of power, data, fluid, mechanical or rf; direction is source, sink or bidirectional. Power ports carry a nominal voltage and a maximum current; data ports carry a protocol and a rate. Ports are what connections attach to, and a port wired to nothing is a finding.
Connections
A run between two ports. Routing is explicit: the length is the polyline through the endpoints and any waypoints, plus stated slack, not a straight line, so harness length is a real number. Medium is wire, coax, fibre, bus or pipe.
| Field | Type | Notes |
|---|---|---|
| gauge_awg | number? | American Wire Gauge. Drives resistance and copper mass. |
| conductors | number? | Current-carrying conductors in the run; a pair is 2. |
| waypoints | Vec3[]? | Intermediate routing points in world coordinates, metres. |
| slack_m | number? | Extra length for service loops and strain relief. |
| current_A | number? | Steady-state current, for the voltage-drop analysis. |
Functions, requirements and verification
A function is something the system does, allocated to the component that performs it. A function allocated to nothing has no implementation and no owner, and says so.
A requirement carries a human-facing tag such as
SYS-014, unique, and what the trace matrix and every finding refer to.
Kind is functional, performance, interface, physical, safety, environmental or
operational. Status is draft, proposed, approved or obsolete; only proposed and approved
count towards coverage, so work parked in draft cannot inflate the percentages.
Verification method is test, analysis, inspection or demonstration.
A verification is an activity that verifies one or more requirements, with a status of planned, passed, failed or blocked, and a place to record evidence.
Constraints
Typed and executed, not prose. Each variant is evaluated by a named function that returns
the measured value alongside the limit, which is why a violation can report by how much.
Set requirementId and every finding the constraint raises inherits that
requirement's tag.
{ "kind": "massBudget", "scopeId": "pod", "max_kg": 14 }
{ "kind": "powerBudget", "mode": "autonomy", "max_W": 320 }
{ "kind": "clearance", "min_m": 0 }
{ "kind": "cgEnvelope", "min": [...], "max": [...] }
{ "kind": "harnessLength", "connectionId": null, "max_m": 3.5 }
{ "kind": "voltageDrop", "connectionId": null, "maxFraction": 0.05 }
{ "kind": "sensorCoverage", "componentId": "lidar", "minUnoccluded": 0.97 }
{ "kind": "thermalDensity", "scopeId": "pod", "max_W_per_m3": 4000 }
A null scopeId means the whole model; a null connectionId means
the worst run rather than a named one.
Findings
The single output currency of every check. A finding is an error, a warning or an info, in one of eight categories, and it carries the measurement that produced it.
{
"id": "constraint/k-fov",
"severity": "error",
"category": "sensor",
"title": "Lidar unobstructed field of view violated",
"detail": "Spinning lidar sees 91.11 % of its field of view against a
97 % minimum, blocked by Cellular / V2X antenna mast
8.89 % (yaw 166° through 180° to -166°, pitch -8° to 8°,
nearest 0.125 m). Traces to SYS-014.",
"measured": 91.11,
"limit": 97,
"unit": "%",
"constraintId": "k-fov",
"requirementTag": "SYS-014",
"entityIds": ["lidar"]
}Findings sort by severity, then category, then title, stable between runs, so a report diffs cleanly against the last one.