pbakaus/impeccable · error

concept-seed: --register must be safer or bolder

Error message

concept-seed: --register must be safer or bolder

What it means

Thrown when --register is provided but is not one of 'safer' or 'bolder'. The register is an optional user-steering axis on the familiar-to-bold scale applied to a direction re-roll round; null/undefined means 'no steering' and is allowed, but any other value must be exactly 'safer' or 'bolder'.

Source

Thrown at plugin/skills/impeccable/scripts/concept-seed.mjs:313

  scope = 'surface',
  key = process.env.IMPECCABLE_CONCEPT_SEED || crypto.randomBytes(4).toString('hex'),
  reroll = 0,
  register = null,
  mode = null,
  grain = null,
  platform = null,
  candidateCount = 7,
  catalogDir = CATALOG_DIR,
  _resolvedData = undefined,
} = {}) {
  if (scope !== 'surface' && scope !== 'direction') {
    throw new Error('concept-seed: --scope must be direction or surface');
  }
  if (!Number.isInteger(reroll) || reroll < 0) {
    throw new Error('concept-seed: --reroll must be a non-negative integer');
  }
  if (register !== null && register !== 'safer' && register !== 'bolder') {
    throw new Error('concept-seed: --register must be safer or bolder');
  }
  if (register !== null && reroll < 1) {
    throw new Error('concept-seed: --register steers a re-roll round; pass --reroll <n> with it');
  }
  if (register !== null && scope !== 'direction') {
    throw new Error('concept-seed: --register applies to direction rounds only');
  }
  if (mode !== null && !SEED_MODES.has(mode)) {
    throw new Error('concept-seed: --mode must be persuade, operate, read, or experience');
  }
  // Grain needs no mode: how much of the product is in play is independent of
  // which register of work it is.
  if (grain !== null && !COMPOSITION_GRAINS.includes(grain)) {
    throw new Error(`concept-seed: --grain must be one of ${COMPOSITION_GRAINS.join(', ')}`);
  }
  if (platform !== null && !COMPOSITION_PLATFORMS.includes(platform)) {
    throw new Error(`concept-seed: --platform must be one of ${COMPOSITION_PLATFORMS.join(', ')}`);
  }

View on GitHub (pinned to d14711ae3d)

Solutions

  1. Use exactly --register safer or --register bolder (or omit for no steering).
  2. Programmatic callers should pass register: null when no steering is desired.

Example fix

# before
$ node concept-seed.mjs --scope direction --reroll 1 --register bold ...

# after
$ node concept-seed.mjs --scope direction --reroll 1 --register bolder ...
Defensive patterns

Strategy: validation

Validate before calling

const REGISTERS = new Set(['safer', 'bolder']);
if (register != null && !REGISTERS.has(register)) {
  throw new Error('--register must be safer or bolder');
}

Type guard

function isValidRegister(value) {
  return value == null || value === 'safer' || value === 'bolder';
}

Try / catch

try {
  await seedConcepts({ scope: 'direction', register });
} catch (err) {
  if (/--register must be safer or bolder/.test(err.message)) {
    console.error('Use --register safer, --register bolder, or omit it.');
  } else throw err;
}

Prevention

When it happens

Trigger: Passing --register with a typo ('bold', 'safe', 'conservative', 'aggressive') or an unsupported value. The check is register === null || register === 'safer' || register === 'bolder'.

Common situations: CLI typo; a wrapper script passing a free-text register; confusion with synonyms (conservative/aggressive).

Related errors


AI-assisted analysis of pbakaus/impeccable@d14711ae3d (2026-08-13). Data as JSON: /api/errors/c608a4b95eeccdce. Report an issue: GitHub.