Repository navigation
fix(deps): update dependency org.mock-server:mockserver-client-java to v9.1.0 - #1282
Merged
LikeTheSalad merged 1 commit intoOct 21, 2026
Merged
Conversation
LikeTheSalad
approved these changes
Oct 21, 2026
LikeTheSalad
deleted the
renovate/org.mock-server-mockserver-client-java-9.x
branch
October 21, 2026 14:03
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:
9.0.0→9.1.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
mock-server/mockserver-monorepo (org.mock-server:mockserver-client-java)
v9.1.0Security
controlPlaneTLSMutualAuthenticationRequiredon, MockServer 5.13.0 to 9.0.0 accepted a control-plane request if any certificate the client sent could be validated againstcontrolPlaneTLSMutualAuthenticationCAChain. A CA certificate is public, so anyone who could reach the control plane could send their own certificate followed by your CA certificate and create, read or delete expectations, change the configuration or reset the server, without the CA's private key. Also requiring data-plane mTLS (tlsMutualAuthenticationRequired) did not prevent this in the default set-up: the data-plane check also trusts MockServer's own CA, which by default is the CA bundled with MockServer, and its private key is published in the jar, so an attacker could sign their certificate with it. Data-plane mTLS prevented it only if MockServer had its own CA (certificateAuthorityCertificateandcertificateAuthorityPrivateKey, ordynamicallyCreateCertificateAuthorityCertificate) and every CA intlsMutualAuthenticationCertificateChainwas private. MockServer now checks only the client's own certificate (the one whose private key it used for the connection): it must be signed by a CA in the chain, directly or through intermediate CA certificates the client sends after it, be in date, allow digital signatures if it lists key usages, allow client authentication if it lists extended key usages, and not be a CA certificate, a self-signed certificate or one of the certificates in the chain. A self-signed client certificate listed incontrolPlaneTLSMutualAuthenticationCAChainis no longer accepted; sign client certificates with a CA instead. AcontrolPlaneTLSMutualAuthenticationCAChainthat contains the bundled CA (or any certificate for its key) is now refused: MockServer does not start,PUT /mockserver/configurationanswers400, and any other change makes every control-plane request fail, where before only a warning was logged. If MockServerClient and MockServer share that property in one JVM (for exampleClientAndServeror the JUnit rule) and you added the bundled CA so the client trusts MockServer's certificate, give MockServer its own CA withcertificateAuthorityCertificateandcertificateAuthorityPrivateKeyand put that CA in the chain instead. The control-plane audit log now records the validated client certificate's subject as a verified principal (verified-mtls) unless OIDC supplied one; with mTLS and JWT both on, the audit principal is now the certificate subject instead of the unverified JWTsub. If a MockServer reachable by others had control-plane mTLS on, with or without data-plane mTLS, treat its expectations, recorded traffic and settings as possibly read or changed by someone elsetlsMutualAuthenticationRequired) no longer accepts client certificates anyone can create (BREAKING for mTLS set-ups that use MockServer's default CA; see upgrading to 9). Up to 9.0.0, MockServer trusted client certificates signed by MockServer's own CA whenever mTLS was on, even withtlsMutualAuthenticationCertificateChainset. By default that CA is the one bundled with MockServer, and its private key is published in the MockServer jar, so anyone could create a client certificate, with any name, that MockServer accepted. That client also matched any client certificate condition in your expectations and, when control-plane authentication was off, could create, read or delete expectations. MockServer now never trusts the bundled CA for mTLS. If mTLS is on and nothing but the bundled CA would be trusted, ortlsMutualAuthenticationCertificateChaincontains the bundled CA, MockServer does not start,PUT /mockserver/configurationanswers400, and the message names the fix: give MockServer its own CA withcertificateAuthorityCertificateandcertificateAuthorityPrivateKey, setdynamicallyCreateCertificateAuthorityCertificate=true, or settlsMutualAuthenticationCertificateChainto the CA that signs your client certificates. With a chain set and the default CA, MockServer now trusts only the chain. For a throwaway local test, the newtlsMutualAuthenticationAllowBundledCa=truerestores the old behaviour, and a warning is logged whenever the bundled CA becomes trusted (at startup, when a configuration change makes it trusted, and when the TLS context is rebuilt). This applies to HTTPS and HTTP/3. If a MockServer reachable by others relied on mTLS with the default CA, treat its expectations and recorded traffic as possibly read or changed by someone else?host=,?port=and?basePath=from its own address and used them unchecked to build every call it makes to MockServer, so a link such as…/mockserver/dashboard?basePath=/mockserver/reset%23turned the dashboard's next routine call into/mockserver/resetas soon as someone opened it. These values now go through the same checks as a server typed into Set MockServer: a host must be a plain host name or IP address (no scheme, path,@or#), a port a number from 1 to 65535, and a base path a plain path (no?,#,%,\,//or./..segments). An invalid value is ignored, the dashboard uses the server that served it instead, and a warning at the top of the dashboard names what was ignored. A valid link that points the dashboard at a server on a different host now shows a warning naming that server, because what you create in the dashboard is sent there, with a button to switch back to the server that served the page; that server no longer decides whether dashboard analytics are on (the server that served the page still does). Valid links on the same host, such as?port=1080or?basePath=/mock, work as before with no warning. A dashboard served behind a proxy under a path containing a percent-encoded character (for example a space) now falls back to the root path, with the same warning; pass?basePath=to set it. The stricter base-path check also applies to Set MockServer, and a saved workspace target whose base path contains%or\is dropped, so that workspace follows the dashboard's address againSTAIRSload shape with a hugestepsvalue (for example2147483647) could exhaust the server's memory when it was loaded withPUT /mockserver/loadScenario, before the stage limit was checked. A shape is now checked against the stage limit (loadGenerationMaxStages, 20 by default) before it is expanded, and rejected with400 Bad Requestif it is too big; no shape can expand to more than 10,000 stages. Stage durations so large that their total wrapped past the maximum run duration are now rejected too, and so isNaNorInfinityin any number in a load scenario (stage rates, shape parameters, step weights, the pacing value and thresholds); before, aNaNstep weight made a weighted scenario fail once it ran. AVUshape value too big for a whole number of virtual users is now rejected by the virtual-user limit instead of silently wrapping to a small or negative countAuthorization: Bearer <token>, as control-plane HTTP calls already did, so callbacks and breakpoints keep working when MockServer requires JWT or OIDC control-plane authentication on that WebSocket. A token supplier is asked for a fresh token on each connection, including the Node and Python clients' reconnects. With no token configured nothing is sent, and a MockServer that does not require authentication ignores the header. In a browser the Node client cannot send it, because browsers do not let a page set headers on a WebSocket and MockServer accepts the token only in that header; use mutual TLS for browser callbacks and breakpoints when control-plane authentication is on. The Ruby client has no control-plane token option and the PHP client has no callback WebSocket, so neither changesHostheader or HTTP/2:authority) and the LLM conversation matcher's debug messages (which quote the request body) now write carriage returns, line feeds and other control characters as escapes such as\rand\n, so a crafted request cannot start a new log line/mockserver/...path, including MCP and metrics), the dashboard's live log and the callback WebSocket answered any web page, so a site you visited while MockServer was running could read recorded traffic, add or change expectations, and reset or stop the server. A new property,controlPlaneCorsAllowOrigin, now decides which browser origins may use them. Left blank (the default), it allows pages onlocalhost,127.0.0.1or[::1](http or https, any port) and pages MockServer serves itself, such as the dashboard, when MockServer is reached by a name DNS rebinding cannot take over (see the next entry); set it to a comma-separated list of origins (or*) to allow others. It can only be set at startup:PUT /mockserver/configurationignores it, with a warning, so a request to the control plane cannot widen it. Any request the control plane serves (any/mockserver/...path including MCP and metrics, a legacy path such as/resetor/expectationwith a method the control plane serves there, the liveness path, and the/_mockserver_ui_websocketand/_mockserver_callback_websocketupgrades) that carries anOriginheader from any other page, includingOrigin: null(a sandboxed iframe or afile://page), is refused with403before it is handled and before any expectation can answer it, whatever method it uses and whether or not the browser sent a preflight first. Preflights for those requests are answered by MockServer withoutAccess-Control-Allow-*headers.corsAllowOriginno longer affects MockServer's own API: it, andenableCORSForAllResponses, still apply to mocked and proxied responses as before, with four exceptions. A preflight for a request the control plane serves is answered by MockServer undercontrolPlaneCorsAllowOrigin, not by an expectation (including arespondBeforeBodyone) orcorsAllowOrigin; arespondBeforeBodyexpectation no longer answers a request the control plane serves; a browser request from a pagecontrolPlaneCorsAllowOrigindoes not allow is refused with403even where a mock, not the control plane, would have answered it, for these requests:GETorDELETEon/loadScenario/startor/loadScenario/stop;PUT /pact;GETorDELETEon any deeper path under/loadScenario/<name>/other thanGET /loadScenario/<name>/report;GET,PUTorDELETEunder/chaosExperiment/profiles/<name>/;POSTunder/chaosExperiment/apply/<name>/; and any method on a/mockserveror/_mockserver_path that is not a route; and an unmatched preflight for another method on a legacy path (for examplePOST /graphqlto a mocked GraphQL API) allows only the requested method. Clients that are not browsers are unaffected; the Java client no longer sends anOriginheader on its WebSockets. Action needed only if a browser page on another host calls MockServer's API, the dashboard targets a MockServer on another host, a reverse proxy in front of the dashboard rewrites theHostheader, or you setcorsAllowOriginso a page could call the API: setcontrolPlaneCorsAllowOriginon that MockServer to the page's origin, for example-Dmockserver.controlPlaneCorsAllowOrigin=https://app.example.com. This does not stop a site visited by a browser that uses MockServer as its proxy, because the page is then same-origin with MockServer; turn on control-plane authentication if untrusted pages may run in a browser that can reach MockServerlocalhost, an IP address, a single-label name (such as a Docker or Compose service name likemockserver, or a Kubernetes short service name), a name ending in.svc,.svc.cluster.localor.internal(the top-level domain reserved for private use, which covershost.docker.internaland*.ec2.internal), or a name ending in a suffix listed in the newcontrolPlaneTrustedHostSuffixesproperty (for clusters with a custom domain, for examplecorp.example). This applies even whencontrolPlaneCorsAllowOriginis set: listing some origins never restores same-host trust for other names. The trusted-name check ignores case and one trailing dot, and the page's origin must still match theHostexactly, port included; look-alikes such aslocalhost.evil.com,svc.evil.comorinternal.evil.com, and non-ASCII names, do not count. A page on any other name, for examplehttp://evil.example.com:1080sent withHost: evil.example.com:1080, now gets403on MockServer's API and WebSockets. Action needed only if you open the dashboard, or a page MockServer serves, at a multi-label name such ashttps://mockserver.example.com: list that origin incontrolPlaneCorsAllowOrigin, or add a private suffix tocontrolPlaneTrustedHostSuffixes. Either opts that name back in, including to a rebinding attack on it. LikecontrolPlaneCorsAllowOrigin,controlPlaneTrustedHostSuffixescan only be set at startup;corp.example,.corp.exampleand*.corp.examplemean the same, a public suffix such ascom,co.ukorgithub.io, under which anyone can register a name, is rejected with an error at startup and trusts nothing, and an entry it cannot use is logged as a warning. This stops rebinding by an ordinary web site; someone who controls how the victim's machine resolves names (a hostile Wi-Fi resolver, LLMNR or mDNS spoofing on the local network, a DNS search domain, or the cluster DNS) can still rebind any trusted name except an IP address orlocalhost, so turn on control-plane authentication if that is in your threat model. A request whoseHostheaders disagree (for example an HTTP/2:authorityand a differenthostheader) is never treated as same-hostAuthorizationheader) on the callback and breakpoint WebSockets, and the other clients send their bearer token (see above). With mTLS control-plane authentication the WebSocket now needs the client certificate too: the Java and Rust clients present it, and the Node, Python, Go and .NET clients now do too (see below). Upgrade the clients with the server: older ones send no token or certificate on the WebSocket, so with control-plane authentication on their callbacks and breakpoints are refused. The dashboard, like the Node client in a browser, needs mTLS for breakpoints when control-plane authentication is onhttp.Clientpassed withWithHTTPClient; the .NET client applies its TLS settings only when they were set throughMockServerClient.Builder(...).WithTls(...), not when you pass your ownHttpClient. The Rust client already presents itsclient_cert_pemcertificate on its secure callback WebSocket; the Ruby client has no client certificate option and the PHP client has no callback WebSocket, so neither changesX-CLIENT-REGISTRATION-ID) already in use no longer silently takes over that client's object callbacks and breakpoints. With control-plane authentication on, the same caller takes over at once: the same JWT issuer and subject, the same OIDC principal, or the same mTLS client certificate (compared by its SHA-256 fingerprint, so a renewed certificate counts as another caller). Otherwise, MockServer pings the registered connection and refuses the new one if it answers within 2 seconds, with403 Forbiddenwhen both are authenticated as different callers and409 Conflictotherwise; if it does not answer, or has closed, the new connection takes over and the old one is closed, so a client still reconnects after its connection drops without MockServer noticing. A client answers only while it is reading its WebSocket, so a live client that spends more than 2 seconds in a callback or breakpoint handler does not answer, and can be taken over by another connection: by anyone with authentication off, or by any authenticated caller with it on. A client whose credential changed, such as a renewed certificate, can therefore still replace its own dropped connection. Only one connection at a time can take a client id over; another trying at the same moment gets409. The Java client now flushes its pong at once, so a Java connection that is not inside a long callback answers the checkAdded
examples/json/parallel_search_mcp): MockServer records an MCP client's calls to the live Parallel Search MCP server, then replays them offline from expectations that match on the JSON-RPC method and echo the request idHttpResponsecan now carry any response body the server accepts, not only a string. New buildersbinary_body(bytes, content_type)(aBINARYbody, base64-encoded on the wire and served back byte for byte),json_body(..),file_body(..)andbody_value(Body)sit besidebody(..), andtyped_body()reads any body back as aBody(for a retrieved expectation, in the shape the server returned).HttpRequest::binary_data(bytes)builds a binary (non-HTTP) request matcher for use withrespond_with_binary, andbinary_data_bytes()reads it back.Body::with_content_type(..)now sets the content type onJSON,BINARY,STRINGandXMLbodies as well asFILEbodies, and wraps an inline JSON object (one with notype, or atypethat is not a MockServer body type, such as GeoJSON'sFeatureCollection) as a typedJSONbody so the content type is not added to the JSON payload; other body types are left unchanged.HttpResponse.bodykeeps itsOption<String>type and a string body is unchanged on the wire; other body shapes are kept inHttpResponse.extra["body"]4XX, or one comparison such as>= 400), and its quick scope now acceptsstatus:, for examplestatus:>=500orstatus:>=400 status:<500(filled in as4XX). A range that needs two comparisons, such asstatus:>=400 status:<450, is refused rather than widenedcheck-false-green-guards.shCI gate fails the build when a test asserts an HTTP status loosely, for examplenot(is(401)),anyOf(is(200), is(404)),status < 300,.not.toBe(404)orstatus in (200, 404), because such an assertion also passes on a500. It covers Java, Kotlin, JavaScript/TypeScript, Python and Go test sources; a genuinely tolerant assertion carries astatus-tolerance-ok: <reason>comment. The existing tolerant assertions were pinned to their exact status. See docs/operations/false-green-guards.md.github/(workflows, composite action anddependabot.yml) and reports its findings as code scanning alerts under the categoryzizmor, and CodeQL now also scans C#, Go, Rust and the GitHub Actions workflows, with thesecurity-extendedquery suite for every language. See docs/operations/security.md.opencode/,.claude/,AGENTS.md,CLAUDE.md,opencode.json(c),.mcp.json,SKILL.mdand similar files, at any depth) with deterministic rules for hidden or bidirectional Unicode, permission drift against a committed baseline (including settingsenv), hooks, plugins and marketplaces not on an allowlist, unpinned or unlisted MCP servers, credential patterns, symbolic links, imported files and CODEOWNERS coverage. It is closed-world and fails closed: files under an AI-tool configuration root that no check claims, configuration keys no check handles, case variants of known names, YAML frontmatter outside a small subset, JSON that fails strict parsing, imports it cannot follow and launchers it does not recognise are all findings. Findings are code scanning alerts under the categoryagent-configand fail the job. The scanner is a standard-library Python script with a committed policy file, both CODEOWNED. See docs/operations/security.md*.code-workspace) and dev container configuration (.devcontainer/devcontainer.json,.devcontainer/**/devcontainer.jsonand.devcontainer.json, at any depth). A workspace'ssettings, and a dev container'scustomizations.vscode.settings, get the same closed-world checks as.vscode/settings.json, including MCP servers and auto-approve settings. A workspace folder must be a directory of files in the repository. Dev container lifecycle commands such aspostCreateCommandandinitializeCommandmust be on their own allowlist and use a recognised launcher. The containerimagemust be pinned by@sha256:digest or allowlisted. Any other key that is not listed as inert, such asfeatures,runArgs,mounts,containerEnv,tasksorlaunch, is a finding. See docs/operations/security.mdChanged
brew install mockserver(from homebrew-core) on macOS or Linux, or from thewindows-x86_64.zipon the GitHub Release on Windows; Docker and the executable JAR work everywherewithBeforeAction(...)orwithAfterAction(...)now adds each action to the expectation, so.withAfterAction(a).withAfterAction(b)runs bothaandb. Before, each call replaced the list and only the last action ran.withBeforeActions(...)andwithAfterActions(...)still replace the whole list. The same singular methods are now onExpectationtoo-no-dependencies) artifacts, three new transitive jars arrive with it (classgraph-base,classgraph-vfs,classgraph-classpath), and a project that pinsclassgraphto 4.x must stop doing so, because 5.x is not binary-compatible; for the same reason, another library in your build that uses the 4.x API can break if Maven resolves it to 5.0.0, so use the-no-dependenciesartifacts thereFILE,BINARY, typedJSONor other object body now sets it with.body_value(Body::object(..)), and a JSON array or scalar body with.json_body(..), instead of inserting it intoresponse.extraINFOlog level (the default) MockServer now keeps more log entries waiting to be recorded before it starts dropping them. The cap on entries still waiting to be logged atINFOis now a seventh of the heap ceiling, as it already was atWARN, instead of a twelfth;DEBUGandTRACEkeep a twelfth. Under heavy load with large bodies fewer log events are dropped, so fewer upper-bound verifications fail because evidence was dropped. On the JSON and proxy traffic we measured, the whole event log should still stay under about a fifth of the heapINFOlog level (the default) MockServer now keeps about 40% fewer past log entries by default: the event-log size budget (maxEventLogSizeInBytes) is a twentieth of the heap ceiling, as it already was atWARN, instead of a twelfth. When a server is close to the most traffic it can log, this means the garbage collector does less work and the slowest responses are faster; with G1 the 99th-percentile response time was up to about a third lower in our tests.verify(),retrieveand the dashboard see fewer of the oldest requests, and an upper-bound verification fails sooner once they are evicted. To keep the previous amount of history, setmaxEventLogSizeInBytesto a twelfth of your heap.DEBUGandTRACEare unchangedINFOstarts dropping log events has not been measured yetINFO(or more verbose) uses less CPU when nothing prints the log, for example withdisableSystemOutset and no other log handler configured, or when no SLF4J logging provider is on the classpath. MockServer no longer builds the text of each log message just to throw it away; retrieving the logs, the dashboard and verification failure messages still show exactly the same text, built when they ask for it. When the log is printed, a message that quotes a request, response or expectation is now built in one pass instead of first building each quoted part separately: in a micro-benchmark that is 5–11% faster and allocates 21–40% less, and the printed text is unchanged, byte for byte. Whether this raises the request rate at which a busy server logging atINFOstarts dropping log events has not been measured yetFixed
/mockserver/metricshandler no longer answers500to a request that carries no keep-alive flag, such as one built in code and passed to the handler directly; it now treats a missing flag as "close" and sets the200status explicitly. Requests decoded from the wire always carry the flag, so a server scraped over HTTP was not affected$or#exactly as written; previouslya\$bwas returned asa$banda\#basa#bimportDocument/import_document), including one whose format is auto-detected, now returns the imported expectations. The server had already added them, but its reply also carries warnings, which the clients could not read: Java threwIllegalArgumentException, Node resolved the whole reply object instead of an array, and Python returned an empty list. Each client now returns the expectations and logs the warnings (Java atWARN, Node withconsole.warn, Python withloggingatWARNING). A reply object without anexpectationslist (for example an error from a gateway) is now an error rather than an empty result. These methods also now refuseformat=recordingbefore sending anything. Before, the server would load the recorded request/response pairs into its request log and the client returned them as if they were added expectations; to re-import recorded traffic, sendPUT /mockserver/import?format=recordingdirectly. The Ruby, Go, .NET, Rust and PHP clients only import HAR and Postman documents, whose reply is a plain list, so they were not affected403as "chaos is disabled". No server setting disables chaos experiments; a403means control-plane authorization rejected the request, and the error now says so. In Go,StartChaosExperimentandSetServiceChaosno longer returnFeatureDisabledErrorfor a403. An invalid experiment is still rejected with400ClientAndServeror JUnit rule per test). Before, a server started withdriftAlertWebhookEnabledordriftSemanticAnalysisEnabledleft them switched on after it stopped, so later servers kept posting its webhook and calling its LLM even with both flags off. These three settings are shared by the whole JVM: the most recently started server that turns any of them on decides all three, a server that turns none on leaves them unchanged, and when the deciding server stops they revert to the previous such server still running, or are switched offhttpResponse(or templateresponseOverride) body is not a plain string, such as aBINARY, typedJSON,FILEorXMLbody or an inline JSON object, no longer fails with "invalid type: map, expected a string"; the body is read back and sent again unchangedJSONbody rather than a plain string, so sending it back no longer turns a JSON body into a string bodyMXRecord(name, 0, exchange)) is now served with preference 0. Before, the client left a zero priority out of the expectation and the server answered with its default preference of 10. ADnsRecordwithType: "MX"now always sends itsPriority, so an MX record built as a struct literal withoutPriorityis now served with preference 0 rather than 10close_breakpoint_websocket()no longer hangs. While the callback WebSocket was idle, its background reader held the socket lock while waiting for the next message, so the close call waited on that lock forever. This WebSocket is opened bymock_with_callbackand by breakpoints. The call now returns at once and closes the connectioncurl --http3built on OpenSSL's QUIC support (as shipped by Debian and Ubuntu) stall far less often on a Linux host left at the usualnet.core.rmem_max. MockServer now reads more of the client's packets at a time, so fewer of the client's acknowledgements and flow-control updates are dropped. This cut stalls from 14 to 2 in 90 downloads of 20 MiB at a stock buffer. Raisingnet.core.rmem_maxto4194304on the host prevented every stall in our tests (none in 180 downloads)useNativeTransportis on (the default). It reads the client's packets in batches and sends its own in batches (GSO), so large downloads withcurl --http3built on OpenSSL no longer stalled at the usualnet.core.rmem_max: none of 122 downloads of 20 MiB stalled, against 11 with the previous transport, and downloads ran about 55% faster on about 25% less CPU. Where the network path refuses batched sends (some VPN or rootless-container network devices), MockServer logs one warning and sends packets one at a time from then on. macOS and Windows, and Linux withuseNativeTransport=false, keep the previous transporttools/call,resources/readandprompts/getrequests for it. Before, the backslash was not escaped in the request matcher, so a name such asa\bnever matched, and one ending in a backslash or containing\'made the matcher invalidmock_with_callbackand breakpoints now works against a MockServer reached over HTTPS (secure(true)). Before, it could not open awssconnection at all. It now uses the same TLS settings as the client's HTTP calls: the platform trust roots, a CA added withca_cert_pemorca_cert_pem_path,tls_verify(false), and theclient_cert_pemclient certificateDisposewaited forever. It now waits at most 5 seconds and then drops the connectionConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.