On This Page

Error and Log Codes

What each code means and what to do about it

Every SDK error has a stable code, and every log record has a code too. Search this page for a code copied from an error or a log line

A code with a placeholder, such as guild.<reason>, stands for a family. The error's field of the same name, such as reason, supplies the value

Error Codes#

The output of describeError(error) shows the code in brackets after the error name. In JSON log output, a record's error.code holds it

ApplicationError#

application.callbackFailed#

An application callback that the SDK ran, such as runBot setup, threw or rejected. The cause is the original value

Fix the callback named by details.source

AssetUrlError#

asset.<reason>#

An asset URL could not be built from the given object or options

The value is one of target id hash options

Pass the object received from Fluxer and supported size and format options

AttachmentDownloadError#

attachment.download.<reason>#

An attachment download failed. The reason untrustedUrl means the URL is not on this instance's media host, and tooLarge means the attachment is larger than maxBytes

The value is one of input untrustedUrl busy network response tooLarge timeout

Pass attachments received from this client, and raise maxBytes for tooLarge

AttachmentRefreshError#

attachment.<reason>#

A attachment URL refresh request failed. The reason says why, as listed under operation reasons

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

AuthenticationError#

auth.rejected#

Fluxer rejected the bot token when the client connected, reconnected or counted communities for automatic sharding

Check the whole bot token and the application owner's account standing. A valid token can be rejected if that account is closed or disabled, which a new token cannot fix. The rejection alone does not identify the cause. The SDK does not retry it

BotApplicationOperationError#

application.<reason>#

A bot application request failed. The reason says why, as listed under operation reasons

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

CancelledError#

operation.cancelled#

A default API operation stopped because its AbortSignal was aborted, for example during shutdown. The details.operation field names the call

No action is needed during shutdown. Otherwise check what aborted the signal

ChannelOperationError#

channel.<reason>#

A channel request failed. The reason says why, as listed under operation reasons. Announcement operations require an announcement source. Following requires a community text destination that does not already follow that source and has compatible content warnings or age restrictions. Only text and announcement channels can convert into each other

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true. Choose a compatible follow destination. Before converting a text channel to an announcement channel, remove its channel-follower webhooks

ClientBusyError#

client.busy#

The client is already connecting or connected, because connect or run was called before

Call connect or run once per client and await that call

ClientClosedError#

client.closed#

The client is shutting down or has shut down, so it cannot do more work. For a REST request, details.outcome says whether the request may have reached Fluxer

Create a new client to connect again. When details.outcome is unknown for a write, check whether Fluxer applied the change before repeating it. A read, marked by details.read, is safe to repeat

CollectorError#

collector.<reason>#

A message or reaction collector failed instead of ending normally

The value is one of notConnected connectionLost filter handler overflow

Start collectors after the client is ready, start a new one after a lost connection, fix a failing filter or callback, or raise the limit named in the message

ConfigurationError#

configuration.invalid#

An option or setting is invalid, so the requested work did not start. The error's field names the setting

Fix the named setting. The hint suggests the closest supported option for a misspelled key

ConnectionError#

connection.<phase>.<reason>#

Instance discovery or the gateway connection failed. The phase is discovery or gateway, and the reason is network, protocol or closed. The message explains a known close code and names it

Check network access to the Fluxer instance. Follow the hint for rejected tokens and shard close codes

ConnectionTimeoutError#

connection.timeout#

The connection to Fluxer, or instance discovery, was not ready within its timeout

Check network access, or raise the timeout that expired, usually connection.startupTimeoutMs

CountOperationError#

count.<reason>#

A fresh member or presence count over the gateway failed. The reason notConnected means the community's shard is not ready, and connectionLost means it disconnected before the answer

The value is one of input notConnected busy timeout connectionLost response

Connect the client first, and retry after a timeout or lost connection

CriticalWorkerStoppedError#

bot.workerStopped#

One of the bot's event or command subscriptions ended while the bot was still running, so the bot stopped. The details.workerIndex field numbers it from 0. A subscription set to overflow "stop" whose queue overflowed also names its event and the exceeded capacity in details

Keep the bot's subscriptions open while it runs. The hint explains how subscriptions are numbered, or how to keep up with the events after an overflow

