[
  {
    "task_id": "task-04",
    "module_id": "M-01",
    "required_concepts": "변수|조건문",
    "pass_threshold": 0.7,
    "expected_minutes": 25,
    "banned_shortcut": "eval"
  },
  {
    "task_id": "task-07",
    "module_id": "M-01",
    "required_concepts": "조건문|반복문",
    "pass_threshold": 0.75,
    "expected_minutes": 30,
    "banned_shortcut": "eval"
  },
  {
    "task_id": "task-09",
    "module_id": "M-02",
    "required_concepts": "반복문|예외 처리",
    "pass_threshold": 0.8,
    "expected_minutes": 40,
    "banned_shortcut": "eval|exec"
  },
  {
    "task_id": "task-12",
    "module_id": "M-02",
    "required_concepts": "예외 처리|파일 입출력",
    "pass_threshold": 0.8,
    "expected_minutes": 50,
    "banned_shortcut": "eval|exec"
  },
  {
    "task_id": "task-14",
    "module_id": "M-03",
    "required_concepts": "리스트 컴프리헨션|정렬",
    "pass_threshold": 0.8,
    "expected_minutes": 35,
    "banned_shortcut": "eval"
  },
  {
    "task_id": "task-15",
    "module_id": "M-03",
    "required_concepts": "정렬|함수 정의",
    "pass_threshold": 0.75,
    "expected_minutes": 45,
    "banned_shortcut": "eval|exec"
  },
  {
    "task_id": "task-18",
    "module_id": "M-04",
    "required_concepts": "클래스|상속",
    "pass_threshold": 0.8,
    "expected_minutes": 60,
    "banned_shortcut": "exec"
  },
  {
    "task_id": "task-21",
    "module_id": "M-04",
    "required_concepts": "예외 처리|로깅",
    "pass_threshold": 0.8,
    "expected_minutes": 55,
    "banned_shortcut": "eval|exec"
  },
  {
    "task_id": "task-25",
    "module_id": "M-05",
    "required_concepts": "판다스 데이터프레임|결측 처리",
    "pass_threshold": 0.75,
    "expected_minutes": 70,
    "banned_shortcut": "eval"
  },
  {
    "task_id": "task-30",
    "module_id": "M-11",
    "required_concepts": "시각화|집계",
    "pass_threshold": 0.75,
    "expected_minutes": 65,
    "banned_shortcut": "eval"
  }
]