```ts
export function smallestArrangement(counts: number[]): string {
  if (counts.length !== 4) {
    throw new Error("Input must be a list of four integer counts.");
  }

  const isValidCount = (count: number): boolean =>
    Number.isInteger(count) && count >= 0 && count <= 12;

  if (!counts.every(isValidCount)) {
    throw new Error("Counts must be integers between 0 and 12.");
  }

  if (counts.every((count) => count === 0)) {
    throw new Error("At least one count must be positive.");
  }

  const letters = ["a", "b", "c", "d"];
  let result = "";

  while (counts.some((count) => count > 0)) {
    let nextLetter: string | null = null;

    for (let i = 0; i < counts.length; i++) {
      if (counts[i] === 0) continue;
      const letter = letters[i];

      if (
        result.length < 2 ||
        !(result[result.length - 1] === letter && result[result.length - 2] === letter)
      ) {
        nextLetter = letter;
        break;
      }
    }

    if (!nextLetter) {
      throw new Error("No valid arrangement possible.");
    }

    result += nextLetter;
    counts[letters.indexOf(nextLetter)]--;
  }

  return result;
}
```