{"record":{"id":"dc05e4073b348f23","repo":"ory/kratos","slug":"message-id-s-is-used-more-than-once-s-s","errorCode":null,"errorMessage":"message ID %s is used more than once: %s %s","messagePattern":"message ID (.+?) is used more than once: (.+?) (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/clidoc/main.go","lineNumber":409,"sourceCode":"\t\t\t\t\t\t\t\t\tusedIDs = append(usedIDs, message{\n\t\t\t\t\t\t\t\t\t\tID:   c.(*types.Const).Val().ExactString(),\n\t\t\t\t\t\t\t\t\t\tName: name.Name,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsort.Slice(usedIDs, func(i, j int) bool {\n\t\treturn usedIDs[i].ID < usedIDs[j].ID\n\t})\n\tfor i := 1; i < len(usedIDs); i++ {\n\t\tif usedIDs[i].ID == usedIDs[i-1].ID {\n\t\t\treturn errors.Errorf(\"message ID %s is used more than once: %s %s\", usedIDs[i].ID, usedIDs[i].Name, usedIDs[i-1].Name)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc generateElements(messageFilePath string) error {\n\t// If the file at messageFilePath does not exist, create it\n\tf, err := os.OpenFile(messageFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644) // #nosec\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"unable to open or create message file at %s\", messageFilePath)\n\t}\n\tif err := f.Close(); err != nil {\n\t\treturn errors.Wrapf(err, \"unable to close message file at %s\", messageFilePath)\n\t}\n\n\tsortedMessages := sortMessages()\n\tif err := writeMessagesJson(messageFilePath, sortedMessages); err != nil {","sourceCodeStart":391,"sourceCodeEnd":427,"githubUrl":"https://github.com/ory/kratos/blob/b86338da04a040247a07f46100a86dcfb3875909/cmd/clidoc/main.go#L391-L427","documentation":"After sorting all message constants from text/id.go by their ID value, validateAllMessages found two adjacent entries with the identical ID. Two distinct message constants share one identifier, which would make error messages ambiguous in generated documentation.","triggerScenarios":"Thrown at cmd/clidoc/main.go:409 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Give each of the two named constants its own unique ID value in text/id.go","Use the generator's normal creation flow for new messages so IDs are assigned freshly","Re-run the doc generation to verify no duplicates remain"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b86338da04a040247a07f46100a86dcfb3875909","analyzedAt":"2026-09-07T15:58:15.934Z","contentChangedAt":"2026-09-07T15:58:15.934Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}