{
  "run_id": "T3-W02-ASYNC-20260829T033028Z",
  "overlay_version": "gt-w02-async-1.0",
  "fixture_base": "gt-core-b1.1",
  "certified_claim": false,
  "pass": true,
  "total": 3,
  "passed": 3,
  "failed": 0,
  "skipped": 0,
  "backend_sha": "5e6be85291fd9c2827d92e964957c76634956e2b",
  "frontend_sha": "dad5fa0ca49ea03592af558cb098c50b9d5a78e6",
  "matrix_rows": [
    "RT-W02-IDM-01",
    "RT-W02-REC-01"
  ],
  "seed": {
    "batch_t1": 163,
    "batch_t2": 164,
    "course_t1": 117,
    "course_t2": 118,
    "year_t1": 30,
    "year_t2": 84,
    "overlay": "gt-w02-1.0"
  },
  "cleanup": {
    "students": 4,
    "parents": 3,
    "partners": 7,
    "users_deactivated": 0,
    "batches": 0,
    "years": 0,
    "courses": 0
  },
  "cases": [
    {
      "case_id": "W02-ASYNC-IDM-DUPLICATE-KEY",
      "status": "PASS",
      "actor": "gt.school_admin",
      "precondition": null,
      "action": "POST /api/v1/admin/import/students-with-parents/job twice with same idempotency_key",
      "expected": "one job record and one student effect; stable poll result",
      "actual": {
        "job_ids": [
          4,
          4
        ],
        "duplicate_flags": [
          false,
          true
        ],
        "students": {
          "before": 0,
          "after": 1
        },
        "jobs": {
          "before": 0,
          "after": 1
        },
        "poll_state": "done"
      },
      "before_state": null,
      "after_state": null,
      "notes": ""
    },
    {
      "case_id": "W02-ASYNC-REC-PARTIAL-FAILURE",
      "status": "PASS",
      "actor": "gt.school_admin",
      "precondition": null,
      "action": "async import valid+invalid+valid strict_mode=false",
      "expected": "partial commit retained; redacted owner report; teacher denied",
      "actual": {
        "state": "done",
        "success_count": 2,
        "error_count": 1,
        "errors": [
          {
            "row": 2,
            "code": "INVALID_FORMAT",
            "message": "NISN harus tepat 10 digit.",
            "field": "nsn"
          }
        ],
        "teacher_poll": {
          "success": false,
          "error": "capability_denied",
          "message": "Insufficient permissions for this API route.",
          "capability": "students.manage",
          "path": "/api/v1/admin/import/students-with-parents/job/status"
        },
        "counts": {
          "a": 1,
          "b": 1,
          "bad": 0
        }
      },
      "before_state": null,
      "after_state": null,
      "notes": ""
    },
    {
      "case_id": "W02-ASYNC-REC-STUCK-RECOVERY",
      "status": "PASS",
      "actor": "shell+cron",
      "precondition": null,
      "action": "simulate stuck running job then _cron_process_pending",
      "expected": "stuck job recovered safely without duplicate effects",
      "actual": {
        "setup": {
          "job_id": 6,
          "state": "running"
        },
        "after": {
          "state": "done",
          "error_message": false,
          "recovery_retries": null
        },
        "students_before": 0,
        "students_after": 1
      },
      "before_state": null,
      "after_state": null,
      "notes": ""
    }
  ]
}
