Repository navigation
release: 5.0.0 - #233
release: 5.0.0#233
Conversation
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>
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. 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:
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 You can also wait for the limit to reset, then comment 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 configurationConfiguration used: Path: .coderabbit.yml Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (48)
Comment |
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.mdwalks all four entries.What is breaking
JobsConfig.driver,JobsDriver'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 awayLiveFeed,DRIVER_FIXTURE_NAMESreconnect()added;subscribemoved toFRAMEWORK_FIXTURE_NAMESThe last three are
@ultimat3/testing'ssubscribefixture, 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:
deploy-social-demo.yml's own header says this repo holds no cluster credentials and never will.stringreaching a cause:, and three log-injection holes shipped under it #97 — the escape moved from six renderers intoUltimateError's andSchemaError's constructors, so.message,.cause,toJSON()and any renderer an app writes are one line by construction. Plus the fix-scanner now resolves lookup tables: 921 → 952 fix lines read,unreadableunchanged at 33.examples/dummy's five live tests run for the first time, against a whole in-processsyncnode.examples/dummy:liveis one fewer pin on the reference-app ratchet.JobsConfig.driveris declared and read by nothing, and five shippedfix:lines tell you to set it #223 — the deadjobs.driverfield, deleted.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 (
compareRowsmeasures a real value againstundefined), 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.mdcarries it in Open, the CHANGELOG names it, andexamples/dummy's test pins the behaviour as it is so it cannot regress silently in either direction.One finding from the gate itself
x verifyfailed this very commit withX_DOC_COMMAND_UNKNOWN— becausewiki/Upgrading.mdcitesx db replication initwhile explaining that it is not a command. Itsfix:named the exact remedy (DOC_COMMAND_ALLOWANCESwith awhy), which is the error contract working on its author.Verification
bun run verify— 14 of 18, 4 skipped at the framework rootbun run scripts/reference-app-gate.ts— every pin holds;examples/dummy14/18 (4 pinned, was 5),dummy/social-media-clone16/18bun run scripts/release.ts --check 5.0.0— 30 packages stampedbun install --frozen-lockfile— no changesNote 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
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.