X_RELEASE_TREE_DIRTY
Means
scripts/release.ts was run over a working tree with uncommitted changes
Typical cause
the release rewrites 47 files and is committed as one; over a dirty tree that commit carries whatever else was in flight, as part of a release nobody reviewed as one. Checked under --dry-run too, so a dry run predicts the real one. A git status --porcelain that could not run is the same refusal, never a pass
Fix
git stash -u && bun run scripts/release.ts --bump patch --dry-run --json — the fix line repeats your own flags; the cause lists the dirty paths