```typescript
export function siftDownRun(heap: number[], start: number): number[][] {
  if (heap.length === 0) throw new Error("Heap cannot be empty");
  if (start < 0 || start >= heap.length) throw new Error("Start index out of bounds");
  if (!Number.isInteger(heap[start])) throw new Error("Start element must be a whole number");

  const result: number[][] = [heap.slice()];
  let current = start;
  while (true) {
    const left = 2 * current + 1;
    let smallest = left;

    const right = left + 1;
    if (right < heap.length && heap[right] <= heap[smallest]) {
      smallest = right;
    }

    if (smallest === left) break;

    const held = heap[current];
    heap[current] = heap[smallest];
    heap[smallest] = held;

    current = smallest;
  }
  result.push(heap.slice().map((_, i) => start + i).filter(i => i !== current));

  return result;
}
```