```ts
/**
 * Computes the seal for a given serial under the SR-11 scheme and returns the serial followed by its seal character.
 * @param {string} serial - The eight-digit serial to be sealed.
 * @returns {string} - The nine-character string consisting of the serial followed by its seal character.
 * @throws {Error} - If the input is not a string or if it does not consist of exactly eight decimal digits.
 */
export function sealSerial(serial: string): string {
  const weightCycle = [3, 7, 1, 3, 7, 1, 3, 7];
  if (typeof serial !== 'string' || !/^\d{8}$/.test(serial)) {
    throw new Error('Input must be a string of exactly eight decimal digits.');
  }

  let sum = 0;
  for (let i = 0; i < serial.length; i++) {
    sum += parseInt(serial[i], 10) * weightCycle[i];
  }

  const remainder = sum % 11;
  const sealChar = remainder === 10 ? 'K' : remainder.toString();

  return `${serial}${sealChar}`;
}
```