alibaba/nacos · error · Error

agent.latestLabelManaged

Error message

agent.latestLabelManaged

What it means

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`.

Source

Thrown at console-ui-next/src/pages/agentDetail/index.tsx:292

        agentName,
        version: currentVersion.version,
      });
      toast.success(t('agent.deleteDraftSuccess'));
      setSelectedVersion('');
      await loadOverview();
    } finally {
      setActionLoading(false);
    }
  };

  const updateLabels = async () => {
    try {
      const parsed = JSON.parse(labelsText);
      if (parsed === null || Array.isArray(parsed) || typeof parsed !== 'object') {
        throw new Error(t('agent.labelsObjectRequired'));
      }
      if ('latest' in parsed) {
        throw new Error(t('agent.latestLabelManaged'));
      }
      await agentApi.updateLabels({
        namespaceId,
        agentName,
        labels: JSON.stringify(parsed),
      });
      toast.success(t('agent.updateSuccess'));
      await loadOverview();
    } catch (error) {
      if (error instanceof SyntaxError || (error instanceof Error && !('response' in error))) {
        toast.error(error instanceof SyntaxError ? t('agent.jsonFormatError') : error.message);
      }
    }
  };

  if (detailLoading && !currentOverview) {
    return (
      <div className="space-y-4">

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Remove the `latest` key from the labels object before saving.
  2. Rename the intended key to something non-reserved (e.g. `isCurrent`, `primaryVersion`).
  3. Reserve a documented list of system-managed label keys and surface it in the UI.

Example fix

// before
{"latest":true,"env":"prod"}

// after
{"env":"prod"}
Defensive patterns

Strategy: validation

Validate before calling

const RESERVED = ['latest'];
function checkReservedKeys(obj) {
  for (const k of RESERVED) if (k in obj) throw new Error(`Key '${k}' is system-managed`);
}

Type guard

function hasNoReservedKeys(v: Record<string, unknown>, reserved = ['latest']): boolean {
  return reserved.every((k) => !(k in v));
}

Try / catch

try { await updateLabels(); } catch (e) {
  if (/latestLabelManaged/.test(e.message)) { toast.error('Remove the reserved "latest" key'); }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14). Data as JSON: /api/errors/f9ad1660e4bf67a5. Report an issue: GitHub.