siyuan-note/siyuan · error
get checksum manifest failed
Error message
get checksum manifest failed: %d
What it means
The checksum manifest download completed but GitHub responded with a non-200 status code. The function formats the status into this error and aborts, since only HTTP 200 yields a trustworthy manifest body. No manifest is cached on this path.
Solutions
- Check the printed status code: 403 usually means GitHub rate limiting — wait for the window to reset or set a token
- 404 means the manifest asset is gone — verify the release still lists SHA256SUMS.txt
- Retry later for 5xx/CDN errors
- Bypass misbehaving proxies for github.com if a corporate proxy is intercepting requests
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check the asset URL reachability
resp, err := http.Head(manifestURL)
if err == nil && resp.StatusCode != 200 {
logging.LogWarnf("manifest URL head status %d; expect failure", resp.StatusCode)
} Try / catch
checksum, err := getGitHubManifestChecksum(ctx, release, pkgName)
if err != nil {
var statusErr *fmt.Errorf
if errors.As(err, &statusErr) && strings.Contains(err.Error(), "get checksum manifest failed") {
// inspect embedded status: 403 rate limit -> backoff; 404 -> release assets changed
return err
}
} Prevention
- Respect GitHub rate limits; add a token or slow down update checks
- Re-fetch release metadata instead of relying on stale cached listings
- Bypass content-filtering proxies for api.github.com and github.com downloads
When it happens
Trigger: GET of manifestAsset.BrowserDownloadURL returns 404 (asset removed), 403 (rate limit/blocked), 302 that terminates in an error page, or 5xx from GitHub/CDN during getGitHubUpdateRelease.
Common situations: Anonymous GitHub rate limiting (403 with rate-limit headers); the release was deleted or its assets removed after the API listing was cached; CDN outages; corporate proxies returning block pages.
Related errors
- download failed: HTTP
- authentication probe returned HTTP " + response.status
- boot progress request returned HTTP " + response.status
- discover OIDC provider failed
- download custom emoji failed
AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11).
Data as JSON: /api/errors/98e21c6b60c02fff.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/model/updater_release.go:392
cached, ok := githubManifestCache.Load(manifestCacheKey)
if ok {
if checksum := parseChecksumManifest(cached.(string), pkgName); "" != checksum {
return checksum, nil
}
return "", errors.New("package checksum is unavailable")
}
}
response, err := httpclient.NewCloudRequest30s().SetContext(ctx).Get(manifestAsset.BrowserDownloadURL)
if err != nil {
return "", err
}
if nil == response || nil == response.Response {
return "", errors.New("checksum manifest response is empty")
}
defer response.Body.Close()
if 200 != response.StatusCode {
return "", fmt.Errorf("get checksum manifest failed: %d", response.StatusCode)
}
data, err := io.ReadAll(io.LimitReader(response.Body, maxChecksumManifestSize+1))
if err != nil {
return "", err
}
if maxChecksumManifestSize < int64(len(data)) {
return "", errors.New("checksum manifest is too large")
}
if "" != manifestDigest {
actualDigest := fmt.Sprintf("%x", sha256.Sum256(data))
if manifestDigest != actualDigest {
return "", errors.New("checksum manifest digest mismatch")
}
}
manifest := string(data)
if "" != manifestCacheKey {
githubManifestCache.Store(manifestCacheKey, manifest)
}View on GitHub (pinned to 8641553a1f)