Skip to content

v5.2.0-beta.3

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jul 12:42
v5.2.0-beta.3
7422493

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_AGAIN now 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 matching recordCommitLatency parameter fix for the widened commitResolution union (#1899).
  • Table deletes on audit: false tables thread the transaction into removeEntry (#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_with returns complete results for astral-plane Unicode values (#1887).

Authorization

  • Row-level allowRead is enforced on custom mcpResources reads (#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_user handling is completed (#1913) — a malformed permission now returns 400 rather than validating clean, and cluster_user exclusivity 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_nodes reload 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/keepAlive options 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), with harper chat as an alias.
  • Expired agent tokens refresh automatically, and the --once approval 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_payload and delete_deployment_payload operations are implemented (#1898).
  • Peer-side payload_blob reads 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-fs edges are severed, and the result is verified.
  • uWebSockets.js stays opt-in for npm consumers (#1919) while remaining bundled in official images.
  • PACKAGE_ROOT is canonicalized so it matches realpath'd allowedPath checks (#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