---
summary: "withRetry fail-fast on data.retryable === false; bun run release:github enforces v<VERSION>: <subject> title; Gate after column in workflow phase tables"
breaking: false
security: false
---

# 0.9.19 — 2026-05-31

## Added

- **`defaultIsTransient` fail-fast opt-out.** `withRetry`'s default predicate now checks `error.data.retryable === false` and returns non-transient immediately — even when the error code is in the transient set (`Timeout`, `ServiceUnavailable`, `RateLimited`). Closes [#174](https://github.com/cyanheads/mcp-ts-core/issues/174).
- **`ctx.fail` auto-populates `data.retryable`.** `createFail` uses the contract entry's `retryable` value as a base default on `data.retryable`, so every `ctx.fail(reason)` call carries the right flag automatically. Caller can still override per-occurrence by passing `data.retryable` explicitly; `reason` is forced last regardless.
- **`bun run release:github` script.** `scripts/release-github.ts` constructs the GitHub Release title from the tag subject (`v<VERSION>: <subject>`), enforcing the title format that `--notes-from-tag` alone does not set. Handles `--verify-tag`, conditional `.mcpb` attach, and the "release already exists" fallback. Shipped in `files:` so consumer projects inherit it; `templates/package.json` adds the `release:github` script entry. Closes [#179](https://github.com/cyanheads/mcp-ts-core/issues/179).
- **`Gate after` column in workflow phase tables** ([#183](https://github.com/cyanheads/mcp-ts-core/issues/183)). Every phase row in `skills/orchestrations/workflows/*.md` now carries a `Gate after` value: `barrier` (with a terse reason) or `gate-free`. Spawn/round structure is derivable from the table without re-derivation. `skills/orchestrations/SKILL.md` adds a one-line pointer tying the column back to the "Barriers only where gates sit" principle.

## Changed

- **`ErrorContract.retryable` JSDoc updated** to document both audiences — the `withRetry` predicate and `ctx.fail` auto-population — in addition to the existing client backoff hint.
- **`RetryOptions.isTransient` JSDoc clarified** that a custom predicate fully replaces the default (including the `data.retryable` opt-out); the doc now points to `data.retryable: false` as the preferred single-site opt-out.
- **`release-and-publish` skill updated** (v2.7 → v2.8): Step 6 is now "Create GitHub Release" for all projects (not just MCPB), using `bun run release:github` as the single command. Prior manual `gh release create` flag sequence replaced.
- **`add-service` skill updated** (v1.6 → v1.7): adds the deterministic HTTP 200 fail-fast caveat to the retry guidance bullet.
- **MirrorService design guidance** added to `skills/design-mcp-server/SKILL.md` (v2.14 → v2.15): new bullet under output-design guidance covering when to mirror a bulk upstream instead of paginating it live, with corpus-size thresholds and backend options.