EventOverflowError#

events.overflow#

A subscription's queue exceeded its limit and the overflow policy stopped it

Handle events faster, raise the pending limits or choose a dropping overflow policy

EventReadBusyError#

events.readBusy#

An event read was started while another read on the same subscription was pending

Await the pending next call before calling next again

EventWaitError#

events.wait.<reason>#

An event wait ended without a match before its deadline, or its filter threw or returned a non-boolean

The value is one of timeout filter

Raise timeoutMs, or make the filter return true or false synchronously

GatewaySendError#

gateway.send.<reason>#

A raw gateway send was invalid, used an opcode the SDK manages, or had no ready shard to use

The value is one of input reserved notOwned notReady busy

Send only application opcodes to a shard this client owns after it is ready

GuildOperationError#

guild.<reason>#

A guild request failed. The reason says why, as listed under operation reasons

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

HelperError#

helper.<reason>#

A formatting, parsing, text or error helper received a value it cannot use

The value is one of id markup time permissionBits link color text limit shardCount resource

Pass a value of the documented form

MemberChunkError#

memberChunks.<reason>#

A gateway member request failed before its last chunk arrived. The reason overflow means unread batches passed maxPendingBytes

The value is one of input notConnected busy response overflow timeout connectionLost rateLimit

Connect the client first, read batches promptly, and wait retryAfterMs after rateLimit

MessageCleanupError#

cleanup.<reason>#

A message cleanup stopped. The phase says whether history scanning or deletion failed

The value is one of filter closed input busy notFound rejected network response timeout rateLimit

Check selectedMessageIds and terminalBatchIds before running the cleanup again

MessageError#

message.send.<reason>#

A message send failed. The reason says why, as listed under operation reasons, and a send reports HTTP 404 as rejected

The value is one of input busy rejected network response timeout rateLimit

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true. A send whose outcome is unknown may already have created the message

MessageOperationError#

message.<reason>#

A message request failed. The reason says why, as listed under operation reasons. Publishing requires an unpublished source message in an announcement channel, excluding replies, system messages, forwarded messages and received crosspost copies. Publishing and editing a published message have separate rate limits

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true. For publishing preconditions, check the source channel and message. For rate limits, wait at least retryAfterMs before repeating the call

OAuthOperationError#

oauth.<reason>#

A OAuth request failed. The reason says why, as listed under operation reasons. The oauthError field names a standard OAuth error code, such as invalid_grant

The value is one of input busy rejected network response timeout rateLimit

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

PaginationError#

pagination.<reason>#

An iterator stopped. The reason cursorStalled means Fluxer repeated a page, and indexing means search results are not ready yet

The value is one of input cursorStalled pageLimit indexing

Retry indexing later, and raise maxPages for pageLimit

PresenceError#

presence.<reason>#

A presence update or presence member selection was invalid, or the selection was larger than the SDK's limits (reason limit)

The value is one of input limit

Correct the input named by inputValidation.path, or select fewer members

RateLimitError#

ratelimit.connection#

Fluxer rate-limited the gateway connection or a request made while connecting

Wait at least retryAfterMs before connecting again

RestRequestError#

rest.<reason>#

A raw REST request failed. The reason says why, as listed under operation reasons

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

SdkDefect#

application.defect#

An application callback or an option getter threw where the SDK could not return a typed failure

Fix the callback or getter that raised the cause

sdk.defect#

An unexpected fault inside the SDK or its cleanup

Report it with the output of describeError

ShardConnectionError#

connection.shard#

One shard failed to start or lost its connection for good, so it stopped. The cause is the shard's own failure

Read the cause and its hint

SupervisorChildError#

supervisor.child.<reason>#

A supervised child lost its connection to the parent process or received an invalid message

The value is one of disconnected protocol

Start the child only through the supervisor

SupervisorError#

supervisor.<reason>#

The shard supervisor failed to start or keep its child processes

The value is one of closed spawn protocol restartLimit startupTimeout shardCount

Read the supervisor log records for the child that failed

TestTimeoutError#

testing.timeout#

A test wait did not finish within its timeout

Check that the code under test sends the request, or raise timeoutMs

UnhandledTestFailuresError#

