{"record":{"id":"3ec578ab199b3dd9","repo":"egametang/ET","slug":"routermanager-fiber-not-found-under-fiber-self-f","errorCode":null,"errorMessage":"RouterManager fiber not found under fiber: {self.Fiber().Name}","messagePattern":"RouterManager fiber not found under fiber: (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"critical","filePath":"Packages/cn.etetet.robot/Scripts/Hotfix/Server/RobotManagerComponentSystem.cs","lineNumber":63,"sourceCode":"            long robot = await self.Fiber().CreateFiber(schedulerType, IdGenerater.Instance.GenerateId(), SceneType.Client, account);\n            self = selfRef;\n            ProcessInnerSender processInnerSender = self.Root().GetComponent<ProcessInnerSender>();\n            Robot_LoginRequest robotLoginRequest = Robot_LoginRequest.Create();\n            robotLoginRequest.Account = account;\n            robotLoginRequest.Password = \"\";\n            robotLoginRequest.Address = routerManagerAddress;\n            await processInnerSender.Call(new FiberInstanceId(robot, 1), robotLoginRequest);\n            self = selfRef;\n            self.robots.Add(account, robot);\n            return robot;\n        }\n\n        private static string GetRouterManagerAddress(this RobotManagerComponent self)\n        {\n            Fiber routerManagerFiber = self.Fiber().GetFiber(\"RouterManager\");\n            if (routerManagerFiber == null)\n            {\n                throw new Exception($\"RouterManager fiber not found under fiber: {self.Fiber().Name}\");\n            }\n\n            string address = routerManagerFiber.Root.GetComponent<RouterManagerAddressComponent>()?.Address;\n            if (string.IsNullOrWhiteSpace(address))\n            {\n                throw new Exception(\"RouterManagerAddressComponent is missing on RouterManager scene.\");\n            }\n\n            return address;\n        }\n    }\n}\n","sourceCodeStart":45,"sourceCodeEnd":76,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.robot/Scripts/Hotfix/Server/RobotManagerComponentSystem.cs#L45-L76","documentation":"RobotManagerComponentSystem.GetRouterManagerAddress looks up the 'RouterManager' fiber via self.Fiber().GetFiber('RouterManager') and throws if it returns null. Robots need the RouterManager's address to construct login requests URLs, so its absence is fatal for robot spawn.","triggerScenarios":"GetRouterManagerAddress is called (during NewRobot/login flow) when no fiber named 'RouterManager' exists under the current fiber's process. GetFiber returns null and the exception is thrown.","commonSituations":"Running the robot process without a co-located RouterManager scene (start config doesn't include a RouterManager fiber); wrong process topology for the test; RouterManager named differently in start config; calling robot spawn from a process that legitimately shouldn't host RouterManager.","solutions":["Confirm the start configuration includes a 'RouterManager' fiber in the same process as the robot manager.","Verify the fiber name string matches start config exactly (case, spelling).","If RouterManager lives in another process, fetch its address via service discovery instead of GetFiber.","Gate NewRobot on RouterManager presence and log a clear error rather than throwing mid-spawn."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before spawning robots, confirm RouterManager is co-located\nFiber routerFiber = self.Fiber().GetFiber(\"RouterManager\");\nif (routerFiber == null) {\n    Log.Error(\"RouterManager fiber not present in this process; cannot spawn robots\");\n    return;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure start config co-locates RouterManager with the robot manager process.","Validate fiber topology at startup, not at first robot spawn.","If RouterManager is remote, resolve via service discovery rather than GetFiber."],"tags":["robot","fiber","router","configuration","missing-dependency"],"backgroundTag":null,"analyzedSha":"5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f","analyzedAt":"2026-08-13T21:10:40.377Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}