{"record":{"id":"77e1b4a3069d9f42","repo":"Humanizr/Humanizer","slug":"inflection-lexeme-lexemeid-form-name-prefe","errorCode":null,"errorMessage":"Inflection lexeme '{lexemeId}' form '{name}' preferred value must be accepted.","messagePattern":"Inflection lexeme '(.+?)' form '(.+?)' preferred value must be accepted\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Humanizer.SourceGenerators/Generators/ProfileCatalogs/InflectionCatalogParsing.cs","lineNumber":392,"sourceCode":"                    $\"Inflection lexeme '{lexemeId}' form '{name}' must define preferred\"),\n                casing,\n                ownerScripts,\n                subject,\n                allowStemPlaceholder: false,\n                allowNonLetters: true);\n            var accepted = NormalizeAuthoredTexts(\n                GetRequiredStrings(\n                    mapping,\n                    \"accepted\",\n                    $\"Inflection lexeme '{lexemeId}' form '{name}' must define accepted\"),\n                casing,\n                ownerScripts,\n                subject,\n                allowStemPlaceholder: false,\n                allowNonLetters: true);\n            if (!accepted.Contains(preferred, StringComparer.Ordinal))\n            {\n                throw new InvalidOperationException(\n                    $\"Inflection lexeme '{lexemeId}' form '{name}' preferred value must be accepted.\");\n            }\n\n            return new(preferred, accepted);\n        }\n\n        static ImmutableArray<InflectionRuleInput> ParseRules(\n            SimpleYamlMapping mapping,\n            ImmutableHashSet<string> sourceIds,\n            ImmutableHashSet<string> lexemeIds,\n            ImmutableArray<string> ownerScripts,\n            string cardinalRule,\n            string casing)\n        {\n            if (!mapping.TryGetValue(\"rules\", out var value))\n            {\n                return [];\n            }","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/Humanizr/Humanizer/blob/ffc2b77c0f30d2fb176875841424379319d0ae9b/src/Humanizer.SourceGenerators/Generators/ProfileCatalogs/InflectionCatalogParsing.cs#L374-L410","documentation":"For each form, the 'preferred:' value must also appear in the 'accepted:' list (ordinal comparison). ParseForm throws when preferred is not a member of accepted, because the preferred form is the default and must be an accepted spelling.","triggerScenarios":"'preferred:' names a spelling that is absent from (or differs in case/spacing from) every entry in 'accepted:'.","commonSituations":"Editing the preferred spelling and forgetting to mirror it in the accepted list; a casing-mode change that alters preferred but not accepted.","solutions":["Add the preferred value verbatim to the accepted list"],"exampleFix":"# before\n            other:\n              preferred: 'cats'\n              accepted:\n                - 'cat'\n# after\n            other:\n              preferred: 'cats'\n              accepted:\n                - 'cats'","handlingStrategy":"validation","validationCode":"foreach (var form in allForms)\n    if (!form.Accepted.Contains(form.Preferred, StringComparer.Ordinal))\n        Report($\"{locale}: preferred '{form.Preferred}' must appear in accepted.\");","typeGuard":"static bool PreferredIsAccepted(Form f) =>\n    f.Accepted.Contains(f.Preferred, StringComparer.Ordinal);","tryCatchPattern":null,"preventionTips":["After editing 'preferred', paste the same value into 'accepted'","Re-check after changing the bundle 'casing' mode"],"tags":["inflection","localization","yaml","source-generator","locale","validation"],"backgroundTag":null,"analyzedSha":"ffc2b77c0f30d2fb176875841424379319d0ae9b","analyzedAt":"2026-08-13T21:42:34.584Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}