```ts
export function runBufferedLine(capacities: number[], buffers: number[], ticks: number): { made: number; left: number[] } {
  if (capacities.length === 0) throw new Error("Station list cannot be empty");
  if (buffers.length !== capacities.length - 1) throw new Error("Buffer list must have one entry fewer than the station list");
  if (!capacities.every(c => Number.isInteger(c) && c > 0)) throw new Error("All per-tick limits must be positive integers");
  if (!buffers.every(b => Number.isInteger(b) && b > 0)) throw new Error("All buffer sizes must be positive integers");
  if (!Number.isInteger(ticks) || ticks < 0) throw new Error("Tick count must be a non-negative integer");

  const made = 0;
  const left = buffers.slice();

  for (let t = 0; t < ticks; t++) {
    for (let i = capacities.length - 1; i >= 0; i--) {
      const capacity = capacities[i];
      const bufferIn = i > 0 ? left[i - 1] : Infinity;
      const bufferOut = i < capacities.length - 1 ? buffers[i] - left[i] : Infinity;
      const move = Math.min(capacity, bufferIn, bufferOut);
      if (i === 0) made += move;
      if (i > 0) left[i - 1] -= move;
      left[i] += move;
    }
  }

  return { made, left };
}
```