{"record":{"id":"c3aa67d7e4b75c8a","repo":"GitoxideLabs/gitoxide","slug":"just-added-c3aa67","errorCode":null,"errorMessage":"just added","messagePattern":"just added","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"info","filePath":"gix-attributes/src/search/outcome.rs","lineNumber":316,"sourceCode":"        let order = match self.name_to_meta.get_mut(name) {\n            Some(meta) => meta.id,\n            None => {\n                let order = AttributeId(self.name_to_meta.len());\n                self.name_to_meta.insert(\n                    NameRef(name).to_owned(),\n                    Metadata {\n                        id: order,\n                        macro_attributes: Default::default(),\n                    },\n                );\n                order\n            }\n        };\n\n        self.assign_order_to_attributes(attrs);\n        self.name_to_meta\n            .get_mut(name)\n            .expect(\"just added\")\n            .macro_attributes\n            .clone_from(attrs);\n\n        order\n    }\n    pub(crate) fn id_for_attribute(&mut self, name: &str) -> AttributeId {\n        match self.name_to_meta.get(name) {\n            Some(meta) => meta.id,\n            None => {\n                let order = AttributeId(self.name_to_meta.len());\n                self.name_to_meta.insert(NameRef(name).to_owned(), order.into());\n                order\n            }\n        }\n    }\n    pub(crate) fn assign_order_to_attributes(&mut self, attributes: &mut [TrackedAssignment]) {\n        for TrackedAssignment {\n            id: order,","sourceCodeStart":298,"sourceCodeEnd":334,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-attributes/src/search/outcome.rs#L298-L334","documentation":"`id_for_macro` inserts a new metadata entry for the macro name, then does `self.name_to_meta.get_mut(name).expect(\"just added\")`. Because the insert precedes the lookup in the same function, None is impossible unless the insert silently failed or the name key diverged between insert and lookup.","triggerScenarios":"Only reachable through `update_from_list` processing a macro pattern; would fire if the inserted key differs from the looked-up `name` (refactor regression) or allocator corruption — not from user input.","commonSituations":"Effectively never observed by users; may appear in fuzz runs or after manual edits to the crate internals.","solutions":["No user-side action; treat occurrence as a crate bug and report it","Rebuild with unmodified upstream gix-attributes sources","Keep gix-attributes and gix-glob versions in lockstep"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| collection.update_from_list(&list)));","preventionTips":["Use upstream builds unmodified","Treat any occurrence as a crate bug to report"],"tags":["rust","panic","internal-invariant","macros"],"backgroundTag":"internal-invariant-violation","analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}