testing.unhandledFailures#

A test client logged failures that the test neither handled nor asserted

Fix the failing code, assert the failures before shutdown, or handle them with onError

UserOperationError#

user.<reason>#

A user request failed. The reason says why, as listed under operation reasons

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true

WebhookOperationError#

webhook.<reason>#

A webhook request failed. The reason says why, as listed under operation reasons. Moving a channel-follower webhook requires a community text destination that does not already follow its source and has compatible content warnings or age restrictions. Editing a published webhook message can reach the published-message edit rate limit

The value is any of the operation reasons

Read the hint, and apiError or details.providerCode for a Fluxer rejection. Repeat the call only when errors.isRetryable returns true. Choose a compatible destination for a follower webhook. For a published-message edit rate limit, wait at least retryAfterMs before editing again

Operation Reasons#

Request failures, such as guild.<reason> and message.<reason>, share these reasons

input

An input value is invalid, so nothing was sent to Fluxer. The error's inputValidation.path names it

busy

Too many requests of this kind were already pending in the client, so nothing was sent

notFound

Fluxer answered HTTP 404. The resource does not exist or is not visible to this bot

rejected

Fluxer refused the request. The error's apiError, or details.providerCode for a newer code, says why. For a missing permission, details.requiredPermissions lists the permissions the operation needs when the SDK knows them

network

A network error interrupted the request

response

Fluxer's answer did not have the expected format. The failing field or check is in details.responseField

timeout

The operation did not finish within its timeoutMs

rateLimit

Fluxer rate-limited the request, and the SDK could not wait and retry it, for example because the wait would pass the timeout

Log Record Codes#

Readable console lines show the record code in brackets after the category, and JSON lines hold it in code

cache#

cache.changesDroppedwarn#

A cache.onChange listener had its maximum number of unfinished calls and waiting changes, so the oldest waiting change was dropped, or the client shut down while changes waited for its unfinished calls, so those were dropped. The record names the observer and how many changes it has dropped

Make the listener finish its calls, or raise its concurrency or maxPendingChanges

cache.policyFaileddebugerror#

A cache maxAgeMs function or a cache.onChange listener threw or returned an invalid value

Fix that function or listener

cleanup#

cleanup.progressFaileddebugerror#

A message cleanup progress callback threw

Fix the onProgress callback

collectors#

collectors.callbackFaileddebugerror#

A collector callback threw or failed

Fix the callback

collectors.droppeddebug#

A full collector ignored an event while its last callback finished

collectors.failedwarn#

A collector stopped because of a failure

Read the collector's result for the error

collectors.filterFaileddebugerror#

A collector filter threw or returned a non-boolean

Make the filter return true or false without throwing

commands#

commands.executeddebug#

A command finished

commands.faileddebugerror#

A command threw or failed

Fix the command, or handle the failure with the router's onError

commands.mentionPrefixUnavailablewarn#

The bot user ID needed for mention prefixes could not be read, so mention commands are skipped for a while

commands.middlewareStoppeddebug#

A command did not run because middleware did not continue

commands.rejecteddebug#

A command did not run because a guard denied it, its cooldown was active or an argument was invalid

commands.unmatcheddebug#

A message with the command prefix did not run a command. fields.reason holds the cause: an unknown name (the closest command is in fields.suggestion), a group without a subcommand or text the parser rejected, whose explanation the message gives

events#

events.discardeddebuginfo#

A subscription stopped with events still waiting in its queue, so they were discarded unhandled. Info means the client was closing, and Debug means the subscription itself closed. The count is in fields.discarded and in the eventsDropped.closed counter

Shut down with drainMs to let waiting handler events run first

events.droppedwarn#

A full subscription queue dropped an event under its overflow policy

Handle events faster or raise the pending limits

events.handlerFaileddebugerror#

An event handler threw or failed. Other events keep running

Fix the handler, or handle the failure with onError

events.hookFailederror#

An onError hook failed while it handled another failure

Fix the onError hook

events.overflowdebugwarnerror#

A subscription's queue exceeded its limit, so the subscription stopped

Handle events faster, raise the pending limits or choose a dropping overflow policy

events.rawtrace#

A raw dispatch is being delivered to raw subscribers

