删除目录「json范例」

This commit is contained in:
2026-08-07 16:02:19 +08:00
parent 7dafb4b100
commit 9bf2ab197d
2 changed files with 0 additions and 370 deletions
-114
View File
@@ -1,114 +0,0 @@
{
"schema": "simplecad.std.planetary_joint.sop.v2",
"design_id": "joint_module_t100_t40_t20_v2",
"units": "millimetre_degree",
"axis_convention": {"main_axis": "x", "radial_plane": "yz", "right_handed": true},
"assembly_layout": {
"method": "semantic_axial_orbit",
"calibration_role": "offline_dimensions_only",
"rules": [
{"selector":"instance:main_case","mode":"root"},
{"selector":"instance:motor","mode":"coaxial","axial_mm":2.0,"local_axis":"y","axis_direction":1,"clock_degrees":-171.257405889209},
{"selector":"instance:back_plate","mode":"coaxial","axial_mm":8.0,"local_axis":"z","axis_direction":-1,"clock_degrees":157.5},
{"selector":"instance:bearing_retainer","mode":"coaxial","axial_mm":65.5,"local_axis":"z","axis_direction":1,"clock_degrees":-135.0},
{"selector":"instance:carrier_bearing","mode":"coaxial","axial_mm":61.0,"local_axis":"z","axis_direction":1,"clock_degrees":145.793046},
{"selector":"instance:carrier_inner","mode":"coaxial","axial_mm":56.2,"local_axis":"z","axis_direction":-1,"clock_degrees":-155.189147},
{"selector":"instance:carrier_outer","mode":"coaxial","axial_mm":67.5,"local_axis":"z","axis_direction":-1,"clock_degrees":-155.189147},
{"selector":"instance:magnet","mode":"coaxial","axial_mm":-1.7,"local_axis":"z","axis_direction":-1,"clock_degrees":119.787534},
{"selector":"instance:magnet_holder","mode":"coaxial","axial_mm":10.7,"local_axis":"z","axis_direction":-1,"clock_degrees":61.498736},
{"selector":"instance:controller_mount","mode":"coaxial","axial_mm":0.0,"radial_mm":4.0,"radial_angle_degrees":112.5,"local_axis":"z","axis_direction":-1,"clock_degrees":67.5},
{"selector":"instance:motor_coupling","mode":"coaxial","axial_mm":45.0,"local_axis":"z","axis_direction":1,"clock_degrees":-37.004915},
{"selector":"instance:ring_gear","mode":"coaxial","axial_mm":49.7,"local_axis":"x","axis_direction":1,"clock_degrees":-22.5},
{"selector":"instance:sun_gear","mode":"coaxial","axial_mm":46.0,"local_axis":"x","axis_direction":1,"clock_degrees":52.995085},
{"selector":"definition:planet_gear","mode":"orbit","axial_mm":53.5,"orbit_phase_degrees":-174.810852906765,"local_axis":"x","axis_direction":-1,"clock_degrees":145.90418,"clock_step_degrees":180.0},
{"selector":"definition:mf128_bearing","mode":"orbit","axial_mm":49.7,"orbit_phase_degrees":-174.810852906765,"local_axis":"z","axis_direction":1,"clock_degrees":0.0,"clock_step_degrees":120.0},
{"selector":"definition:planet_pin_nut","mode":"orbit","axial_mm":49.7,"orbit_phase_degrees":-174.810852906765,"local_axis":"z","axis_direction":-1,"clock_degrees":0.0,"clock_step_degrees":120.0}
]
},
"definitions": [
{"id":"motor_3500","family":"replaceable_motor_module","generator":"simplecadapi.std.planetary_joint.make_motor_module_rassembly","source_mode":"cots_step","maturity":"cots_step_verified","cots_asset":{"path":"simplecadapi/std/assets/3500-Motor_part2.cots.step","sha256":"fc132c44ab95e395aa444942303856534708ac7e50098dd006401b0a7830697d","solid_count":46,"geometry_editability":"immutable"},"connectors":[{"id":"mount","kind":"mount"},{"id":"output_axis","kind":"revolute_axis"}]},
{"id":"back_plate","family":"windowed_annular_plate","generator":"simplecadapi.std.planetary_joint.make_back_plate_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"controller_mount","kind":"mount"}]},
{"id":"bearing_retainer","family":"counterbored_retainer_ring","generator":"simplecadapi.std.planetary_joint.make_bearing_retainer_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"carrier_bearing","family":"radial_bearing","generator":"simplecadapi.std.bearing.make_bearing_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"bearing_seat"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"carrier_inner","family":"planet_carrier_plate","generator":"simplecadapi.std.planetary_joint.make_carrier_inner_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"outer_pair","kind":"mount"},{"id":"planet_axis_0","kind":"revolute_axis"},{"id":"planet_axis_1","kind":"revolute_axis"},{"id":"planet_axis_2","kind":"revolute_axis"}]},
{"id":"carrier_outer","family":"planet_carrier_plate","generator":"simplecadapi.std.planetary_joint.make_carrier_outer_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"planet_axis_0","kind":"revolute_axis"},{"id":"planet_axis_1","kind":"revolute_axis"},{"id":"planet_axis_2","kind":"revolute_axis"}]},
{"id":"magnet","family":"cylindrical_magnet","generator":"simplecadapi.std.planetary_joint.make_magnet_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"magnet_holder","family":"slotted_shaft_hub","generator":"simplecadapi.std.planetary_joint.make_magnet_holder_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"magnet_seat","kind":"shaft_hub"}]},
{"id":"main_case","family":"windowed_cylindrical_cage","generator":"simplecadapi.std.planetary_joint.make_main_case_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"stage_axis","kind":"gear_axis"},{"id":"sun_axis","kind":"gear_axis"},{"id":"carrier_inner_mount","kind":"revolute_axis"},{"id":"carrier_outer_mount","kind":"mount"},{"id":"motor_mount","kind":"mount"},{"id":"magnet_holder_mount","kind":"mount"},{"id":"bearing_mount","kind":"bearing_seat"},{"id":"retainer_mount","kind":"mount"},{"id":"back_plate_mount","kind":"mount"}]},
{"id":"mf128_bearing","family":"flanged_radial_bearing","generator":"simplecadapi.std.planetary_joint.make_bearing_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"bearing_seat"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"gear_seat","kind":"bearing_seat"}]},
{"id":"controller_mount","family":"four_arm_controller_mount","generator":"simplecadapi.std.planetary_joint.make_controller_mount_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"frame"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"coupling","family":"shaft_hub_coupling","generator":"simplecadapi.std.planetary_joint.make_motor_coupling_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"shaft_hub"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"},{"id":"sun_seat","kind":"shaft_hub"}]},
{"id":"planet_gear","family":"involute_spur_gear","generator":"simplecadapi.std.planetary_joint.make_planet_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"planet_pin_nut","family":"stepped_planet_pin","generator":"simplecadapi.std.planetary_joint.make_planet_pin_nut_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"revolute_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"ring_gear","family":"involute_internal_ring_gear","generator":"simplecadapi.std.planetary_joint.make_ring_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]},
{"id":"sun_gear","family":"involute_spur_gear","generator":"simplecadapi.std.planetary_joint.make_sun_gear_rpart","source_mode":"formula_std","maturity":"formula_verified","connectors":[{"id":"axis","kind":"gear_axis"},{"id":"bottom","kind":"mount"},{"id":"top","kind":"mount"}]}
],
"instances": [
{"id":"motor","definition_id":"motor_3500"},{"id":"back_plate","definition_id":"back_plate"},{"id":"bearing_retainer","definition_id":"bearing_retainer"},{"id":"carrier_bearing","definition_id":"carrier_bearing"},{"id":"carrier_inner","definition_id":"carrier_inner"},{"id":"carrier_outer","definition_id":"carrier_outer"},{"id":"magnet","definition_id":"magnet"},{"id":"magnet_holder","definition_id":"magnet_holder"},{"id":"main_case","definition_id":"main_case"},{"id":"controller_mount","definition_id":"controller_mount"},{"id":"motor_coupling","definition_id":"coupling"},{"id":"ring_gear","definition_id":"ring_gear"},{"id":"sun_gear","definition_id":"sun_gear"},
{"id":"planet_0","definition_id":"planet_gear","pattern_index":0},{"id":"planet_1","definition_id":"planet_gear","pattern_index":1},{"id":"planet_2","definition_id":"planet_gear","pattern_index":2},
{"id":"planet_bearing_0","definition_id":"mf128_bearing","pattern_index":0},{"id":"planet_bearing_1","definition_id":"mf128_bearing","pattern_index":1},{"id":"planet_bearing_2","definition_id":"mf128_bearing","pattern_index":2},
{"id":"planet_pin_nut_0","definition_id":"planet_pin_nut","pattern_index":0},{"id":"planet_pin_nut_1","definition_id":"planet_pin_nut","pattern_index":1},{"id":"planet_pin_nut_2","definition_id":"planet_pin_nut","pattern_index":2}
],
"expected_definition_counts": [
{"definition_id":"motor_3500","count":1},{"definition_id":"back_plate","count":1},{"definition_id":"bearing_retainer","count":1},{"definition_id":"carrier_bearing","count":1},{"definition_id":"carrier_inner","count":1},{"definition_id":"carrier_outer","count":1},{"definition_id":"magnet","count":1},{"definition_id":"magnet_holder","count":1},{"definition_id":"main_case","count":1},{"definition_id":"mf128_bearing","count":3},{"definition_id":"controller_mount","count":1},{"definition_id":"coupling","count":1},{"definition_id":"planet_gear","count":3},{"definition_id":"planet_pin_nut","count":3},{"definition_id":"ring_gear","count":1},{"definition_id":"sun_gear","count":1}
],
"assembly_root_instance_id": "main_case",
"assembly_relations": [
{"id":"case_ring","type":"fixed","a":{"instance_id":"main_case","connector_id":"stage_axis"},"b":{"instance_id":"ring_gear","connector_id":"axis"}},
{"id":"case_sun","type":"revolute","motion_role":"input","a":{"instance_id":"main_case","connector_id":"sun_axis"},"b":{"instance_id":"sun_gear","connector_id":"axis"}},
{"id":"case_carrier","type":"revolute","motion_role":"output","a":{"instance_id":"main_case","connector_id":"carrier_inner_mount"},"b":{"instance_id":"carrier_inner","connector_id":"axis"}},
{"id":"carrier_pair","type":"fixed","a":{"instance_id":"carrier_inner","connector_id":"outer_pair"},"b":{"instance_id":"carrier_outer","connector_id":"bottom"}},
{"id":"case_motor","type":"fixed","a":{"instance_id":"main_case","connector_id":"motor_mount"},"b":{"instance_id":"motor","connector_id":"mount"}},
{"id":"motor_coupling","type":"coaxial","a":{"instance_id":"motor","connector_id":"output_axis"},"b":{"instance_id":"motor_coupling","connector_id":"axis"}},
{"id":"coupling_sun","type":"shaft_hub","a":{"instance_id":"motor_coupling","connector_id":"sun_seat"},"b":{"instance_id":"sun_gear","connector_id":"bottom"}},
{"id":"case_back_plate","type":"fixed","a":{"instance_id":"main_case","connector_id":"back_plate_mount"},"b":{"instance_id":"back_plate","connector_id":"top"}},
{"id":"back_controller","type":"fixed","a":{"instance_id":"back_plate","connector_id":"controller_mount"},"b":{"instance_id":"controller_mount","connector_id":"bottom"}},
{"id":"case_retainer","type":"fixed","a":{"instance_id":"main_case","connector_id":"retainer_mount"},"b":{"instance_id":"bearing_retainer","connector_id":"bottom"}},
{"id":"retainer_bearing","type":"bearing_support","a":{"instance_id":"main_case","connector_id":"bearing_mount"},"b":{"instance_id":"carrier_bearing","connector_id":"bottom"}},
{"id":"carrier_holder","type":"fixed","a":{"instance_id":"main_case","connector_id":"magnet_holder_mount"},"b":{"instance_id":"magnet_holder","connector_id":"bottom"}},
{"id":"holder_magnet","type":"coaxial","a":{"instance_id":"magnet_holder","connector_id":"magnet_seat"},"b":{"instance_id":"magnet","connector_id":"bottom"}},
{"id":"p0_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-64.53167251667816,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_0"},"b":{"instance_id":"planet_0","connector_id":"axis"}},
{"id":"p1_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-37.44500372242583,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_1"},"b":{"instance_id":"planet_1","connector_id":"axis"}},
{"id":"p2_carrier","type":"revolute","motion_role":"planet_spin","phase_offset_degrees":-73.5259251169227,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_2"},"b":{"instance_id":"planet_2","connector_id":"axis"}},
{"id":"p0_bearing","type":"bearing_support","phase_offset_degrees":36.00649279656336,"a":{"instance_id":"planet_0","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_0","connector_id":"gear_seat"}},
{"id":"p1_bearing","type":"bearing_support","phase_offset_degrees":-46.20734049393244,"a":{"instance_id":"planet_1","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_1","connector_id":"gear_seat"}},
{"id":"p2_bearing","type":"bearing_support","phase_offset_degrees":75.40929304722758,"a":{"instance_id":"planet_2","connector_id":"bottom"},"b":{"instance_id":"planet_bearing_2","connector_id":"gear_seat"}},
{"id":"p0_nut","type":"coaxial","phase_offset_degrees":-22.90017962687879,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_0"},"b":{"instance_id":"planet_pin_nut_0","connector_id":"axis"}},
{"id":"p1_nut","type":"coaxial","phase_offset_degrees":34.66246921060146,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_1"},"b":{"instance_id":"planet_pin_nut_1","connector_id":"axis"}},
{"id":"p2_nut","type":"coaxial","phase_offset_degrees":-169.91053711858657,"a":{"instance_id":"carrier_outer","connector_id":"planet_axis_2"},"b":{"instance_id":"planet_pin_nut_2","connector_id":"axis"}}
],
"transmission": {
"type":"simple_planetary","module_mm":0.8,"pressure_angle_deg":20.0,
"teeth":{"sun":20,"planet":40,"ring":100},"planet_count":3,
"center_radius_mm":24.0,"center_tolerance_mm":0.01,
"fixed_member":"ring_gear","input_member":"sun_gear","output_member":"carrier",
"fixed_ring_ratio":6.0,"ratio_tolerance":0.000001,
"meshes":[
{"id":"sun_p0","type":"external","a":"sun_gear","b":"planet_0","backlash_mm":0.02},{"id":"sun_p1","type":"external","a":"sun_gear","b":"planet_1","backlash_mm":0.02},{"id":"sun_p2","type":"external","a":"sun_gear","b":"planet_2","backlash_mm":0.02},
{"id":"ring_p0","type":"internal","a":"ring_gear","b":"planet_0","backlash_mm":0.02},{"id":"ring_p1","type":"internal","a":"ring_gear","b":"planet_1","backlash_mm":0.02},{"id":"ring_p2","type":"internal","a":"ring_gear","b":"planet_2","backlash_mm":0.02}
]
},
"public_connectors": [
{"id":"housing_mount","source":{"instance_id":"main_case","connector_id":"bottom"}},
{"id":"input_axis","source":{"instance_id":"motor","connector_id":"output_axis"}},
{"id":"output_axis","source":{"instance_id":"carrier_inner","connector_id":"axis"}}
],
"interference_contract": {
"policy":"no_unlisted_positive_volume",
"volume_tolerance_mm3":0.000000001,
"motion_samples_degrees":[0.0,18.0,36.0,54.0,72.0],
"designed_interference_fits":[
{
"id":"case_ring_press_fit",
"a":"main_case",
"b":"ring_gear",
"type":"source_matched_press_fit",
"target_volume_mm3":0.8802681242104882,
"volume_tolerance_mm3":0.000001,
"evidence":"teacher parts at independently verified teacher assembly pose"
}
]
},
"verification": {"default_geometry":"strict_brep","assembly":"connector_residuals_and_collision","motion":"willis_residual_and_interference_sweep","parameter_sweeps":5},
"runtime_policy": {"teacher_geometry_allowed":false,"absolute_matrix_replay_allowed":false,"source_cad_required":false,"checksum_locked_cots_step_allowed":true}
}
@@ -1,256 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://simplecad.local/schemas/planetary-joint-sop-v2.schema.json",
"title": "SimpleCAD planetary-joint executable SOP V2",
"type": "object",
"additionalProperties": false,
"required": [
"schema", "design_id", "units", "axis_convention", "assembly_layout", "definitions",
"instances", "expected_definition_counts", "assembly_root_instance_id", "assembly_relations",
"transmission", "public_connectors", "interference_contract", "verification", "runtime_policy"
],
"properties": {
"schema": {"const": "simplecad.std.planetary_joint.sop.v2"},
"design_id": {"type": "string", "minLength": 1},
"units": {"const": "millimetre_degree"},
"axis_convention": {
"type": "object", "additionalProperties": false,
"required": ["main_axis", "radial_plane", "right_handed"],
"properties": {
"main_axis": {"enum": ["x", "y", "z"]},
"radial_plane": {"enum": ["xy", "yz", "zx"]},
"right_handed": {"const": true}
}
},
"assembly_layout": {
"type": "object", "additionalProperties": false,
"required": ["method", "calibration_role", "rules"],
"properties": {
"method": {"const": "semantic_axial_orbit"},
"calibration_role": {"const": "offline_dimensions_only"},
"rules": {
"type": "array", "minItems": 16,
"items": {"$ref": "#/$defs/layout_rule"}
}
}
},
"definitions": {
"type": "array", "minItems": 16, "maxItems": 16,
"items": {"$ref": "#/$defs/definition"}
},
"instances": {
"type": "array", "minItems": 22, "maxItems": 22,
"items": {"$ref": "#/$defs/instance"}
},
"expected_definition_counts": {
"type": "array", "minItems": 16, "maxItems": 16,
"items": {
"type": "object", "additionalProperties": false,
"required": ["definition_id", "count"],
"properties": {
"definition_id": {"type": "string", "minLength": 1},
"count": {"type": "integer", "minimum": 1}
}
}
},
"assembly_root_instance_id": {"type": "string", "minLength": 1},
"assembly_relations": {
"type": "array", "minItems": 1,
"items": {"$ref": "#/$defs/relation"}
},
"transmission": {"$ref": "#/$defs/transmission"},
"public_connectors": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {
"type": "object", "additionalProperties": false,
"required": ["id", "source"],
"properties": {
"id": {"type": "string", "minLength": 1},
"source": {"$ref": "#/$defs/endpoint"}
}
}
},
"interference_contract": {
"type": "object", "additionalProperties": false,
"required": ["policy", "volume_tolerance_mm3", "motion_samples_degrees", "designed_interference_fits"],
"properties": {
"policy": {"const": "no_unlisted_positive_volume"},
"volume_tolerance_mm3": {"type": "number", "minimum": 0},
"motion_samples_degrees": {
"type": "array", "minItems": 2, "uniqueItems": true,
"items": {"type": "number"}
},
"designed_interference_fits": {
"type": "array", "items": {"$ref": "#/$defs/interference_fit"}
}
}
},
"verification": {
"type": "object", "additionalProperties": false,
"required": ["default_geometry", "assembly", "motion", "parameter_sweeps"],
"properties": {
"default_geometry": {"enum": ["strict_brep", "numeric_per_solid", "interface_only"]},
"assembly": {"const": "connector_residuals_and_collision"},
"motion": {"const": "willis_residual_and_interference_sweep"},
"parameter_sweeps": {"type": "integer", "minimum": 2}
}
},
"runtime_policy": {
"type": "object", "additionalProperties": false,
"required": ["teacher_geometry_allowed", "absolute_matrix_replay_allowed", "source_cad_required", "checksum_locked_cots_step_allowed"],
"properties": {
"teacher_geometry_allowed": {"const": false},
"absolute_matrix_replay_allowed": {"const": false},
"source_cad_required": {"const": false},
"checksum_locked_cots_step_allowed": {"const": true}
}
}
},
"$defs": {
"layout_rule": {
"type": "object", "additionalProperties": false,
"required": ["selector", "mode"],
"properties": {
"selector": {"type": "string", "pattern": "^(instance|definition):[^:]+$"},
"mode": {"enum": ["root", "coaxial", "orbit"]},
"axial_mm": {"type": "number"},
"radial_mm": {"type": "number", "minimum": 0},
"radial_angle_degrees": {"type": "number"},
"orbit_phase_degrees": {"type": "number"},
"local_axis": {"enum": ["x", "y", "z"]},
"axis_direction": {"enum": [-1, 1]},
"clock_degrees": {"type": "number"},
"clock_step_degrees": {"type": "number"}
},
"allOf": [
{
"if": {"properties": {"mode": {"const": "root"}}},
"then": {"required": ["selector", "mode"]},
"else": {"required": ["axial_mm", "local_axis", "axis_direction", "clock_degrees"]}
},
{
"if": {"properties": {"mode": {"const": "orbit"}}},
"then": {"required": ["orbit_phase_degrees", "clock_step_degrees"]}
}
]
},
"connector": {
"type": "object", "additionalProperties": false,
"required": ["id", "kind"],
"properties": {
"id": {"type": "string", "minLength": 1},
"kind": {"enum": ["frame", "revolute_axis", "mount", "gear_axis", "bearing_seat", "shaft_hub"]}
}
},
"definition": {
"type": "object", "additionalProperties": false,
"required": ["id", "family", "generator", "source_mode", "maturity", "connectors"],
"properties": {
"id": {"type": "string", "minLength": 1},
"family": {"type": "string", "minLength": 1},
"generator": {"type": "string", "pattern": "^simplecadapi\\.std\\."},
"source_mode": {"enum": ["formula_std", "cots_step"]},
"maturity": {"enum": ["formula_verified", "formula_provisional", "cots_step_verified"]},
"cots_asset": {"$ref": "#/$defs/cots_asset"},
"connectors": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/connector"}}
},
"allOf": [
{
"if": {"properties": {"source_mode": {"const": "cots_step"}}},
"then": {"required": ["cots_asset"], "properties": {"maturity": {"const": "cots_step_verified"}}},
"else": {"not": {"required": ["cots_asset"]}}
}
]
},
"cots_asset": {
"type": "object", "additionalProperties": false,
"required": ["path", "sha256", "solid_count", "geometry_editability"],
"properties": {
"path": {"type": "string", "pattern": "^[^/].*\\.step$"},
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
"solid_count": {"type": "integer", "minimum": 1},
"geometry_editability": {"const": "immutable"}
}
},
"instance": {
"type": "object", "additionalProperties": false,
"required": ["id", "definition_id"],
"properties": {
"id": {"type": "string", "minLength": 1},
"definition_id": {"type": "string", "minLength": 1},
"pattern_index": {"type": "integer", "minimum": 0}
}
},
"endpoint": {
"type": "object", "additionalProperties": false,
"required": ["instance_id", "connector_id"],
"properties": {
"instance_id": {"type": "string", "minLength": 1},
"connector_id": {"type": "string", "minLength": 1}
}
},
"relation": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "a", "b"],
"properties": {
"id": {"type": "string", "minLength": 1},
"type": {"enum": ["fixed", "revolute", "bearing_support", "shaft_hub", "coaxial"]},
"a": {"$ref": "#/$defs/endpoint"},
"b": {"$ref": "#/$defs/endpoint"},
"motion_role": {"enum": ["input", "output", "planet_spin", "free"]},
"phase_offset_degrees": {"type": "number"}
}
},
"interference_fit": {
"type": "object", "additionalProperties": false,
"required": ["id", "a", "b", "type", "target_volume_mm3", "volume_tolerance_mm3", "evidence"],
"properties": {
"id": {"type": "string", "minLength": 1},
"a": {"type": "string", "minLength": 1},
"b": {"type": "string", "minLength": 1},
"type": {"const": "source_matched_press_fit"},
"target_volume_mm3": {"type": "number", "exclusiveMinimum": 0},
"volume_tolerance_mm3": {"type": "number", "minimum": 0},
"evidence": {"type": "string", "minLength": 1}
}
},
"mesh": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "a", "b", "backlash_mm"],
"properties": {
"id": {"type": "string", "minLength": 1},
"type": {"enum": ["external", "internal"]},
"a": {"type": "string", "minLength": 1},
"b": {"type": "string", "minLength": 1},
"backlash_mm": {"type": "number", "minimum": 0}
}
},
"transmission": {
"type": "object", "additionalProperties": false,
"required": ["type", "module_mm", "pressure_angle_deg", "teeth", "planet_count", "center_radius_mm", "center_tolerance_mm", "fixed_member", "input_member", "output_member", "fixed_ring_ratio", "ratio_tolerance", "meshes"],
"properties": {
"type": {"const": "simple_planetary"},
"module_mm": {"type": "number", "exclusiveMinimum": 0},
"pressure_angle_deg": {"type": "number", "exclusiveMinimum": 0, "exclusiveMaximum": 90},
"teeth": {
"type": "object", "additionalProperties": false,
"required": ["sun", "planet", "ring"],
"properties": {
"sun": {"type": "integer", "minimum": 6},
"planet": {"type": "integer", "minimum": 6},
"ring": {"type": "integer", "minimum": 12}
}
},
"planet_count": {"type": "integer", "minimum": 2},
"center_radius_mm": {"type": "number", "exclusiveMinimum": 0},
"center_tolerance_mm": {"type": "number", "minimum": 0},
"fixed_member": {"const": "ring_gear"},
"input_member": {"const": "sun_gear"},
"output_member": {"const": "carrier"},
"fixed_ring_ratio": {"type": "number", "exclusiveMinimum": 1},
"ratio_tolerance": {"type": "number", "minimum": 0},
"meshes": {"type": "array", "minItems": 6, "maxItems": 6, "items": {"$ref": "#/$defs/mesh"}}
}
}
}
}