# X_SOURCE_BARE_ERROR

## Means

shipped source throws a bare builtin `Error`

## Typical cause

`CLAUDE.md` says never throw a bare `Error`, and the check that read it (`checkErrorFixes`) skips tests — so the half that ships had no guard at all. Two bare throws sat in `@ultimat3/ai`'s two wire readers, where a `SyntaxError` was thrown and caught by the very catch that re-threw it as a coded transport error. A fixture double that throws AT the subject is shipped source too, and no shape tells the two apart: `scripts/lib/source-bare-error-exemptions.ts` names every intentional site, one row per site, and this is every other one

## Fix

replace the throw with a coded error — `new UltimateError({ code, cause, fix })` from `@ultimat3/core`, or `new ScriptError({ code, cause, fix })` from `scripts/lib/script-error.ts` in a script — or add the site to `scripts/lib/source-bare-error-exemptions.ts` with the reason it is allowed

[CLI and verify](/error-codes#cli-and-verify)
