code: function(pname, pi) {
        forge.task.start({
          type: pname,
          run: function(task) {
             subrun[pi](task);
          },
          success: function(task) {
             ptask.unblock();
          },
          failure: function(task) {
             ptask.unblock();
          }
        });
      }
docs: we pass the iterator from the loop below as a parameter to a function because it is otherwise included in the closure and changes as the loop changes -- causing i to always be set to its highest value