siyuan-note/siyuan · error

invalid user rating returned by cloud server

Error message

invalid user rating returned by cloud server

What it means

Error returned by model.GetBazaarPackageRating (kernel/model/bazaar_rating.go:127) when the cloud's getBazaarPackageRating response carries a user rating outside the valid 0..5 range. The kernel validates the echoed data.Rating after a successful (HTTP 200, code 0) request; a negative or >5 value means the server violated its contract, and the kernel refuses to propagate garbage to callers.

Source

Thrown at kernel/model/bazaar_rating.go:127

// GetBazaarPackageRating 获取已安装官方包的公开评分和当前用户评分。
func GetBazaarPackageRating(ctx context.Context, pkgType, packageName string) (rating *bazaar.PackageRating,
	ratingAvailable bool, userRating int, err error) {
	token, err := bazaarRatingValidatePackage(ctx, pkgType, packageName)
	if nil != err {
		return nil, false, 0, err
	}

	data := bazaarPackageUserRatingData{}
	err = requestBazaarPackageRating(ctx, "/apis/siyuan/bazaar/getBazaarPackageRating", map[string]any{
		"token":       token,
		"packageName": packageName,
	}, &data)
	if nil != err {
		return nil, false, 0, err
	}
	if 0 > data.Rating || 5 < data.Rating {
		return nil, false, 0, errors.New("invalid user rating returned by cloud server")
	}

	rating, ratingAvailable = bazaar.GetBazaarPackageRating(ctx, packageName)
	return rating, ratingAvailable, data.Rating, nil
}

// SetBazaarPackageRating 设置或取消已安装官方包的当前用户评分。
func SetBazaarPackageRating(ctx context.Context, pkgType, packageName string, userRating int) (rating *bazaar.PackageRating,
	ratingAvailable bool, retUserRating int, err error) {
	if 0 > userRating || 5 < userRating {
		return nil, false, 0, errors.New("rating must be an integer from 0 to 5")
	}
	bazaarRatingSetMu.Lock()
	defer bazaarRatingSetMu.Unlock()

	token, err := bazaarRatingValidatePackage(ctx, pkgType, packageName)
	if nil != err {
		return nil, false, 0, err

View on GitHub (pinned to afa823b6b4)

Solutions

  1. Retry after a short wait to rule out a transient bad payload
  2. Update SiYuan so the kernel's response schema matches the current cloud API
  3. If it persists on the latest version, report it as a backend bug; there is no local workaround
Defensive patterns

Strategy: retry

Try / catch

_, _, _, err := model.GetBazaarPackageRating(ctx, pkgType, name)
if err != nil && strings.Contains(err.Error(), "invalid user rating returned by cloud server") {
    // transient backend issue: single delayed retry, else hide the rating UI
}

Prevention

When it happens

Trigger: A successful call to /api/bazaar/getBazaarPackageRating where the cloud payload's rating field is malformed (e.g. -1, 6, or a parsing artifact from a changed response schema). Purely server-side; no local input can cause it.

Common situations: Cloud schema changes deployed ahead of the kernel; corrupted account state server-side returning sentinel values like -1 for 'no rating yet' in an old format; API version skew between an outdated kernel and a newer backend.

Related errors


AI-assisted analysis of siyuan-note/siyuan@afa823b6b4 (2026-08-18). Data as JSON: /api/errors/6bd1b2f68e53fafd. Report an issue: GitHub.