{
  "schema_version": "pact_eval100_metrics_v1",
  "inherits": {
    "dataset_2_1_metrics": "articulated_generation_metrics_v0.3_full_20260510",
    "upstream_categories": [
      {
        "name": "availability",
        "weight": 15,
        "metrics": [
          "artifact_completeness",
          "parser_success",
          "scenesmith_compatibility",
          "simulator_compatibility",
          "reproducibility"
        ]
      },
      {
        "name": "geometry",
        "weight": 15,
        "metrics": [
          "chamfer_distance",
          "f_score",
          "normal_consistency",
          "visual_quality",
          "manifold_sanity",
          "scale_consistency",
          "texture_coverage"
        ]
      },
      {
        "name": "part_decomposition",
        "weight": 15,
        "metrics": [
          "link_count_accuracy",
          "part_segmentation_miou",
          "semantic_part_accuracy",
          "tree_edit_distance",
          "parent_child_accuracy",
          "orphan_duplicate_part_rate"
        ]
      },
      {
        "name": "kinematics",
        "weight": 25,
        "metrics": [
          "joint_count_accuracy",
          "joint_type_accuracy",
          "axis_angular_error",
          "origin_distance_error",
          "limit_error",
          "motion_direction_consistency",
          "kinematic_tree_validity",
          "motion_accuracy"
        ]
      },
      {
        "name": "motion_consistency",
        "weight": 15,
        "metrics": [
          "detachment_distance",
          "collision_rate",
          "self_collision_rate",
          "open_state_plausibility",
          "trajectory_smoothness",
          "closed_state_assembly_error"
        ]
      },
      {
        "name": "physics",
        "weight": 10,
        "metrics": [
          "stability",
          "push_stability",
          "actuation_success_rate",
          "joint_constraint_violation",
          "collision_geometry_availability",
          "mass_inertia_sanity"
        ]
      },
      {
        "name": "scene_usability",
        "weight": 5,
        "metrics": [
          "canonical_orientation",
          "scale_for_placement",
          "support_surface_availability",
          "placement_robustness",
          "category_retrieval_quality",
          "interaction_readiness"
        ]
      }
    ]
  },
  "primary_score": {
    "name": "pact_eval100_weighted_score",
    "scale": "0..100",
    "aggregation": "weighted mean over metric groups; report macro averages by source, category, and problem_tag"
  },
  "metric_groups": [
    {
      "name": "pipeline_availability",
      "weight": 10,
      "metrics": [
        "inference_success",
        "object_json_valid",
        "glb_export_success",
        "part_asset_completeness",
        "runtime_seconds",
        "peak_gpu_memory_mb",
        "reproducible_seed_match"
      ]
    },
    {
      "name": "geometry",
      "weight": 15,
      "metrics": [
        "chamfer_l2",
        "fscore_tau_0_01",
        "normal_consistency",
        "scale_consistency",
        "mesh_manifold_sanity",
        "texture_or_material_coverage"
      ]
    },
    {
      "name": "part_decomposition",
      "weight": 20,
      "metrics": [
        "part_count_mae",
        "part_count_accuracy",
        "part_segmentation_miou_if_masks_available",
        "semantic_part_accuracy",
        "parent_child_accuracy",
        "tree_edit_distance",
        "orphan_duplicate_part_rate"
      ]
    },
    {
      "name": "kinematics",
      "weight": 25,
      "metrics": [
        "joint_count_mae",
        "joint_precision",
        "joint_recall",
        "joint_f1",
        "joint_type_accuracy",
        "axis_angular_error_deg",
        "origin_distance_error",
        "joint_limit_error",
        "kinematic_tree_validity"
      ]
    },
    {
      "name": "motion_consistency",
      "weight": 15,
      "metrics": [
        "detachment_distance",
        "collision_rate",
        "self_collision_rate",
        "closed_state_assembly_error",
        "open_state_plausibility",
        "trajectory_smoothness"
      ]
    },
    {
      "name": "ot_routing_diagnostics",
      "weight": 10,
      "metrics": [
        "ot_modules_active",
        "ot_gate_mean",
        "ot_plan_marginal_error",
        "ot_assignment_entropy",
        "ot_edge_delta",
        "ot_mask_prior_beta",
        "ot_mask_dropout_delta",
        "ot_virtual_mass",
        "part_patch_compactness"
      ]
    },
    {
      "name": "robustness_breakdown",
      "weight": 5,
      "metrics": [
        "macro_score_by_source_dataset",
        "macro_score_by_category",
        "macro_score_by_problem_tag",
        "worst_10pct_score",
        "failure_cluster_count"
      ]
    }
  ],
  "required_breakdowns": [
    "source_dataset",
    "category",
    "split",
    "problem_tags",
    "joint_type"
  ],
  "status_labels": [
    "measured",
    "not_provided",
    "not_applicable",
    "failed",
    "requires_gt",
    "requires_simulation"
  ]
}
