chore(deps): update all non-major dependencies - #43
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
19.2.5→19.2.73.1.0→3.2.05.2.6→5.2.9Release Notes
TrigenSoftware/Argue (argue-cli)
v3.2.0Compare Source
Features
[String]and[Number]option types to collect repeated options (#396) (23d6fb9)harperfast/harper (harper)
v5.2.9Compare Source
Write stalls
The RocksDB WriteBufferManager no longer stalls writes by default (#2490). The process-wide WriteBufferManager is on by default at 1/3 of the block cache, and it was configured as a hard cap: when the budget filled, RocksDB parked every writer across every database in
WriteBufferManagerStallWrites(), and nothing guaranteed the flush that would release them.ShouldFlush()only fires when mutable memory alone reaches half the budget, so a budget held by memory that is not mutable — the shape you get when it is spread across many column families — never dropped, and the only way out was a process restart.The budget is now a soft cap: RocksDB schedules flushes more aggressively instead of blocking writers. Explicitly configured
writeBufferManagerAllowStallvalues still win in both directions.The trade is memory. With stalling off, each column family keeps its full derived conflict-check history (
maxWriteBufferNumber * writeBufferSize) rather than having it derived to zero, so expect a higher memory floor on instances with many column families. rocksdb-js#821 is the other half of the fix.Query planning
Table sizing for query planning is now O(1) (#2478).
estimatedEntryCount()iterated the entire key space natively, on the main thread, once per store per 10-second memo window — and the memo never took effect, because the window was sampled before the call and had already expired by the time it returned. On a 28.6M-row table that is roughly 11 seconds per call, and the planner calls it once per additional condition, so a 10-condition operation measured around 100 seconds of main-thread stall with the Operations API unresponsive throughout.It now reads
rocksdb.estimate-num-keys, which is O(1) and returned an identical count on the affected table. The estimate skews high on overwrite- and delete-heavy data until compaction; every consumer is a relative-ordering or explicitly-estimated path, so that trade is deliberate. Two arithmetic sites that a zero estimate would have broken — the AND-group divisor, which yieldedInfinityand silently disabled the adaptive filter/index switch, and thene nullsubtraction, which could go negative — are guarded.Replication configuration
The blob-gap escalation bounds are registered —
replication.blobGapEscalationCyclesandreplication.blobGapEscalationMsnow exist inCONFIG_PARAMS, the config validator, and the root config schema.env.getresolves only registered names, so without this the keys would sit inharper-config.yamldoing nothing while the compiled-in defaults stayed in force. The consumer is the Harper Pro escalation budget described in that release's notes; see the harper-pro v5.2.9 notes for the operator-facing behavior.Also in this release
CI workflow sync for the cancellation migration (#2387), and test-only cleanups alongside the changes above.
v5.2.8Compare Source
Storage engine
A commit parked on a write intent that was never released could wedge the worker thread (HarperFast#2466). rocksdb-js 2.8.0 bounds the coordinated-retry park with
ROCKSDB_JS_PARK_TIMEOUT_MS(HarperFast/rocksdb-js#744), so a commit waiting on an intent that never gets released now wakes and consumes a retry attempt instead of never settling. Previously that wait had no upper bound, and the thread holding it stayed parked.The root
msgpackrpin moves to 2.0.6 alongside it.check-shrinkwrap-pins.mjsrequires the root pin to equal rocksdb-js's own so that one module instance — and therefore one structure and extension registry — is shared, and rocksdb-js 2.8.0 depends on msgpackr 2.0.6. Over 2.0.5 that is a single decode-hardening change: array and map lengths that exceed the remaining source data are now rejected rather than trusted. The lockfile loses the nested msgpackr copy under rocksdb-js accordingly. This is the versionmainalready runs.Replication & subscriptions
RocksDB subscription listeners dropped every source-fill event as out-of-order, and catch-up replayed patch entries with no value (HarperFast#2445, backport of #2409). A source fill writes with the transaction's commit timestamp, but the RocksDB transaction-log reader overwrote the decoded record version with the log key. The subscription listener's staleness check then compared a record version against a log position and discarded the event. The same reader left
auditRecord.localTimeunset, so collectionstartTimereplay calledgetValue()with no reconstruction time and delivered patch entries withvalue: undefined.The entry's own version is now exposed as
AuditRecord.recordVersion, surviving the log-key override, and the staleness check compares record versions; raw same-thread aftercommit entries are stamped with the same two clocks the decoded path reports.versiondeliberately stays the log key — replication resume relies onversion === log key— so cursor advancement, transaction grouping, and resume semantics are unchanged. Only the RocksDB engine was affected; LMDB was already correct.MCP
Every table Resource manufactured a
create_*MCP tool, whether or not it had a real create verb (HarperFast#2405, fixes #1945).detectVerbs()'s create check wastypeof p.post === 'function' || typeof p.update === 'function', butResource.prototypedefines a basepost()(resources/Resource.ts), so the first clause was true for every Resource subclass regardless of what it overrode — making the check unconditionally true and theupdateclause moot. Agents were offered create tools that had nothing behind them.The check now reuses
toolRegistry.ts'shasClassLevelVerbs(), which identity-compares againstResource.prototypeand so counts only a real override, or the implicitupdate()override thatTable.ts's write path relies on. An instance-levelcreate()override counts directly as well:Resource.post'sloadAsInstance === falsebranch dispatches straight to it, bypassing bothpostandupdate, and a resource built that way would otherwise have silently lost itscreate_tool.Also in this release
Table.ts's actual shape (it definescreate()alongsideupdate()).Full Changelog: HarperFast/harper@v5.2.7...v5.2.8
v5.2.7Compare Source
Data integrity
Resolved
@computedand@relationshipvalues were written into durable records, and the affected rows then became unreadable and undeletable (HarperFast#2368). A record resolved from a cache source carries the record prototype, whose response projection (toJSON) surfaces scalar@computedvalues — and@enumerablerelationships since 5.1.0. msgpackr consults an instance'stoJSONwhen encoding it, so the durable encode ran the response projection and wrote the resolved values as stored fields. Materializing such a record then assigns the stored value back through the resolver accessor, with two distinct outcomes:attribute.set is not a function— reachable in 5.2.0 through 5.2.6;The write side now enforces the invariant at the layers that own it.
recordUpdaterprojects the record — and the audit entry's own record, gated so message and publish payloads stay verbatim — to its stored fields before anything durable is written, dropping any name a resolver owns whether it arrived through the response projection, from a source, or in a peer payload. A source that returns a related object instead of its foreign key still has the key derived through the writable resolver's setter before the name is dropped.structonis pinned to 1.1.0, which writes own properties only, matching msgpackr's object writers and closing the prototype-walk route for every struct encode.The read side makes the records that affected releases already wrote recoverable: the four paths that promote a plain decode to a record instance now skip resolver-owned names instead of assigning them through the accessors, and the accessor itself drops such an assignment (warning once per table) rather than calling an absent setter. A schema reload clears
attribute.setalongsideattribute.resolve, so changing an attribute from@relationshipto@computedcannot retain a stale setter. If you are on 5.1.x–5.2.6 and have hitattribute.set is not a function, upgrading is what makes those rows readable and deletable again.A prototype-chain walk could copy inherited properties into a durable record (HarperFast#2368).
assignStoredFieldsusedfor..in, so an inherited enumerable — including anything on a pollutedObject.prototype— could reach a materialized and then durable record on exactly the paths that its ownObject.assignfallback andstoredFieldsOnlyalready restrict to own properties. It now reads own keys only.Schemas
@computed(from:)expressions failed to compile in an inline-loaded schema (HarperFast#2360, landed via #2368).vm.Scriptrequires a string filename and inline schemas were loaded with a null one, so any computed expression in such a schema threw. Reported and fixed by @kylebernhardy.Behavior changes worth knowing on upgrade
@computedattribute now throws a client error naming the attribute, instead of aTypeErrorfrom the missing setter.useToJSONopt-out. That is deliberate: an encoder-wide opt-out would also silence the legitimatetoJSONof nested values, so the projection is enforced at the layers that write durable records rather than in the encoder.Also in this release
main, and the always-on review arm no longer cancelsready_for_reviewruns (HarperFast#2331, HarperFast#2358).resources/DESIGN.mdrecords the durable-vs-response projection convention behind the fix above.Full Changelog: HarperFast/harper@v5.2.6...v5.2.7
Configuration
📅 Schedule: (in timezone America/New_York)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.