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
Prefer it still? Press here
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
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 untrusted busy network response too 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 not connection 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 not busy timeout connection 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 not not 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 permission link color text limit shard 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 not busy response overflow timeout connection rate
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 not rejected network response timeout rate
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 rate
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 rate
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 cursor page 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 restart startup shard
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
Request failures, such as guild.<reason> and message.<reason>, share these reasons
inputAn input value is invalid, so nothing was sent to Fluxer. The error's inputValidation.path names it
busyToo 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
rejectedFluxer 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
networkA network error interrupted the request
responseFluxer's answer did not have the expected format. The failing field or check is in details.responseField
timeoutThe 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
Readable console lines show the record code in brackets after the category, and JSON lines hold it in code
cache#cache.changesDropped warn#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.policyFailed debugerror#A cache maxAgeMs function or a cache.onChange listener threw or returned an invalid value
Fix that function or listener
cleanup#cleanup.progressFailed debugerror#A message cleanup progress callback threw
Fix the onProgress callback
collectors#collectors.callbackFailed debugerror#A collector callback threw or failed
Fix the callback
collectors.dropped debug#A full collector ignored an event while its last callback finished
collectors.failed warn#A collector stopped because of a failure
Read the collector's result for the error
collectors.filterFailed debugerror#A collector filter threw or returned a non-boolean
Make the filter return true or false without throwing
commands#commands.executed debug#A command finished
commands.failed debugerror#A command threw or failed
Fix the command, or handle the failure with the router's onError
commands.middlewareStopped debug#A command did not run because middleware did not continue
commands.rejected debug#A command did not run because a guard denied it, its cooldown was active or an argument was invalid
commands.unmatched debug#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.discarded debuginfo#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.dropped warn#A full subscription queue dropped an event under its overflow policy
Handle events faster or raise the pending limits
events.handlerFailed debugerror#An event handler threw or failed. Other events keep running
Fix the handler, or handle the failure with onError
events.hookFailed error#An onError hook failed while it handled another failure
Fix the onError hook
events.overflow debugwarnerror#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.raw trace#A raw dispatch is being delivered to raw subscribers
events.refused info#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.registeredAfterShutdown warn#A subscription was registered after shutdown began, so it starts closed
Register handlers before shutting down
gateway#gateway.commandSent debug#A command passed to gateway.send was sent to the gateway
gateway.dispatch debug#A dispatch event was received
gateway.dispatchRejected warn#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.heartbeatAck trace#Fluxer acknowledged a heartbeat
gateway.identifyFilter debug#A shard asked Fluxer not to send dispatch types that nothing uses
gateway.ignoredEventRegistered warn#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.memberSkipped warn#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.payloadReceived trace#The masked body of a received gateway frame, printed only in unsafe payload mode
gateway.payloadSent trace#The masked body of a sent gateway frame, printed only in unsafe payload mode
gateway.receive trace#A gateway frame was received
gateway.send trace#A gateway frame was sent
gateway.threadSkipped warn#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.unknownDispatch debug#A dispatch type that this SDK version does not handle was ignored
gateway.unknownOpcode debug#An opcode that this SDK version does not handle was ignored
lifecycle#lifecycle.attempt debug#A shard started a connection attempt
lifecycle.automaticSharding info#Automatic sharding counted the bot's communities and chose the shard count from that number
lifecycle.botFailed error#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.cacheRefill infowarn#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.cleanupFailed error#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.connected infowarn#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.connectionEnded error#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.connectionLost warn#An established shard connection was lost and the SDK is reconnecting
No action is needed unless it repeats
lifecycle.domainMigration debuginfo#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.drainTimedOut warn#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.drained info#All work running when the drain began finished in time, so shutdown continues without cancelling any
lifecycle.draining info#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.identifyPermitFailed error#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.observerCoalesced debug#A connection-state observer was still busy, so an intermediate state was replaced by a newer one
lifecycle.observerFailed debugerror#A connection-state observer threw or rejected
Fix the observer callback
lifecycle.ready info#A shard is ready and receives events
lifecycle.resharded warn#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.retry warn#A shard's connection attempt failed and will be retried after the delay
Check network access if it repeats
lifecycle.sessionLoadFailed error#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.sessionReset warn#A shard's session can no longer resume, so the next connection starts a new session and missed events are lost
lifecycle.sessionRestored info#A shard is resuming a session saved by the session store
lifecycle.sessionSaveFailed error#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.sessionSaved debug#A shard's session was saved for a later Resume
lifecycle.sessionSnapshotIgnored warn#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.shutdown info#The client began shutting down
lifecycle.shutdownComplete info#The client finished shutting down and released its resources
lifecycle.starting info#The client started connecting, with its SDK version and shard plan
lifecycle.startupDeadline info#Starting several shards may take longer than connection.startupTimeoutMs, because the SDK starts shard sessions one second apart
lifecycle.stopRequested info#A stop signal or process signal asked the bot to stop
lifecycle.taskFailed debugerror#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.tasksCancelled info#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.deadline debugwarn#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.wait debugwarn#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.busy warn#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.payloadReceived trace#The masked body of a REST response, printed only in unsafe payload mode
rest.payloadSent trace#The masked body of a REST request, printed only in unsafe payload mode
rest.rejected warn#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.request debug#One REST attempt finished, with its route, status, duration and Fluxer error code
rest.responseRejected warn#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.retry debug#A read is retried after a transient failure
rest.typingRefreshStopped warn#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.effectLog tracedebuginfowarnerrorfatal#An Effect log call inside the SDK
sdk.timerFailed error#An internal timer callback failed
Report it with the record's error
sdk.unknownDebugCategory warn#FLUXERLY_DEBUG names categories that do not exist
Use the category names listed in fields.known
sdk.unknownEnvironmentValue warn#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.unsafePayloads warn#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.automaticSharding info#The supervisor counted the bot's communities for totalShards auto and chose the shard count and child processes
supervisor.childOutput infowarn#A child printed a line that is not a log record. Standard error lines are Warn
supervisor.crash error#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.exit infowarn#A child process exited. Warn means it exited unexpectedly
supervisor.identifyPermitFailed error#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.identifyUnacknowledged warn#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.memberRequestsLocal warn#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.outputFailed warn#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.resharded warnerror#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.restart warn#The supervisor restarts a child after a crash, within the restart budget
supervisor.spawn info#The supervisor started a child process
supervisor.spawnFailed error#The supervisor could not start a child process
Check the entry path and execArgv
supervisor.startupTimeout error#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.terminated warnerror#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.responderFailed error#A test route's responder threw, so the request failed as a network error
Fix the responder
testing.socketsLeftOpen warn#A test client left gateway sockets open after shutdown, and the test transport closed them
testing.unmatchedRequest warn#A test client request matched no test route, so it received 404
Add a route for the request