events.refusedinfo#

A draining shutdown did not deliver events that open subscriptions or collectors would have received, because it accepts no new events. The count is in fields.refused and in the eventsDropped.closed counter

events.registeredAfterShutdownwarn#

A subscription was registered after shutdown began, so it starts closed

Register handlers before shutting down

gateway#

gateway.commandSentdebug#

A command passed to gateway.send was sent to the gateway

gateway.dispatchdebug#

A dispatch event was received

gateway.dispatchRejectedwarn#

A dispatch failed validation and was skipped. The failing field is in fields.field

Report it if Fluxer's payloads changed, and include the field

gateway.heartbeatAcktrace#

Fluxer acknowledged a heartbeat

gateway.identifyFilterdebug#

A shard asked Fluxer not to send dispatch types that nothing uses

gateway.ignoredEventRegisteredwarn#

A handler was registered for an event type that the running shards asked Fluxer to suppress

Register the handler before connecting, or remove the type from gateway.ignoredEvents

gateway.memberSkippedwarn#

The member attached to a message, reaction or typing dispatch failed validation, so the event arrives without it and the member cache dropped its entry for the account. Logged only while the member cache is enabled

Report it if Fluxer's payloads changed, and include the dispatch type

gateway.payloadReceivedtrace#

The masked body of a received gateway frame, printed only in unsafe payload mode

gateway.payloadSenttrace#

The masked body of a sent gateway frame, printed only in unsafe payload mode

gateway.receivetrace#

A gateway frame was received

gateway.sendtrace#

A gateway frame was sent

gateway.threadSkippedwarn#

A thread in a community snapshot failed validation, so the channel cache does not hold it. The failing entry is in fields.field

Report it if Fluxer's payloads changed, and include the field

gateway.unknownDispatchdebug#

A dispatch type that this SDK version does not handle was ignored

gateway.unknownOpcodedebug#

An opcode that this SDK version does not handle was ignored

lifecycle#

lifecycle.attemptdebug#

A shard started a connection attempt

lifecycle.automaticShardinginfo#

Automatic sharding counted the bot's communities and chose the shard count from that number

lifecycle.botFailederror#

The runBot runner stopped because of a failure that no earlier record reported, and set the process exit code to 1. Setting reportFailure to false turns both off

Read the error's hint

lifecycle.cacheRefillinfowarn#

Shards resumed sessions from the session store, which carry no community data, so the SDK refilled the enabled community, role and channel caches through REST. Warn means some communities failed or the refill stopped early, such as when the community list repeated a page

At Warn, read the message and any error. The affected cache entries fill as events and requests arrive

lifecycle.cleanupFailederror#

A cleanup step failed during shutdown. Shutdown still ran the remaining steps

Report it with the record's error if the SDK owns the failing step

lifecycle.connectedinfowarn#

Every shard of the client is connected, with the bot's name and the number of communities it is in. Warn means the bot is in no community yet

At Warn, invite the bot to a community with the installation link in the message

lifecycle.connectionEndederror#

A shard stopped for good, for example after a rejected token, an invalid shard setting or an exhausted recovery schedule

Read the error's hint

lifecycle.connectionLostwarn#

An established shard connection was lost and the SDK is reconnecting

No action is needed unless it repeats

lifecycle.domainMigrationdebuginfo#

The Fluxer instance announced a web domain migration. When it is switched on, links and OAuth URLs use the announced web app host (Info). A switched-off migration is Debug

lifecycle.drainTimedOutwarn#

The drain time ran out, so shutdown cancels the handlers, waiting events, scheduled tasks and REST requests that had not finished. The fields name how many

Make handlers and tasks finish sooner, or raise drainMs if the process may take longer to stop

lifecycle.drainedinfo#

All work running when the drain began finished in time, so shutdown continues without cancelling any

lifecycle.draininginfo#

A shutdown with drainMs stopped accepting new events and waits for running handlers, waiting handler events, running scheduled tasks and REST requests to finish

lifecycle.identifyPermitFailederror#

The sharding.identify coordinator failed to let a shard start a new session, so the SDK retries the connection

Fix the coordinator's permit function

lifecycle.observerCoalesceddebug#

