{"record":{"id":"9bf0124e097f4d3e","repo":"ipfs/kubo","slug":"unsupported-pubsub-seenmessagesstrategy-q","errorCode":null,"errorMessage":"unsupported Pubsub.SeenMessagesStrategy %q","messagePattern":"unsupported Pubsub\\.SeenMessagesStrategy %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/node/groups.go","lineNumber":79,"sourceCode":"\tif bcfg.getOpt(\"pubsub\") || bcfg.getOpt(\"ipnsps\") {\n\t\tdisc = fx.Provide(libp2p.TopicDiscovery())\n\n\t\tvar pubsubOptions []pubsub.Option\n\t\tpubsubOptions = append(\n\t\t\tpubsubOptions,\n\t\t\tpubsub.WithMessageSigning(!cfg.Pubsub.DisableSigning),\n\t\t\tpubsub.WithSeenMessagesTTL(cfg.Pubsub.SeenMessagesTTL.WithDefault(pubsub.TimeCacheDuration)),\n\t\t)\n\n\t\tvar seenMessagesStrategy timecache.Strategy\n\t\tconfigSeenMessagesStrategy := cfg.Pubsub.SeenMessagesStrategy.WithDefault(config.DefaultSeenMessagesStrategy)\n\t\tswitch configSeenMessagesStrategy {\n\t\tcase config.LastSeenMessagesStrategy:\n\t\t\tseenMessagesStrategy = timecache.Strategy_LastSeen\n\t\tcase config.FirstSeenMessagesStrategy:\n\t\t\tseenMessagesStrategy = timecache.Strategy_FirstSeen\n\t\tdefault:\n\t\t\treturn fx.Error(fmt.Errorf(\"unsupported Pubsub.SeenMessagesStrategy %q\", configSeenMessagesStrategy))\n\t\t}\n\t\tpubsubOptions = append(pubsubOptions, pubsub.WithSeenMessagesStrategy(seenMessagesStrategy))\n\n\t\tswitch cfg.Pubsub.Router {\n\t\tcase \"\":\n\t\t\tfallthrough\n\t\tcase \"gossipsub\":\n\t\t\tps = fx.Provide(libp2p.GossipSub(pubsubOptions...))\n\t\tcase \"floodsub\":\n\t\t\tps = fx.Provide(libp2p.FloodSub(pubsubOptions...))\n\t\tdefault:\n\t\t\treturn fx.Error(fmt.Errorf(\"unknown pubsub router %s\", cfg.Pubsub.Router))\n\t\t}\n\t}\n\n\tautonat := fx.Options()\n\n\tswitch cfg.AutoNAT.ServiceMode {","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/node/groups.go#L61-L97","documentation":"`Pubsub.SeenMessagesStrategy` selects how pubsub deduplicates already-seen message IDs (timecache strategy). Only \"last-seen\" and \"first-seen\" are accepted; any other string aborts libp2p node construction with fx.Error.","triggerScenarios":"`Pubsub.SeenMessagesStrategy` config set to a value other than the constants defined in the config package (LastSeenMessagesStrategy/FirstSeenMessagesStrategy) while pubsub options are being assembled in the LibP2P group.","commonSituations":"Typo like \"lastseen\" or \"Last-Seen\"; config copied from docs of a different tool; hand-edited JSON with wrong casing.","solutions":["Set the strategy to exactly \"first-seen\" or \"last-seen\" via `ipfs config Pubsub.SeenMessagesStrategy first-seen`","Remove the SeenMessagesStrategy key to use the default","Consult docs/config.md for exact accepted strings"],"exampleFix":"// before (config.json)\n\"SeenMessagesStrategy\": \"lastseen\"\n// after\n\"SeenMessagesStrategy\": \"last-seen\"","handlingStrategy":"validation","validationCode":"if s := cfg.Pubsub.SeenMessagesStrategy; s != \"\" && s != \"last-seen\" && s != \"first-seen\" {\n\treturn fmt.Errorf(\"Pubsub.SeenMessagesStrategy %q unsupported\", s)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only \"last-seen\" or \"first-seen\" for SeenMessagesStrategy","Keep config values lowercase as documented in docs/config.md","Set config via `ipfs config` to avoid typos"],"tags":["config","pubsub"],"backgroundTag":"invalid-config-value","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}