{"record":{"id":"1a54e295d96a7b55","repo":"ruvnet/ruflo","slug":"itemid-required","errorCode":null,"errorMessage":"itemId required","messagePattern":"itemId required","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"v3/@claude-flow/cli/cloud-functions/publish-registry/index.js","lineNumber":431,"sourceCode":"        });\n\n        // Track rating event\n        await trackEvent(bucket, 'rating', itemId, { rating, itemType });\n\n        return res.json({\n          success: true,\n          itemId,\n          average: Math.round(ratings.average * 10) / 10,\n          count: ratings.count,\n        });\n      }\n\n      case 'get-ratings': {\n        // Get ratings for a plugin or model\n        const { itemId, itemType = 'plugin' } = req.query;\n\n        if (!itemId) {\n          return res.status(400).json({ error: 'itemId required' });\n        }\n\n        const ratingsFile = bucket.file(`ratings/${itemType}/${itemId}.json`);\n\n        try {\n          const [exists] = await ratingsFile.exists();\n          if (!exists) {\n            return res.json({ itemId, average: 0, count: 0, ratings: [] });\n          }\n\n          const [content] = await ratingsFile.download();\n          const ratings = JSON.parse(content.toString());\n\n          return res.json({\n            itemId,\n            average: Math.round(ratings.average * 10) / 10,\n            count: ratings.count,\n            // Don't expose individual user ratings","sourceCodeStart":413,"sourceCodeEnd":449,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/cli/cloud-functions/publish-registry/index.js#L413-L449","documentation":"The 'get-ratings' action found no itemId in the query string. Input-presence guard: ratings are stored per item under ratings/<itemType>/<itemId>, so without an item id there is no file to read and the function returns 400.","triggerScenarios":"Thrown at v3/@claude-flow/cli/cloud-functions/publish-registry/index.js:431 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide all required parameters listed in the message.","Validate required fields before dispatch and report the full set of missing fields at once."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}