```ts
/**
 * Calculates the total weighted score for a course syllabus.
 * @param categories - An array of category objects defining the syllabus.
 * @returns The total weighted score in basis points.
 */
export function courseWeightTotal(categories: Array<Record<string, unknown>>): number {
  if (categories.length === 0) {
    throw new Error("Syllabus cannot be empty.");
  }

  const labelSet = new Set<string>();
  let totalWeight = 0;

  for (const category of categories) {
    const label = category["label"] as string;
    const weight = category["weight"] as number;
    const items = category["items"] as Array<[number, number]>;

    if (typeof label !== "string" || label.length === 0) {
      throw new Error("Category label must be a non-empty string.");
    }
    if (labelSet.has(label)) {
      throw new Error("Duplicate category labels are not allowed.");
    }
    labelSet.add(label);

    if (!Number.isInteger(weight) || weight < 0) {
      throw new Error("Weight must be a non-negative whole number.");
    }
    totalWeight += weight;

    if (items.length === 0) {
      throw new Error("Category must have at least one item.");
    }

    let earnedPoints = 0;
    let totalWorth = 0;

    for (const [earned, worth] of items) {
      if (!Number.isInteger(earned) || !Number.isInteger(worth)) {
        throw new Error("Item points and worth must be whole numbers.");
      }
      if (earned < 0 || earned > worth) {
        throw new Error("Earned points must be non-negative and not exceed the item's worth.");
      }
      if (worth <= 0) {
        throw new Error("Item worth must be strictly positive.");
      }

      earnedPoints += earned;
      totalWorth += worth;
    }

    const contribution = Math.floor((weight * earnedPoints) / totalWorth);
    totalWeightedScore += contribution;
  }

  if (totalWeight !== 10000) {
    throw new Error("Weights must add up to exactly 10000.");
  }

  return totalWeightedScore;
}
```