```ts
/**
 * Clips a label to fit within a given character budget.
 * @param label - The original label string to clip.
 * @param budget - The maximum number of characters allowed for the label.
 * @returns The clipped label if it exceeds the budget, otherwise the original label.
 */
export function clipLabel(label: string, budget: number): string {
  if (typeof label !== 'string') {
    throw new Error('Label must be a string');
  }
  if (!Number.isInteger(budget) || budget < 4) {
    throw new Error('Budget must be an integer greater than or equal to 4');
  }

  if (label.length <= budget) {
    return label;
  }

  const clipped = label.slice(0, budget - 3).trimEnd();
  return `${clipped}...`;
}
```