{"record":{"id":"2f92726ebd00d49d","repo":"alibaba/nacos","slug":"parameter-missing-2f9272","errorCode":"PARAMETER_MISSING","errorMessage":"Request parameter `skillName` should not be blank.","messagePattern":"Request parameter `skillName` should not be blank\\.","errorType":"exception","errorClass":"NacosApiException","httpStatus":400,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillPublishForm.java","lineNumber":51,"sourceCode":"    @Serial\n    private static final long serialVersionUID = 1L;\n    \n    private String version;\n    \n    /**\n     * Legacy latest label update flag.\n     *\n     * @deprecated since 3.3.0, the latest label is managed by the server. This\n     * parameter is ignored and retained only for compatibility with legacy clients.\n     */\n    @Deprecated(since = \"3.3.0\")\n    private Boolean updateLatestLabel;\n    \n    @Override\n    public void validate() throws NacosApiException {\n        fillDefaultNamespaceId();\n        if (StringUtils.isBlank(getSkillName())) {\n            throw new NacosApiException(NacosException.INVALID_PARAM, ErrorCode.PARAMETER_MISSING,\n                \"Request parameter `skillName` should not be blank.\");\n        }\n        if (StringUtils.isBlank(version)) {\n            throw new NacosApiException(NacosException.INVALID_PARAM, ErrorCode.PARAMETER_MISSING,\n                \"Request parameter `version` should not be blank.\");\n        }\n    }\n    \n    public String getVersion() {\n        return version;\n    }\n    \n    public void setVersion(String version) {\n        this.version = version;\n    }\n    \n    /**\n     * Get update latest label flag.","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillPublishForm.java#L33-L69","documentation":"SkillPublishForm.validate() requires a non-blank `skillName` to publish a skill draft. Publishing promotes a draft to a published version under a named skill, so the skill must be identified first. This check runs before the version check (error 56). The form also carries a deprecated `updateLatestLabel` flag (ignored since 3.3.0; server manages 'latest').","triggerScenarios":"Calling the skill publish API with skillName missing, empty, or whitespace-only. Common when only `version` is sent.","commonSituations":"Frontend publish form that collected only version; relying on the deprecated updateLatestLabel; field renamed to `name`.","solutions":["Include `skillName` matching the skill whose draft you are publishing.","Resolve skillName from the draft's owning skill before publish.","Stop relying on updateLatestLabel — it is deprecated and ignored."],"exampleFix":"// before\n{\"version\":\"1.0.0\"}\n// after\n{\"skillName\":\"my-skill\",\"version\":\"1.0.0\"}","handlingStrategy":"validation","validationCode":"// Before calling skill publish\nif (skillName == null || skillName.isBlank()) {\n    throw new IllegalArgumentException(\"skillName is required to publish\");\n}","typeGuard":"// TypeScript\nconst hasSkillName = (s?: string | null): boolean =>\n  s != null && s.trim().length > 0;","tryCatchPattern":"try {\n    form.validate();\n} catch (NacosApiException e) {\n    // skillName missing\n}","preventionTips":["Pre-fill skillName from the draft's owning skill.","Don't rely on the deprecated updateLatestLabel.","Block the publish button until skillName is set."],"tags":["validation","skill-api","required-field","skill-name","publishing"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}