{"record":{"id":"f9ad1660e4bf67a5","repo":"alibaba/nacos","slug":"agent-latestlabelmanaged","errorCode":null,"errorMessage":"agent.latestLabelManaged","messagePattern":"agent\\.latestLabelManaged","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"console-ui-next/src/pages/agentDetail/index.tsx","lineNumber":292,"sourceCode":"        agentName,\n        version: currentVersion.version,\n      });\n      toast.success(t('agent.deleteDraftSuccess'));\n      setSelectedVersion('');\n      await loadOverview();\n    } finally {\n      setActionLoading(false);\n    }\n  };\n\n  const updateLabels = async () => {\n    try {\n      const parsed = JSON.parse(labelsText);\n      if (parsed === null || Array.isArray(parsed) || typeof parsed !== 'object') {\n        throw new Error(t('agent.labelsObjectRequired'));\n      }\n      if ('latest' in parsed) {\n        throw new Error(t('agent.latestLabelManaged'));\n      }\n      await agentApi.updateLabels({\n        namespaceId,\n        agentName,\n        labels: JSON.stringify(parsed),\n      });\n      toast.success(t('agent.updateSuccess'));\n      await loadOverview();\n    } catch (error) {\n      if (error instanceof SyntaxError || (error instanceof Error && !('response' in error))) {\n        toast.error(error instanceof SyntaxError ? t('agent.jsonFormatError') : error.message);\n      }\n    }\n  };\n\n  if (detailLoading && !currentOverview) {\n    return (\n      <div className=\"space-y-4\">","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/console-ui-next/src/pages/agentDetail/index.tsx#L274-L310","documentation":"Thrown by updateLabels when the parsed labels object contains the reserved key `latest`. The `latest` label is system-managed (it tracks the agent's latest version) and cannot be set or overridden by users. The check is `'latest' in parsed`.","triggerScenarios":"User includes \"latest\" as a key in the labels JSON, e.g. {\"latest\":true} or {\"latest\":\"v3\"}, attempting to control the latest-version pointer manually.","commonSituations":"User sees a `latest` label in the UI output and tries to edit or remove it. Migrating labels from another system that happens to use a `latest` key for a different meaning.","solutions":["Remove the `latest` key from the labels object before saving.","Rename the intended key to something non-reserved (e.g. `isCurrent`, `primaryVersion`).","Reserve a documented list of system-managed label keys and surface it in the UI."],"exampleFix":"// before\n{\"latest\":true,\"env\":\"prod\"}\n\n// after\n{\"env\":\"prod\"}","handlingStrategy":"validation","validationCode":"const RESERVED = ['latest'];\nfunction checkReservedKeys(obj) {\n  for (const k of RESERVED) if (k in obj) throw new Error(`Key '${k}' is system-managed`);\n}","typeGuard":"function hasNoReservedKeys(v: Record<string, unknown>, reserved = ['latest']): boolean {\n  return reserved.every((k) => !(k in v));\n}","tryCatchPattern":"try { await updateLabels(); } catch (e) {\n  if (/latestLabelManaged/.test(e.message)) { toast.error('Remove the reserved \"latest\" key'); }\n}","preventionTips":["Document reserved keys in UI","Filter reserved keys before send","Disable editing of system labels"],"tags":["validation","labels","reserved-key","agent"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}