{"record":{"id":"e99e749713b881ce","repo":"siyuan-note/siyuan","slug":"invalid-rating-distribution-for-package-s","errorCode":null,"errorMessage":"invalid rating distribution for package: %s","messagePattern":"invalid rating distribution for package: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/bazaar/rating.go","lineNumber":446,"sourceCode":"\traw := map[string]json.RawMessage{}\n\tif err = json.Unmarshal(data, &raw); nil != err {\n\t\treturn nil, err\n\t}\n\tret = make(map[string]bazaarRatingDistribution, len(raw))\n\tfor packageName, rawDistribution := range raw {\n\t\tif !IsValidPackageName(packageName) {\n\t\t\treturn nil, fmt.Errorf(\"invalid package name: %s\", packageName)\n\t\t}\n\t\tvar values []int64\n\t\tif err = json.Unmarshal(rawDistribution, &values); nil != err {\n\t\t\treturn nil, err\n\t\t}\n\t\tif 5 != len(values) {\n\t\t\treturn nil, fmt.Errorf(\"invalid rating distribution length for package: %s\", packageName)\n\t\t}\n\t\tdistribution := bazaarRatingDistribution(values)\n\t\tif !validBazaarRatingDistribution(distribution) {\n\t\t\treturn nil, fmt.Errorf(\"invalid rating distribution for package: %s\", packageName)\n\t\t}\n\t\tret[packageName] = distribution\n\t}\n\treturn\n}\n\nfunc mergeBazaarRatingRegions(regions [bazaarRatingRegionCount]bazaarRatingRegionResult) map[string]*PackageRating {\n\tdistributions := map[string]bazaarRatingDistribution{}\n\tfor _, region := range regions {\n\t\tfor packageName, distribution := range region.data {\n\t\t\tmerged := distributions[packageName]\n\t\t\tvalid := true\n\t\t\tfor i, count := range distribution {\n\t\t\t\tif count > math.MaxInt64-merged[i] {\n\t\t\t\t\tvalid = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tmerged[i] += count","sourceCodeStart":428,"sourceCodeEnd":464,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/8641553a1f07374001902d3ce773285db1292b2d/kernel/bazaar/rating.go#L428-L464","documentation":"After the length check, parseBazaarRatingRegion runs validBazaarRatingDistribution on the 5-element distribution (e.g. all values must be non-negative or otherwise consistent). A distribution with the right shape but invalid contents fails with this error naming the package.","triggerScenarios":"Calling parseBazaarRatingRegion / fetchBazaarRatingRegion on JSON where a package's 5-element distribution contains values violating validBazaarRatingDistribution's invariants — typically a negative count or otherwise inconsistent totals.","commonSituations":"Corrupted or tampered rating index; a test fixture using sentinel values like [-1,0,0,0,0]; an upstream data bug producing negative or nonsensical counts.","solutions":["Read validBazaarRatingDistribution to learn the exact invariants, then check the named package's values against them","Correct negative or invalid counts in the source JSON/fixture","Re-fetch the rating payload in case of data corruption in transit","Report upstream if the marketplace itself serves invalid distributions"],"exampleFix":"// before\n\"pkg\": [-1, 2, 0, 0, 0]\n// after\n\"pkg\": [1, 2, 0, 0, 0] // all buckets validator-consistent","handlingStrategy":"validation","validationCode":"func validDist(values []int64) bool {\n    if len(values) != 5 { return false }\n    for _, v := range values { if v < 0 { return false } }\n    return true // extend to match validBazaarRatingDistribution invariants\n}","typeGuard":null,"tryCatchPattern":"dist, err := parseBazaarRatingRegion(data)\nif err != nil && strings.Contains(err.Error(), \"invalid rating distribution for package\") {\n    // quarantine payload, log package name, fall back to cached ratings\n}","preventionTips":["Pre-validate distributions (length and non-negative values) before parsing","Keep fixtures consistent with validBazaarRatingDistribution","Verify payload integrity (TLS, no tampering) to rule out corrupted data"],"tags":["validation","schema","bazaar"],"backgroundTag":"invalid-argument-value","analyzedSha":"8641553a1f07374001902d3ce773285db1292b2d","analyzedAt":"2026-09-11T16:08:28.414Z","contentChangedAt":"2026-09-11T16:08:28.414Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}