/**
 * A seam is a place the map has not yet decided.
 *
 * Every seam has real types — the signature is the handoff, and a ticket
 * lands by replacing a body rather than by designing an interface. The
 * implementation throws, so the skeleton wires up and runs end to end and
 * fails only where a decision is genuinely missing.
 *
 *     yarn seams        # the todo list, from the code
 */
export class Seam extends Error {
  constructor(
    readonly ticket: `#${number}`,
    readonly what: string,
  ) {
    super(`Seam ${ticket}: ${what} is not decided yet.`)
    this.name = 'Seam'
  }
}