A connection-state observer was still busy, so an intermediate state was replaced by a newer one

lifecycle.observerFaileddebugerror#

A connection-state observer threw or rejected

Fix the observer callback

lifecycle.readyinfo#

A shard is ready and receives events

lifecycle.reshardedwarn#

Fluxer closed a shard with 4011 (sharding required) on an automatically sized client or a client without sharding settings, so the SDK counted the communities again and moved every shard to a larger automatic plan. Every shard started a new session, so events sent during the move were missed

No action is needed. If it repeats, the bot may be growing fast, and each move is logged with the new total. A client without sharding settings moves again at each start while the bot has outgrown one shard, which sharding "auto" avoids

lifecycle.retrywarn#

A shard's connection attempt failed and will be retried after the delay

Check network access if it repeats

lifecycle.sessionLoadFailederror#

The session store's load function threw, rejected or timed out, so the shard starts a new session

Fix the session store's load function

lifecycle.sessionResetwarn#

A shard's session can no longer resume, so the next connection starts a new session and missed events are lost

lifecycle.sessionRestoredinfo#

A shard is resuming a session saved by the session store

lifecycle.sessionSaveFailederror#

The session store's save function threw, rejected or timed out. During shutdown the next start then begins a new session, and at startup the shard starts a new session instead of resuming the loaded one

Fix the session store's save function

lifecycle.sessionSaveddebug#

A shard's session was saved for a later Resume

lifecycle.sessionSnapshotIgnoredwarn#

A saved session was malformed, older than Fluxer's 60-second resume window, already resumed by an earlier start, or saved for another gateway or shard count, so the shard starts a new session

lifecycle.shutdowninfo#

The client began shutting down

lifecycle.shutdownCompleteinfo#

The client finished shutting down and released its resources

lifecycle.startinginfo#

The client started connecting, with its SDK version and shard plan

lifecycle.startupDeadlineinfo#

Starting several shards may take longer than connection.startupTimeoutMs, because the SDK starts shard sessions one second apart

lifecycle.stopRequestedinfo#

A stop signal or process signal asked the bot to stop

lifecycle.taskFaileddebugerror#

One run of a task started with client.schedule threw or failed. A repeating task keeps its schedule

Fix the task, or handle the failure with the client-level onError

lifecycle.tasksCancelledinfo#

Shutdown ended scheduled tasks that still had a run waiting or in progress, so those runs never happened or did not finish. The count is in fields.cancelled, and fields.running counts the runs cut off while in progress

Shut down with drainMs to let running tasks finish first, and keep work that must survive a restart outside the SDK

ratelimit#

ratelimit.deadlinedebugwarn#

A rate-limit wait would pass the operation's timeout, so the request fails without waiting. When a 429 response caused it, the fields repeat what that response sent, named like RateLimitObservation

Raise timeoutMs, or send fewer requests on that route

ratelimit.waitdebugwarn#

A request was rate-limited and waits delayMs before retrying, at Warn for a second or more. The fields repeat what the 429 response sent, named like RateLimitObservation

Send fewer requests on that route if long waits repeat

rest#

rest.busywarn#

A REST request failed with reason busy because the REST queue or the upload byte budget was full. It is logged at most once a minute, and every busy failure is counted in diagnostics().counters.restBusy

Send fewer requests at once, or raise the limit the message names

rest.payloadReceivedtrace#

The masked body of a REST response, printed only in unsafe payload mode

rest.payloadSenttrace#

The masked body of a REST request, printed only in unsafe payload mode

rest.rejectedwarn#

Fluxer rejected a request with HTTP 401 or 403, usually a token or permission problem that persists. The message names the target channel or community when the route has one. It is logged even when the application handles the Result. When a handler or command fails with this rejection within one second and no onError hook receives the failure, the handler's failure record reports it instead. A later handler failure also logs its own record, because the Warn has already been emitted. Webhook and OAuth clients log rejected webhook tokens and OAuth client credentials the same way

Follow fields.hint. A bot that expects these rejections can lower the rest category level

rest.requestdebug#

One REST attempt finished, with its route, status, duration and Fluxer error code

rest.responseRejectedwarn#

A successful response to an SDK operation did not match the expected shape. The failing field or check is in fields.field

