```ts
export function courseWeightTotal(categories: Array<Record<string, unknown>>): number {
  if (categories.length === 0) {
    throw new Error("Empty syllabus");
  }

  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("Invalid label");
    }
    if (labelSet.has(label)) {
      throw new Error("Duplicate label");
    }
    labelSet.add(label);

    if (!Number.isInteger(weight) || weight < 0) {
      throw new Error("Invalid weight");
    }
    totalWeight += weight;

    if (items.length === 0) {
      throw new Error("Category holds no items");
    }

    let earnedPoints = 0;
    let totalWorth = 0;

    for (const [earned, worth] of items) {
      if (!Number.isInteger(earned) || !Number.isInteger(worth) || worth <= 0 || earned < 0 || earned > worth) {
        throw new Error("Invalid item");
      }
      earnedPoints += earned;
      totalWorth += worth;
    }

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

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

  return totalWeight; // Placeholder, replace with actual calculation
}
```