{"record":{"id":"799b472146ee7565","repo":"flarum/framework","slug":"one-or-more-extensions-have-changed-killing-to-restart","errorCode":null,"errorMessage":"One or more extensions have changed, killing to restart.","messagePattern":"One or more extensions have changed, killing to restart\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"extensions/realtime/src/Websocket/Console/ServeCommand.php","lineNumber":224,"sourceCode":"                    ->where('key', 'extensions_enabled')\n                    ->value('value');\n            }\n\n            if ($enabled === null || $newState === $enabled) {\n                $enabled = $newState;\n\n                return;\n            }\n\n            if ($this->option('ignore-extension-toggles')) {\n                $enabled = $newState;\n\n                $this->warn('One or more extensions have changed, but ignoring due to flag --ignore-extension-toggles.');\n\n                return;\n            }\n\n            $this->warn('One or more extensions have changed, killing to restart.');\n\n            $loop->stop();\n        });\n    }\n}\n","sourceCodeStart":206,"sourceCodeEnd":230,"githubUrl":"https://github.com/flarum/framework/blob/4b939f685389bfe8a380e9e28ddf305a1c66950c/extensions/realtime/src/Websocket/Console/ServeCommand.php#L206-L230","documentation":"ServeCommand detects that one or more extensions changed state while the websocket server is running; since restart-on-change is the default (no --ignore-extension-toggles), it warns 'One or more extensions have changed, killing to restart.' and stops the loop so the wrapper restarts the server with the new extension set.","triggerScenarios":"Enabling/disabling any extension via admin UI or CLI while `websocket:serve`/`serve` is running without --ignore-extension-toggles.","commonSituations":"Deploys or admin actions during a live serve process; supervisors then relaunch the server, briefly dropping websocket connections.","solutions":["Expected behavior — let the supervisor restart the process","Use --ignore-extension-toggles if you must keep connections alive through toggles","Schedule extension toggles during maintenance windows"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"# systemd example\n[Service]\nExecStart=/usr/bin/php flarum websocket:serve\nRestart=always","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run the server under a process supervisor so the kill is followed by an immediate restart","Schedule extension enable/disable outside traffic peaks","Expect brief websocket disconnects on toggles; clients should auto-reconnect"],"tags":["websocket","extensions","restart-signal"],"backgroundTag":"invalid-state-transition","analyzedSha":"4b939f685389bfe8a380e9e28ddf305a1c66950c","analyzedAt":"2026-09-15T18:09:20.879Z","contentChangedAt":"2026-09-15T18:09:20.879Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}