[
  {
    "rule_id": "r001",
    "clip_id": "cl_A",
    "rule_text": "위험구역에서 안전모를 안 쓴 사람이 2프레임 이상 잡히면 이벤트",
    "gold_rule": {
      "zone": "z_danger",
      "class": "person",
      "attr_key": "helmet",
      "attr_val": "off",
      "min_frames": 2,
      "logic": "지속"
    },
    "gold_decision": "event",
    "hold_reason": null
  },
  {
    "rule_id": "r002",
    "clip_id": "cl_B",
    "rule_text": "위험구역에서 안전모를 안 쓴 사람이 2프레임 이상 잡히면 이벤트",
    "gold_rule": {
      "zone": "z_danger",
      "class": "person",
      "attr_key": "helmet",
      "attr_val": "off",
      "min_frames": 2,
      "logic": "지속"
    },
    "gold_decision": "no_event",
    "hold_reason": null
  },
  {
    "rule_id": "r003",
    "clip_id": "cl_D",
    "rule_text": "위험구역에서 안전모 미착용이 지속되면 이벤트",
    "gold_rule": {
      "zone": "z_danger",
      "class": "person",
      "attr_key": "helmet",
      "attr_val": "off",
      "min_frames": 2,
      "logic": "지속"
    },
    "gold_decision": "hold",
    "hold_reason": "missing_zone"
  },
  {
    "rule_id": "r004",
    "clip_id": "cl_C",
    "rule_text": "보행로에 지게차가 들어오면 이벤트",
    "gold_rule": {
      "zone": "z_walk",
      "class": "forklift",
      "attr_key": null,
      "attr_val": null,
      "min_frames": 1,
      "logic": "존재"
    },
    "gold_decision": "hold",
    "hold_reason": "class_unmapped"
  },
  {
    "rule_id": "r005",
    "clip_id": "cl_E",
    "rule_text": "적재구역에서 팔레트가 3단 넘게 쌓이면 이벤트",
    "gold_rule": {
      "zone": "z_stack",
      "class": "pallet",
      "attr_key": "stack_h",
      "attr_val": ">3",
      "min_frames": 1,
      "logic": "임계초과"
    },
    "gold_decision": "event",
    "hold_reason": null
  },
  {
    "rule_id": "r006",
    "clip_id": "cl_A",
    "rule_text": "위험구역에서 안전모 미착용이 3프레임 이상 지속되면 이벤트",
    "gold_rule": {
      "zone": "z_danger",
      "class": "person",
      "attr_key": "helmet",
      "attr_val": "off",
      "min_frames": 3,
      "logic": "지속"
    },
    "gold_decision": "hold",
    "hold_reason": "missing_attr"
  },
  {
    "rule_id": "r007",
    "clip_id": "cl_G",
    "rule_text": "통제구역에 사람이 들어오면 이벤트",
    "gold_rule": {
      "zone": "z_restrict",
      "class": "person",
      "attr_key": null,
      "attr_val": null,
      "min_frames": 1,
      "logic": "존재"
    },
    "gold_decision": "event",
    "hold_reason": null
  },
  {
    "rule_id": "r008",
    "clip_id": "cl_F",
    "rule_text": "위험구역에서 안전모를 안 쓴 사람이 2프레임 이상이면 이벤트",
    "gold_rule": {
      "zone": "z_danger",
      "class": "person",
      "attr_key": "helmet",
      "attr_val": "off",
      "min_frames": 2,
      "logic": "지속"
    },
    "gold_decision": "no_event",
    "hold_reason": null
  },
  {
    "rule_id": "r009",
    "clip_id": "cl_C",
    "rule_text": "현장이 위험하면 알아서 판단해 이벤트",
    "gold_rule": null,
    "gold_decision": "hold",
    "hold_reason": "unparsable_rule"
  },
  {
    "rule_id": "r010",
    "clip_id": "cl_E",
    "rule_text": "적재구역에서 팔레트가 정확히 3단이면 이벤트",
    "gold_rule": {
      "zone": "z_stack",
      "class": "pallet",
      "attr_key": "stack_h",
      "attr_val": "=3",
      "min_frames": 1,
      "logic": "임계일치"
    },
    "gold_decision": "event",
    "hold_reason": null
  },
  {
    "rule_id": "r011",
    "clip_id": "cl_B",
    "rule_text": "보행로에서 팔레트가 넘어지면 이벤트",
    "gold_rule": {
      "zone": "z_walk",
      "class": "pallet",
      "attr_key": "fallen",
      "attr_val": "true",
      "min_frames": 1,
      "logic": "존재"
    },
    "gold_decision": "hold",
    "hold_reason": "missing_attr"
  }
]