siyuan-note/siyuan · warning
package checksum is unavailable
Error message
package checksum is unavailable
What it means
getGitHubManifestChecksum parses the cached or freshly downloaded SHA256SUMS.txt content and extracts the checksum line for the requested package (pkgName). If the manifest was found and loaded, but no entry matches the package name, this error is thrown. The upstream caller treats it as a warning and proceeds without a checksum.
Solutions
- Retry with force=true on the update check; if the manifest digest changed, the cache key changes and a fresh manifest is fetched
- Check that SHA256SUMS.txt on the release page actually lists the installer file for your platform; if not, it is a release-packaging issue to report
- If it recurs, clear the process cache by restarting the kernel so githubManifestCache is emptied
- Install manually and verify the SHA-256 by hand against the manifest line for your file
Defensive patterns
Strategy: retry
Validate before calling
manifest, _ := githubManifestCache.Load(key) listed := manifest != nil && strings.Contains(manifest.(string), pkgName)
Try / catch
checksum, err := getGitHubManifestChecksum(ctx, release, pkg)
if err != nil {
logging.LogWarnf("no checksum for %s: %s", pkg, err) // continue without checksum
} Prevention
- Force a refresh so the manifest cache is keyed to the current release digest
- Confirm your platform's installer filename is present in SHA256SUMS.txt before automated updates
- Restart the kernel if a stale manifest cache entry is suspected
- Report missing package lines in the manifest as a release-packaging bug
When it happens
Trigger: parseChecksumManifest(cached, pkgName) returning empty because the manifest file does not contain a line for the current install package name — e.g. the manifest was cached from an older release whose asset list differs, or the package filename changed between versions.
Common situations: Stale githubManifestCache entry keyed by URL#digest where the same URL now serves different content; package naming scheme changed (OS/arch installer renamed) so the manifest line no longer matches; truncated or hand-edited manifest.
Understand the failure class
Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.
Related errors
- 199
- checksum manifest digest mismatch
- checksum manifest is too large
- checksum manifest is unavailable
- checksum manifest response is empty
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/3ded80cd89b93152.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/model/updater_release.go:379
}
func getGitHubManifestChecksum(ctx context.Context, release *githubRelease, pkgName string) (string, error) {
manifestAsset := findGitHubReleaseAsset(release, "SHA256SUMS.txt")
if nil == manifestAsset || "uploaded" != manifestAsset.State || "" == manifestAsset.BrowserDownloadURL {
return "", errors.New("checksum manifest is unavailable")
}
manifestDigest := normalizeSHA256(manifestAsset.Digest)
manifestCacheKey := ""
if "" != manifestDigest {
manifestCacheKey = manifestAsset.BrowserDownloadURL + "#" + manifestDigest
}
if "" != manifestCacheKey {
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
}View on GitHub (pinned to 9f775e8a12)