{"record":{"id":"a60f8376ac7970eb","repo":"bevyengine/bevy","slug":"expected-after-to-exist-a60f83","errorCode":null,"errorMessage":"Expected {after:?} to exist","messagePattern":"Expected (.+?) to exist","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/bevy_render/src/lib.rs","lineNumber":302,"sourceCode":"    pub labels: Vec<InternedScheduleLabel>,\n}\n\nimpl Default for RenderScheduleOrder {\n    fn default() -> Self {\n        Self {\n            labels: vec![First.intern(), Render.intern()],\n        }\n    }\n}\n\nimpl RenderScheduleOrder {\n    /// Adds the given `schedule` after the `after` schedule\n    pub fn insert_after(&mut self, after: impl ScheduleLabel, schedule: impl ScheduleLabel) {\n        let index = self\n            .labels\n            .iter()\n            .position(|current| (**current).eq(&after))\n            .unwrap_or_else(|| panic!(\"Expected {after:?} to exist\"));\n        self.labels.insert(index + 1, schedule.intern());\n    }\n\n    /// Adds the given `schedule` before the `before` schedule\n    pub fn insert_before(&mut self, before: impl ScheduleLabel, schedule: impl ScheduleLabel) {\n        let index = self\n            .labels\n            .iter()\n            .position(|current| (**current).eq(&before))\n            .unwrap_or_else(|| panic!(\"Expected {before:?} to exist\"));\n        self.labels.insert(index, schedule.intern());\n    }\n}\n\n/// The main render schedule.\n///\n/// See also [`RenderGraph`] for more details.\n#[derive(ScheduleLabel, Debug, Hash, PartialEq, Eq, Clone, Default)]","sourceCodeStart":284,"sourceCodeEnd":320,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_render/src/lib.rs#L284-L320","documentation":"`RenderScheduleOrder` holds the ordered list of schedule labels the RenderApp executes (starting from First and Render in the default setup). `insert_after(after, schedule)` panics with \"Expected {after:?} to exist\" when the anchor label is not in that list — insertion is only possible relative to an already-present schedule.","triggerScenarios":"Calling `render_schedule_order.insert_after(MySchedule, NewSchedule)` when `MySchedule` was never inserted into the order, was removed, or the label type is misspelled/different.","commonSituations":"Plugins inserting a custom sub-schedule relative to their own label before that label is registered; hand-written ordering code using the wrong label type.","solutions":["Insert relative to a label guaranteed to exist, e.g. `Render` or `First`","Ensure the anchor schedule was inserted earlier (inspect `order.labels`)","Insert your schedule standalone first, then reorder it relative to known labels"],"exampleFix":"// before\norder.insert_after(MyCustomSchedule, MyNewSchedule); // MyCustomSchedule not inserted yet\n\n// after\norder.insert_after(Render, MyNewSchedule); // or insert MyCustomSchedule first","handlingStrategy":"validation","validationCode":"// RenderScheduleOrder stores Box<dyn ScheduleLabel>\nlet exists = order.labels.iter().any(|l| (**l).eq(&MySchedule));\nif exists {\n    order.insert_after(MySchedule, MyNewSchedule);\n} else {\n    order.insert_after(Render, MyNewSchedule); // safe anchor\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Anchor insert_after calls to Render or First, which always exist","Insert custom labels before other plugins order against them","Log order.labels once at startup to see the actual order"],"tags":["bevy","render","schedule","ordering","panic"],"backgroundTag":"schedule-label-not-found","analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","contentChangedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-09-09T01:17:15.007Z"}