pbakaus/impeccable · error · Error

concept-seed: --register steers a re-roll round; pass --rero

Error message

concept-seed: --register steers a re-roll round; pass --reroll <n> with it

What it means

Thrown when `register` is set but `reroll` is less than 1. Register only has meaning on a re-roll round (reroll >= 1) — it steers an existing hand toward safer/bolder. Using it on the base round (reroll 0) is meaningless, so the function refuses rather than silently ignoring the flag.

Source

Thrown at skill/scripts/concept-seed.mjs:316

  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(', ')}`);
  }
  if (!Number.isInteger(candidateCount) || candidateCount < 5 || candidateCount > 7) {
    throw new Error('concept-seed: --candidate-count must be an integer from 5 to 7');
  }

View on GitHub (pinned to d14711ae3d)

Solutions

  1. When using register, also pass reroll >= 1.
  2. If you do not want a re-roll, drop the register argument entirely.

Example fix

// before
await seedConcepts({ scope: 'direction', register: 'safer' }); // reroll defaults to 0 -> throws

// after
await seedConcepts({ scope: 'direction', reroll: 1, register: 'safer' });
Defensive patterns

Strategy: validation

Validate before calling

// Enforce the register+reroll precondition together.
function validateRegisterUse({ register, reroll }) {
  if (register != null && (!Number.isInteger(reroll) || reroll < 1)) {
    throw new Error('register requires reroll >= 1');
  }
}

Prevention

When it happens

Trigger: Passing register='safer' with reroll=0 (the default); passing register with reroll omitted entirely; a caller that sets register conditionally but always leaves reroll at 0.

Common situations: A user who wants 'a safer seed' but forgets they must be re-rolling; wiring register to a UI toggle without also wiring reroll.

Related errors


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