{
  "archive_status": "backup_pending",
  "backup": {
    "archive_path": "",
    "archive_required": false,
    "attempt_details": [],
    "attempted": false,
    "attempts": 0,
    "backup_on_complete": true,
    "backup_on_failure": true,
    "base_url": "https://randy.rove-vernier.ts.net/backup",
    "bytes": 0,
    "configured": true,
    "connect_timeout_seconds": 30.0,
    "endpoint": "https://randy.rove-vernier.ts.net/backup/hunter-job-archive",
    "endpoint_host_path": "randy.rove-vernier.ts.net/backup/hunter-job-archive",
    "error": null,
    "files": 0,
    "finished_at": "",
    "job_id": "62174d5e",
    "max_attempts": 3,
    "max_bytes": 300000000,
    "ok": false,
    "provider": "randy",
    "read_timeout_seconds": 1800.0,
    "reason": "",
    "remote_archive_path": "",
    "remote_job_id": "",
    "retries": 2,
    "retry_backoff_seconds": 20.0,
    "started_at": "2026-06-05T12:18:00Z",
    "status": "skipped",
    "timeout_model": {
      "client_library": "requests+urllib3",
      "supports_connect_timeout": true,
      "supports_dedicated_write_timeout": false,
      "supports_read_timeout": true,
      "supports_total_timeout": true,
      "upload_timeout_behavior": "RANDY_BACKUP_UPLOAD_TIMEOUT is treated as the intended upload/read window. Python requests does not expose a separate socket write timeout knob, so large archive uploads can still fail as connection/write/read/total timeouts depending on proxy buffering and receiver behavior."
    },
    "timeout_seconds": 1800,
    "token_present": true,
    "total_timeout_seconds": 2400.0,
    "upload_timeout_seconds": 1800.0,
    "uploaded_bytes": 0,
    "uploaded_files": 0,
    "verification": {
      "artifact_ok": false,
      "job_exists": false,
      "ok": false,
      "status": "not_attempted",
      "table_ok": false,
      "table_path": ""
    },
    "verify": "not_attempted"
  },
  "created_at": "2026-06-05T12:16:07Z",
  "current_step": "",
  "error": null,
  "finished_at": "2026-06-05 12:18:00",
  "job_dir": "/app/jobs/62174d5e",
  "job_id": "62174d5e",
  "last_log_at": "2026-06-05T12:18:00Z",
  "outputs": {
    "bundle_url": "/api/jobs/62174d5e/bundle",
    "files_url": "/api/jobs/62174d5e/files",
    "job_dir": "jobs/62174d5e",
    "results_url": "/api/jobs/62174d5e/results"
  },
  "request": {
    "fasta_seq": ">3L85_1|Chains A, B|ADP-sugar pyrophosphatase|Homo sapiens (9606)\nKQYIISEELISEGKWVKLEKTTYMDPTGKTRTWESVKRTTRKEQTADGVAVIPVLQRTLHYECIVLVKQFRPPMGGYCIEFPAGLIDDGETPEAAALRELEEETGYKGDIAECSPAVCMDPGLSNCTIHIVTVTINGDDAENARPKPKPGDGEFVEVISLPKNDLLQRLDALVAEEHLTVDARVYSYALALKHAN",
    "search_query": "ADP-sugar pyrophosphatase 8-OXO-2'-DEOXY-GUANOSINE-5'-MONOPHOSPHATE 8OG bound inhibitor Homo sapiens",
    "target_name": "NUDT5"
  },
  "results_available_not_backed_up": true,
  "results_ready": true,
  "source": "web",
  "started_at": "2026-06-05 12:16:07",
  "status": "completed",
  "step_started_at": "12:17:59",
  "target": "NUDT5",
  "updated_at": "2026-06-05T12:18:00Z"
}