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

  1. Retry the fetch — if transient corruption, a later sync succeeds and refreshes the local metadata.
  2. Check whether the CLI or endpoint was updated; a schema mismatch may need a CLI upgrade to parse the new remote format.
  3. Verify no proxy/middlebox is modifying the response body; try from another network.
  4. 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

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


AI-assisted analysis of larksuite/cli@7fd6ef3c07 (2026-09-04). Data as JSON: /api/errors/e296aee2e8bfef5f. Report an issue: GitHub.