larksuite/cli · error
remote meta: parse data: %w
Error message
remote meta: parse data: %w
What it means
After a successful envelope (msg=="succeeded") from the remote metadata service, fetchRemoteMerged unmarshals envelope.Data into MergedRegistry. This error wraps any JSON decoding failure of that data payload, so malformed or schema-incompatible remote metadata is reported instead of silently yielding a broken registry.
Source
Thrown at internal/registry/remote.go:218
body, err := io.ReadAll(io.LimitReader(resp.Body, maxResponseSize))
if err != nil {
return nil, nil, err
}
// Parse the envelope response
var envelope remoteResponse
if err := json.Unmarshal(body, &envelope); err != nil {
return nil, nil, err
}
if envelope.Msg != "succeeded" {
return nil, nil, fmt.Errorf("remote meta: unexpected msg %q", envelope.Msg)
}
var parsed MergedRegistry
if len(envelope.Data) > 0 {
if err := json.Unmarshal(envelope.Data, &parsed); err != nil {
return nil, nil, fmt.Errorf("remote meta: parse data: %w", err)
}
}
// If data.services is nil, the version is up-to-date (not modified)
if parsed.Services == nil {
return nil, nil, nil
}
// Cache the data portion verbatim (see remoteResponse for why not a typed
// re-marshal).
return envelope.Data, &parsed, nil
}
type httpError struct {
StatusCode int
}
func (e *httpError) Error() string {View on GitHub (pinned to 7fd6ef3c07)
Solutions
- Retry the fetch — if transient corruption, a later sync succeeds and refreshes the local metadata.
- Check whether the CLI or endpoint was updated; a schema mismatch may need a CLI upgrade to parse the new remote format.
- Verify no proxy/middlebox is modifying the response body; try from another network.
- Fall back to the cached/tracked meta_data.json until the remote payload is fixed.
Defensive patterns
Strategy: try-catch
Validate before calling
func looksLikeJSON(b []byte) bool { var v any; return json.Unmarshal(b, &v) == nil } Try / catch
merged, _, err := fetchRemoteMerged(ctx, client)
if err != nil {
var pe *json.UnmarshalTypeError
if errors.As(err, &pe) || strings.HasPrefix(err.Error(), "remote meta: parse data") {
// keep serving cached meta, report/track the remote payload issue
return loadCachedRegistry()
}
return err
} Prevention
- Pin or verify the remote payload schema when deploying metadata changes.
- Keep a fallback to cached meta so CLI features degrade gracefully.
- Beware proxies/CDNs that can rewrite or truncate response bodies.
When it happens
Trigger: Any remote meta fetch (doSyncFetch, doBackgroundRefresh, TestFetchRemoteMerged_*) where envelope data is non-empty but is not valid JSON or does not match MergedRegistry's expected shape (e.g. services is not an object).
Common situations: Remote metadata service deploying a schema-incompatible payload; truncated/corrupted response through a proxy or CDN; pointing the CLI at a mock/stub endpoint returning wrong JSON.
Related errors
- failed to parse user info: %w
- app registration failed: HTTP %d – response not JSON
- poll parse error: %w
- response parse error: %w (body: %s)
- parse response: %w
AI-assisted analysis of larksuite/cli@7fd6ef3c07 (2026-09-04).
Data as JSON: /api/errors/e296aee2e8bfef5f.
Report an issue: GitHub.