Skip to content

release: 5.0.0 - #233

Merged
sebyx07 merged 1 commit into
mainfrom
release/5.0.0
Aug 20, 2026
Merged

sebyx07 merged 1 commit into
mainfrom
release/5.0.0

Conversation

@sebyx07

@sebyx07 sebyx07 commented Aug 20, 2026 •

Copy link
Copy Markdown
Contributor

A major, for four breaking changes across two packages. Every one deletes or corrects a declaration that promised something the code did not do — the same sweep 4.0.0 ran, applied to what was left after it.

The migration is one line, and only if you wrote it

  jobs: {
-   driver: 'postgres',
    queues: ['app-default'],
    concurrency: 8,
  },

Leaving it in also works — a spread carries a key no type names, so a stale config still boots and the field still does nothing, which is what it always did. TypeScript will flag it; the runtime will not. wiki/Upgrading.md walks all four entries.

What is breaking

JobsConfig.driver, JobsDriver deleted. Accepted 'postgres' | 'redis' | 'nats' and had no reader anywhere — jobs: { driver: 'redis' } did not throw, did not warn, and silently gave you Postgres (#223)
Subscribe (target, input, actor?), was (target)
LiveTarget { name }, was { name, queryHash } — a node keys a subscription by (name, input), and a hash is the input already thrown away
LiveFeed, DRIVER_FIXTURE_NAMES reconnect() added; subscribe moved to FRAMEWORK_FIXTURE_NAMES

The last three are @ultimat3/testing's subscribe fixture, which was declared and had no driver — so nothing could have been implementing them. They are exported, so semver applies anyway (#9).

What this release closes

Four issues, all four of the ones that were open when this run started:

What it opened, and I am not hiding it

#230. Getting the live suite to run found a real defect: a live query whose projection omits an ordering column reports every change as a move (compareRows measures a real value against undefined), and the re-inserted row is the raw entity row — so columns the projection deliberately dropped reach the subscriber.

Pre-existing, not introduced here. Not fixed here either: each of the three candidate fixes changes what every live subscriber receives, and that deserves its own change with its own proof. wiki/Known-Gaps.md carries it in Open, the CHANGELOG names it, and examples/dummy's test pins the behaviour as it is so it cannot regress silently in either direction.

One finding from the gate itself

x verify failed this very commit with X_DOC_COMMAND_UNKNOWN — because wiki/Upgrading.md cites x db replication init while explaining that it is not a command. Its fix: named the exact remedy (DOC_COMMAND_ALLOWANCES with a why), which is the error contract working on its author.

Verification

  • bun run verify — 14 of 18, 4 skipped at the framework root
  • bun run scripts/reference-app-gate.ts — every pin holds; examples/dummy 14/18 (4 pinned, was 5), dummy/social-media-clone 16/18
  • bun run scripts/release.ts --check 5.0.0 — 30 packages stamped
  • bun install --frozen-lockfile — no changes

Note on review: CodeRabbit hit its rate limit on #231 and #232, so neither got an automated review. #229's six findings were addressed (four fixed, two declined with the measurement in-thread).

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

A major, for four breaking changes across two packages. Every one deletes or corrects a
DECLARATION that promised something the code did not do — the same sweep 4.0.0 ran, applied to
what was left after it.

The migration is one line, and only if you wrote it: delete `driver:` from `jobs` in
`app.config.ts`. `wiki/Upgrading.md` walks all four.

BREAKING:
- `JobsConfig.driver` and the `JobsDriver` type are deleted. The field accepted
  'postgres' | 'redis' | 'nats' and had no reader anywhere — boot always built `createPgDriver`,
  so `jobs: { driver: 'redis' }` did not throw, did not warn, and silently gave you Postgres. The
  seam that works is `setJobDriver(driver)`.
- `@ultimat3/testing`'s `Subscribe` is `(target, input, actor?)`, `LiveTarget` is `{ name }`,
  `LiveFeed` gains `reconnect()`, and `subscribe` moves from `DRIVER_FIXTURE_NAMES` to
  `FRAMEWORK_FIXTURE_NAMES`. Each is a type nothing could implement before, because the fixture
  had no driver — but they are exported, so semver applies.

Added: `setRowObserver` (`@ultimat3/entity`), `createSubscribeDriver` / `createLiveNode` /
`startLiveReplicator` (`@ultimat3/testing`), and two codes.

Fixed: error fields are escaped in the CONSTRUCTOR rather than at six renderers, so `.message`,
`.cause`, `toJSON()` and any renderer an app writes are one line by construction; a `fix:` read out
of a lookup table is checked (921 -> 952 lines read), which found `x db replication init` — a
command that does not exist — shipped in `X_REPLICATION_FAILED`.

Open, and named rather than hidden: #230. A live query whose projection omits an ordering column
reports every change as a move and re-delivers the raw entity row, so columns the projection
dropped reach the subscriber. Pre-existing, found only because `examples/dummy`'s live suite runs
for the first time, and left to its own change because each candidate fix changes what every live
subscriber receives. `wiki/Known-Gaps.md` carries it.

Gate: `bun run verify` 14/18 (4 skipped at the framework root); `reference-app-gate` every pin
holds — and `examples/dummy:live` is one fewer pin than 4.1.0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your current included review allowance is based on your included PR review attempts over the past 7 days.

Next review available in: 39 minutes

Limit details: You’ve used the included review currently available. Your 76 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

You’re in a promotional period — use the checkbox below to run this review for free:

  • Run review for free

On-demand reviews are free for the next 31 days. After that, they cost $0.25 per reviewed file.

How can I continue?

Run this review now using the option above, or comment @coderabbitai review --use-credits.

You can also wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: ae76ae7c-1780-49bd-81ae-72506bae6245

📥 Commits

Reviewing files that changed from the base of the PR and between 6799535 and f9e4964.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock, !**/bun.lock
📒 Files selected for processing (48)
  • CHANGELOG.md
  • docker/helm/Chart.yaml
  • dummy/social-media-clone/package.json
  • dummy/social-media-clone/packages/i18n/package.json
  • examples/dummy/apps/admin/package.json
  • examples/dummy/apps/web/package.json
  • examples/dummy/package.json
  • examples/dummy/packages/core/package.json
  • examples/dummy/packages/db/package.json
  • examples/dummy/packages/domain/package.json
  • examples/dummy/packages/i18n/package.json
  • examples/dummy/packages/mcp/package.json
  • examples/dummy/packages/ui/package.json
  • framework.manifest.json
  • packages/action/package.json
  • packages/admin/package.json
  • packages/ai/package.json
  • packages/auth/package.json
  • packages/cache/package.json
  • packages/cli/package.json
  • packages/core/package.json
  • packages/create-ultimate/package.json
  • packages/db/package.json
  • packages/entity/package.json
  • packages/flags/package.json
  • packages/http/package.json
  • packages/i18n/package.json
  • packages/jobs/package.json
  • packages/mail/package.json
  • packages/manifest/package.json
  • packages/mcp/package.json
  • packages/money/package.json
  • packages/policy/package.json
  • packages/pwa/package.json
  • packages/query/package.json
  • packages/realtime/package.json
  • packages/render/package.json
  • packages/schema/package.json
  • packages/scraping/package.json
  • packages/seo/package.json
  • packages/storage/package.json
  • packages/testing/package.json
  • packages/time/package.json
  • packages/ui/package.json
  • scripts/doc-commands-allow.ts
  • wiki/Known-Gaps.md
  • wiki/Upgrading.md
  • wiki/_Footer.md

Comment @coderabbitai help to get the list of available commands.

@sebyx07
sebyx07 merged commit d6a6cf4 into main Aug 20, 2026
37 checks passed
@sebyx07
sebyx07 deleted the release/5.0.0 branch August 20, 2026 16:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant