Files
mech-ai/runtime/rule_templates/_review_sample_sleeve.json
T
2026-07-17 17:45:56 +08:00

599 lines
18 KiB
JSON

{
"Schema": "mechanical_rule_template_package_v1",
"PackageId": "tight_fit_sleeve_requires_disassembly_access",
"Source": {
"ImagePath": "built_in_sample",
"TextPath": null,
"ExtractionMode": "agent_authored_until_llm_adapter_is_connected",
"Notes": [
"The teaching figure has four examples: a is a problem pattern; b/c/d are pass-evidence patterns.",
"Hatch lines and printed scale are annotations and must not become contour evidence."
]
},
"ExtractionContract": {
"LlmResponsibility": "Extract rule semantics and image-side 2D structure templates from teaching image/text; do not judge product models.",
"ProgramResponsibility": "Extract model B-rep evidence, generate model-side 2D section structures, match templates, and make final rule decisions.",
"RequiredLlmOutputs": [
"rule object and trigger condition",
"problem type and problem evidence",
"pass evidence types",
"image 2D structure templates",
"visual anchors such as m/h/t",
"ignored visual annotations such as hatches and scale"
],
"RequiredProgramEvidence": [
"components and inferred categories",
"faces, cylinders, planes, axes, and contact-like relations",
"scene candidates",
"section 2D structure instances",
"real dimensions and contact validation evidence"
]
},
"BrepFactCapabilities": [
{
"Fact": "sleeve_component",
"SourceLayer": "3d_brep+component",
"ExtractorStatus": "implemented",
"Extractor": "SceneRecognizer.RecognizeSleeveInHole",
"RequiredPrimitive": "component category/name plus cylindrical section/contact evidence",
"MissingWhenAbsent": "No sleeve-like component candidate was recognized.",
"AuthoringAllowed": true
},
{
"Fact": "sleeve_like_component",
"SourceLayer": "3d_brep+component",
"ExtractorStatus": "implemented",
"Extractor": "SceneRecognizer.RecognizeSleeveInHole",
"RequiredPrimitive": "component category/name plus cylindrical section/contact evidence",
"MissingWhenAbsent": "No sleeve-like component candidate was recognized.",
"AuthoringAllowed": true
},
{
"Fact": "host_hole_component",
"SourceLayer": "3d_brep+component",
"ExtractorStatus": "implemented",
"Extractor": "SceneRecognizer.RecognizeSleeveInHole",
"RequiredPrimitive": "host/housing component and coaxial/contact evidence",
"MissingWhenAbsent": "No host or hole component candidate was recognized.",
"AuthoringAllowed": true
},
{
"Fact": "coaxial_cylinder_pair",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "SectionStructureSynthesizer/SketchGraph.Relations",
"RequiredPrimitive": "coaxial sleeve/host section geometry",
"MissingWhenAbsent": "No coaxial sleeve-host pair was detected.",
"AuthoringAllowed": true
},
{
"Fact": "axial_overlap",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "SectionStructureSynthesizer/SketchGraph.Relations",
"RequiredPrimitive": "overlapping axial ranges in section",
"MissingWhenAbsent": "No axial overlap between sleeve and host was detected.",
"AuthoringAllowed": true
},
{
"Fact": "close_fit_contact",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "SketchGraph.Relations contact",
"RequiredPrimitive": "contact or near-contact section edges",
"MissingWhenAbsent": "No close-fit contact relation was detected.",
"AuthoringAllowed": true
},
{
"Fact": "close_fit_contact_or_small_clearance",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "SketchGraph.Relations contact/clearance",
"RequiredPrimitive": "contact or small clearance section edges",
"MissingWhenAbsent": "No close-fit contact or small clearance relation was detected.",
"AuthoringAllowed": true
},
{
"Fact": "outside_accessible_push_path",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "ReadSketchDimension exposed_push_face_candidate",
"RequiredPrimitive": "exposed sleeve end edge and outside clearance",
"MissingWhenAbsent": "No exposed sleeve push face was detected.",
"AuthoringAllowed": true
},
{
"Fact": "push_path_reaches_sleeve_push_area",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "ReadSketchDimension exposed_push_face_candidate",
"RequiredPrimitive": "exposed sleeve end edge",
"MissingWhenAbsent": "No push path reaches a sleeve push area.",
"AuthoringAllowed": true
},
{
"Fact": "push_direction_has_removal_component",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "implemented",
"Extractor": "ReadSketchDimension exposed_push_face_candidate",
"RequiredPrimitive": "push face orientation against sleeve axis",
"MissingWhenAbsent": "No push direction with removal-axis component was detected.",
"AuthoringAllowed": true
},
{
"Fact": "outside_connected_void_gap",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "partial",
"Extractor": "GapFeatureSynthesizer.SectionFloodFill",
"RequiredPrimitive": "outside-connected free-space cells between sleeve and host",
"MissingWhenAbsent": "No outside-connected sleeve/host gap candidate was detected.",
"AuthoringAllowed": true
},
{
"Fact": "gap_path_reaches_sleeve_push_area",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "partial",
"Extractor": "GapFeatureSynthesizer.SectionFloodFill",
"RequiredPrimitive": "gap cluster adjacent to sleeve push area",
"MissingWhenAbsent": "No detected gap cluster reached the sleeve push area.",
"AuthoringAllowed": true
},
{
"Fact": "gap_width_sufficient",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "partial",
"Extractor": "GapFeatureSynthesizer.SectionFloodFill",
"RequiredPrimitive": "estimated minimum sleeve-host free-space width",
"MissingWhenAbsent": "No detected gap satisfied the minimum tool-width threshold.",
"AuthoringAllowed": true
},
{
"Fact": "tool_force_direction_valid",
"SourceLayer": "2d_section_brep",
"ExtractorStatus": "partial",
"Extractor": "GapFeatureSynthesizer.SectionFloodFill",
"RequiredPrimitive": "gap cluster with axial extent along removal direction",
"MissingWhenAbsent": "No detected gap had a sufficient removal-direction extent.",
"AuthoringAllowed": true
},
{
"Fact": "outside_connected_cylindrical_port",
"SourceLayer": "3d_brep",
"ExtractorStatus": "partial",
"Extractor": "PortFeatureSynthesizer.CylinderFaces",
"RequiredPrimitive": "small host/end-cap cylindrical face treated as port candidate",
"MissingWhenAbsent": "No small host/end-cap cylindrical port candidate was detected.",
"AuthoringAllowed": true
},
{
"Fact": "port_axis_intersects_sleeve_push_area",
"SourceLayer": "3d_brep",
"ExtractorStatus": "partial",
"Extractor": "PortFeatureSynthesizer.CylinderFaces",
"RequiredPrimitive": "port axis close enough to sleeve push area",
"MissingWhenAbsent": "No port axis was found to reach the sleeve push area.",
"AuthoringAllowed": true
},
{
"Fact": "port_diameter_sufficient",
"SourceLayer": "3d_brep",
"ExtractorStatus": "partial",
"Extractor": "PortFeatureSynthesizer.CylinderFaces",
"RequiredPrimitive": "cylindrical port radius/diameter",
"MissingWhenAbsent": "No detected port diameter satisfied the minimum threshold.",
"AuthoringAllowed": true
},
{
"Fact": "port_push_direction_valid",
"SourceLayer": "3d_brep",
"ExtractorStatus": "partial",
"Extractor": "PortFeatureSynthesizer.CylinderFaces",
"RequiredPrimitive": "port axis with removal-axis force component",
"MissingWhenAbsent": "No detected port axis had a sufficient removal-direction component.",
"AuthoringAllowed": true
},
{
"Fact": "thread_or_screw_feature",
"SourceLayer": "feature_metadata_or_modeled_thread",
"ExtractorStatus": "optional_only",
"Extractor": "optional SolidWorks feature/thread metadata or modeled helical B-rep",
"RequiredPrimitive": "thread feature metadata or real thread geometry",
"MissingWhenAbsent": "Pure B-rep often does not contain reliable thread semantics; keep this optional.",
"AuthoringAllowed": false
}
],
"SemanticRules": [
{
"RuleId": "tight_fit_sleeve_requires_disassembly_access",
"Title": "与孔配合紧密的套筒应考虑拆卸结构",
"TriggerCondition": {
"SceneType": "sleeve_in_hole",
"TargetObject": "sleeve",
"HostObject": "hole_or_housing",
"Relation": "tight_fit_or_contact_like",
"RequiredEvidence": [
"sleeve_component",
"host_hole_component",
"coaxial_cylinder_pair",
"axial_overlap",
"close_fit_contact"
]
},
"Problem": {
"ProblemType": "missing_disassembly_access",
"Message": "与孔配合紧密的套筒缺少可用拆卸结构,拆卸时可能难以放入工具或施力。",
"SourceExample": "a"
},
"PassEvidenceTypes": [
{
"EvidenceType": "external_push_access",
"SourceExample": "b",
"Anchor": "m",
"Required2DTemplateId": "b_external_push_access",
"RequiredModelEvidence": [
"outside_accessible_push_path",
"push_path_reaches_sleeve_push_area",
"push_direction_has_removal_component"
],
"OptionalModelEvidence": []
},
{
"EvidenceType": "tool_insertion_gap",
"SourceExample": "c",
"Anchor": "h",
"Required2DTemplateId": "c_tool_insertion_gap",
"RequiredModelEvidence": [
"outside_connected_void_gap",
"gap_path_reaches_sleeve_push_area",
"gap_width_sufficient",
"tool_force_direction_valid"
],
"OptionalModelEvidence": []
},
{
"EvidenceType": "ejector_screw_hole",
"SourceExample": "d",
"Anchor": "t",
"Required2DTemplateId": "d_ejector_screw_hole",
"RequiredModelEvidence": [
"outside_connected_cylindrical_port",
"port_axis_intersects_sleeve_push_area",
"port_diameter_sufficient",
"port_push_direction_valid"
],
"OptionalModelEvidence": [
"thread_or_screw_feature"
]
}
],
"DecisionLogic": {
"IfTriggerMissing": "not_applicable",
"IfTriggerUnknown": "needs_review",
"IfTriggeredAndAnyPassEvidence": "pass",
"IfTriggeredAndNoPassEvidence": "problem"
}
}
],
"ImageStructureTemplates": [
{
"TemplateId": "common_sleeve_in_hole_close_fit",
"Role": "trigger",
"SourceExample": "a_b_c_d_common",
"Anchor": "",
"Entities": [
{
"Id": "sleeve_material",
"Kind": "region",
"SemanticRole": "sleeve"
},
{
"Id": "host_material",
"Kind": "region",
"SemanticRole": "housing_or_hole"
},
{
"Id": "sleeve_axis",
"Kind": "axis",
"SemanticRole": "main_axis"
},
{
"Id": "fit_contact",
"Kind": "edge_pair",
"SemanticRole": "coincident_or_close_fit_edges"
}
],
"RequiredRelations": [
{
"Type": "coaxial",
"A": "sleeve_material",
"B": "host_material"
},
{
"Type": "contact",
"A": "sleeve_material",
"B": "host_material"
},
{
"Type": "axial_overlap",
"A": "sleeve_material",
"B": "host_material"
}
],
"IgnoredVisualElements": [
"hatch_lines",
"line_thickness",
"absolute_scale",
"printed_dimension_size",
"table_border",
"text_border"
]
},
{
"TemplateId": "a_no_removal_access",
"Role": "problem",
"SourceExample": "a",
"Anchor": "",
"Entities": [
{
"Id": "sleeve_material",
"Kind": "region",
"SemanticRole": "sleeve"
},
{
"Id": "host_material",
"Kind": "region",
"SemanticRole": "housing_or_hole"
},
{
"Id": "fit_contact",
"Kind": "edge_pair",
"SemanticRole": "contact"
},
{
"Id": "outside",
"Kind": "region",
"SemanticRole": "outside_air"
}
],
"RequiredRelations": [
{
"Type": "contact",
"A": "sleeve_material",
"B": "host_material"
},
{
"Type": "blocks_axial_removal",
"A": "host_material",
"B": "sleeve_material"
},
{
"Type": "missing",
"A": "external_push_access",
"B": "sleeve_material"
},
{
"Type": "missing",
"A": "tool_insertion_gap",
"B": "sleeve_material"
},
{
"Type": "missing",
"A": "ejector_screw_hole",
"B": "sleeve_material"
}
],
"IgnoredVisualElements": [
"hatch_lines",
"line_thickness",
"absolute_scale",
"printed_dimension_size",
"table_border",
"text_border"
]
},
{
"TemplateId": "b_external_push_access",
"Role": "pass",
"SourceExample": "b",
"Anchor": "m",
"Entities": [
{
"Id": "outside",
"Kind": "region",
"SemanticRole": "outside_air"
},
{
"Id": "push_access_path",
"Kind": "path",
"SemanticRole": "outside_accessible_force_path"
},
{
"Id": "sleeve_push_area",
"Kind": "edge_or_region",
"SemanticRole": "sleeve_force_receiving_area"
},
{
"Id": "removal_axis",
"Kind": "axis",
"SemanticRole": "sleeve_removal_direction"
}
],
"RequiredRelations": [
{
"Type": "connected_to_outside",
"A": "push_access_path",
"B": "outside"
},
{
"Type": "reaches",
"A": "push_access_path",
"B": "sleeve_push_area"
},
{
"Type": "direction_has_component",
"A": "push_access_path",
"B": "removal_axis"
}
],
"IgnoredVisualElements": [
"hatch_lines",
"line_thickness",
"absolute_scale",
"printed_dimension_size",
"table_border",
"text_border"
]
},
{
"TemplateId": "c_tool_insertion_gap",
"Role": "pass",
"SourceExample": "c",
"Anchor": "h",
"Entities": [
{
"Id": "sleeve_material",
"Kind": "region",
"SemanticRole": "sleeve"
},
{
"Id": "host_material",
"Kind": "region",
"SemanticRole": "housing_or_hole"
},
{
"Id": "gap_region",
"Kind": "region",
"SemanticRole": "void_gap"
},
{
"Id": "outside",
"Kind": "region",
"SemanticRole": "outside_air"
},
{
"Id": "sleeve_push_area",
"Kind": "edge_or_region",
"SemanticRole": "sleeve_force_receiving_area"
},
{
"Id": "removal_axis",
"Kind": "axis",
"SemanticRole": "sleeve_removal_direction"
},
{
"Id": "h",
"Kind": "dimension",
"SemanticRole": "minimum_tool_insertion_clearance"
}
],
"RequiredRelations": [
{
"Type": "connected_to_outside",
"A": "gap_region",
"B": "outside"
},
{
"Type": "reaches",
"A": "gap_region",
"B": "sleeve_push_area"
},
{
"Type": "direction_has_component",
"A": "gap_region",
"B": "removal_axis"
},
{
"Type": "gap_width_sufficient",
"A": "gap_region",
"B": "h"
}
],
"IgnoredVisualElements": [
"hatch_lines",
"line_thickness",
"absolute_scale",
"printed_dimension_size",
"table_border",
"text_border"
]
},
{
"TemplateId": "d_ejector_screw_hole",
"Role": "pass",
"SourceExample": "d",
"Anchor": "t",
"Entities": [
{
"Id": "sleeve_material",
"Kind": "region",
"SemanticRole": "sleeve"
},
{
"Id": "host_material",
"Kind": "region",
"SemanticRole": "housing_or_hole"
},
{
"Id": "port_region",
"Kind": "region",
"SemanticRole": "cylindrical_ejector_port"
},
{
"Id": "outside",
"Kind": "region",
"SemanticRole": "outside_air"
},
{
"Id": "sleeve_push_area",
"Kind": "edge_or_region",
"SemanticRole": "sleeve_force_receiving_area"
},
{
"Id": "port_axis",
"Kind": "axis",
"SemanticRole": "ejector_screw_axis"
},
{
"Id": "removal_axis",
"Kind": "axis",
"SemanticRole": "sleeve_removal_direction"
},
{
"Id": "t",
"Kind": "dimension",
"SemanticRole": "ejector_screw_hole_size"
}
],
"RequiredRelations": [
{
"Type": "connected_to_outside",
"A": "port_region",
"B": "outside"
},
{
"Type": "axis_intersects",
"A": "port_axis",
"B": "sleeve_push_area"
},
{
"Type": "direction_has_component",
"A": "port_axis",
"B": "removal_axis"
},
{
"Type": "port_diameter_sufficient",
"A": "port_region",
"B": "t"
}
],
"IgnoredVisualElements": [
"hatch_lines",
"line_thickness",
"absolute_scale",
"printed_dimension_size",
"table_border",
"text_border"
]
}
]
}