{"record":{"id":"e296aee2e8bfef5f","repo":"larksuite/cli","slug":"remote-meta-parse-data-w","errorCode":null,"errorMessage":"remote meta: parse data: %w","messagePattern":"remote meta: parse data: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/registry/remote.go","lineNumber":218,"sourceCode":"\n\tbody, err := io.ReadAll(io.LimitReader(resp.Body, maxResponseSize))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// Parse the envelope response\n\tvar envelope remoteResponse\n\tif err := json.Unmarshal(body, &envelope); err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif envelope.Msg != \"succeeded\" {\n\t\treturn nil, nil, fmt.Errorf(\"remote meta: unexpected msg %q\", envelope.Msg)\n\t}\n\n\tvar parsed MergedRegistry\n\tif len(envelope.Data) > 0 {\n\t\tif err := json.Unmarshal(envelope.Data, &parsed); err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"remote meta: parse data: %w\", err)\n\t\t}\n\t}\n\n\t// If data.services is nil, the version is up-to-date (not modified)\n\tif parsed.Services == nil {\n\t\treturn nil, nil, nil\n\t}\n\n\t// Cache the data portion verbatim (see remoteResponse for why not a typed\n\t// re-marshal).\n\treturn envelope.Data, &parsed, nil\n}\n\ntype httpError struct {\n\tStatusCode int\n}\n\nfunc (e *httpError) Error() string {","sourceCodeStart":200,"sourceCodeEnd":236,"githubUrl":"https://github.com/larksuite/cli/blob/7fd6ef3c07182257ce776cdc5a614e122d5bd4b3/internal/registry/remote.go#L200-L236","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"func looksLikeJSON(b []byte) bool { var v any; return json.Unmarshal(b, &v) == nil }","typeGuard":null,"tryCatchPattern":"merged, _, err := fetchRemoteMerged(ctx, client)\nif err != nil {\n\tvar pe *json.UnmarshalTypeError\n\tif errors.As(err, &pe) || strings.HasPrefix(err.Error(), \"remote meta: parse data\") {\n\t\t// keep serving cached meta, report/track the remote payload issue\n\t\treturn loadCachedRegistry()\n\t}\n\treturn err\n}","preventionTips":["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."],"tags":["network","remote-meta","json"],"backgroundTag":"remote-meta-parse-failed","analyzedSha":"7fd6ef3c07182257ce776cdc5a614e122d5bd4b3","analyzedAt":"2026-09-04T21:17:44.649Z","contentChangedAt":"2026-09-04T21:17:44.649Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}