[
  {
    "submission_id": "SB-1001",
    "student_id": "ST-301",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 22:14",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-4",
        "result": "pass",
        "message_raw": null
      }
    ],
    "submitted_files": [
      "app.py",
      "README.md"
    ],
    "lint_flags": [],
    "code_hash": "9af31c",
    "memo": null
  },
  {
    "submission_id": "SB-1002",
    "student_id": "ST-302",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 23:47",
    "runner_status": "error",
    "case_results": [],
    "submitted_files": [
      "app.py"
    ],
    "lint_flags": [],
    "code_hash": "1b0e77",
    "memo": "실행 자체가 깨져 케이스 결과가 하나도 없는 제출입니다"
  },
  {
    "submission_id": "SB-1003",
    "student_id": "ST-303",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 21:02",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "fail",
        "message_raw": "AssertionError: expected 3 items, got 2"
      },
      {
        "case_id": "TC-4",
        "result": "fail",
        "message_raw": "KeyError: 'total'"
      }
    ],
    "submitted_files": [
      "app.py",
      "README.md"
    ],
    "lint_flags": [],
    "code_hash": "77c2aa",
    "memo": "일부만 통과라 튜터 판정 대상입니다"
  },
  {
    "submission_id": "SB-1004",
    "student_id": "ST-304",
    "assignment_id": "AS-데이터-02",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 20:31",
    "runner_status": "timeout",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "skip",
        "message_raw": "runner killed after 60s"
      }
    ],
    "submitted_files": [
      "solution.py"
    ],
    "lint_flags": [],
    "code_hash": "44de10",
    "memo": "채점이 시간 초과로 끊겨 뒤 케이스를 건너뛴 제출입니다"
  },
  {
    "submission_id": "SB-1005",
    "student_id": "ST-305",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 19:55",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-4",
        "result": "pass",
        "message_raw": null
      }
    ],
    "submitted_files": [
      "app.py"
    ],
    "lint_flags": [],
    "code_hash": "22bb90",
    "memo": "전부 통과했지만 필수 제출 파일인 README.md 가 빠진 제출입니다"
  },
  {
    "submission_id": "SB-1006",
    "student_id": "ST-303",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 2,
    "submitted_at_raw": "2026-05-19 09:12",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "fail",
        "message_raw": "AssertionError: expected 3 items, got 2"
      },
      {
        "case_id": "TC-4",
        "result": "fail",
        "message_raw": "KeyError: 'total'"
      }
    ],
    "submitted_files": [
      "app.py",
      "README.md"
    ],
    "lint_flags": [],
    "code_hash": "77c2aa",
    "memo": "앞 제출과 code_hash 가 같아 고친 것이 없는 재제출입니다"
  },
  {
    "submission_id": "SB-1007",
    "student_id": "ST-306",
    "assignment_id": "AS-데이터-02",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-20 오전 1:12",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "fail",
        "message_raw": "ValueError: could not convert string to float"
      }
    ],
    "submitted_files": [
      "solution.py",
      "report.md"
    ],
    "lint_flags": [],
    "code_hash": "5ce401",
    "memo": "마감 이후 제출이고 시각이 한글로 표기된 행입니다"
  },
  {
    "submission_id": "SB-1008",
    "student_id": "ST-307",
    "assignment_id": "AS-데이터-02",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 18:40",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-99",
        "result": "fail",
        "message_raw": "no such fixture"
      }
    ],
    "submitted_files": [
      "solution.py"
    ],
    "lint_flags": [],
    "code_hash": "8f0d23",
    "memo": "과제 정의에 없는 케이스 결과가 섞인 행입니다"
  },
  {
    "submission_id": "SB-1009",
    "student_id": "ST-308",
    "assignment_id": "AS-앱-01",
    "attempt_no": null,
    "submitted_at_raw": "2026-05-17 13:05",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      }
    ],
    "submitted_files": [
      "main.kt"
    ],
    "lint_flags": [],
    "code_hash": null,
    "memo": "옛 채점기에서 넘어와 회차 번호와 해시가 비어 있는 행입니다"
  },
  {
    "submission_id": "SB-1010",
    "student_id": "ST-309",
    "assignment_id": "AS-앱-01",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 11:20",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "fail",
        "message_raw": "Exception in thread \"main\" java.lang.NullPointerException\\n\\tat MainKt.main(Main.kt:12)"
      },
      {
        "case_id": "TC-2",
        "result": "skip",
        "message_raw": null
      }
    ],
    "submitted_files": [
      "main.kt"
    ],
    "lint_flags": [],
    "code_hash": "3a77bc",
    "memo": "러너 메시지에 줄바꿈과 따옴표가 그대로 들어온 행입니다"
  },
  {
    "submission_id": "SB-1011",
    "student_id": "ST-310",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 17:03",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "fail",
        "message_raw": "AssertionError: expected 3 items, got 2"
      },
      {
        "case_id": "TC-4",
        "result": "fail",
        "message_raw": "KeyError: 'total'"
      }
    ],
    "submitted_files": [
      "app.py",
      "README.md"
    ],
    "lint_flags": [],
    "code_hash": "c19d04",
    "memo": "SB-1003 과 실패 케이스 조합이 같아 한 묶음으로 서는 행입니다"
  },
  {
    "submission_id": "SB-1012",
    "student_id": "ST-311",
    "assignment_id": "AS-웹개발-04",
    "attempt_no": 1,
    "submitted_at_raw": "2026-05-18 16:41",
    "runner_status": "completed",
    "case_results": [
      {
        "case_id": "TC-1",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-2",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-3",
        "result": "pass",
        "message_raw": null
      },
      {
        "case_id": "TC-4",
        "result": "pass",
        "message_raw": null
      }
    ],
    "submitted_files": [
      "app.py",
      "README.md",
      "solution_copy.py"
    ],
    "lint_flags": [
      "forbidden_import:requests"
    ],
    "code_hash": "6e2f15",
    "memo": "전부 통과했지만 과제에서 금지한 라이브러리 사용 표시가 붙은 행입니다"
  }
]