stablyai/orca · error · Error

Generated skill artifacts are stale:\n${stale.map((filePath)

Error message

Generated skill artifacts are stale:\n${stale.map((filePath) => path.relative(REPO_ROOT, filePath)).join('\n')}\nRun pnpm generate:skill-bundle-manifest.

What it means

Thrown by verifyArtifacts when one or more committed skill artifacts (current-manifest.json, snapshot-registry.json, release-mapping.json) do not byte-match the freshly regenerated values, or are unreadable. The error lists the stale file paths relative to REPO_ROOT and names the regeneration command (generate-skill-bundle-manifest.mjs:620-645). This is a lint/CI guard ensuring generated artifacts stay in sync with the skills/ source tree.

Source

Thrown at config/scripts/generate-skill-bundle-manifest.mjs:639

  const expected = [
    [CURRENT_MANIFEST_PATH, artifacts.currentManifest, null],
    [SNAPSHOT_REGISTRY_PATH, artifacts.snapshotRegistry, null],
    [RELEASE_MAPPING_PATH, artifacts.releaseMapping, isToleratedReleaseMappingPrefix]
  ].filter(([filePath]) => paths.includes(filePath))
  const stale = []
  for (const [filePath, value, tolerated] of expected) {
    try {
      await access(filePath, constants.R_OK)
      const committedText = await readFile(filePath, 'utf8')
      if (committedText !== serialized(value) && !tolerated?.(committedText, artifacts)) {
        stale.push(filePath)
      }
    } catch {
      stale.push(filePath)
    }
  }
  if (stale.length > 0) {
    throw new Error(
      `Generated skill artifacts are stale:\n${stale
        .map((filePath) => path.relative(REPO_ROOT, filePath))
        .join('\n')}\nRun pnpm generate:skill-bundle-manifest.`
    )
  }
}

async function main() {
  const argv = process.argv.slice(2)
  const rebuildFromTags = argv.includes('--rebuild-from-tags')
  const releaseIndex = argv.indexOf('--release')
  const releaseVersion = releaseIndex !== -1 ? argv[releaseIndex + 1] : null
  if (releaseIndex !== -1 && !releaseVersion) {
    throw new Error('--release requires a version argument, e.g. --release 1.4.160')
  }

  const committedRegistry = await readCommittedRegistry()
  const committedMapping = await readCommittedReleaseMapping()

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run `pnpm generate:skill-bundle-manifest` locally and commit the regenerated artifact files.
  2. Inspect the listed stale paths to see which artifact diverged; diff it against the regenerated version to confirm the change is expected.
  3. If the change is from a generator-logic refactor, ensure the refactor is intentional and update any relevant tests, then regenerate.

Example fix

# before: CI fails with 'Generated skill artifacts are stale'
git commit -am "update skill content"  # forgot to regenerate
# after
pnpm generate:skill-bundle-manifest
git add resources/skills/*.json
git commit -m "chore(skills): regenerate bundle manifest"
Defensive patterns

Strategy: validation

Validate before calling

// Run the generator before committing skill changes:
// pnpm generate:skill-bundle-manifest
// then stage resources/skills/*.json

Try / catch

try {
  await import('./generate-skill-bundle-manifest.mjs')
} catch (error) {
  if (/Generated skill artifacts are stale/.test(error.message)) {
    // run pnpm generate:skill-bundle-manifest, re-stage, and re-run
  } else throw error
}

Prevention

When it happens

Trigger: Editing, adding, or deleting a file under skills/ without re-running the generator; a release-mapping row that was appended at cut but not committed; a schema bump or generator-logic change that alters serialization; a missing artifact file (access/R_OK fails).

Common situations: A PR that touches skill content but the author forgot `pnpm generate:skill-bundle-manifest`; CI lint catching drift after a merge; a generator refactor that changed key ordering or whitespace in JSON output; a rebase that dropped the regeneration commit.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/f05207d89bfdbfb7. Report an issue: GitHub.