Check test fixtures, or report it if Fluxer's responses changed

rest.retrydebug#

A read is retried after a transient failure

rest.typingRefreshStoppedwarn#

A typing indicator refresh of keepTyping failed, so refreshing stopped while the task keeps running and its result is not changed. The record is logged when the refresh fails, before the task settles, and the channel is in fields.channelId. A refresh stopped by client closure is not logged

Check the record's error for why the typing request failed. The indicator can expire before the task settles

sdk#

sdk.effectLogtracedebuginfowarnerrorfatal#

An Effect log call inside the SDK

sdk.timerFailederror#

An internal timer callback failed

Report it with the record's error

sdk.unknownDebugCategorywarn#

FLUXERLY_DEBUG names categories that do not exist

Use the category names listed in fields.known

sdk.unknownEnvironmentValuewarn#

FLUXERLY_LOG_FORMAT or FLUXERLY_LOG_COLOR has a value that is not recognized, so it is ignored

Use one of the values in fields.accepted

sdk.unsafePayloadswarn#

Unsafe payload logging is on, so Trace records include gateway and REST payloads that can contain private content. Bot tokens and other secrets stay masked

Turn it off outside local debugging

supervisor#

supervisor.automaticShardinginfo#

The supervisor counted the bot's communities for totalShards auto and chose the shard count and child processes

supervisor.childOutputinfowarn#

A child printed a line that is not a log record. Standard error lines are Warn

supervisor.crasherror#

A child process stopped unexpectedly and cannot be restarted, because restart is false or its restarts are used up, so the supervisor shuts down

Read the child's output records before this one, and raise restart.maxAttempts or remove restart: false if restarts should continue

supervisor.exitinfowarn#

A child process exited. Warn means it exited unexpectedly

supervisor.identifyPermitFailederror#

The supervisor's identify coordinator rejected or threw instead of granting a child permission to start a new session, so the child retries as after a network failure

Fix the permit function of the identify.coordinator supervisor option

supervisor.identifyUnacknowledgedwarn#

A child did not confirm sending Identify within 5 seconds of its permission, so the supervisor stops that child. Its restart follows the restart settings

Read the child's output records before this one

supervisor.memberRequestsLocalwarn#

A supervised child asked its parent for a member request slot and got no answer, because the parent did not answer within one second or the child lost its message channel to it. The child then counted only its own member requests, so requests from other children could pass Fluxer's limit of 12 per account in 10 seconds, and Fluxer drops those without an answer. Logged once per child

Read the supervisor records about this child before this one

supervisor.outputFailedwarn#

Reading a child's standard output or standard error failed, so the parent stops forwarding that stream while the child keeps running. The stream is in fields.stream

Read the record's error, and restart the supervisor if that child's output is needed

supervisor.reshardedwarnerror#

Fluxer closed a shard of a child with 4011 (sharding required) under totalShards auto. Warn means the supervisor stopped every child, counted the communities again and started a larger plan, so events sent during the move were missed. Error means it had already moved 3 times within an hour or reached 16,384 shards, so it shut down

For Error, check why the community count keeps growing, or choose a larger numeric totalShards

supervisor.restartwarn#

The supervisor restarts a child after a crash, within the restart budget

supervisor.spawninfo#

The supervisor started a child process

supervisor.spawnFailederror#

The supervisor could not start a child process

Check the entry path and execArgv

supervisor.startupTimeouterror#

A child did not become ready within startupTimeoutMs, so the supervisor shuts down

Read the child's output records before this one, or raise startupTimeoutMs if startup needs longer

supervisor.terminatedwarnerror#

The supervisor force-terminates a child. Warn means the child did not exit within shutdownTimeoutMs of a stop request. Error means the child lost its message channel to the parent and kept running past shutdownTimeoutMs, so the supervisor shuts down

Make the child's cleanup finish sooner, or raise shutdownTimeoutMs

testing#

testing.responderFailederror#

A test route's responder threw, so the request failed as a network error

Fix the responder

testing.socketsLeftOpenwarn#

A test client left gateway sockets open after shutdown, and the test transport closed them

testing.unmatchedRequestwarn#

A test client request matched no test route, so it received 404

Add a route for the request