{"record":{"id":"8c4ec1e920da5559","repo":"kovidgoyal/kitty","slug":"s-is-not-a-valid-type-signature-w","errorCode":null,"errorMessage":"%s is not a valid type signature: %w","messagePattern":"(.+?) is not a valid type signature: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kittens/desktop_ui/portal.go","lineNumber":237,"sourceCode":"\t\t\"ChangeSetting\": {{\"namespace\", \"s\", false}, {\"key\", \"s\", false}, {\"value\", \"v\", false}},\n\t\t\"RemoveSetting\": {{\"namespace\", \"s\", false}, {\"key\", \"s\", false}},\n\t}\n\tprops[\"version\"].Value = uint32(1)\n\tif err = ExportInterface(self.bus, self, CHANGE_SETTINGS_INTERFACE, KITTY_OBJECT_PATH, methods, props, nil); err != nil {\n\t\treturn\n\t}\n\treturn\n}\n\nfunc ParseValueWithSignature(value, value_type_signature string) (v dbus.Variant, err error) {\n\tvar s dbus.Signature\n\tif value_type_signature != \"\" {\n\t\tif value_type_signature[0] == '@' {\n\t\t\tvalue_type_signature = value_type_signature[1:]\n\t\t}\n\t\ts, err = dbus.ParseSignature(value_type_signature)\n\t\tif err != nil {\n\t\t\treturn dbus.Variant{}, fmt.Errorf(\"%s is not a valid type signature: %w\", value_type_signature, err)\n\t\t}\n\t}\n\tv, err = dbus.ParseVariant(value, s)\n\tif err != nil {\n\t\tif value_type_signature == \"\" {\n\t\t\treturn dbus.Variant{}, fmt.Errorf(\"could not guess the data type of: %s with error: %w\", value, err)\n\t\t}\n\t\treturn dbus.Variant{}, fmt.Errorf(\"%s is not a valid value for signature: %#v with error: %w\", value, value_type_signature, err)\n\t}\n\treturn v, nil\n}\n\nfunc ParseValue(value string) (dbus.Variant, error) {\n\treturn ParseValueWithSignature(value, \"\")\n}\n\ntype ShowSettingsOptions struct {\n\tAsJson             bool","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kittens/desktop_ui/portal.go#L219-L255","documentation":"ParseValueWithSignature strips a leading '@' from the signature and hands it to dbus.ParseSignature; if the remaining string is not a valid D-Bus type signature (e.g. 'uu' where 'u' is expected, or 'x'), this error is returned.","triggerScenarios":"Calling set with a --value-type/signature argument like '@q', '@ii', or an empty-after-@ signature.","commonSituations":"Users unfamiliar with GVariant type strings passing full type names ('uint32') instead of signature characters ('u'), or concatenating multiple type characters.","solutions":["Use a single valid D-Bus signature character/structure, e.g. '@u', '@s', '@b', '@(ii)'","Consult the GVariant type string documentation","Omit the signature entirely and let ParseValue guess the type"],"exampleFix":"# before\nkitten desktop-ui set ns key --value-type '@uint32' 1\n# after\nkitten desktop-ui set ns key --value-type '@u' 1","handlingStrategy":"validation","validationCode":"sig := strings.TrimPrefix(sig, \"@\")\nif _, err := dbus.ParseSignature(sig); err != nil {\n    return fmt.Errorf(\"bad signature %q\", sig)\n}","typeGuard":"func isValidSignature(s string) bool {\n    s = strings.TrimPrefix(s, \"@\")\n    _, err := dbus.ParseSignature(s)\n    return err == nil\n}","tryCatchPattern":null,"preventionTips":["Use single-character signatures (u, s, b, x)","Validate signatures against dbus.ParseSignature before passing them on"],"tags":["dbus","gvariant","desktop-ui","validation"],"backgroundTag":"gvariant-invalid-signature","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}