v5.2.0-beta.3
Pre-release
Pre-release
Third beta of the 5.2 line. 45 PRs since beta.2, weighted toward transaction correctness, authorization hardening, and CLI work.
Transactions & storage
The largest cluster of fixes in this beta. Several were write-loss paths.
- Repeat writes to the same key within one transaction now layer correctly (#1970). A second write to a key applied against the pre-transaction value rather than the earlier write in the same transaction, so the intermediate update was lost.
- Writes staged while a read iterator defers the commit are no longer dropped (#1860). Work queued during the deferral window was discarded when the commit finally ran.
ERR_TRY_AGAINnow retries on the same transaction using a native in-place reset (#1823), instead of forcing a fresh transaction.- Commit-retry exhaustion rejects the awaited request chain rather than resolving as if it had succeeded (#1861).
- Honest
Promise<number | void>type for the commit-latency recorder (#1853), and a matchingrecordCommitLatencyparameter fix for the widenedcommitResolutionunion (#1899). - Table deletes on
audit: falsetables thread the transaction intoremoveEntry(#1869). - Clearer open-transaction timeout error message (#1967).
Secondary indexes
- TTL eviction and delete no longer orphan secondary-index entries (#1896). Orphaned entries could satisfy later index reads for records that no longer existed.
Table.clear()clears secondary-index DBIs as well as the primary store (#1906).- Sorting on the primary key is served from primary-store order instead of a separate sort pass (#1844).
starts_withreturns complete results for astral-plane Unicode values (#1887).
Authorization
- Row-level
allowReadis enforced on custommcpResourcesreads (#1839). Custom MCP resources bypassed the row-level check that equivalent REST reads applied. - Reserved role-permission names are rejected as database names, and
cluster_userhandling is completed (#1913) — a malformed permission now returns 400 rather than validating clean, andcluster_userexclusivity is restored. - The built-in login resource awaits the request body before use (#1948).
- URL attribute-suffix routing resolves correctly for programmatic static-properties Resources (#1933).
Replication
- The resume-cursor write no longer freezes the apply worker (#1888). A blocking write on the resume cursor could stall apply indefinitely.
hdb_nodesreload markers no longer de-authorize live peers (#602, harper-pro).
Server & networking
- PROXY protocol v2 decodes forwarded mTLS client certificates on UDS mirrors (#1858).
- A stall-timeout guard bounds
enableProxyProtocol's header buffering (#1947), so a peer that opens a connection and never completes the header can't hold it open. - Socket
noDelay/keepAliveoptions were never actually applied on TCP or UDS listeners, and the keep-alive delay was 600 ms rather than 10 minutes (#1859).
CLI & agent
harper agent— a CLI client for the built-in agent (#626), withharper chatas an alias.- Expired agent tokens refresh automatically, and the
--onceapproval hang is fixed. - Auth credentials are resolved as atomic pairs ahead of payload fields, separating transport auth from the operation payload for
add_user/alter_user(#1873) — previously the two could be conflated. - The built-in agent drains operations tools from the lazy provider (#1847).
Deployments
get_deployment_payloadanddelete_deployment_payloadoperations are implemented (#1898).- Peer-side
payload_blobreads retry on a transient 503 stall (#1838). - WAF is activated on upgraded instances (#1910).
- Safe mode disables worker preload modules (#1848).
Packaging
- The published shrinkwrap no longer carries the react-native tree (#1959); only optional
react-native-fsedges are severed, and the result is verified. - uWebSockets.js stays opt-in for npm consumers (#1919) while remaining bundled in official images.
PACKAGE_ROOTis canonicalized so it matches realpath'dallowedPathchecks (#1905).
MCP
- The durable quota policy registers as a function rather than a config-referenced Resource (#1821).
Also in this release
Dependency updates (#1955, #1954), SQL engine A/B benchmark (#1845), a packaged-application E2E workflow (#1908), CI shard rebalancing and single-Node integration runs on PR pushes (#1883), a MAX_SET_TIMEOUT_MS constant hoist (#1816), and promoted QA regression anchors covering cross-version upgrade read-visibility, secondary-index integrity, typed-struct plateau on legacy-origin in-place upgrade, and transaction commit behavior (#1900, #1886, #1884, #1870, #1895).
Full Changelog: v5.2.0-beta.2...v5.2.0-beta.3